Рендеринг что это такое в играх

Что такое рендеринг? И что такое рендер? Словарь разработчиков компьютерных игр!

В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Что такое рендеринг? (для программистов)

Итак, Википедия дает такое определение: Ре́ндеринг (англ. rendering — «визуализация») — термин в компьютерной графике, обозначающий процесс получения изображения по модели с помощью компьютерной программы.

Довольно неплохое определение, продолжим с ним. Рендеринг — это визуализация. В компьютерной графике и 3д-художники и программисты под рендерингом понимают создание плоской картинки — цифрового растрового изображения из 3д сцены.
То есть, неформальный ответ на наш вопрос «Что такое рендеринг?» — это получение 2д картинки (на экране или в файле не важно). А компьютерная программа, производящая рендеринг, называется рендером (англ. render) или рендерером (англ. renderer).

Рендер

В свою очередь словом «рендер» называют чаще всего результат рендеринга. Но иногда и процесс называют так же (просто в английском глагол — render перенесся в русский, он короче и удобнее). Вы, наверняка, встречали различные картинки в интернете, с подписью «Угадай рендер или фото?». Имеется ввиду это 3D-визуализация или реальная фотография (уж настолько компьютерная графика продвинулась, что порой и не разберешься).

Виды рендеринга

В зависимости от возможности сделать вычисления параллельными существуют:

Существует много алгоритмов рендеринга, но все их можно разделить на две группы по принципу получения изображения: растеризация 3д моделей и трасировка лучей. Оба способа используются в видеоиграх. Но трасировка лучей чаще используется не для получения изображений в режиме реального времени, а для подготовки так называемых лайтмапов — световых карт, которые предрасчитываются во время разработки, а после результаты предрасчета используются во время выполнения.

В чем суть методов? Как работает растеризация и трасировка лучей? Начнем с растеризация.

Растеризация полигональной модели

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

Задача растеризатора (программа, которая выполняет растеризацию) получить из этих примитивов пиксели результирующего изображения. Растеризация в разрезе графического пайплайна, происходит после вершинного шейдера и до фрагментного (Статья про шейдеры).

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

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

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

А это значит что все физические процессы которые происходят в реальном мире он учесть не в состоянии. Эти процессы прямым образом влияют на изображение. Отражения, рефлексы, тени, подповерхностное рассеивание и так далее! Все без чего мы будем видеть просто пластмассовые модельки в вакууме…
А игроки хотят графоний! Игрокам нужен фотореализм!

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

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

Трасировка лучей (англ. ray tracing)

Помните о корпускулярно волновом дуализме? Напомню в чем суть: свет ведёт себя и как волны и как поток частиц — фотонов. Так вот трассировка (от англ «trace» прослеживать путь), это симуляция лучей света, грубо говоря. Но трассирование каждого луча света в сцене непрактично и занимает неприемлемо долгое время.

Мы ограничимся относительно малым количеством, и будем трассировать лучи по нужным нам направлениям.
А какие направления нам нужны? Нам надо определять какие цвета будут иметь пиксели в результирующей картинке. Тоесть количество лучей мы знаем, оно равно количеству пикселей в изображении.

Что с направлением? Все просто, мы будем трассировать лучи в соответствии с точкой наблюдения (то как наша виртуальная камера направлена). Луч встретится в какой-то точке с объектом сцены (если не встретится, значит там темный пиксель или пиксель неба из скайбокса, например).

При встрече с объектом луч не прекращает своё распространение, а разделяется на три луча-компонента, каждый из которых вносит свой вклад в цвет пикселя на двумерном экране: отражённый, теневой и преломлённый. Количество таких компонентов определяет глубину трассировки и влияет на качество и фотореалистичность изображения. Благодаря своим концептуальным особенностям, метод позволяет получить очень фотореалистичные изображения, однако из-за большой ресурсоёмкости процесс визуализации занимает значительное время.

Рендеринг для художников

Но рендеринг это не только программная визуализация! Хитрые художники тоже используют его. Так что такое рендеринг с точки зрения художника? Примерно то же самое, что и для программистов, только концепт-художники выполняют его сами. Руками. Точно так же как рендерер в видео-игре или V-ray в Maya художники учитывают освещение, подповерхностное рассеивание, туман и др. факторы, влияющие на конечный цвет поверхности.

Рендеринг что это такое в играх. chto takoe rendering. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-chto takoe rendering. картинка Рендеринг что это такое в играх. картинка chto takoe rendering. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

К примеру картинка выше, поэтапно прорабатывается таким образом: Грубый скетч — Лайн — Цвет — Объем — Рендер материалов.

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

Растеризация векторной графики

Суть примерно такая же, есть данные 2д кривых, это те контуры, которыми заданы объекты. У нас есть конечное растровое изображение и растеризатор переводит данные кривых в пиксели. После этого у нас нет возможности масштабировать картинку без потери качества.

Читайте дальше

Статьи из рубрики «Ликбез для начинающих разработчиков игр«, скорее всего окажутся очень для Вас полезными, позвольте-с отрекомендовать:

Послесловие

В этой статье, я надеюсь, вы осили столько букв, вы получили представление о том, что такое рендеринг, какие виды рендеринга существуют. Если какие-то вопросы остались — смело задавайте их в комментариях, я обязательно отвечу. Буду благодарен за уточнения и указания на какие-то неточности и ошибки.

Дорогой друг! Тебе есть что сказать? Понравился пост? Не стесняйся! Оставь комментарий, нам очень важно ТВОЕ мнение

Источник

Как игры рендерят картинку: краткая история с описанием базовых подходов Статьи редакции

От однобитной графики до затенение по Фонгу.

Автор YouTube-канала DigiDigger опубликовал видео, в котором кратко рассказал про несколько базовых типов рендеринга. Он описал, как происходила отрисовка на восьмибитных консолях, как создавалось окружение в Wolfenstein 3D и Doom, и как генерируются карты теней. Мы выбрали из видео главное.

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

С развитием железа появилась возможность использовать восемь бит для передачи цвета. Для отображения красного и зелёного тратилось по три бита, а для синего — только два. Это связано с тем, что человеческие глаза менее восприимчивы к синему свету, поэтому разработчики решили «сэкономить» на его оттенках.

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

К примеру, в Wolfenstein 3D якобы представлено объёмное окружение, но на самом деле это фейковое 3D — команда id Software использовала технологию рейкастинга для формирования игрового мира. В игре была 2D-карта, на которой отображались все стены и препятствия. С позиции игровой камеры генерировались лучи, которые расходились по окружению. Если на 2D-карте луч натыкался на препятствие, то игра рендерила там стену.

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

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

Следующим важным этапом в эволюции графики стал Doom. Если в Wolfenstein 3D игрок перемещался исключительно по плоским поверхностям, то в Doom окружение стало намного более комплексным: к примеру, появились лестницы и подъёмники.

Игра отрисовывала только ту часть локации, в которой находился пользователь. Чтобы отрендерить сложное окружение Doom использовала технологию двоичного разбиения пространства (binary space partitioning), которое позволяло найти нужные зоны.

Источник

Как происходит рендеринг кадра видеоигры

Рендеринг что это такое в играх. ec4be7574f1a4d44bbf34bf1f75914df. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-ec4be7574f1a4d44bbf34bf1f75914df. картинка Рендеринг что это такое в играх. картинка ec4be7574f1a4d44bbf34bf1f75914df. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!Deus Ex Human Revolution — это компьютерная игра 2011 года, которая является более успешным продолжением оригинальной Deus Ex, чем Invisible War. Но этот пост не о качестве игры, а о демонстрации её технических принципов. Адриан Курреж провёл несколько часов за реверс-инжинирингом, пытаясь понять с помощью инструмента Renderdoc, как происходит обработка каждого из кадров Human Revolution. Затем Адриан изложил результаты в своём блоге.

Игра построена на основе модифицированного проприетарного движка Crystal от компании Crystal Dynamics. Human Revolution была одной из первых игр, которая использовала 11 версию DirectX. На момент выхода уровень графики был на отличном уровне, похождения Адама Дженсена по вентиляционным каналам неплохо смотрятся и сейчас. При этом игра была не слишком требовательной к аппаратной составляющей компьютера.

На первый взгляд может показаться, что Human Revolution использует технику рендеринга Forward+. Но популяризация этого метода случилась куда позже выхода игры, и «Человеческая революция» обходится схемой Light Pre-Pass.

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

Рендеринг что это такое в играх. 57d0733a6b324670a9ac11c013e804c4. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-57d0733a6b324670a9ac11c013e804c4. картинка Рендеринг что это такое в играх. картинка 57d0733a6b324670a9ac11c013e804c4. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Карта нормалей, готово 10 %

Рендеринг что это такое в играх. bc6cd4f3392b4521a8b8026b3125db7a. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-bc6cd4f3392b4521a8b8026b3125db7a. картинка Рендеринг что это такое в играх. картинка bc6cd4f3392b4521a8b8026b3125db7a. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Карта нормалей, готово 40 %

Рендеринг что это такое в играх. 1717919264894a779f6be5292c021d1c. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-1717919264894a779f6be5292c021d1c. картинка Рендеринг что это такое в играх. картинка 1717919264894a779f6be5292c021d1c. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Карта нормалей, готово 70 %

Одновременно происходит рендеринг карты глубин. Всего для производства обеих компонент потребовалось 166 вызовов отрисовки.

Рендеринг что это такое в играх. f8298ab652674f6788516385a5084eec. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-f8298ab652674f6788516385a5084eec. картинка Рендеринг что это такое в играх. картинка f8298ab652674f6788516385a5084eec. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Тени генерируются с помощью Parallel-Split Shadow Maps. Каждая из теней рендерится единожды для каждого из источников света, которые могут при взаимодействии с объектами создавать тень. В данной сцене таких источников два: один в офисе справа, другой на вершине скульптуры-руки. Каждая из карт теней представляет из себя квадрат 1024×1024 внутри текстуры 4096×3072.

Рендеринг что это такое в играх. 281e359a90384911a1cfb05df0dd717e. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-281e359a90384911a1cfb05df0dd717e. картинка Рендеринг что это такое в играх. картинка 281e359a90384911a1cfb05df0dd717e. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Мелкие объекты пропускаются, возможно, часть невидимых для источника света не учитывается, поэтому этот проход требует всего 52 вызова отрисовки. Карты теней и карта глубин собираются для создания текстуры маски теней. Читается каждый тексель из карты глубин, и его видимость считается для каждого из источников света. Конечный результат выдаётся в 8-битной текстуре RGBA, которая работает как маска. Значение по умолчанию — белый цвет (1, 1, 1, 1), которое означает, что тексель ничем не затемнён. Если тексель попадает в тень какого-либо источника света, то отвечающий за него байт приравнивается нулю. Так можно обрабатывать 4 источника света.

Конечно, использовать байт для хранения только единицы и нуля слишком затратно, поэтому во время этого прохода также выполняется percentage close filtering (PCF), и в этих байтах хранится значение между 0 и 1, а не только крайние значения. Это нужно, чтобы края теней имели плавные переходы.

Рендеринг что это такое в играх. 9aecd14bfe194a3bac11a288fd72462f. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-9aecd14bfe194a3bac11a288fd72462f. картинка Рендеринг что это такое в играх. картинка 9aecd14bfe194a3bac11a288fd72462f. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

По буферу глубины создаётся карта преграждения окружающего света в экранном пространстве (Screen Space Ambient Occlusion, SSAO). Если видеоускоритель поддерживает DirectX 11, то шейдером создаётся размытие с ядром 19×19. На старых карточках это делается пиксельным шейдером.

Рендеринг что это такое в играх. 2fb5b96baf6c4248954de2f328224cc8. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-2fb5b96baf6c4248954de2f328224cc8. картинка Рендеринг что это такое в играх. картинка 2fb5b96baf6c4248954de2f328224cc8. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
SSAO, первый проход

Рендеринг что это такое в играх. ba2183d93a144d1786d722de72542a06. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-ba2183d93a144d1786d722de72542a06. картинка Рендеринг что это такое в играх. картинка ba2183d93a144d1786d722de72542a06. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Конечный результат с размытием

После генерации значение текстуры SSAO хранится в альфа-канале карты нормалей.

Рендеринг что это такое в играх. 60a09b8a07ba4e8a8014ac26764f8278. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-60a09b8a07ba4e8a8014ac26764f8278. картинка Рендеринг что это такое в играх. картинка 60a09b8a07ba4e8a8014ac26764f8278. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Каждый из точечных источников света обрабатывается по одному. Используется только карта нормалей с SSAO и буфер глубины. Эффект на пиксели зависит только от радиуса света и интенсивности. На этой стадии отражение света различными материалами пока неважно, карта освещения показывает, сколько и какого цвета потенциально отражается. Реальные отражения будут посчитаны позже на основе характеристик материалов. В конкретно этой сцене 45 точечных источников света.

Наконец происходит «реальный» рендеринг, в котором выводится сетка каждого объекта. Цвет каждого пикселя определяется картой нормалей и данными SSAO, масками теней и картами теней, картой освещения, текстурами объектов и свойствами материалов, иногда также используется карта для улучшения отражений. Сначала рендерятся непрозрачные объекты. При рендере используются данные буфера глубины, полученные при составлении карты нормалей.

Затем добавляются декали (таблички на стенах, следы от пуль), прозрачные объекты (стекла в окнах) и искусственные объёмные эффекты освещения.

Рендеринг что это такое в играх. c173cfccca384e9a86c234541d171c5d. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-c173cfccca384e9a86c234541d171c5d. картинка Рендеринг что это такое в играх. картинка c173cfccca384e9a86c234541d171c5d. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Добавлены прозрачные объекты и декали

Рендеринг что это такое в играх. 510e5dcff8814880b93d594eb8d3e24c. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-510e5dcff8814880b93d594eb8d3e24c. картинка Рендеринг что это такое в играх. картинка 510e5dcff8814880b93d594eb8d3e24c. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Добавлены эффекты освещения

Эффекты освещения являются группой спрайтов, которые отрендерены в 3D. Это не просто плоские объекты, постоянно обращённые к камере, это двадцатигранники специального масштаба. Свечение обсчитывается полностью процедурно.

Рендеринг что это такое в играх. a7cc499ce850476497ca9ad9fe5a9541. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-a7cc499ce850476497ca9ad9fe5a9541. картинка Рендеринг что это такое в играх. картинка a7cc499ce850476497ca9ad9fe5a9541. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Рендер непрозрачных и прозрачных объектов был выполнен с помощью 253 вызовов отрисовки.

Для добавления эффекта засвечивания bloom нужно знать, какие области очень яркие. Human Revolution использует LDR, буфера HDR нет. При предыдущем проходе в альфа-канал передавались данные по интенсивности.

Рендеринг что это такое в играх. 570e8d8972454503966ec914ef57de97. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-570e8d8972454503966ec914ef57de97. картинка Рендеринг что это такое в играх. картинка 570e8d8972454503966ec914ef57de97. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Важной составляющей является сглаживание, иначе изображение будет выглядеть плохо из-за «лесенок» границ. Human Revolution поддерживает множество методов: DLAA, MLAA, FXAA и так далее. В примере Адриана используется FXAA.

Рендеринг что это такое в играх. eec39be21f5e4f3fbb051cd847843ec1. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-eec39be21f5e4f3fbb051cd847843ec1. картинка Рендеринг что это такое в играх. картинка eec39be21f5e4f3fbb051cd847843ec1. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Результат применения FXAA

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

Рендеринг что это такое в играх. acb3fc525b674a768a7a79df39413382. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-acb3fc525b674a768a7a79df39413382. картинка Рендеринг что это такое в играх. картинка acb3fc525b674a768a7a79df39413382. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
До коррекции цвета

Рендеринг что это такое в играх. dce6fbee83424fcd85233a851378cc27. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-dce6fbee83424fcd85233a851378cc27. картинка Рендеринг что это такое в играх. картинка dce6fbee83424fcd85233a851378cc27. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
После коррекции цвета

Самым последним шагом является добавление пользовательского интерфейса. Это достигается за 317 вызовов отрисовки. Затем изображение выводится на экран. Всего за секунду рендеринг происходит несколько десятков раз. Комфортным считается значение в 60 кадров в секунду и выше, хотя некоторые предпочитают обходиться тридцатью.

Рендеринг что это такое в играх. 114eaeb6dac14eb993a3cc4c8ea86764. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-114eaeb6dac14eb993a3cc4c8ea86764. картинка Рендеринг что это такое в играх. картинка 114eaeb6dac14eb993a3cc4c8ea86764. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Вот соотношение времени, которое требуется для выполнения каждого из шагов.

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Но есть и другие интересные детали. В катсценах и диалогах используется эффект глубины резкости (Depth of Field, DoF), когда элементы не в фокусе размыты.

Рендеринг что это такое в играх. c13b030555e64f44b99581c78e03f51e. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-c13b030555e64f44b99581c78e03f51e. картинка Рендеринг что это такое в играх. картинка c13b030555e64f44b99581c78e03f51e. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Изображение оригинальной сцены уменьшается в два раза

Рендеринг что это такое в играх. bc989a8e78da4b0b9e583074616729fe. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-bc989a8e78da4b0b9e583074616729fe. картинка Рендеринг что это такое в играх. картинка bc989a8e78da4b0b9e583074616729fe. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Горизонтальное размытие

Рендеринг что это такое в играх. 94a1c12ae515420bbc7819951e2970a7. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-94a1c12ae515420bbc7819951e2970a7. картинка Рендеринг что это такое в играх. картинка 94a1c12ae515420bbc7819951e2970a7. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Вертикальное размытие

Рендеринг что это такое в играх. 313233eeb2b24beda97266fd6240ad72. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-313233eeb2b24beda97266fd6240ad72. картинка Рендеринг что это такое в играх. картинка 313233eeb2b24beda97266fd6240ad72. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Готовый результат на экране пользователя. В зависимости от карты глубин пиксельный шейдер будет использовать либо части размытого изображения, либо оригинальное без размытия.

В Human Revolution неплохой эффект силуэта. Это подсветка интерактивных элементов игрового пространства, в конкретном случае золотой обводкой выделяется один объект, с которым игрок может взаимодействовать. В некоторых играх этот эффект реализован примитивно, к примеру, силуэт может отрисовываться уже после рендера всей сцены. Но в Human Revolution силуэт рисуется таким образом, что любой посторонний объект перед подсвечиваемым тоже обводится. В примере, который привёл Адриан, жёлтая линия описывает не только форму мусорного контейнера, но и проходит по фигуре полицейского.

Этот эффект достигается с помощью простого трюка. Информация о пикселях объекта, с которым можно взаимодействовать, хранится в альфа-канале карты освещения.

Рендеринг что это такое в играх. a23e1eefbc684555846303f2a2cdbafd. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-a23e1eefbc684555846303f2a2cdbafd. картинка Рендеринг что это такое в играх. картинка a23e1eefbc684555846303f2a2cdbafd. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Рендеринг что это такое в играх. 6926885b01d843c0a76ccdf1329b8d04. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-6926885b01d843c0a76ccdf1329b8d04. картинка Рендеринг что это такое в играх. картинка 6926885b01d843c0a76ccdf1329b8d04. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Это вся информация, которая нужна для отрисовки. После рендера сцены и до добавления эффекта bloom выполняется дополнительный проход. Пикселям подсвечиваемого объекта придаётся желтоватый оттенок, на них добавляется узор из треугольников, а границы силуэта обводятся с помощью некоторого подобия оператора Собеля. Позже к обводке добавляется эффект засвечивания bloom.

Источник

Как работает рендеринг 3D-игр: обработка вершин

Рендеринг что это такое в играх. 070e30bd57f6af2d7c1e36abe15f949b. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-070e30bd57f6af2d7c1e36abe15f949b. картинка Рендеринг что это такое в играх. картинка 070e30bd57f6af2d7c1e36abe15f949b. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

В этом посте мы рассмотрим этап работы с вершинами. То есть нам придётся снова достать учебники по математике и вспомнить линейную алгебру, матрицы и тригонометрию. Ура!

Мы выясним, как преобразуются 3D-модели и учитываются источники освещения. Также мы подробно объясним разницу между вершинными и геометрическими шейдерами, и вы узнаете, на каком этапе находится место для тесселяции. Чтобы облегчить понимание, мы используем схемы и примеры кода, демонстрирующие, как в игре выполняются вычисления и обрабатываются значения.

На скриншоте в начале поста показана игра GTA V в каркасном (wireframe) режиме отображения. Сравните её с намного менее сложным каркасным отображением Half-Life 2. Изображения созданы thalixte при помощи ReShade.

Рендеринг что это такое в играх. 4c45627ee9916f0bcdce6858b510b6a6. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-4c45627ee9916f0bcdce6858b510b6a6. картинка Рендеринг что это такое в играх. картинка 4c45627ee9916f0bcdce6858b510b6a6. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Что такое точка?

В мире математики точка — это просто место в геометрическом пространстве. Нет ничего меньше точки, она не имеет размера, поэтому точки можно использовать для точного задания местоположения начала и конца таких объектов, как отрезки прямых, плоскости и объёмы.

Для 3D-графики такая информация критически важна, от неё зависит внешний вид всего, потому что все объекты отображаются как наборы отрезков прямых, плоскостей и т.п. На изображении ниже показан скриншот из игры Bethesda 2015 года Fallout 4:

Рендеринг что это такое в играх. 87b33cf825a8ed9d87b7c8a7cc873e69. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-87b33cf825a8ed9d87b7c8a7cc873e69. картинка Рендеринг что это такое в играх. картинка 87b33cf825a8ed9d87b7c8a7cc873e69. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Рендеринг что это такое в играх. 4308a0f6729ff459c600275d8755f12c. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-4308a0f6729ff459c600275d8755f12c. картинка Рендеринг что это такое в играх. картинка 4308a0f6729ff459c600275d8755f12c. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Каждая точка в начале и конце каждой линии обработана выполнением целой кучи вычислений. Некоторые вычисления очень просты и быстры, другие намного сложнее. Обрабатывая точки группами, особенно в виде треугольников, можно добиться значительного роста производительности, поэтому давайте внимательнее приглядимся к ним.

Что же нужно для треугольника?

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Далее мы можем добавить ещё две вершины, чтобы образовать треугольник:

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Учтите, что показанные линии не обязательны — мы можем задать точки и сказать системе, что эти три вершины образуют треугольник. Все данные вершин хранятся в непрерывном блоке памяти, который называется буфером вершин (vertex buffer); информация об образуемой ими фигуре или закодирована непосредственно в программе рендеринга, или хранится в ещё одном блоке памяти, называемом буфером индексов (index buffer).

Если информация закодирована в программе рендеринга, то различные фигуры, которые могут образованы вершинами, называются примитивами. Direct3D предлагает использовать для них список (list), полосы (strips) и «вееры» (fans) в форме точек, линий и треугольников. При правильном использовании полосы треугольников используют вершины более чем для одного треугольника, что позволяет повысить производительность. В показанном ниже примере мы видим, что для создания соединённых вместе двух треугольников нужно всего четыре вершины — если они разделены, то нам понадобится шесть вершин.

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Слева направо: список точек, список линий и полоса треугольников

Если нам нужно обрабатывать больший набор вершин, например, в модели игрового NPC, то лучше использовать объект под названием меш (mesh) — ещё один блок памяти, но состоящий из нескольких буферов (вершин, индексов и т.д.) и ресурсов текстур модели. В онлайн-документации Microsoft есть краткое объяснение того, как использовать эти буферы.

Пока давайте сосредоточимся на том, что происходит с этими вершинами в 3D-игре при рендеринге каждого нового кадра. Если вкратце, то с ними выполняется одна из двух операций:

На сцене появляется вектор

Представьте, что у вас на экране есть треугольник и вы нажимаете клавишу, чтобы переместить его влево. Естественно, мы ожидаем, что числа (x, y, z) каждой вершины будут соответствующим образом меняться; так и происходит, однако довольно неожиданно выглядит способ реализации изменений. Вместо простого изменения координат подавляющее большинство систем рендеринга 3D-графики использует особый математический инструмент: мы имеем в виду векторы.

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

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Заметьте, что синяя стрелка начинается в одном месте (в данном случае это точка начала координат (origin)) и растягивается до вершины. Для задания вектора мы использовали запись в столбец, но вполне можно применять и запись в строку. Вы могли заметить, что есть ещё одно, четвёртое, значение, обычно называемое w-компонентом. Оно используется для того, чтобы показать, что обозначает вектор: позицию точки (вектор позиции) или общее направление (вектор направления). В случае вектора направления это будет выглядеть следующим образом:

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Этот вектор указывает в том же направлении и имеет ту же длину, что и предыдущий вектор позиции, то есть значения (x, y, z) будут такими же; однако w-компонент равен не 1, а нулю. Применение векторов направлений мы объясним позже, а пока запомните тот факт, что все вершины в 3D-сцене будут описываться таким образом. Почему? Потому что в таком формате гораздо проще их перемещать.

Математика, математика, и ещё раз математика

Вспомним, что у нас есть простой треугольник и мы хотим переместить его влево. Каждая вершина описывается вектором позиции, поэтому «математика перемещения» (называемая преобразованиями) должна работать с этими векторами. Появляется новый инструмент: матрицы (matrices) (matrix в единственном числе). Это массив значений, записанный в формате, похожем на электронную таблицу Excel, со строками и столбцами.

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

Перемещение вершины в 3D-пространстве называется переносом (translation) и для него требуется следующий расчёт:

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

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

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Это преобразование поворачивает вершину вокруг оси z в плоскости XY

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

А это используется, если нужно изменить масштаб фигуры

Мы можем воспользоваться графическим инструментом на основе WebGL с сайта Real-Time Rendering, чтобы визуализировать эти вычисления для всей фигуры. Давайте начнём с прямоугольного параллелепипеда в стандартной позиции:

Рендеринг что это такое в играх. 2205d73d2920758e3fb11f6829cb924d. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-2205d73d2920758e3fb11f6829cb924d. картинка Рендеринг что это такое в играх. картинка 2205d73d2920758e3fb11f6829cb924d. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

В этом онлайн-инструменте model point является вектором позиции, world matrix — матрицей преобразования, а world-space point — вектором позиции для преобразованной вершины.

Давайте применим к параллелепипеду различные преобразования:

Рендеринг что это такое в играх. 820d7b5d618f68de9446d0ee005a50da. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-820d7b5d618f68de9446d0ee005a50da. картинка Рендеринг что это такое в играх. картинка 820d7b5d618f68de9446d0ee005a50da. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

На показанном выше изображении фигура была перенесена на 5 единиц по каждом из осей. Эти значения можно видеть в последнем столбце средней большой матрицы. Исходный вектор позиции (4, 5, 3, 1) остаётся таким же, как и должен, но преобразованная вершина теперь перенесена в (9, 10, 8, 1).

Рендеринг что это такое в играх. 9a18c46fd6df9936f3632fd4e4b2a287. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-9a18c46fd6df9936f3632fd4e4b2a287. картинка Рендеринг что это такое в играх. картинка 9a18c46fd6df9936f3632fd4e4b2a287. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

В это преобразовании всё было отмасштабировано на коэффициент 2: теперь стороны параллелепипеда стали в два раза длинее. Наконец, посмотрим на пример поворота:

Рендеринг что это такое в играх. 21cbeb3409b55b736d2dd1322a1d80b0. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-21cbeb3409b55b736d2dd1322a1d80b0. картинка Рендеринг что это такое в играх. картинка 21cbeb3409b55b736d2dd1322a1d80b0. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Параллелепипед был повёрнут на угол 45°, но в матрице используются синус и косинус этого угла. Проверив на научном калькуляторе, мы можем увидеть, что sin(45°) = 0.7071. что округляется до показанного значения 0.71. Тот же ответ мы получим для значения косинуса.

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

Мощь вершинного шейдера

На этом этапе нам нужно уяснить, что всем этим занимаются люди, программирующие код рендеринга. Если разработчик игр использует сторонний движок (например, Unity или Unreal), то всё это уже сделано за него; но если кто-то делает свой движок с нуля, то ему придётся выполнять все эти вычисления с вершинами.

Но как всё это выглядит с точки зрения кода?

Чтобы понять это, мы воспользуемся примерами с потрясающего веб-сайта Braynzar Soft. Если вы хотите самостоятельно начать работу с 3D-программированием, то это подходящее место для изучения основ, а также более сложных вещей…

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Это пример преобразования «всё в одном». Он создаёт соответствующие матрицы преобразования на основании ввода с клавиатуры, а затем применяет их к исходному вектору позиции за одну операцию. Заметьте, что это всегда выполняется в заданном порядке (масштабирование — поворот — перенос), потому что любой другой способ совершенно испортит результат.

Такие блоки кода называются вершинными шейдерами (vertex shaders), их сложность и размер могут варьироваться в огромных масштабах. Показанный выше пример прост, это только вершинный шейдер, не использующий полной программируемой природы шейдеров. Более сложная последовательность шейдеров могла бы преобразовывать объекты в 3D-пространстве, обрабатывать их внешний вид с точки зрения камеры сцены, а затем передавать данные на следующий этапе процесса рендеринга. Рассматривая порядок обработки вершин, мы изучим и другие примеры.

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

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

Рендеринг что это такое в играх. 9541d1c150a6ef926d98449addf51206. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-9541d1c150a6ef926d98449addf51206. картинка Рендеринг что это такое в играх. картинка 9541d1c150a6ef926d98449addf51206. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Одним из первых процессоров, имеющих собственное аппаратное ускорение данного процесса, был Nvidia GeForce, выпущенный в 2000 году, и эту функциональность назвали Hardware Transform and Lighting (сокращённо Hardware TnL). Процессы, которые могло обрабатывать это оборудование, были очень ограниченными с точки зрения команд, но с выходом новых чипов ситуация быстро менялась. Сегодня не существует отдельного оборудования для обработки вершин и одно устройство занимается всем сразу: точками, примитивами, пикселями, текстурами и т.д.

К слову, об освещении (lighting): стоит заметить, что мы видим всё благодаря свету, поэтому давайте посмотрим, как его можно обрабатывать на этапе вершин. Для этого нам нужно воспользоваться тем, о чём мы говорили ранее.

Свет, камера, мотор!

Представьте такую картину: игрок стоит в тёмной комнате, освещённой одним источником света справа. В середине комнаты висит огромный чайник. Возможно, для этого вам понадобится помощь, поэтому давайте воспользуемся веб-сайтом Real-Time Rendering, и увидим, как это будет выглядеть:

Рендеринг что это такое в играх. b1a6a45f47e81bec587c4f7bda1bf3ae. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-b1a6a45f47e81bec587c4f7bda1bf3ae. картинка Рендеринг что это такое в играх. картинка b1a6a45f47e81bec587c4f7bda1bf3ae. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Не забывайте, что этот объект является набором соединённых вместе плоских треугольников; то есть плоскость каждого треугольника будет направлена в определённую сторону. Некоторые из них направлены в сторону камеры, некоторые — в другую, некоторые будут искажены. Свет от источника падает на каждую плоскость и отражается от неё под определённым углом.

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

Начнём с того, что нам нужно узнать, куда направлена каждая плоскость, и для этого нам потребуется вектор нормали (normal vector) плоскости. Это ещё одна стрелка, но в отличие от вектора позиции, её размер не важен (на самом деле после вычисления масштаб векторов нормалей всегда уменьшается чтобы они имели длину 1), и она всегда направлена перпендикулярно (под прямым углом) к плоскости.

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Получив нормаль к поверхности, можно начать учитывать источник освещения и камеру. В 3D-рендеринге источники освещения могут быть разного типа, но в этой статье мы будем рассматривать только направленные источники, например, прожекторы. Как и плоскость треугольника, прожектор и камера будут указывать в определённом направлении, примерно так:

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Гладкая металлическая поверхность будет отражать почти весь падающий свет под тем углом, под которым он упал, и едва изменит цвет объекта. Шероховатый матовый материал рассеивает свет менее предсказуемым образом и немного меняет цвет. Чтобы учесть это, нужно добавить вершинам дополнительные значения:

Рендеринг что это такое в играх. 627648a213ed357982314f7ed7fdd915. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-627648a213ed357982314f7ed7fdd915. картинка Рендеринг что это такое в играх. картинка 627648a213ed357982314f7ed7fdd915. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Один направленный источник освещения освещает множество различных материалов из демо Nvidia

Мы опустили многие подробные детали, и на то есть уважительная причина: откройте любой учебник по 3D-рендерингу, и вы увидите, что этому процессу посвящены целые главы. Однако в современных играх основная часть всех вычислений освещения и эффектов материалов выполняется на этапе обработки пикселей, поэтому мы вернёмся к ним в следующей статье.

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Пример кода B. Anguelov, показывающий, как в вершинном шейдере можно обрабатывать модель отражения света по Фонгу.

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

Пожалуйста, сэр, мне хочется ещё (треугольников)

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

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

Чтобы посмотреть на это в действии, мы воспользуемся инструментом бенчмарка Heaven движка Unigine, потому что он позволяет нам применять к используемым в тесте моделям различные величины тесселяции.

Рендеринг что это такое в играх. d116305fd0fa789635bc3631a4463829. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-d116305fd0fa789635bc3631a4463829. картинка Рендеринг что это такое в играх. картинка d116305fd0fa789635bc3631a4463829. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Для начала давайте возьмём место в бенчмарке и изучим его без применения тесселяции. Заметьте, что булыжники на земле выглядят очень неестественными — использованная текстура эффективна, но кажется неправильной. Давайте применим к сцене тесселяцию: движок Unigine применяет её только к отдельным частям, но различие будет значительным.

Рендеринг что это такое в играх. e1c8fb3998d448711164832c4b3af2ff. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-e1c8fb3998d448711164832c4b3af2ff. картинка Рендеринг что это такое в играх. картинка e1c8fb3998d448711164832c4b3af2ff. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Земля, края зданий и дверь выглядят намного реалистичнее. Мы можем увидеть, как это было достигнуто, запустив процесс заново, но на этот раз с выделением всех примитивов (то есть в режиме wireframe):

Рендеринг что это такое в играх. 0c2691fec046708d4c65058ed3cec016. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-0c2691fec046708d4c65058ed3cec016. картинка Рендеринг что это такое в играх. картинка 0c2691fec046708d4c65058ed3cec016. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Чётко видно, почему земля выглядит так странно — она совершенно плоская! Дверь сливается со стенами, а края здания представляют собой простые параллелепипеды.

В Direct3D примитивы можно разделить на группу из более мелких частей (этот процесс называется подразделением (sub-division)), выполнив трёхэтапный процесс. Сначала программисты пишут шейдер поверхности (hull shader) — по сути, этот код создаёт структуру под названием патч геометрии (geometry patch). Можно воспринимать её как карту, сообщающую процессору, где внутри начального примитива будут появляться новые точки и линии.

Затем блок-тесселятор внутри графического процессора применяет этот патч к примитиву. В конце выполняется доменный шейдер (domain shader), вычисляющий позиции всех новых вершин. Эти данные при необходимости можно передать обратно в буфер вершин, чтобы можно было заново выполнить вычисления освещения, но на этот раз с более качественными результатами.

Как же это выглядит? Давайте запустим каркасную версию тесселированной сцены:

Рендеринг что это такое в играх. 3c0ca95af3ce89f1ae854706dfd04adc. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-3c0ca95af3ce89f1ae854706dfd04adc. картинка Рендеринг что это такое в играх. картинка 3c0ca95af3ce89f1ae854706dfd04adc. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

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

Давайте посмотрим, как это может выглядеть с точки зрения кода Direct3D; для этого мы используем пример с ещё одного замечательного веб-сайта, RasterTek.

Вот простой зелёный треугольник, тесселированный на множество крошечных треугольничков…

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

«Железо» этого не выдержит!

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

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

Рендеринг что это такое в играх. 60297df09a132ab07b00140fa2a07b77. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-60297df09a132ab07b00140fa2a07b77. картинка Рендеринг что это такое в играх. картинка 60297df09a132ab07b00140fa2a07b77. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

UL Benchmark’s 3DMark Vantage — геометрические шейдеры обрабатывают частицы и флаги

Direct3D, как и все современные графические API, позволяет выполнять с вершинами большое множество вычислений. Готовые данные могут быть или переданы на следующий этап процесса рендеринга (растеризацию), или вернуться в пул памяти для повторной обработки или считывания центральным процессором для других целей. Как сказано в документации Microsoft по Direct3D, это можно реализовать как поток данных:

Рендеринг что это такое в играх. image loader. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-image loader. картинка Рендеринг что это такое в играх. картинка image loader. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

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

Обработка вершин — это критически важная часть рендеринга, потому что она определяет, как будет выглядеть сцена с точки зрения камеры. В современных играх для построения миров могут использоваться миллионы треугольников, и каждая из этих вершин каким-то образом преобразуется и освещается.

Рендеринг что это такое в играх. bdd760829e81753b4938fd8ff3076b6d. Рендеринг что это такое в играх фото. Рендеринг что это такое в играх-bdd760829e81753b4938fd8ff3076b6d. картинка Рендеринг что это такое в играх. картинка bdd760829e81753b4938fd8ff3076b6d. В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!

Треугольники. Их миллионы.

Обработка всех этих вычислений и математики может показаться логистическим кошмаром, но графические процессоры (GPU) и API разрабатываются с учётом всего этого — представьте идеально работающую фабрику, пропускающую через производственный конвейер по одному изделию за раз.

Опытные программисты рендеринга 3D-игр имеют фундаментальные знания в области математики и физики; они используют все возможные трюки и инструменты для оптимизации операций, сжимая этап обработки вершин всего до нескольких миллисекунд. А ведь это только самое начало построения 3D-кадра — следующим идёт этап растеризации, затем чрезвычайно сложная обработка пикселей и текстур, и уже потом изображение попадает на монитор.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *