Меню
StopGame  Блоги Персональный блог Об играх — изнутри PBR — 1: графоний нового года

Самое актуальное

  • Мнение Денчика. God of War
  • Все секреты Лары Крофт — пасхалки и отсылки в Tomb Raider и других играх. Часть 2
  • «Инфакт» от 26.04.2018 — Взлом Nintendo Switch, перерождение и очередное падение Halo Online, 11-11: Memories Retold…
  • Freedom Fighters. Америка в огне!
  • Detroit: Become Human. Вместо трейлера
  • Papers, Please. Молодой человек, пройдёмте!
  • Жизнь замечательных людей: Тодд Говард. Святость и грехи главы Bethesda Game Studios
  • Обзор игры Dead in Vinland
  • Лучшие моменты 2017! Комплексная экспресс-запись, часть 2
  • Stick Fight: The Game. Ёлки-палки-щекоталки
  • God of War. Тираны не пройдут!
  • Вся суть God of War (2018!) за пять минут
  • Will To Live Online. Мы хотим Ж.Ы.Т.Ь! (экспресс-запись)
  • Пользовательский обзор недели
  • Видеообзор игры Synthetik
  • Обзор игры Masters of Anima
  • Обзор игры Super Daryl Deluxe
  • Human: Fall Flat. Продолжение. Пробиваем дно!
  • Friday the 13th: The Game. Тематический замес
  • God of War. Серийный убийца богов
  • Обзор обновления игры World of Warships
  • Трудности перевода. God of War III
  • Мечты сдуваются: как дела у Star Citizen?
  • Что такое пресс-тур? И как мы съездили к Wargaming
  • StopGame в гостях у Blizzard. Лига Overwatch, «Возмездие» и «Битва за Азерот»
  • Bionic Commando Rearmed. Бионическое «дай пять»!
  • A Way Out. Тюрьма меняет людей
  • Far Cry 5. Спортивная рыбалка
  • PUBG. Codename: Savage. Дикие танцы
  • Обзор игры The Adventure Pals

PBR — 1: графоний нового года

+326
Это — первая половина моей «дилогии» о PBR/PBS. Да, в одну статью уложить не удалось. Здесь я постараюсь объяснить, «что это вообще такое и с чем его едят». Если тебе интересны лишь анализ и выводы, без понимания сути — всё это будет только во второй части. Она появится скоро.

Вот и прошёл ещё один год. Первый год под безраздельным правлением нового поколения игр, рассчитанных на современные платформы: PS4, PC и… всё :)
Problem with next-gen, XBOX?
Да воцарится хуано-срач!

Ещё недавно мы с тобой их называли некст-геном, а теперь они царственно воодрузились на трон нынешней эпохи, оставив в прошлом последние релизы для предыдущего поколения.
Вышло уже солидное число исключительно-currentGen-ных проектов, а среди анонсов новых вовсю гремит тяжёлая артиллерия.
Дамы и господа, поздравляю! Момент настал. Мы официально ступили в будущее.

Самое время остановиться на мгновение, проанализировать то, что мы уже получили, и постараться прикинуть, что же нас ждёт в этом дивном новом мире.

Не стану ходить вокруг да около, томя долгими вступлениями. Ты и так уже понял по заглавию: самое важное что нас ждёт — это вездесущий и повсеместный…


Physically Based Rendering

… или, сокращённо, PBR.
Также можно встретить аббревиатуру PBS — Physically Based Shading. Это, по сути, то же самое.

Что же за зверь скрывается под этим суровым названием? Сейчас разберёмся. А пока — помните, как вам преподы в вузах говорили: «Забудьте всё, чему вас учили в школе»?
Вот примерно тем же самым PBR является для игростроя. Это новый подход к отрисовке картинки, который порой переворачивает с ног на голову некоторые устои, царившие в играх до сих пор. Всё верно: игрострой дорос до «вышки».

Но прежде, чем окунёмся в пучину графонной аналитики — есть ещё одна вещь, которую хотелось бы отметить. Чем глубже я лезу в подноготную PBR (в том виде, в котором он есть в играх), тем больше мне кажется, что он — это главный символ всего наступившего поколения, его олицетворение, квинтэссенция. В «физическом рендере» проявляются самые сильные и слабые стороны current-gen'а, причём в максимально гипертрофированной форме.
Лирическое отступление для тех, кто долго ждал эту статью
В том числе поэтому я так долго тянул с рассказом про PBR. Ведь это не просто обсуждение ещё одной «фичи». Нет, на мой взгляд, это обсуждение главного столпа, на котором держится всё текущее поколение в целом.
Нельзя просто так взять и рассказать про PBR, вообще не коснувшись того, как его особенности отражаются в глобальном плане.




Поэтому не удивляйтесь, что, говоря о PBR, я буду проводить параллели «вовне». Экстраполировать, так сказать.
... и ещё - про перевод названия
Как и практически все CG-термины, PBR тоже не имеет полноценного аналога по-русски.
В оригинале он называется Physically Based, а не Physically Correct — и это гораздо точнее передаёт суть. То есть, по идее, он не «физически корректный», а, скорее, просто «по физике».
Но «рендер по физике» или «с учётом физики» — не звучит. Поэтому, если уж необходимо перевести — то с натягом, но его зазывают просто физ-корректным. Хотя в профессиональной среде пользуются только английским названием, и в принципе переводить его приходится разве что на конференциях для журналистов.

А начнём с, пожалуй, самого спорного и неоднозначного аспекта этой технологии:


The cake is a lie

Или "PBR — это не PBR", или "GameDev vs VFX", или "PBR в кино и в играх", или…
Короче, тут вот какое дело: когда кто-то произносит магическое словосочетание «Physically Based Rendering» — то вовсе не факт, что он имеет в виду то же самое, что под этими словами понимаем ты или я. И чтобы — элементарно — разобраться в определениях, придётся немного вникнуть в детали. Сорян, без этого — никак (и в том числе поэтому данной статье на «главную» путь заказан).

Итак, конкретно: что же такое PBR? ВНИМАНИЕ: МНОГАБУКАФ! И КАРТИНКИ В СПОЙЛЕРАХ!
Наливай (чая, разумеется), а я пока расскажу тебе кулстори о том, как CG-шники придумали себе религию.

Вообще, творцы графики в естественной среде обитания — весьма своеобразный народ. Каждый год собираются в одном месте ради весьма странной тусы, на которой только тем и занимаются, что рассказывают друг другу, какую вундервафлю каждый из них понапридумывал. Потом разбегаются по домам, чтоб весь остальной год сумрачно ваять на её основе новое чудо-юдо, а в следующем году показать его остальным. И так по кругу.

В далёком 2010 году одним из таких «заманчивых Франкенштейнов» стал доклад на тему «Physically-Based Shading Models in Film and Game Production». В глубокие технические дебри лезть не будем, но суть его была вот в чём.

С самого своего зарождения компьютерная графика целиком и полностью строится на всевозможных имитациях. Их с каждым годом появляется всё больше и больше, а картинка всё сильнее похожа на реальность. Башенка из всевозможных костылей и напильников всё выше и выше… но вместе с тем всё более неустойчива. И в последнее время она уже стала настолько неуправляемой, что была готова рухнуть в любой момент (образно выражаясь).
Вот, например, САМЫЙ БАЗОВЫЙ набор деталей, из которых состоит графон
... или те же яйца, только сбоку

Авторы же этого доклада сказали: «Стоп, хватит». И предложили иной подход: от большей части накопившихся «фэйков» можно отказаться, если самую базу всего рендеринга делать «строго по физике».
С названием для этого подхода мудрствовать не стали, так его и обозвав: «освещение по физике» (Physically-Based Shading).

Идея эта компьютерно-графонному сообществу понравилась. А самые отчаянные сразу после конференции дружно помчались по домам, запиливать «свой новый рендер, с блекджеком и прочим».

В скором времени (конкретно — летом 2013-го года) на сцену вышла небезызвестная студия Pixar, с ответным докладом («Physically Based Lighting at Pixar»), заявив, что придумала «тот самый» расово верный физический рендер. И что вообще, её поезда — самые поездатые поезда в мире, так что: «Ну-ка срочно все дружным строем пошли рендерить так, как мы сказали».
За базаром у серьёзных дядей принято следить, поэтому Студия Лампочки с ходу подкрепила свои заявления пруфами, выложив на стол сперва короткометражку «Blue Umbrella» («Синий зонтик»), а потом — полноценный «Университет монстров».
Одни из первых кадров, посчитанных с PBR

видео: первое явление PBR-а миру
видео: ... и DLC к нему

CG-мир дружно воскликнул: «Wow!» — и все, подобрав отвисшую челюсть, побежали срочно делать свою реализацию «такого-то графона от Pixar».
Но не тут-то было.

На поверку оказалось, что в своих Незыблемых Постулатах пиксаровцы сами не учли несколько очень важных нюансов. А значит, даже предложенный ими вариант рендера был в некоторых аспектах совершенно некорректным физически.

Но локомотив хайпа уже было не остановить, так что новость о том, что Pixar сделала «самый кошерный» рендер, разлетелась со скоростью детонирующего пукана. А данный доклад многие не глядя нарекли Хрестоматией PBR'а.
Так в киношной графике произошёл раскол, и каждая сторона, ревностно колотя себя пяткой в грудь, начала с пеной у рта доказывать, что вот конкретно её физически корректный рендер — самый физический и самый корректный.

Но и это ещё не всё. Дело в том, что в этом же самом 2013-ом году был другой доклад — от игровой студии DONTNOD, которая рассказала о своём вИдении PBR'а, уже в рамках геймдева. И тоже была далеко не голословной, подкрепив свою позицию феноменальной в графическом плане "Remember Me".
Remember Me и PBR
Я лично считаю, что «Remember Me» феноменальна не только графически, и очень надеюсь когда-нибудь увидеть вторую часть.
А что же касается, собственно, PBR — достаточно будет сказать, что так впечатливший геймеров «The Order 1886» почти целиком построен на тех наработках, которые в своём докладе озвучила студия DONTNOD.

В трейлере, подготовленном для своего выступления, создатели Remember Me не побоялись ставить рядом реальную съёмку и игровую графику. Напоминаю: и это — на предыдущем поколении:


И всё бы ничего, если бы на этом чехарда трактовок прекратилась. Но — нет.
Видимо, в какой-то момент к делу подключились маркетологи (обиженные, что их мнения никто не спросил), начав без разбору лепить наклейку с модным словечком «PBR» на любые мало-мальские изменения в графике, и всё заверте…

Короче.
На сегодняшний день есть несколько разных PBR'ов. Что киношная индустрия, что игровая — ни одна из них пока не определилась до конца, что же конкретно можно считать «физическим рендером», а что — нет. Он буквально превратился в религию, с разными конфессиями, каждая из которых наперебой кричит о том, что именно их Бог — «поистине ТруЪ».
А сам PBR — он, как Господь, непостижим, и продолжает видоизменяться по сей день, с каждым новым докладом становясь всё более корректным.
Есть некоторые базовые принципы, но даже их соблюдение некоторые считают необязательным.

Поэтому сейчас, рассказывая об этом Великом и Ужасном звере, я, в некотором смысле, буду озвучивать ту позицию, которой придерживаюсь сам. Она тоже взялось не из воздуха, и базируется на том, что именно называют «физическим рендером» разработчики Юнити.
Но я в курсе, что, например, в некоторых крупных российских студиях мою трактовку не разделяют.
В корне.

Либо - НЕТ ВРЕМЕНИ ОБЪЯСНЯТЬ! Никто не знает, что такое PBR!
«Физическим рендером» в кино и в играх называют разные вещи. Да ещё и в каждой индустрии есть по несколько трактовок. Я расскажу о той, которой придерживаюсь сам. Короче, ИМХО. Обусловленое тем, что я работаю в Юнити.

Что важно для нас, как для геймеров — это то, что ни одно из PBR-решений (известных мне), не является в полной мере «физически корректным рендером». Скорее, это «ещё гораздо более лучше», чем раньше.
Вот смотри. Нынешний current-gen — он ведь круче предыдущего? Ощутимо круче. И кое-в-чём покоряет новые горизонты. Но не сказать, что PS4 или XBONE сделали какой-то прям-таки революционный скачок вперёд.

То же самое и с PBR.
Он вовсе не означает сверхъестественный гиперреализм, как может показаться из названия. Но, тем не менее, он действительно позволяет сделать игру гораздо более красивой и натуральной.
Вот как именно ему это удаётся…


Базовые принципы физического рендера

Те самые «правила PBR» от Pixar'а — я о них.
В «классическом» рендере во главе угла стояла художественная выразительность картинки. Иными словами, «правильно» — означало «красиво». Всё сводилось к тому, насколько талантливо художники могут нарисовать текстуры. Всё подстраивалось «на глазок», исходя из «творческого вИдения». Но это приводило к тому, что одно и то же приходилось делать несколько раз, под разные условия. Развевающийся флаг в солнечный день? Одна текстура. Тот же флаг, но мокрый под дождём? Другая.
Конечно, при классическом подходе можно было добиться высококлассного результата, но для этого требовалась масса ручной работы. Ведь один и тот же ассет, прекрасно смотревшийся в одних условиях, выглядел кошмарно в любых других.
Так было раньше.

Теперь же «правильно» — это «по физике». То, что рисуют художники, должно иметь какой-то настоящий физический смысл. Это должны быть конкретные параметры реальных поверхностей, а не просто «красивая текстура».
Казалось бы, такой подход напрашивается сам собой, он довольно очевиден. Но всю историю игр (до последнего времени) делать «строго по физике» не позволяли мощности. А как только мы (гейм-девелоперы) стали воспроизводить оптические эффекты в точности так, как требует того наука (по цифрам, а не «на глазок») — оказалось, что нам необходимо фундаментальнейшим образом пересмотреть многие укоренившиеся устои.
Например, оказалось, что…


Абсолютно всё блестит

Некоторые тут же возразят:
Ты втираешь мне какую-то дичь!
Ну как может блестеть матовая бумага или, например, гипс? Сухой кирпич, ткань… да много чего!
Вы таки будете смеяться, но у всех этих материалов тоже есть блеск. Просто он не настолько выраженный, но именно его отсутствие и бросается в глаза.
Взглянем на реальные примеры
Эти изображения — настоящие фото, не рендер. Получены они с помощью поляризационных фильтров. Отсюда — и «паразитные» отблески на всю картинку (от линз фотоаппарата).

Вот как выглядит, казалось бы, чисто матовый картон, если специально отделить блеск от «матового» света:


Теперь — кусок засохшего цемента. Тоже, на первый взгляд, совершенно матовый:


Сухой кирпич:


Ткань:


А теперь — наоборот, казалось бы, чисто-блестящая тарелка («на глазок» — вообще без матовой составляющей):


Глядя на эти фотографии, понимаешь, что буквально все объекты, которые нас окружают, блестят. Почти у всего есть блик. И хотя на первый взгляд он может казаться слабым, когда мы смотрим вдоль поверхности — он уже очень ярко выражен.
То, что получалось «по классике», было похоже скорее на центральный вариант. Хотя должно было быть то, что слева.
PBR восполняет этот пробел, и отныне матовые поверхности будут смотреться гораздо натуральнее. Мы это заметим, в первую очередь, на всевозможных сооружениях и одеяниях персонажей. Бетон теперь выглядит как бетон, камень — как камень, а дерево — как дерево.
Unreal Engine 4 гарантирует это



Не бывает бликов без отражений

Равно как и не бывает дыма без огня.
Со стороны это, опять же, кажется довольно очевидным. Ну разве можно этого не понимать!
Но для игровой графики данный тезис долгое время таковым не был. Всё дело в том, что считать реальные отражения играм не по зубам. Но, с другой стороны, совсем без блестящих предметов — тоже не дело. Поэтому раньше имитировали лишь самый яркий блик, а все остальные отражения оставляли «за бортом».
Вот как имитировали блеск в классике

Отражается лишь самая яркая точка (от источника света), но не окружение. Потому что это, собственно, и не отражение вовсе, а лишь дешёвая математическая имитация.
Синтетическая от «А» и до «Я».

Увы, но при таком подходе любой блеск выглядел слишком «пластмассово» (ты наверняка наслышан об этом эффекте). Ни тебе золота настоящего, ни воды, ни кожи персонажей.
PBR же поставил игроделов перед фактом: хочешь-не хочешь, а отражения нужны.
Кейдж старался как мог, но всё равно сейчас эти лица выглядят кукольными
... особенно в сравнении с тяжёлой артиллерией
Безусловно, тут дело не только в блеске. Огромную роль играет и SSS. Но то, что эти лица не выглядят пластмассовыми — в чистом виде заслуга PBR.


Демонстрация важности отражений на примере Remember Me

Однако сказать «отражения мне запили» — это одно дело, а совсем другое — придумать, как именно это можно сделать. Тут оказались очень кстати две технологии, которые уже давненько используются. Первая из них — это…


Image Based Lighting

Сокращённо — IBL. Примерный перевод на русский — «освещение с помощью изображения».
Суть его вот в чём
В «классике» весь шейдинг (то, как выглядит поверхность) получался всего-навсего из трёх векторов.
Вот конкретика
Берём поверхность объекта.
В каждой её точке есть направление, показывающее, куда эта поверхность «смотрит» (так называемая нормаль). Есть мы (зритель), который смотрит на эту точку. А лампочек, как таковых, нет вообще. Вместо них — лишь абстрактное «направление света» от каждой из них. Всё. Лишь эти 3 направления.

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

Нетрудно догадаться, насколько это далеко от действительности. Ведь в реальной-то жизни свет приходит со всех сторон. Это не какая-то одна или две точки вокруг нас, которые светят.
Нет, это абсолютно всё наше окружение.

Тут-то и выходит на сцену IBL. Вместо того, чтоб освещать некий объект (допустим, персонажа) одной-двумя точечными лампочками, мы создаём специальную текстуру, на которой видно всё то, что этот объект окружает. Мы как бы «рисуем в уме» такую сферу, находясь внутри которой будет казаться, что перед нами то самое реальное окружение, которое запечатлено на картинке:



Такую специальную текстуру, не долго думая, назвали картой окружения (Environment Map, EnvMap).

Осталось лишь размыть её — и вуаля! Теперь она отображает тот свет, который приходит из окружения в каждом направлении.



Имея такую энв-мапу, в игре мы можем её прочитать. Просто «смотрим» тот пиксель, на который направлена нормаль поверхности — и получаем объект, который «освещён картинкой».
Вот так и работает Image Based Lighting.

По-настоящему рассеянный свет (а-ля Enlighten) мы с помощью этой техники получить не можем. Но невооружённым взглядом видно, что IBL выглядит гораздо натуральней чистой «классики».
Только направленный свет (солнце)
Для наглядности специально возьмём модельку без текстур.

... а теперь добавим к нему свет с карты окружения

Но даже не это самое замечательное. Главная прелесть IBL — в том, что у нас уже есть простая текстура, которая описывает всё окружение. Мы уже её размыли — и получили имитацию освещения.

А что если текстуру не размывать? И считывать пиксель не вдоль нормали, а в том направлении, в котором отразится от неё наш взгляд?
Мы получим неплохую имитацию отражений

Пойдём ещё дальше, и подготовим эту энвмапу в нескольких градациях размытия — от абсолютно чёткой до той, которая имитирует свет:



А благодаря одной особенности того, как именно хранятся текстуры в играх — мы можем запихать все эти варианты в одну энв-мапу. Ты ведь уже догадался, что нам это даст? Это позволит в игре, безо всякой лишней нагрузки, задавать различным поверхностям произвольную степень размытости отражений.
Вот как наш объект будет с ними выглядеть

Подробный анализ того, в чём же нас IBL ограничивает — оставлю для второй части. А сейчас лишь отмечу два ключевых нюанса.
1. Для того, чтоб сымитировать отражения, нам пришлось заранее сохранить всю сцену в изображение. Это, как нетрудно догадаться, увеличивает размер игр и всё-таки даёт нагрузку. Сам понимаешь: держать в видеопамяти и считывать ещё одну текстуру большого размера — это не бесплатно (хоть и относительно «дёшево»).
2. Опять же, это не «настоящие» отражения: в них видно лишь изображение с карты окружения, но не объекты в сцене. Например, ухо на голове не отразилось, хотя должно было бы. По сути, в отражениях окажется лишь то, что было заранее сохранено в картинку.

Частично проблемы IBL перекрывает вторая «отражательная» техника из арсенала PBR, а именно…


Screen Space (Local) Reflections

«Отражения в пространстве экрана»… короче, просто используй английское название.
Идея «под капотом» этой техники — та же самая, что и в основе IBL:
Реальные отражения геймдеву пока что даже не снятся.
Но можно их сымитировать, если считывать со специальной текстуры нужную область.

Только на этот раз в качестве такой текстуры мы используем не карту окружения, а… сам кадр.
У нас уже есть 2D-картинка того, как выглядит сцена глазами игрока. Так почему бы не получать отражения с неё?
На сей раз пускаться в подробное объяснение того, как именно это делается — не буду. Ты и так уже, наверняка, возненавидел меня за то, что постоянно лезу в дебри. А тут — нужно докапываться до самой сути, чтоб понять принцип (надо понимать, что такое deferred rendering, карта глубины, пасс нормалей и много чего ещё). Так что для самых любознательных — лучше сошлюсь на отличную статью конкретно по SSR (SSLR) (ВНИМАНИЕ! Там автор рубит правду-матку, не стесняясь шейдерного кода).

Сейчас же — лишь обозначу ключевое достоинство SSR: эта техника позволяет отражать не только какую-то заранее посчитанную карту окружения, но и то, что реально происходит в игре прямо сейчас.

А также — отмечу ключевые проблемы этого метода:
1. С помощью SSR отражается лишь то, что видно в кадре прямо сейчас. Потому что мы просто не знаем, что там за краями обзора.
Например, для вот такой сцены
... в чистом виде SSR будет выглядеть вот так
... поэтому нам придётся намеренно скрывать отражения, когда они приближаются к краям экрана

2. Для SSR у нас вся сцена «сплющена» в текстуру. Так что мы не можем получить в отражениях то, что не видим напрямую. Например, если посмотреть на блестящий пол под столом — по идее, там должна отражаться нижняя сторона столешницы. Но мы этого не увидим, потому что в самом кадре этого нет. Именно поэтому Галахад не отражается в зеркалах в «The order: 1886».
Показать анимированную GIF-ку

3. В отличие от IBL-овского подхода, создание размытых отражений через SSR не бесплатно. Там нам было без разницы: что чёткие отражения, что размытые. Тут же — чем размытее, тем дороже. Либо — по мере размытия мы будем терять в качестве отражения.

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

Даже Unity — движок, испокон веков смотревший в сторону мобилок, недавно пообещал появление SSR «из коробки»:
Видео-демонстрация

мелкий оффтоп про Юнити и мобилки
На самом деле, с пятой версии авторы Unity вообще взялись за ум, и начали потихоньку запиливать фичи, нужные в современных играх. Так что не исключено, что через каких-нибудь полгода этот движок тоже сможет в current-gen. Без «как бы» и «почти», как это было раньше.
И — да — в качестве плагина SSR для этого движка уже существует довольно давно. Но стабильность юнитишных плагинов с AssetStore — это отдельная тема.



Сохранение энергии

Давай взглянем на то, как меняется яркость блика в зависимости от того, насколько сильно поверхность его размывает.
Показать картинку

Всё логично: чем больше блик, тем меньше его яркость. Потому что света на поверхность всё равно падает одинаковое количество. И в одном случае весь пучок отразится в одну сторону, а в другом — рассеивается в разные.

Не поверишь, но даже это раньше не было очевидно. В классическом рендере художники настраивали материалы «на глазок», и редко следили за тем, чтоб два материала с разным бликом визуально отражали одинаковое количество энергии.
При PBR же сохранение энергии решили «узаконить»: поверхность не должна отражать больше света, чем на неё упало. Соответственно, чем ярче блик — тем слабее основной градиент света (так называемый «диффузный» свет). Чем блик больше — тем он слабее.

Это довольно простая мысль, но обязательность её исполнения является мощным фундаментом в PBR. Когда сохранения энергии нет — игрок может и не понять, что именно его смущает. Но картинка выглядит «как-то не так».


Global Illumination (GI)

По-русски — рассеянное освещение.
Да, я про эту технологию уже рассказывал: на примере Voxel Cone Tracing и Geomerics Enlighten.
И — да — конкретно эту технику можно отнести к PBR с огромным натягом. Но она соответствует концепции физического рендера, более чем. Строго говоря, без GI у нас, вообще-то, не соблюдается сохранение энергии. Только не в ту сторону, в которую было раньше (света больше, чем должно быть), а в обратную (света меньше).
Кроме того, известные сейчас способы получить динамический GI (то есть, не посчитанный заранее, а реалтаймовый) выполняют, по сути, ту же задачу, что и IBL. Они реализуют свет от окружения, а не просто из бесконечности/одной точки.
Поэтому на практике GI приходится тесно связывать с IBL, чтоб соблюсти упомянутое выше сохранение энергии. А то, что неразрывно связано с разными аспектами PBR — на мой взгляд, является частью этого самого PBR. Но — подчёркиваю — это моя личная позиция. «По канону» же GI и PBR — совершенно разные вещи.

Тем не менее, если рассматривать рассеянный свет именно в контексте физического рендера — это позволит выдать такой уровень реализма, который в некоторых случаях способен уже всерьёз тягаться с киношным.
пруф от разработчиков Юнити
... и Unreal Engine


Будущее физического рендера

Как я упомянул в начале, анализировать подводные камни нашего нового трёхбуквенного друга будем во второй части.
Но уже сейчас хотелось бы подытожить всё вышесказанное.
Итак, PBR — это не просто новая техника, не очередная графическая фича, а целый подход к визуализации, который ставит во главу угла науку. И перечисленные мной технологии — не единственные в его арсенале (например, уже сейчас многие считают микрофасетное самозатенение важной, а то и неотъемлимой частью «PBR'ности»).
Одних лишь тех примеров, что привёл в этой статье я, должно быть достаточно, чтоб убедиться: физический рендер по всем фронтам бьёт классику (кроме производительности, но об этом в следующий раз).

Поэтому наше игровое будущее (да и уже настоящее, чего греха таить!) — определённо за этим персонажем.
Я придерживаюсь позиции, что неотъемлемыми частями PBR являются:
1. Сохранение энергии
2. IBL
3. «всё блестит»
или, по-научному - наличие отражений Френеля

Но вся прелесть этого похода в том, что он неизбежно будет развиваться дальше. Теперь, когда мы сняли вуаль «имитаций на глазок», с каждым годом продолжат появляться способы сделать картинку ещё более достоверной — и все они наверняка станут такими же незыблемыми столпами PBR, какими сейчас я считаю эти три.

Так что нас ждёт исключительно лучезарное будущее… хотя и отнюдь не безоблачное. Как известно, у медали всегда есть две стороны, так что и PBR пришёл к нам не без проблем.
Теперь, когда мы с вами разбираемся в вопросе и понимаем причины возможных трудностей, можно взяться за анализ плюсов и минусов этой технологии. Чем и займёмся в следующей части.

А пока — спасибо за внимание, и удачно провести новогодние праздники!
Всем добра в нашем ближайшем светлом будущем
Комментарии (129 шт.)
Потому что, уж вот-вот
К нам приходит Новый Год!
Статью еще не читал, но заочно одобряю.
Лекс, дорогуша, ты — лучший!
И вот даже не знаешь, обижаться на «дорогушу» или радоваться.
Ну чего ты сразу в штыки? Конечно радоваться и продолжать писать такие статьи. И стримов больше. И Дауру подзатыльник за то, что морозит чепуху когда, спорит с тобой.
И да. Больше графония, богу графония!
Ну чего ты сразу в штыки?

Да я не в штыки, просто частенько тут кидают фразочки с подтекстом. Со словом «дорогуша» у меня есть вполне стойкая ассоциация.
Подумал, ты кое-на что намекаешь. Но, похоже, здесь эту отсылку
далеко не все поймут, вернее не только лишь все
Да, кстати, я не сказать чтобы очень следил за последними стримами, но ты врде так и не познакомился с фичей «ENB». Если нет, то пора бы, а если да, то хотелось бы ещё стену текста по этому поводу, ну или кучу слов на стриме(или ссыль на стрим где данная присутствыет если уже)
Как любитель модификаций, скайрима и самого ENB
Не могу не выложить это,
не сослаться на свой профиль в стим с этими скринами.
А также не могу не сравнить с этим
или с этим
Не разбирался.
Общую суть уловил (модификация самого DX), в детали не вникал.
Скорее, «солнышко» :)
А статья удивительно увлекательна для аналитики с кучей терминов, прочитала залпом. Спасибо за новые знания.
У меня в прошлые выходные, после стрима — сгорел комп.
Только-только купил себе новое железо. :(
Да как вы умудряетесь? Имел в своём пользовании кучу камней и карт разных мастей, был даже 3 гигагерцовый пень4 на 478(трудно представить что-либо более горячее) и никогда ничего не горело, вообще единственная поломка моего железа — это HDD(чуть-чуть не дотянул до 8-ми лет), ну и вздувались кондеры на б.у-шном БП, после замены всё летало.
P.S. И что сгорело?
проц, мать.
Интересно. Мать бракованая или проц гнал? Впрочем БП, полагаю, тоже стоит проверить, хоть они обычно и проседают, но всякое бывает.
И полугода не прошло, а, нет, подождите...
Спасибо за статью, гляну на досуге, не в столь поздний час :)
Я до сих пор не уверен, что её вообще надо делать.
Лезем в такие дебри — и только лишь для того, чтобы можно было перейти к собственно, самому анализу.
Ой не факт, что аудитория СГ такое оценит…
Ну, зато будет на что ткнуть пальцем, представь, задают тебе вопрос на стриме по PBR, а ты такой «Хоп, а у меня статья в блогах есть, идите и читайте» :)
Ну вот да, это и было основной мотивацией: закрыть уже тему.
Ой зря, вы, товарищ Дарлог так говорите, недооцениваете же аудиторию!
Лучше недооценивать и ошибаться, чем переоценивать — и горевать.
Ну, как минимум я оценил.) Я сейчас как раз осваиваю 3D-моделирование, и по сути статья проливает свет на то, как рендер по физике вообще работает — в играх, конечно, но принцип полагаю, похож или даже такой же — это позволяет лучше понять, что вообще надо делать, что бы после рендера не было мучительно больно.)

P.S. Тут нужен хэштег "#SGпознавательный"
Киношный PBR — он про другое, если что. Там упор делается на 3 вещи:
1. сохранение энергии
2. описание свойств поверхности через BRDF-функцию (для реализации предыдущего пункта).
3. упор на path tracing для расчёта BRDF за адекватное время рендера.

То есть, суть — та же самая (сохранение энергии — наше всё, а весь прочий обвес PBR-а — лишь для того, чтоб это обеспечить). Но реализация и техники — совсем другие.
Любопытно. Ну, в принципе, понятно, в кино и риал тайм особо не нужен(а мне так и подавно — я дальше статичных картинок уходить не планирую), так что реализация определенно может быть другой. Спасибо большое! Погуглю подробнее про всё это.))
P.S. За две недели пока я это всё осваиваю, мир перевернулся уже несколько раз от того, что думаешь, будто уже понял, как «что-то» работает, а потом оказывается, что понял только какой-то один аспект, а там еще ого-го сколько всего.)))
А ну быстро выкинь из головы и мысли об этом! Все кто не оценят, могут и дальше наяривать в пиксельное инди и не мешать нам внимать, тебе писать, а срачам в комментах расти и процветать.
Тут не только школьники, но и техники встречаются, проф направленные статьи нужны, хотя и гораздо меньшем объёме чем стальные) спасибо, жду вторую часть.
Технари * чертов Т9
Не, статья однозначно стоящая. Кому инетересно будет, тот обязательно прочтёт, ну а неучи так ими и останутся. И будут спорить, что «графон в этой новой игрушке не торт», хотя ныне тенденции сменились в стороны реалистичности и научности, а не красоты.
Огромное спасибо, Лекс, за эту статью и все прочие статьи, рассказы, стримы, рассуждения и прочую околографонистую болтовню. Никогда за графоном не гонялся, но вот слушать и читать как это всё работает, в том числе рассказы про «железо» очень интересно. Может появившаяся увлечённость этой темой и профессиональной так станет)
Суммируя, спасибо за прошаренность в теме графона и несением этих знаний в массы, и спасибо за весь твой труд. Тебя всегда интересно послушать да почитать)
Спасибо за «спасибо». Приятно. :)
Я дождался. Ура!!! Спасибо Лекс.
Но прочитаю все же с утра. Ну или после экзамена.
собсна сюды и уйдет косарик, судя по всему :)
спасибо, Лекс!
Два косаря


Не уйдёт, не беспокойтесь.
Благодарю за познавательную статью! Жду с нетерпением вторую часть с аналитикой!
Интересное изложение, полезный и познавательный материал, грамотно построенный. Почитываю твои записи в блогах. Вот на кого хочется равняться как в плане подачи материала, так и в плане выполняемых работ (и в качестве этих работ, само собой).
Спасибо за статью!
Не знаю, насколько кошерно выкладывать такой шакалистый скрин, в посте про графон, но как просили.


И да, Лекс — а чем отличается EnvMap от обычной HDRI?
про скрин
вот я тоже не нашёл в годном качестве. Спасибо за поиск, но пока подожду — вдруг кто ещё найдёт.

Энвмапа — вид текстуры. HDRI — глубина цвета.
Энвмапа — именно такая текстура, на которой запечатлена панорама окружения. Она бывает разного вида. Я показал её в виде LatLong. А бывает ещё, например, в виде 6 отдельных сторон кубика (и в играх, кстати, используется этот вариант).

А HDRI (high dynamic range image) — она необязательно должна быть именно энвмапой. Это может быть и просто фоточка, просто в HDR. Другое дело — что, да, самая правильная энвмапа — она должна быть ещё и HDRI, иначе отражаться будет неправильно.
Показать картинку
За подробностями — сюда.
Спасиб. И да, я правильно понял, что с переходом на PBR, уйдут (или хотя-бы ослабят своё значение) различные карты, вроде спекуляра, ао, и прочих?
вот про текстуры — во второй части.
Кстати, Лекс, забыл спросить. Я пару недель назад просмотрел твою лекцию по «Свету в CG», и я не совсем понял одну вещь — момент, где ты рассказывал 16 бит integer и float. В смысле, обе версии 16-и бит используются повсеместно, или в какой-то конкретной области (например геймдев/VFX),
Потому что я много раз слышал про градацию в 8/16/32 бита, а про integer/float в 16-и битах услышал только от тебя.
И да, там же ты упоминул, что обратное значение гамме 2.2 — гамма -0.45. А куда применяется эта гамма -0.45? Если 2.2 — на переход Линейки в sRGB, то -0.45… из логарифмического в sRGB?
1/2.2 = 0.45454545…, т.е. 0.(45)
Да не, это я понял. Но куда применяется эта гамма-коррекция?
Дважды пытался дать доходчивый ответ — не вышло.
Короче, просто глянь в Вики: ru.wikipedia.org/wiki/%D0%93%D0%B0%D0%BC%D0%BC%D0%B0-%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%86%D0%B8%D1%8F
Суть — в том, что обрабатываться фоточки должны в линейке, а хранятся они в sRGB. Поэтому при считывании — нужно перевести из sRGB в линейку, а при сохранении в JPG/PNG или отрисовке — обратно в sRGB.
linear + gamma 2.2 = sRGB
sRGB + gamma 0.45 = linear

Вот так понятно :3
«кошерные» 16 бит — это float (вернее — half-float). A int-овый — это просто костыль в тех софтах, которые в труЪ-HDR не могут, и авторы которых считают, что этого костыля хватит.

Флотовый — это чисто-киношная специфика. Для которой нужны, к тому же, специальные форматы изображений. Как минимум — TIFF и HDR, а желательно — EXR.
И флотовый цвет используется повсеместно в кино, но не повсеместно в графике. Например, тот же фотошоп в 16-ти битах работает только в режиме int, а в 32 битах — таки врубает труЪ-флоат, но работает через одно место.

В играх с 16-битным цветом ситуация неоднозначная.
Видюха им может оперировать (собсно, это и есть HDR). Но итоговая картинка выводится на 8-битный монитор, так что в конце всё равно преобразование.
И хранить исходные текстуры в 16 битах — тоже не получится.
Поэтому приходится изголяться, чтоб запихнуть в LDR-формат HDR-картинку, задействуя дополнительно альфу как множитель. Потом в шейдере это «расшифровывать» обратно в 16-битный цвет, оперировать с ним, а в конце снова конвертировать результат в 8 бит.

Короче, если ты графоном не собираешься заниматься профессионально — оно тебе не надо.

Если вкратце:
8 bit (всегда int) — для фоточек и художников, и вообще «стандартная» битность изображений — в PNG, TGA, JPG и т. д. Лишь 256 градаций на каждый из трёх каналов (красный, зелёный синий), и суммарно возможное количество оттенков — чуть больше 16-ти миллионов. Примерно столько может различить наш глаз.
16 бит int — немного допиленные 8 бит. Число градаций также ограничено, но их гораздо больше (65 тыс. оттенков на канал).
32 bit (всегда float) — «труЪ»-цвет. Используется в композитинге (кино). может передовать широчайший диапазон оттенков — от бесконечно мленьких (почти чёрных) значений — до бесконечно ярких (ГОРАЗДО больше единицы — в миллион раз ярче белого, например).
16 bit half — «усовершенствованная версия» float'а. Бит в 2 раза меньше, и файлы тоже весят меньше, но по-прежнему float, просто точность ниже. Потому что для композа такая точность, которую дают 32 бита — зачастую «из пушки по воробьям».

В науке используются и более точные форматы — 64 бита, 128… но это для совсем уж упоротых целей, где нужна просто безумная точность. В астрономии, например. И у них свои, особые форматы изображений, о которых мы даже не слыхивали.
Спасибо за такой развёрнутый ответ. Правда, вторую часть мог не писать, ее шарю, но да, как ты говоришь — «лучше перебдеть».
А можно, пожалуйста, ссылочку на лекцию?)
Тык.

Мне, кстати, доставляет какой там срач развели касательно цветового восприятия. Хотелось бы взять и влететь с ноги, а там уже год никто не пишет((((
Да уж, все конечно замечательно и материал прекрасный, но ПОЛГОДА!!! Полгода я ждал новую статью, а она еще и поделена на части. Неужели вторую часть ждать еще полгода!?
Вообще, планируется «очень скоро»©
Но лучше сплюнь, не то сглазишь ещё.
Ладушки, подождем-с, все же материал должен быть качественным!
Пойдет такой скрин?
ахаха, опередил буквально на какие-то 10 минут, хотя сообщение написал через 30 почти))) Плюс поставлю
угу. забираю в пост :)
Хотя… всё-таки последовал совету Огастина Дрейка.
Уху!!! Мой пирожок… Ой не, он какой-то покусанный)
Можешь мне вернуть, если брезгуешь))
Да забирай, тем более, что он пыльный.
Пыльный говоришь… Лучше себе оставь, я передумал)
Еще бы ему не быть пыльным, ты же его с полки взял. Забирай обратно!
Лаааадно, уговорил. Он уже зачерствел, пока мы спорили.
Самые ожидаемые релизы 2016:
— Half-Life 3
— Beyond Good & Evil 2
— вторая часть статьи о PBR от Лекса :-)
Это твои или вообще?
Я бы статью даже на первое поставил)
Лекс, а не проще было бы взять стрим по The order: 1886, выдрать оттуда кусок видео с демонстрацией отсутствия отражений в зеркалах (Вася там нормально это показал), сделать из этого гифку, а не искать скриншоты, которых нет?

И будет ли во второй части статьи что-то про PBR из конференции War Thunder, о которой ты говорил в каком-то стриме?
собсна, кой-чего есть уже и в этой части ^_^

про скрин — дай подумать…
Спасибо. Познавательно. Интересно.
Наконец выделил время почитать.
Очень информативно, всеобъемлюще и, главное, интересно и понятно. Даже мне как человеку, который интересуется графикой постолько поскольку недавно начал изучать 3D моделлинг и моушн-дизайн)
Так что статьи Лекса всё остаются моими любимыми на SG)
Ага, именно. Тот самый сферический конь в вакууме, /К/ак любимый математиками.
Это же ошибка, ошибка же, да?
Ну опечатался человек, что с того, у него же нет карманного Маковеева поблизости.
Это очевидная очепятка, которая режет глаз.
Просто… Просто я не мог этого вынести и не указать.
Сколько свой контент не перечитывай — а со стороны всё равно виднее.
Лови плюс, исправил.
про Андрея Маковеева
Карманного его у меня нет, но есть настоящий — в скайпе.
Правда, он редактирует лишь те мои статьи, которые потом отправляются на главную. А сделать конкретно эту в блогах — сознательное решение. Мне адски не хватает на главной кое-чего из того, что есть тут.
Большое спасибо за такой труд! Очень доходчиво изложенный и полезный материал! Уже жду продолжения про новые типы карт, используемые в PBR :)
Ну всё, теперь точно придётся писать про проход greenlight)
Статья хорошая (а за популяризацию хороших статей на хабре отдельный плюс). В качестве дополнительных материалов — мог посмотреть презентацию Unigine (у них вполне неплохой новый рендер). Они показывают настройку материала ДО PBS® и после. Занимательная картина)
PS. До сих пор задаюсь вопросом как при наличии такого количества возможностей в Unity разработчики постоянно выдают какую-то каку, а не «графон»? Но там хотя бы понятно как можно выдать плохую графику (дефолт пока ещё неказист, особенно если учитывать, что многие разработчики всё ещё используют 4 версию движка), но как некоторые «инди» умудряются испортить UE4? Совершенно непонятно!
PPS. Ну и с новым годом)
PPPS. Поскольку на хабре нет такой всеобъемлющей статьи — может переведёшь в формат хабра и попробуешь им просунуть (можно это сделать от лица конторы, тем самым получите небольшой буст продаж/посещений, наверное, в легендах об этом говорят). А пока буду советовать эту статью новичкам не понимающим в PBS, но желающим понять хоть что-то (за неимением альтернатив на русском языке).
Ну всё, теперь точно придётся писать про проход greenlight)

Ловлю на слове ;) Мужик сказал — мужик сделал (пусть даже и через полгода).
скрытый текст
(а за популяризацию хороших статей на хабре отдельный плюс)
я, кстати, даже не уточнял у Макса, разрешены ли внешние ссылки от авторов. Если нельзя — авось не заметит: статья хоть и для профессионалов, но весьма годная.

Они показывают настройку материала ДО PBS® и после. Занимательная картина)
я за этим движком уже давненько не слежу. Есть ссыль?
До сих пор задаюсь вопросом как при наличии такого количества возможностей в Unity разработчики постоянно выдают какую-то каку, а не «графон»?
Строго говоря, «графон» в Юньку начали завозить, начиная лишь с 5-ой версии. И всё ещё завозят.
скрытый текст
Поскольку на хабре нет такой всеобъемлющей статьи — может переведёшь в формат хабра и попробуешь им просунуть
Нет. Не уточнял у «руководства СГ», но, наверное, тут такое не приветствуется. Да у меня и нет такого желания: мою преданность тяжело заслужить, но если она получена — я предан чему-то / кому-то до последнего. Так что мои публикации — эксклюзив для СГ. Хоть от своего имени, хоть от имени студии. По крайней мере, в обозримом будущем.
По хабру — жаль. Такого сильно не хватает.
Гринлайтовый док создан и тезисы набросаны, надеюсь где-то на праздниках дописать и выложить (но кто знает, может и полгода, Макс сколько лет уже историю assassin's Creed допилить не может?).
Та самая презентация, их сайт и группа в ВК просто гулятся, так что ссылка, в общем-то и не нужна.
Гринлайтовый док создан и тезисы набросаны

«Набросан» и «готов» — совсем разные вещи. У меня эта статья была в первый раз набросана ещё полгода назад. И даже написана была чуть ли не целиком. И даже несколько раз.
скрытый текст
И даже была почти готова статья по WarThunder'у, в котором я в том числе прошёлся по PBR. Но — видишь, как оно в итоге получилось.
У меня статья по greenlight тоже была тезисно набросана и написана раза 3.
Первые два раза это была просто хроника прохода гринлайта (и, как показал опыт сумошки, этого бы хватило). Третий раз я попытался в аналитику с графиками, но там было больше графиков, чем текста и я на это дело тоже забил (я же не Галёнкин). Сейчас же главная проблема в том, что порог прохождения стал раза в 4 ниже, чем год назад, и пройти может даже что-то формата despair (не знаешь — не гугли, это страшно).
Сейчас же главная проблема в том, что порог прохождения стал раза в 4 ниже, чем год назад, и пройти может даже что-то формата despair (не знаешь — не гугли, это страшно).

._.
У вас было 4к голосов «за» на 6 месте. У нас при входе в сотню. Почувствуй разницу.
Да мы уже неделю так висим, и сдаётся мне, что это вряд ли закончится скоро. Хотя бы этой зимой...
Вальва сейчас круто занята зимней распродажей, апдейтом доты и прочими важными вещами, так что им банально не до того. После распродажи, числу к 10 могут очнуться. А могут и подарок на новый год сделать.
Опа! А я видел уже эту презу. Но:
а) где там сравнение PBR с не-PBR? Не вижу. Есть только металлы vs диэлектрики. И то, и другое — PBR.
б) разрешение картинок слишком мелкое.
Там есть дальше. Сравнение настройки материала в Unigine 1 и unigine 2. PBS появился только во втором.
Разрешение, вроде как, можно сделать побольше.
ты про это?
Если да — то это не иллюстрация PBR, а иллюстрация интерфейса этого движка.
А я и не обещал иллюстрацию PBR — это можешь посмотреть в группе или на сайте движка, как я уже говорил, это хорошо гуглится.

Они показывают настройку материала ДО PBS® и после.


Я имел в виду как раз саму настройку в интерфейсе.
разрешены ли внешние ссылки

Разрешены, когда это не реклама, не замануха и не прочая подобная чепуха )
Иии только что ты лишил Лекса отмазки от нежелания чего-то делать)))
Очень информативно и интересно. Легко читается. Спасибо, Лекс!) Ещё не встречал на русском сегменте, такого подробного описания
Что я понял из этой статьи
Значит, неправильно понял. PBR как раз предлагает частично отказаться от этого:
Показать картинку

Тут скорее будет уместным такая картинка:
Только вместо IE - классический подход, остальное угадай сам
*уместной
Я всё равно не могу понять, почему
здесь отражение есть,
а здесь нет?
Потому что для получения отражения в зеркале нужно рендерить сцену два раза. На что тратится ресурсы, которых у PS4 не шибко много.
Там вроде не столько в ресурсах PS4 дело, сколько в резко возросшей со времён Пейна ресурсоёмкости такого решения самого по себе. На любой платформе есть куда более оправданные поводы потратить столь значительные вычислительные ресурсы, чем просчёт отдельной сцены за каждым зеркалом.
MrLamer, правильно тебе ответили.
Вот ещё дополнение. Раньше повсеместно в рендере практиковался Forward-подход. При нём мы в принципе перерендеривали всю сцену несколько раз: под каждую лампочку, под каждый материал, иногда даже — под каждый компонент материала (напр., стена рендерится один раз, потом поверх неё — второй раз рисуется эта же стена, но прозрачная, лишь с дырками от пуль).

Сейчас же повсеместно практикуется Deferred-подход. Суть его в том, что сцена рендерится в несколько этапов. Сперва все поверхности записывают информацию о себе в пиксели экрана (в несколько стандартных проходов: цвет, «блестящесть», направление нормали в пространстве камеры...). А уже потом финальный внешний вид собирается из этих нескольких 2D-картинок. Короче, как в фотошопе — только с хитрыми режимами слоёв.

Вот загвоздка в том, что раньше делать зеркала, пере-рендеривая сцену дважды, было в принципе дорого, но позволительно. С учётом того, что в зеркале видна не вся сцена — это было всего лишь «ещё несколько пере-рендеров». Ну то есть количество вычислений возрастало лишь на какую-то часть: процентов на 30, допустим. А сейчас для таких же отражений придётся именно что делать двойную работу.

В двух словах проще не объяснить. Лучше почитай про forward и deferred рендеринг.
Uncle_Ben, Лекс Дарлог, Спасибо!
Ппц я быстро сломался при чтении этой статейки.
Но годно, молодец.
Огромная благодарность за такой насыщенный, но легко читаемый материал. Месяцы ожиданий были вознаграждены с лихвой.
Уж сейчас можно сказать, что весь день удался.
Крутая чюстатья, понравилась весьма!)
Спасибо, Лекс, за статью!
Теперь я понял почему в современных играх все блестит как восковое, почему это неотключаемо и, как следствие, почему мой надо-комп уже ничего не тянет.
Недо-комп*
Охужэтотавтокорреткор
А можно где-то почитать про рендер для новичков, желательно с кодом? А то сам заинтересовался этой штукой
про какой именно рендер и что именно почитать? Про игровой? Про оффлайновый? Про то, как он работает внутри? Про то, как для него писать шейдеры? Про то, как настраивают рендер артовики?
Конкретизируй.
Наверное, про то как он работает изнутри
Лови мой скромный плюс, друже)
Статья кошерная!
И вроде довольно простая. Чего-то мозголомного я не заметил собственно говоря. Почти все термины объяснены на пальцах, а остальное вполне понятно.
В общем, жму руку через экран)
Зарегался что бы сказать что это просто охренительно, жду продолжения ._. Спасибо за работу, Лекс!
Статья гут, понравилось. Человек от графики и дизайна бесконечно далёкий, но написано понятно и доступно. Однако, если есть возможность, хотелось бы прояснить один момент насчёт отражений.
Я понимаю аргумент что настоящие отражения современному геймдеву только снятся и тот факт, что персонажи не отражаются в зеркалах это исдержки технологии. Тогда какая фича была использована в игре 2003 года Postal 2, когда в зеркале отображалось всё довольно неплохо?
Скрины, собсна:
Показать картинку


Показать картинку


Единственное что приходит на ум — то зеркало там играло как экран телевизора, которая транлировало что происходит перед ним. Но тогда почему ту же самую технологию не внедрить сейчас? Судя по всему ей уже не меньше одного десятка лет.
Но розжига для, а интереса ради вопрашаю.
Прочитал пару постов выше, там уже спрашивали. Пардоньте, просмотрел.

Nothing to see here,people. Move along.
Показать картинку
До «любой лох может сделать красивые текстурки, лишь правильно направив свет на объект», явно далеко, впрочем, как обычно.
Отличная, нет, даже Изумительная статья, когда Даур назвал ее во вчерашнем «Инфакте», и я с неохотой решил посмотреть, держа в голове мысль «Очередной копипаст о ПБР». Но вот незадача, статья не просто введение для неосведомленных о физическом рендере, дак еще и отличный мануал для профессиональных пользователей! Большое спасибо за потраченное время на создание такого большого и полезного материала! Обязательно попробуйте опубликовать на хабре, поток полезностей огромный.

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

Самым главным плюсом является почти мгновенное получение фотореалистичной картинки для раннего концепта. (Наличие хороших и прямых рук по прежнему является главным фактором, пока что нет кнопки сделать круто, хотя, такими темпами скоро будет=) И то, что не нужно часами сидеть и настраивать материалы в 3д редакторе, чтобы получить нужную картинку, далее обрисовывать в Фотошопе чтобы получить то, что себе представлял. (Конечно, я утрирую и значительно преувеличиваю проблему, ведь существует куча различных пайплайнов чтобы избавиться от головной боли.) И теперь производственный процесс значительно сократился, что не может не радовать!

Например, наспех сделанная перчатка (ссылка) и тут же раскрашенная с помощью пакетов для текстурирования, позволяет нам забить на нудную настройку материалов и пост.Обработку. Чему, я несказанно рад.

Большое спасибо за труд, ждем-с 2 часть!
Насчёт хабра — последний спойлер в этом комменте.

И — да, всегда приятно читать развёрнутые комменты по существу от коллег по цеху. Спасибо.
Вот еще скриншот из движка Realworld созданной программистом по имени God

Показать картинку
#include «humor.h»
ha_ha_ha();
А если серьёзно — чё-то какой-то мыльный антиалайзинг. И сэмплов мало — вся картинка в шуме.
Я уж молчу, что тени проваливаются — видать, в 8 битах рендерили, вообще без toneMapping'а.
Статья зачётна )). Объёмно, познавательно и легковесной. Шик!

Немного вопросиков, если позволишь.

По классическому шейдингу.
В оригинале мы имели всего три параметра для работы: нормаль, направление взгляда и направление света. Каждый из них был независим друг от друга, но владея всеми тремя, мы могли сказать, как должен выглядит объект. Я правильно понимаю?

И если это всё, чем мы располагаем, то какие отличия лампочек от Солнца, кроме разницы в кол-ве объектов? И как много лампочек может быть в сцене?

По IBL.
Я представил себе персонажа, а вокруг него сферу, на внутренней стороне которой изображена картина (пустыня с горой из примера). А как связано со светом? Он уже изображён на внутренней поверхности сферы, благодаря этому мы можем получить инфу о свете каждого пикселя картины?

Как и почему размытие помогает нам получить отражение?

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


От чего будет зависеть какую степень размытости использовать? Это будет обрабатываться «на лету” или привязываться к сцене?

Об использовании кадра для отражения
Я правильно понимаю, то сам Галахад является частью экранного пространства. Однако, если бы мы решили использовать его для отражения, то в зеркале была бы видна спина персонажа, да?

По символизму
Чем глубже я лезу в подноготную PBR (в том виде, в котором он есть в играх), тем больше мне кажется, что он — это главный символ всего наступившего поколения, его олицетворение, квинтэссенция. В «физическом рендере» проявляются самые сильные и слабые стороны current-gen'а, причём в максимально гипертрофированной форме.


Ты здесь говоришь именно о символизме графона или подобная концепция находит отражение ещё в чём-то текущем?

По инвариантам
Из книжки Бурлакова „Homo Gamer. Психология компьютерных игр“ я узнал об инварианте. Когда мы смотрим на какой-то объект, то воспринимает различные его признаки. Цвет, форму, объём, положение относительно нас и т.п. Совокупность таких признаков называется инвариантом. Если мы увидим другой объект, имеющий схожий набор признаков, то можем принять его за первый. Как я понимаю, на использовании инвариантов и строится графика в играх и кино.

Например, инвариант неба – текстура с размытым рисунком, неподвижная при продольных и поперечных перемещениях, но поворачивающаяся вместе с поворотом головы. Цвет не важен.

Инвариант присутствия (где-либо) — кончик носа. В реальном мире нос всегда в поле зрения человека. Относительно него, вернее, расплывчатого пятна, которым он представлен, определяются все движения внешнего мира. Как только игрок готов принять кончик ствола на экране компьютера за этот инвариант – он попадает в мир Дум-образной игры.


Так как книжка была написана достаточно давно, то мне хотелось знать, насколько данный принцип работает сейчас.

И если подвести это под тему PBR, то получается, что сейчас разработчики могут создавать более точные инварианты реальных объектов. А может быть, что PBR будет восприниматься хуже из-за сильного соответствия реальности? Этакая ”зловещая долина” PBR.
В оригинале мы имели всего три параметра для работы: нормаль, направление взгляда и направление света.
скрытый текст
Строго говоря, в ПБР мы имеем их же. Просто используем по-другому. Ну и да — для отражений также используем дополнительные данные (энвмапа для IBL, пре-рендер кадра для SSR).

Каждый из них был независим друг от друга, но владея всеми тремя, мы могли сказать, как должен выглядит объект. Я правильно понимаю?
скрытый текст
Да. На самом деле, у нас и направления взгляда нет. Просто есть камера (позиция/поворот) и точка поверхности (позиция). Из них получаем вектор взгляда. И из позиции же получаем вектор к лампочке. Таким же макаром (если лампочка точечная, а не параллельная).

И если это всё, чем мы располагаем, то какие отличия лампочек от Солнца, кроме разницы в кол-ве объектов? И как много лампочек может быть в сцене?

солнце vs лампочки
Что солнце, что лампочки — это так называемые «директные» источники света. Т.е., самая примитивная его аналитическая модель. Либо светящаяся точка, либо просто вектор света.
Солнце стоит особняком, потому что это такой источник, у которого нет позиции, а есть лишь направление. Свет по всей сцене прилетает в таком направлении откуда-то из бесконечности. Для всех остальных источников направление света меняется для каждой конкретной точки на объекте.

число светильников в сцене
Сколько в сцене может быть лампочек — зависит от способа рендера. Не вдаваясь в подробности, их есть два: forward и deferred. При forward каждый объект перерендеривается несколько раз — по разу для каждой лампочки, под влияние которой он попадает. А результат суммируется.
При deferred — сперва подготавливаются специальные «промежуточные» проходы, а потом из них собирается финальная картинка. Прелесть deferred — в том, что на один объект может светить сколько угодно лампочек, и это не будет влиять на скорость до тех пор, пока один и тот же пиксель этого объекта не будет освещён несколькими лампочками.
Так что в теории число лампочек — бесконечное. Лишь бы их области воздействия не пересекались.

По IBL

Вообще не понял вопросы, честно говоря. Видимо, проблема в том, что я недостаточно наглядно объяснил :(
скрытый текст
Собственно, ЛЮБОЙ цвет, который мы видим на поверхности — это и есть отражение. Свет попал на стол, стол поглотил синюю и зелёную часть спектра, свет отразился нам в глаза — мы видим это как красный стол.
Но если поверхность гладкая (на микро-уровне) — мы видим это как отражение зеркальное. Если немного шершавая (как алюминий в продукции от apple) — мы видим, что она блестит, но блик размытый.
Если же луч света, упав на поверхность, рассеялся по всей полусфере (во все стороны) — то мы это видим как рассеянное отражение (которое CG-шники называют диффузом). Т.е., точка на поверхности для нас окрашивается в тот или иной цвет независимо от того, с какой стороны мы на неё смотрим. Такое рассеянное отражение дают бумага, гипс, матовый пластик.

Поэтому энвмапа, которую размыли с конусом в 180 градусов — по сути, отображает те самые цвета, в которые должен окраситься абсолютно матовый шарик, когда он окажется внутри такого окружения. Короче, такая энвмапа показывает диффузные свет от окружения.

Так что…
Как и почему размытие помогает нам получить отражение?

Никак. Отражение нам помогает получить энвмапа. А размытая энвмапа — даёт рассеянное отражение. Вплоть до «диффуза» (матовая поверхность) при размытии в 180 градусов.

От чего будет зависеть какую степень размытости использовать?

Это задаётся художниками. Либо на объект целиком, либо текстурой.


Однако, если бы мы решили использовать его для отражения, то в зеркале была бы видна спина персонажа, да?

Эм… да. Изнутри. То есть он бы выглядел не как персонаж, а как поверхность персонажа (этакая раскрашенная скорлупа). У тебя никогда не бывало в играх, что камера проваливалась внутрь объекта, и ты видел, полигоны этого объекта с обратной стороны? Вот именно это и отразилось бы. А поскольку это явно баг, такое надо убирать.

Ты здесь говоришь именно о символизме графона или подобная концепция находит отражение ещё в чём-то текущем?

Не только о графоне. Вообще обо всём этом поколении. Больше параллелей — во второй части. Она на подходе.

Про инварианты — не совсем понял. Вернее, совсем не.
Зловещая долина — да, она нас определённо поджидает с приходом PBR. Когда, например, мы видим, что Галахад не отражается в зеркале — и вся иллюзия резко рушится. Зеркало внезапно становится менее убедительным, чем оно же в ванной Дженсена (которое, к слову, ВООБЩЕ НИЧЕГО не отражало).
За дополнительное объяснение спасибо, кое-что уяснил.

Так, про инварианты.

Основную информацию можно прочесть в статье Марии Берцевой «Психологический словарь для разработчиков».

Краткий пересказ
Статья рассказывает о идеи глубокого погружение игрока в мир игры без использования фотореалистичной графики. Идея основывается на инвариантах.

Что такое инвариант?
Это набор признаков, по которым мы воспринимаем объекты нашего окружения. К примеру небо.
Его инвариант — это текстура любого цвета, которая не изменяется, если мы двигаемся вдоль или поперёк её, но поворачивающаяся при повороте головы. То бишь любой объект, который будет иметь эти признаки, мы воспримем как небо.

Остальные признаки нам «догрузит» память.

Главная сила инвариантов не столько в том, что разглядев лишь только инвариант, мы уже можем опознать объект, сколько в том, что после опознания объекта наша память сама дорисовывает к увиденному всю полноту деталей. И речь идет не о каком-то абстрактном воображении, а о реальном зрительном восприятии, о живой картинке, достигающей нашего сознания, которая благодаря памяти и свойствам инварианта может оказаться полнее картинки, достигшей сетчатки нашего глаза.

Может к PBR это имеет не шибко большое отношение, но как я понимаю, что графические технологии сейчас дальше идут по идеи «давай-те делать как заложено в природе», а не используя инвариант.

Вопрос заключался в том, что используются ли подобный подход сейчас в реальной разработке?
хз. про весь геймдев мира говорить не могу. От наших геймдизов я ничего такого не слышал. Хотя они вполне могут оперировать такими же категориями, просто не используя само слово «инвариант».
Спасибо за статью, жду продолжения.
ps: В очередной раз убедился, что физика это круто :)
Классная статья!
Статья оболденна, никогда не задумывался о том что такая проблема в освещении. Мне, как инженеру оптику, было очень интересно посмотреть на реализации освещений и отражений в виртуальных системах. Я не понаслышке знаю как сложно посчитать освещение и ход луча в геометрической оптике. Интересно как в CG расчитывают сферическую аберрацию и астигматизм. В обычной оптике идет просчет лучей в оптической системе по основным точкам. Инженеров спасают всякие опалы земаксы и тд. И да, все в нашем мире светится только в своем спектральном диапазоне.
С нетерпением жду продолжения!!! Лекс для меня данный материал БОМБА. Спасибо!
Внезапно, ковыряясь в настройках Division и не понимая, зачем 5 вариантов теней и два варианта отражений вспомнил, что на SG есть человек, который когда-то объяснил мне, чем отличаются методы сглаживания) Лекс, большое спасибо, на часть вопросов ответы найдены. Теперь бы понять, по какому принципу в играх делаются тени, и почему до сих пор нет единого настоящего алгоритма, почему из года в год появляются всякие PCSS, HFTS и в довесок к ним есть AO, который со времён первого Crysis только становился всё темнее и темнее (SSAO>HDAO>HBAO>HBAO+, и только сейчас наконец стал влиять на общую гамму в сцене в лице VXAO, но всё равно эти свистелки лишние же, почему нельзя объединить тени с затенением, м?). Я так понимаю, во второй части могут быть затронуты и такие вещи, как «глубина текстуры», карта нормалей, тесселяция, воксели, в конце концов, чтобы текстура выглядела не плоским материалом, а имела объём? В общем, вопросов много, а за уже имеющиеся ответа ОГРОМНОЕ СПАСИБО
Не чувствуешь разницу — потому что смотришь на «тени» и «затенение» в русском переводе. А я уж мильён раз говорил, что все эти графические термины на русский, по-хорошему, не переводятся.
Shadows (собсно, тени) — это просто направленные (директные) динамические тени. Ключевое тут — то, что они директные. Это чисто математическая имитация теней, «сферическая в вакуууме».
Ambient Occlusion (рассеянное затенение) — это имитация рассеянного света. Вернее, имитация тех мест, куда свет, наиболее вероятно, попасть не сможет. То есть, это разные вещи.

сам посуди

Простая направленная тень — она всегда жёсткая.
А AO — всегда рассеянный.
Настоящий же свет — и может быть направленным, и рассеивается по сцене.

На самом деле, AO является лишь очень примитивной аппроксимацией по-настоящему рассеянного света (GI, Global Illumination). И в кино уже редко используется. Но в играх пока без него не обойтись. Поэтому — его столько вариаций. Они отличаются по нагрузке на систему и достоверности: чем «правильнее» — тем дороже по производительности.
И — да, АО затемняет сцену. Но он и должен это делать: добавлять рассеянные тени там, где они должны быть. Без него — картинка светлее, само собой. Но в данном случае «светлее» — не значит «правильнее».

Про воксели высказываться не вижу смысла. Про остальное — уже высказывался в других статьях. В блогах и на главной.
Нет, разницу между тенью от объекта и AO, которое выделяет контуры этих объектов я понимаю, просто на примере Division видно, что даже такой, казалось бы, понятный предмет, как тень, многолик. Тут Contact Shadows, Shadow Quality, Shadow Resolution, Spot Shadow Count, Spot Shadow Resolution, я вот о чём. В русской локализации ещё проще запутаться, без статьи на geforce.com не разобрался, и то с ходу не смогу объяснить по памяти, какая настройка чем отличается, придётся перечитывать
Мне непонятно, почему вообще существуют настройки теней, почему движки согласно законам физики не могут рассчитать их как есть, без таких затрат мощностей GPU и CPU? Это потому, что и такого понятия как свет в привычной для нас форме в трёхмерной графике нет, да?
ответ заложен в вопросе.
почему вообще существуют настройки теней

потому что:
движки согласно законам физики не могут рассчитать их как есть


Любая компьютерная графика — априори имитация, приближение, аппроксимация. «Бесконечно точный» результат даже в оффлайновом рендере (в киношном) — неподъёмная задача, так что даже там приходится балансировать между реалистичностью/точностью и длительностью рендера. Что уж говорить о реалтаймовом 3D.
Для комментирования необходима регистрация.
Прямой эфир «Блоги»
Курилка Kaiserreich'а
Блог курилок и длинных разговоров
Обзор игры Dino Crisis
Блог обзорщиков
«Что? Где? Когда?» С нас — дата, с вас — вопросы!
Персональный блог имени Плюшевого Динозавра
Что не так с God of War?
Персональный блог пугала
Открытый мир МЕШАЕТ Ведьмаку 3
Персональный блог Dzhi-Dzhi
[НОВОЕ ШОУ НА SG!] Что? Где? Когда? | Составляем вопросы! В блогах! Сейчас!
Персональный блог имени Плюшевого Динозавра
Мысли о прошлом и будущем Resident Evil
Персональный блог великого комбинатора
[ШОУ] Вопросы для «Что? Где? Когда?»
Персональный блог имени Плюшевого Динозавра
[Жизнь Замечательных Людей] Биография Кена Левина
Персональный блог великого комбинатора
Titanfall 2
Блог обзорщиков
[ХАЛЯВА] Место раздачи халявы V11!
Официальный бложик халявщиков на СГ
Наверх ↑