Skip to main content

Relic Entertainment secrets. Part 1 (ru)

· 3 min read

Со мной вряд-ли будет кто-то будет спорить, о том, что Relic отличная компания. Homeworld, Warhammer 40K: Dawn of War и Company of Heroes – это игры которые мне очень нравятся. Я решил зареверсить последние новинки этой компании, и начал с W40K: DoW – Dark Crusade.

Готовы узнать страшную тайну? :) В игре полностью FFP’шный рендер! Fixed Function Pipeline, то есть совсем без шейдеров! Честно признаться, это было для меня полной неожиданностью.

Исследование, как обычно, проходило на максимальных настройках графики.

Движок отличается хорошей сортировкой объектов по рендерстейтам и текстурам. DIP’ов не много.

Отрисовка сцены начинается с земли. Простые квадратные патчи. На экран помещается 5-6, при стандартном положении камеры. Используются 2 текстурки:

Ground Specular

Ground Tex

Первая делает имитацию бликов на земле. Блендятся они линейной интерполяцией, используя альфа канал диффузной текстуры, который выглядит вот так:

Ground Tex Alpha

Результат после первого прохода:

Ground Pass1

Далее второй проход для земли. Накладываются детали на землю, используя стандартный альфаблендинг. Примеры текстурок с деталями (зелено-красные клетки показывают альфу):

Ground Details Pass2

Ground Details2 Pass2

Затем поверх рисуются тени от зданий и юнитов, рытвины от взрывов, и т.д. Используются примерно такие текстуры:

Object Shadow

После всего этого следует ещё 1 проход, в котором накладывается лайтмапа, туман войны и вот такая странная 2-х тексельная текстурка (я её увеличил и добавил рамочку, так как белое на белом смотрится не очень:) ):

2tex

Это альфаканал. Сама она белая. Текстурными координатами для неё является позиция вертекса в пространстве камеры (D3DTSS_TCI_CAMERASPACEPOSITION), умноженная на матрицу странного вида. После долгих (и тщетных) попыток понять всю эту хитрую математику логически, я запустил игру и стал приглядываться, пытаясь обнаружить что-то визуально. Единственное, что я заметил, так это темная полоса посреди экрана. Уверен, что это и есть эффект, который даёт эта текстура, хотя для чего это было сделано остается загадкой. Кто знает, может, без этой хитрости, картинка резко отличается в худшую сторону? :)

Лайтмапа земли:

Ground LM

Туман войны в формате LUMINANСE8. Считается на CPU:

FOW

Результат таков:

Ground Complete

Далее следует небо. На меш в форме купола накладывается текстура вот такого вида:

Sky

которая блендится с константным цветом, по-видимому, для аттенюации (я тут не до конца разобрался). Текстура неба сделана так, чтобы нижняя её часть совпадала с цветом тумана, который используется на уровне. Таким образом достигается бесшовный переход цветов.

Когда отрисовка неба закончена, начинается рендеринг объектов. Формула простая: диффузная текстура + туман войны + та самая, хитрая 2-х тексельная текстурка . Постоянно включено солнышко – первый directional источник. Пример текстуры объектов:

Object Diffuse

Юниты отображаются абсолютно аналогично. Скининг на CPU. Диффузная текстура:

Monster Diffuse

Системы частиц. Тут всё стандартно. Далее идут маркеры под юнитами, рамка под выделенным зданием (рисуется каждая сторона прямоугольника отдельно, что очень странно), и т.д.

Before UI

Последним идет UI. DPUP’ов нет (слава богу), но всё поэлементно. Текстуры для UI не в атласах (что тоже странно). Каждая кнопочка – отдельная картинка. Текст блоками.

Вот и всё. W40K: DoW – это ярчайший пример заруливания арта и дизайнерской работы. Сказать больше нечего. После таких вот откровений, мне стало очень интересно, а как дело обстоит в Company of Heroes? Помня о том, что там я видел шадоумапы (да, их можно сделать на FFP, но только на NVidia аппаратуре), я понимал, что вряд-ли встречу чистый FFP во второй раз. Единственное, что могу сказать сейчас, так это то, что CoH таит в себе не меньшее количество сюрпризов. :) Часть 2 не за горами. Stay tuned!