В восьми-миллионный раз услышав фразу «да у КоДа опять движок времён правления Таргариенов!», у меня началось покалывание в известном месте. Однако, игра Black Ops 2 — одна из первых, где появилась новомодная фича под названием physically-based shading. От полного безделья, я решил написать небольшую заметку о том, что это такое, и почему это не всегда хорошо. Может кому-нибудь это будет интересно.
Как всё начиналось. В лохматом 75-ом году, некто по фамилии Фонг опубликовал документ, в котором описал закон отражения света в достаточно приближённом виде, чтобы его можно было использовать для просчёта графики на тогдашних компьютерах.
Хоть и с небольшими изменениями, но по этому закону считается освещение в играх и по сей день. С ростом оперативной и видео памяти, становилось ясно, что одних чётких текстур недостаточно, чтоб заставить выглядеть предметы, сделанные из разных материалов, достаточно фото-реалистично. Нужно что-то менять. Сначала выкручивались как могли, придумывали для отдельных объектов специальные модели освещения, передавали в шейдер кучу параметров и текстур, которые хоть как-то помогали объектам выглядеть так, как они должны выглядеть в реальной жизни. В один прекрасный момент игроделам это надоело.
Если мне не изменяет мой склероз, первыми были ребята из CryTek. В игре Crysis они использовали модель Кука-Торренса, как наиболее приближенную к реальным физическим законам:
Выглядит уже внушительнее, не правда ли? Однако, это не сильно спасло от той кучи ненужных параметров/текстур, о которых я писал выше. Москва, как говорится, тоже не сразу строилась. К моменту выхода второй части, им пришлось от этого отказаться, ибо консоли не тянули такую математику в сочетании большим количеством данных, используемых для освещения, так что они вернулись обратно к Фонгу. Вот тут вам придётся меня извинить, я не знаю, кто первых выдвинул идею, но она звучала примерно так: если мы используем физически-корректную модель освещения, почему бы нам не использовать физически-корректные свойства материалов? И вроде бы, всё замечательно, однако нельзя просто так взять, и нафотографировать красивых текстур, взять свойства материалов из какой-нибудь таблички, и чтобы при этом от итоговой картинки не кровоточили глаза. В чём суть проблемы. Когда художники фотографируют текстуры для игры, на фотографии уже имеется освещение от солнца, вспышки, и т.д. Это уже ставит крест на всей идее.
Слева — фотография, справа — текстура для игры.
Решение этой проблемы заключается в следующем. Во время съёмки в кадре должна находиться специальная палитра, с помощью которой художники будут калибровать изображение в фотошопе.
Теперь уже можно брать константы из какой-нибудь умной таблички и клепать шедевры с графоном… но нет. Это только половина дела. Во вторую половину я сильно углубляться не буду, ибо знаком с этим плохо. Если кратко, модель Кука-Торренса перекочевала в игры не просто так, её раньше использовали(да и сейчас используют) в серьёзных пакетах моделирования, например для кино. От туда же и растёт вторая половина дела — глобальное освещение. Всё что я описывал до этого, работает только для прямого освещения. Как известно, луч света отражается от поверхностей достаточно большое количество раз, перед тем как попадёт в объектив камеры или в человеческий глаз. Вот эти «вторичные отражения» считать очень сложно, для игр — практически невозможно. Как поступают в кино: если нужно в кадре изобразить какую-нибудь 3D модель, сначала делают панорамную съёмку помещения в специальный формат изображений, который умеет сохранять не только цвет пикселя, но и его яркость.
Далее по этому изображению, считают глобальное освещение для этой 3D модели, это называется IBL(image-based lightning). Собственно, для игр теперь придётся делать так же.
Что мы в итоге получаем? Программисты один раз переписали графическую подсистему, а вся последующая работа над всеми последующими играми ложится на плечи художников, а 90% из них никогда ничем подобным не занимались.
Так… надо подвести какие-то итоги… В двух словах, не ругайте вы новые игры за графон, некоторые, без сомнения этого стоят, но те, которые выходят из-под крыла крупных издателей с многомиллионным бюджетом, они выходят на неком переломном моменте в игростроении. Пройдёт ещё пару лет, все научатся использовать новые технологии, привыкнут к абсолютно новым методам в работе, глядишь, и наступит долгожданный next-gen.
P.S.: Отдельное спасибо тем, кто не пролистал до этой строчки, а дочитал до неё)
Статья на тему, как делалась Remember Me, на английском: www.fxguide.com/featured/game-environments-parta-remember-me-rendering/
Лучшие комментарии
Хочу больше таких статей, познавательно.
Black Ops 2 — одна из первых, где появилась новомодная фича под названием «пудри мозги народу старым движком».
Ryse: Son of Rome — более наглядная иллюстрация phyzBased-шейдинга.
И совершенно замечательно это реализовано
здесь, можете подергать ползунки и посмотреть, как НА САМОМ ДЕЛЕ это должно выглядеть.