Особенности визуализации.
Речь пойдёт об особенностях визуализации малогабаритных
объектов, присущих современным RTS. Именно об RTS, так как наибольший
опыт у меня накоплен именно в этой области, что не означает, конечно,
что эта информация не может быть полезной в других областях.
Особенность первая — «положение сверху». В современных RTS
положение игровой камеры в 90% случаев и времени — это вид сверху. С
«птичьего полёта», или «общий-общий план» или называйте это, как
хотите. Конечно, случается, что камера бывает и в других положениях,
например, движение камеры, придающее текущей ситуации больший драматизм
или движение в межмиссионных роликах. Что называется «на движке». Но мы
знаем, что универсальность — враг оптимизации. Оптимизировать графику
под все случаи жизни можно, но это займёт лишнее время и ресурсы. Если
игрок в 90% случаев наблюдает всё сверху и издалека, то оптимизировать
графику надо именно под этот ракурс и это расстояние. Если потом
остаются время и ресурсы, то можно себе позволить обрабатывать и
остальные случаи.
Наблюдался и довольно забавный, но не результативный подход —
графика оптимизировалась под более близкое расстояние, чем игроку было
бы удобнее наблюдать в игре. Из серии — «а он призумится, и
офигеет...». Да, игрок один раз призумится и полюбуется проделанной
работой... Но только один раз. Потом он захочет поиграть, и всё равно
поставит камеру в удобное для игры положение. И вот тут он и правда
«офигеет», выбирая между удобством игры и красивой картинкой :) Так
же, работа под более близкий зум, подразумевающая и большую
трудоёмкость, пойдёт коту под хвост.
Моё выстраданное ИМХО: смотрим, какая камера у игрока большее
количество времени, и оптимизируем графику именно под это положение.
Именно в нём графика должна быть максимально привлекательной и
качественной. Чем реже остальные случаи, тем меньше стоит ими
«заморачиваться».
Особенность вторая — «она шевелится». У нас динамическая
картинка, в смысле, объекты перемещаются в сцене и могут попадать в не
самые изобразительно выгодные места экрана. А как же кино, у которого
картинка тоже динамическая? А мы и от него отличаемся — у нас картинка
мало того, что динамичная как у них, она ещё и интерактивная.
Мы не знаем точно, кто или что куда и когда попадёт.
Пресловутые негры, ворующие ночью уголь из шахты, вполне себе возможная
ситуация для игры. И если в кино все ситуации известны из сценария и
художники и операторы знают, что будет происходить, то в нашем случае,
мы не можем просчитать все возможные варианты. У нас в идеале всё
должно смотреться и читаться хорошо везде. Поэтому опыт художников и
создателей кино нам, безусловно, интересен, но он не отвечает на все
наши вопросы. У игровой графики из-за интерактивной картинки специфика
очень своеобразная.
Проблемы, возникающие при визуализации и способы борьбы с ними.
Плохая читаемость объекта в сцене.
Первая проблема маленьких объектов — это их размер. То есть,
хорошо бы их вообще увидеть в сцене как таковые. Их можно не заметить
на фоне... на фоне фона их как раз можно и не заметить, если фон по
тону (светлее\темнее — это тон, вдруг, кто забыл... :) и по цвету такой
же, как и объект, который мы пытаемся увидеть. Камера у нас, как мы уже
говорили, в большинстве случаев смотрит сверху и фоном для всего
является ландшафт. Именно относительно ландшафтов и будет делаться всё
остальное, и именно поэтому важно иметь «сведённые» между собой
ландшафты в первую очередь. Уже потом, рисуя всё, что будет на них
попадаться. Однако ландшафты, особенно летние, имеют очень большой
разброс, как по тону, так и по цвету. Встречаются как очень тёмные,
типа вспаханного поля, так и очень светлые, типа песка или каменистого
ландшафта. Но на всех них наши объекты обязаны быть читаемы и в статике
и в движении.
Можно для решения этой задачи использовать «не по детски»
утрированную, так называемую «воздушную перспективу». Это когда всякие
пейзажи рисуют, что бы придать больше ощущения пространства — более
удалённые планы делают менее контрастными, менее насыщенными и менее
детализированными. Воздух не абсолютно прозрачный и ещё и влажный на
больших расстояниях влияет на изображение. Так вот, утрируя данный
приём, мы можем добиться нужного нам эффекта. Так как камера сверху, то
самое удалённое от камеры, что мы можем видеть, это ландшафт. Он и
должен быть менее насыщенным, менее контрастным и наименее
детализированным. В общем, он, насколько это возможно, должен быть
менее «всё», что только можно, пока это не начинает мешать качеству
всей картинки в целом. Далее, всё, что ближе к камере, по мере
приближения становится контрастнее, насыщеннее и более
детализированное. Делая объекты утрированно более контрастными, чем
ландшафт, мы облегчаем их «читаемость» на ландшафте. Тут главное, как и
всегда и везде, не перестараться.
Ещё один важный момент — контрастные объекты читаются на тёмных
ландшафтах своими светлыми частями, а на светлых — тёмными, чего и
требовалось добиться.
Если выглянуть из окна и поглядеть на прохожих, то ничего
похожего, конечно, увидеть не удастся. Это утрирование. Но оно
смотрится адекватно даже в весьма реалистичных по графике сценах.
Просто всё будет легче «читаться». Этот способ можно обозвать
«разбиение по высоте». Т.е. высота всей сцены делится на «этажи»,
которые соответственно отыгрываются через контрастность, насыщенность,
детализацию и проч. Чем ближе к камере, тем контрастнее, насыщеннее и
т.п.
Есть второй способ, вытекающий на самом деле из первого — это
контур. Т.е. вокруг персонажа даётся тёмный или светлый контур. Способ,
часто применяемый в анимационных фильмах и присущий скорее
«мультяшному» стилю графики. На самом деле, это частный случай того же
правила «быть контрастнее фона».
Этот способ имеет один серьёзный недостаток — объект,
обведённый контуром выглядит как бы более плоским. Имеет смысл
утрировать форму предмета, если планируется обводить его контуром.
Опять таки, если эта ситуация не эпизодически встречается, а мы будем
наблюдать объект с контуром явно больше 50% времени.
Плохая читаемость формы объекта.
Объект как таковой мы увидели, теперь надо понять, что же это
такое. Игрока нельзя заставлять напрягаться, разглядывая, что же это
такое он видит. Для этого форма объекта должна быть предельно легко
читаема. Для чего подход берётся всё тот же — утрированное разбиение по
высоте. Только делается оно уже внутри объекта. Точно так же выясняем,
что дальше от камеры, а что ближе. Т.е. в нашем случае, какая из частей
самого объекта выше, какая ниже и поступаем, как и в предыдущем случае.
Играя контрастностью, насыщенностью цвета и детализацией, разбиваем
объект по высоте. Естественно, что в реальной жизни, например, крыша
автомобиля, будет такая же как и капот, но в нашем случае, крыша
находящаяся выше капота должна стать чуть ярче и цветней.
Но есть ещё один момент. Форму можно подчёркивать также и
цветовым контрастом. То есть, если свет тёплый (жёлтый, например), то
тень холодная (например, синяя) или наоборот. Такого эффекта можно
добиться, либо прямо рисуя на текстуре вертикальные плоскости чуть
более холодными, а горизонтальные чуть более тёплыми (или наоборот) или
настройками освещения, если оно цветное. Лучше делать и то и другое. Помогает.
Отдельный случай, это камуфляжная окраска. Её специально
придумывали, что бы ломать форму объекта. В военных играх, однако, не
использовать камуфляж никак нельзя. Тут можно как раз, взяв камуфляж
отдельным слоем, утрировать в нём цветовые контрасты между плоскостями
ещё сильнее. Получается, что и камуфляж есть, и форма объекта читается.
При отдалении некоторые вещи на экране монитора кажутся тоньше
относительно своей длинны. Например, руки и ноги у человечков начинают
казаться дистрофичными, а калибры орудий — приуменьшенными. Лечится
просто — делаете их толще, заранее нарушая пропорции в нужную сторону.
Правда, если будет возможность поглядеть их вблизи, то стоит подумать
надо ли оно вам или не очень. Опять таки, зависит то того, как чаще это
будут видеть игроки.
Плохая читаемость анимации объекта.
Теперь мы видим объект, видим, что это за объект и видим, что он
шевелится. Но вот, что именно он делает, шевелясь, понять можно не во
всех случаях. Не читается анимация при сильном удалении камеры. Что
здесь можно сделать?
Первый, кто может помочь аниматору, это художник по текстурам.
Он может выделить так называемые «крайние точки», и анимация будет
читаться в разы проще. На примере человечка (см. рис.), крайними
точками будут голова, кисти рук и стопы ног. Выделяются они всё теми же
контрастом и насыщенностью. Голова лучше всего выделяется за счёт
контраста лица и тени от нижней челюсти под лицом. Кисти рук — за счёт
контраста кожи кистей рук и манжет рукавов. Сапоги — за счёт резкого
блика на носке сапога и тёмного цвета самого сапога. Однако, не забывая
предыдущие пункты, даже между выделенными крайними точками должно
сохраняться разбиение по высоте. То есть все крайние точки контрастнее,
чем любая другая деталь, но верхние крайние точки контрастнее нижних. А
в целом, в сцене объект не «лезет» выше того «этажа», где ему положено
быть. Аниматор может делать следующие вещи. Во-первых, это утрировать
амплитуду движения. Аниматоров этому учат и вряд ли для кого-то из них,
это будет новостью. Тут диснеевская школа анимации в самый раз.
Во-вторых, — «разбрасывать» персонажа. На примере человека, не
прижимать локти и колени к корпусу и друг к другу. Особенно в статике.
Если этим пренебречь, то человечек превратится в цветное пятно, не
пойми чего собой символизирующее.
В принципе, эти нехитрые вещи вполне себе работают и помогают
избежать вышеописанных проблем. Надеюсь, кому-то эта скучная лекция
поможет.
Источник: http://www.gamedev.ru/articles/?id=60103 |