31 декабря 2017 |
|
Палитровые эффекты в играх Hippiman/Conscience ATM Turbo (и его реализация в ZX Evo )- достаточно мощная машинка, для Спектрум- совместимых компьютеров, конечно. Однако,не настолько мощная,чтобы тянуть полную перерисовку всего экрана и уклады─ ваться при этом в один кадр. По крайней мере, в Evo SDK это так. Но есть один финт ушами, который позво─ ляет перекрасить весь экран и сделать это быстро.Называется он "палитровые эффекты", подходит не на все случаи жизни,но об этом я расскажу дальше. Кто иль что есть палитра? Грубо говоря, в нашем случае палитра - это некая область памяти, где хранится информация о цветах, которые могут быть выведены на экран в данный момент. А само изображение хранится не в форма─ те цвета на точку, а в виде последователь─ ности индексов. Это позволяет существенно сэкономить память, например: - изображение 320x200 в 32-битном цвете будет занимать 320*200*4=256000 Б = 250 кБ - изображение 320x200 из 256 цветов бу─ дет занимать 320*200=64000 Б = 62,5 кБ - а изображение в стандарте ATM/ZX Evo с палитрой из 16 цветов будет занимать всего 320*200*0.5=32000 Б = 31 кБ. Разница очевидна. При очевидных плюсах индексированной графики: малые размеры изображения и, как следствие, меньшая нагрузка на систему,та─ кой подход к хранению изображения имеет и отрицательные стороны в виде меньшей "цве─ тастости", а при малом размере палитры - ещё и виде головной боли при попытке втис─ нуться в эту палитру и сделать красиво. Так, чтобы периодически можно было ме─ нять цвета (от уровня к уровню, например). И так, чтобы графика могла использоваться многократно, а не единожды при какой-то строго определённой палитре, да ещё оста─ лось пара незанятых цветов под эффекты во время игры. Представление цвета на ATM/ZX Evo Теперь перейдём ближе к нашей платфор─ ме. ATM/ZX Evo умеет выводить на экран ра─ змером 320x2OOpx одновременно 16 цветов из 64 возможных. Откровенно говоря, часть из тех 64 цветов практически бесполезна из-за своей "вырвиглазности" (например,кислотно- зелёный или жвачечно-розовый), но это уже издержки. Может быть, кто-то и им найдёт применение,но чаще всего будут использова─ ться все оттенки серого, плюс черный с бе─ лым и тёмные оттенки разных цветов. На каждую составляющую цвета (красный, зелёный, синий) отведено 2 бита. Таким образом,каждая составляющая может принимать значения: представление: бинарное шестнадцатиричное 00 00 01 55 10 AA 11 FF Запись цветовых компонентов идёт в об─ ратном порядке - т.е. BGR. Например, в коде программы нужно заме─ нить какой-то цвет в палитре на Oxffaa55 (светло-оранжевый). Преобразуем составляющие: R - Oxff - %11 G - Oxaa - %10 B - 0x55 - %01 Запишем в обратном порядке в двоичном виде: BGR - %011011 Преобразуем в десятичное число, для ис─ пользования в коде (т.к. в C не предусмот─ рена возможность записи двоичных чисел). В win7 с этим отлично справляется встроенный калькулятор:27. Для чего это нужно Перейдём к главному вопросу: зачем во─ обще нужно заморачиваться с палитрой рядо─ вому программисту для ATM/ZX Evo? Ответ прост - для спецэффектов. Можно, конечно, обойтись и без них, игра в плане интересности от этого ничего не потеряет. Но мы-то знаем, что игрока нужно сначала завлечь, а что, как не красивая графика, полная спецэффектов, лучше всего снижает планку вхождения? Вся прелесть палитровых эффектов в том, что они крайне экономно расходуют ресурсы системы. Чтобы получить результат, нужно всего лишь изменить пару байт, вместо ре─ сурсоёмкой перерисовки изображения целиком или какой-то его части. Применение палит─ ровых эффектов вместо анимации там,где это возможно, действительно очень сильно раз─ гружает процессор. Примеры 1. Самый простой и часто используемый: плавное затемнение и осветление экрана. Чаще всего применяется при переходе от од─ ной сцены к другой (например, из меню в игру). Делается изменением яркости палитры фу─ нкциейpal_bright(u8 bright), где параметр bright может принимать значения от0 - всё черное,до6 - всё белое. 3 - соответствен─ но, нормальное значение яркости. Также изменением яркости палитры на один-два кадра можно делать различные вспышки (от взрывов, молний и т.д.) 2. Другой часто используемый пример: анимация воды. Я нарисовал картинку - пример. На ней показано, как можно сделать анимированную воду без анимации как таковой. В верхнем ряду можно видеть само изображение, а в нижнем - состояние трёх цветов палитры. Смысл вот в чём.В тайле воды изначально спрятано два кадра анимации (это хорошо видно по последнему кадру, где все три цвета разные). Эти два кадра (в смысле, с разными волнами) одновременно никогда не показываются, цвет одного из них делается равным цвету фона.Эффекта волн можно доби─ ться,плавно изменяя один цвет,когда второй равен цвету фона. Затем они меняются мес─ тами. И так по кругу. 3. Эффект затенения. Смысл этого эффекта схож с первым,одна─ ко первый эффект затемняет весь экран, а бывают ситуации, когда этого делать не ну─ жно. Например, персонаж выключает в комнате свет. Интерфейс должен остаться видимым, персонаж и пол, скорее всего тоже. В такой ситуации нужно четко разделять цвета, которые никогда не будут меняться (цвета интерфейса, персонажа,других нужных объектов), и цвета окружения, на которые будет накладываться эффект. В приложении - пример из игры Sonic & Knuckles на Sega Mega Drive (sonic_sample.gif ). Естест─ венно, на этой платформе цветов больше, и активная палитра больше в четыре раза, но общий смысл от этого не меняется. При вы─ ключении света часть цветов остаётся неиз─ менной, а часть меняется по заранее соста─ вленной таблице. Немного поясню касательно таблицы изме─ нения цветов. Для каждого цвета в палитре заранее просчитываются все его состояния при включенном свете и выключенном. При необходимости программа проходит по значе─ ниям этой таблицы и по очереди применяет их к экранной палитре. 4. Эффекты движения. Наиболее красиво смотрящиеся эффекты. Чаще всего применяются для анимации ручь─ ёв, водопадов, конвейеров и пр. В общем, всего движущегося,чья анимация циклична и помещается в один-два тайла. В качестве примера возьму тайл водопада из второго уровня Contra для Famicom. В маленьком квадрате снизу - одиночный тайл. Над ним,для наглядности,девять таких же, поставленных сеткой 3x3. Из примера должно быть и так всё поня─ тно, но на всякий случай - тайл рисуется таким образом,чтобы при циклическом сдвиге цветов в палитре создавалась иллюзия дви─ жения, в данном случае воды. 5. Вот более сложный пример из финальной заставки Nomad для ATM Turbo 2+/ZX Evo, в котором создаётся эффект движения отдельно стоящих объектов:nomad_outro.png. В верхней части примера - базовая кар─ тинка, для наглядности раскрашенная во все цвета радуги.Как видно из примера,она раз─ делена на множество узких полос,из которых в конечном итоге и получится анимация. В программе все эти полоски раскрашиваются цветами из таблички снизу: два цвета - си─ ние, остальные - черные. Собственно,почему две полоски окрашиваются в синий? Для пла─ вности анимации. Каждый такт полоска сдви─ гается на половину своей длины. По такому же принципу делается анимация земли в 2D гонках с видом сзади (Chase HQ, Top Gear, Outrun), да ещё много где: Space Harrier, например. * * * Я описал наиболее часто встречающиеся эффекты. Самих палитровых спецэффектов ве─ ликое множество. Есть ещё огромная катего─ рия простеньких эффектов в один/два цвета, вроде вспышек от молний, неоновых огней где-то на горизонте и т.д.Но они настолько примитивны, что читатель,при желании,легко сам разберётся,как такие эффекты делаются. Хочу также заметить, что планировать эффекты нужно ещё до начала рисовки графи─ ки, т.к.для них может попросту не остаться места в палитре. Как ни прискорбно,но обы─ чно бывает наоборот. Разработчик в запале энтузиазма делает один-два уровня, рисует для них графику, спрайты, фоны, а только потом начинает думать,как же всё это вели─ колепие сделать ещё лучше при помощи эффе─ ктов. Но палитра уже использована под за─ вязку,и нужно либо отказаться от эффектов, либо перерисовывать графику, что-то выбра─ сывать,что-то перетасовывать.И хорошо,если дело окажется только в графике. Может быть такое,что придётся кардинально менять дви─ жок.Так вот,чтобы такого не было,товарищи, перед началом физической работы над игрой хорошенько всё продумайте,что в игре будет и в какой момент будет появляться.
Other articles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November