The Witcher 3: Wild Hunt. Руководство по настройкам. Тестирование производительности

В игре присутствует раздел эффектов постобработки. Практически все параметры имеют два состояния — эффект включен или выключен. Сюда же вынесены настройки режима глобального затенения. На нем остановимся подробнее.

По умолчанию игра всегда предлагает режим SSAO. По желанию можно переключиться на HBAO+. Есть возможность полного отключения Ambient Occlusion. Как меняется изображение в каждом из режимов, показано ниже.

Тестирование в The Witcher 3: Wild HuntТестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild HuntТестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild HuntТестирование в The Witcher 3: Wild Hunt

В первой сцене, на рынке, мы видим, что SSAO делает общую картинку темнее из-за более насыщенных теней в сравнении с HBAO+. Это наиболее заметно по теням на стенах и под навесом торговых лотков. Полное отключение AO приводит к исчезновению полутеней и влияния объектов друг на друга. Во второй сцене ситуация иная. При HBAO+ у травы и кустов есть насыщенные тени, что выделяет их и придает объема всей картинке. С SSAO тени выражены слабее. Обратите еще внимание, как равномерно затенен склон бугра в левой части кадра и полностью отсутствуют тени от камней у его основания. С HBAO+ сам склон светлее, а тени от куста и камней более насыщенные. Без AO вообще нет никаких полутеней и теней от растительности на земле. В итоге трава сливается в одну зеленую массу — привлекательность итоговой картинки сильно страдает.

В итоге мы строго рекомендуем задействовать один из режимов AO. И после сравнения скриншотов видно, что наиболее привлекательная картинка, где растительность обретает максимум объема, обеспечивается с HBAO+. В этом режиме AO влияние объектов друг на друга учитывается наиболее полно. Это отчасти видно и по первой сравнительной сцене, где SSAO вроде бы дает более насыщенные тени. Если вы обратите внимание на лоток в центре кадра, то увидите небольшое затенение под бочкой и легкое затенение на бочке от соседнего ящика. Таких деталей при SSAO нет. Или обратите внимание на телегу слева. С HBAO+ освещенная сторона ярче, а вся нижняя часть колеса при этом темнее. В HBAO+ явно учитывается больше факторов для формирования итоговой картины затенения.

Тестирование в The Witcher 3: Wild Hunt

HBAO+ является и самым ресурсоемким режимом. SSAO позволяет выиграть несколько процентов производительности. Без AO производительность еще выше.

Постобработка

Теперь бегло рассмотрим особенности остальных параметров раздела постобработки и в конце взглянем, как они сказываются на производительности.

Параметры «Размытие» и «Размытие в движении» (Blur и Motion Blur) влияют на смазывание картинки при резких движениях. Это придает небольшой кинематографичный эффект и усиливает ощущение скорости.

Тестирование в The Witcher 3: Wild Hunt

Игра использует свой метод «сглаживания» при помощи постобработки наподобие FXAA и другим подобным методам.

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

Сглаживании нейтрализует лесенки и ступеньки на границах объектов, но немного теряется четкость деталей. Компенсировать это позволяет параметр «Повышенная четкость», который за счет обработки особыми фильтрами усиливает или ослабляет резкость изображения (Sharpen).

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

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

Эффект «Глубины кадра» (Depth of Field) немного размывает дальний план, позволяя достичь более естественного восприятия общей панорамы.

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

«Хроматическая абберация» (Chromatic Aberration) придает соответствующий фотоэффект. Трудно назвать его полезным, ведь он вносит небольшие искажения — боковые части изображения оказываются слегка не в фокусе. Но поскольку мы привыкли к фото- и видеоматериалам с такими визуальными особенностями, то это придает определенный ассоциативный эффект, позволяя улучшить субъективное восприятие игры. На эффект субъективного восприятие опирается и «Виньетирование» (Vignette), которое затемняет боковые области.

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

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

В конце мы поговорим о влиянии двух параметров, заметно влияющих на итоговую картинку при определенном освещении. Это «Свечение» (Bloom) и «Световые шахты» (Light Shafts). Второй параметр при своем непонятном названии отвечает за формирование объемных лучей света. «Свечение» усиливает эффект ярких огней и формирует блики на поверхностях.

Лучше всего лучи света проявляются в динамике, когда мы проезжаем через заросли или лес. Но даже, если явных лучей нет, параметр оказывает существенное влияние на общую картинку. Возьмем для примера кадр из прошлого сравнения, когда включены все эффекты, в том числе Bloom и Light Shafts.

Тестирование в The Witcher 3: Wild Hunt

Тестирование в The Witcher 3: Wild Hunt

Отключение эффекта «Свечение» сразу делает изображение более темным и мрачным, словно солнце скрыто тучами в пасмурный день.

Тестирование в The Witcher 3: Wild Hunt

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

Ну и в конце приведем этот же кадр при отключении обоих эффектов.

Тестирование в The Witcher 3: Wild Hunt

Выводы очевидны. Не рекомендуется отключать «Свечение» и «Световые шахты». Это может быть крайней мерой лишь на слабых видеокартах.

Ну а теперь рассмотрим влияние на производительность. За основу берем результаты GeForce GTX 960 при Ultra-качестве и поочередно отключаем один эффект, не трогая остальные.

Тестирование в The Witcher 3: Wild Hunt

Наиболее заметен эффект от отключения сглаживания, производительность поднимается на 3–5%. Чуть более процента удается выиграть при отключении одного из вариантов размытия. Пару процентов «съедает» свечение. Влияние остальных эффектов более незначительное. При комплексном отключении разных эффектов итоговый прирост должен быть больше. Что мы сейчас и проверим на практике.

Сравнение производительности в нестандартных режимах

Возьмем три видеокарты среднего класса — GeForce GTX 960, GeForce GTX 770 и Radeon R9 280X. При разрешении 1920×1080 и Ultra-качестве без HairWoks они немного не дотягивают до рубежа в 30 fps.

Тестирование в The Witcher 3: Wild Hunt

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

Тестирование в The Witcher 3: Wild Hunt

Отключение второстепенных эффектов постобработки подняло производительность у всех участников на 7% и выше.

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

Тестирование в The Witcher 3: Wild Hunt

Получаем еще более существенный рост fps. При этом общая детализация не страдает. Хотя о полном комфорте говорить еще нельзя. Добиться идеального результата на тройке таких видеокарт позволит понижение дальности прорисовки растительности. Стоит отметить, что по мере изменения настроек лучше всех реагирует GeForce GTX 960, позволяя бюджетному новичку уверенно выйти в лидеры при снижении качества теней. Radeon R9 280X на это изменение реагирует наиболее вяло.

Выводы

Для того, чтобы получить максимум удовольствия от Witcher 3: Wild Hunt с максимальным качеством графики нужна мощная видеокарта последнего поколения. В разрешении 1920×1080 при всех параметрах на максимуме обеспечить полный комфорт может GeForce GTX 980. При 2K лучшим вариантом будет GeForce GTX 980 Ti, а для GeForce GTX 980 уже понадобится разгон. Radeon R9 290X уступает GeForce GTX 980, но по итогам сравнения можно предположить, что более новая версия в лице Radeon R9 390X будет почти сопоставима с конкурентом.

Если требуется поднять производительность без потери детализации, то можно начать с HairWoks — уменьшить сглаживание, отключить технологии для всех персонажей кроме Геральта или полностью ее деактивировать. Технология NVIDIA HairWoks дает определенные визуальные преимущества, но лучше пожертвовать ими, чем другими параметрами.

Среди основных графических настроек наиболее критичными для производительности являются качество теней и дальность прорисовки растительности. При этом первый пункт дает наименее заметные изменения в качестве изображения, различия между Ultra и High вообще трудно заметить. А вот дальность растительности заметно сказывается на общем впечатлении. Этот параметр можно использовать совместно с корректировкой качества (плотности) травы, что даст более заметный прирост для повышения быстродействия. Некоторые параметры вообще ни на что не влияют, например, регулировка качества рельефа. Крайне не рекомендуется уменьшать качество текстур. Игре вполне хватает 2 ГБ видеопамяти даже для самых тяжелых режимов. Понижение текстур оправдано лишь для самых простых видеокарт с минимальным объемом памяти. И даже с одним 1 ГБ памяти мы бы не рекомендовали двигать ползунок текстур ниже уровня «Высоко».

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

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

Как работает затенение в компьютерных играх

ЕгорЕгор Морозов | 25 Августа, 2017 — 15:21

occlusionexample.jpg

С появлением 3D-игр у их создателей серьезно прибавилось проблем: о сглаживании мы уже говорили, также мы говорили и о фильтрации текстур. Теперь же поговорим о еще одном эффекте, который позволяет серьезно улучшить реалистичность картинки — о Ambient Occlusion (AO), или о затенении.

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

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

Но тут возникает вопрос — а как это рассчитать-то? Увы — алгоритма, дающего 100% точное рассеяние света в real-time, нет, однако есть множество хорошо приближенных к реальности алгоритмов, отлаженных настолько, что они спокойно используются в видеоиграх.

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

Однако тут мы получаем очередную проблему — отрисовка геометрии происходит постепенно, поэтому заграждающий фактор также в процессе отрисовки может серьезно меняться. Можно, конечно, рассчитать AO на этапе загрузки сцены, но тогда затенение не коснется динамических объектов (персонажей, машин и т.д.) — а это нехорошо. И тут приходит идея использовать для отрисовки затенения экранное пространство (Screen Space), что в итоге выливается в простейший алгоритм AO — SSAO.

SSAO

Этот алгоритм появился еще в Crysis 10 лет назад. Его суть проста: после построения геометрии у нас остается Z-буфер, или буфер глубины, который включает в себя абсолютно всю информацию о геометрии сцены — а значит никаких проблем сделать AO нет.

Хотя, конечно, кого я обманываю — проблемы есть, и самая серьезная — недостаточная производительность современных видеокарт: для того, чтобы получить более-менее неплохую карту затенения, для каждого фрагмента сцены нужно обсчитывать порядка 200-250 направлений, что позволяет «закопать» любой GPU. Поэтому делается хитрее — используется 8-32 «луча», направленные на выбранный фрагмент сцены, которые каждый раз поворачиваются на случайное значение. В итоге получается терпимое качество картинки с не очень большими затратами на расчеты:

ssao3.jpg

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

HBAO и HBAO+

Nvidia не была бы Nvidia, если бы не стала развивать затенение дальше, представив в 2008 году HBAO — Horizon Based Ambient Occlusion. От SSAO это затенение отличалось тем, что оно основано на физической модели, где аппроксимируется интеграл освещенности фрагмента сцены со значениями выборки буфера глубины. Итоговое качество оказывается выше SSAO при большом числе выборок, но мы опять же упираемся в производительность. Поэтому HBAO рендерится обычно в более низком разрешении, что приводит к мерцанию картинки.

Проблема мерцания была исправлена в HBAO+ простым методом, который сейчас активно использует Sony в 4К играх на PlayStation 4 Pro: для рассчета HBAO+ используется шахматный рендеринг, то есть для обработки затенения используется часть предыдущего кадра и половина нового: это требует меньше затрат GPU, но при этом позволяет рендерить затенение в исходном разрешении, что и убирает мерцание.

hbao21.jpg

HDAO

AMD в стороне не остались, и стали использовать собственное затенение (которое, к слову, также работает и на Nvidia) — HDAO (High Definition AO). Увы — AMD не делится алгоритмом, однако известно, что в его основе лежит Gather4 — технология, которая собирает 4 текселя в один регистр. То есть, как и с HBAO, по сути происходит рендеринг в пониженном разрешении. В итоге, в среднем картинка с HBAO и HDAO сравнима по качеству, но опять же — все достаточно сильно зависит от игры: к примеру, в Far Cry 3 с HDAO трава выглядит красивее:

7d758ebb_1355517972SmtzmJYEeY_7_2_l.png

VXAO

С выходом DX12 Nvidia представила принципиально новое затенение — VXAO (Voxel Accelerated Ambient Occlusion). Его суть в том, что оно работает уже не с пикселями и текселями (то есть 2D-объектами), а с вокселями — аналогом пикселя в 3D. И теперь мы используем не Z-буфер, а воксельное построение сцены, поэтому алгоритм состоит из трех пунктов: вокселизация, постобработка вокселей и трассировка конуса. Вокселизация выполняется путем рендеринга треугольных сеток в трехмерную текстуру, и поэтому ее производительность сильно зависит от общего количества треугольников, размера этих треугольников и количества вызовов рисования, необходимых для их рендеринга. Постобработка объединяет проходы, такие как очистка, фильтрация и понижающие выборки вокселей, а ее производительность зависит от общего количества вокселей, созданных во время вокселизации. Типичное время после обработки составляет 0,5 — 1,5 мс. И, наконец, трассировка конуса выполняется в пространстве экрана, поэтому его производительность зависит от разрешения экрана и скорости затенения. Итоговое качество картинки оказывается в куда лучше, чем с HBAO+:

AO-HBAO-VXAO.jpg

На этом все. Советы для игроков простые: если компьютер хорошо тянет игру без AO, то можно попробовать включить SSAO или HBAO — обычно это снижает fps не более чем на 10%. Если же и с ними производительность отличная — можно попробовать HBAO+ и HDAO. Ну и для самых топовых видеокарт современности можно порекомендовать набирающее обороты VXAO — оно крайне требовательно к ресурсам (в том числе и к видеопамяти), поэтому даже в FHD оно будет доступно лишь пользователям старших Nvidia GTX 900ой и 1000ой линейки, а также владельцам старших AMD RX, Fury и Vega.

Фильтры, векторы и пиксели

После успеха Spacewar! человечество увидело потенциал в игровой индустрии. Однако первенство в рейтинге игровых устройств захватили отнюдь не компьютеры — в начале 1970-х их стоимость и габариты не позволяли создать массовый спрос. Но коммерсанты придумали альтернативу — аркадные автоматы. Они также стоили солидных денег, но были значительно компактнее и дешевле компьютеров. Их железо было заточено только под одну игру, поэтому для домашних развлечений устройства были не лучшим выбором. Однако владельцы баров и других общественных заведений, поставив такой автомат, могли развлечь посетителей и даже в теории заработать на этом.

Первые аркадные автоматы — Galaxy Game и Computer Space — вышли в 1971 году. Они были созданы на основе Spacewar! и практически полностью повторяли геймплей программы научных работников МТИ (хотя во второй игре появился одиночный режим — в оригинальной Spacewar! ИИ не было из-за ограниченной вычислительной мощности PDP-1). Однако коммерческого успеха новые игры не снискали.

Спустя год появилась и первая игровая консоль для домашнего использования — Magnavox Odyssey. Она была разработана ещё в 1966 году инженером Ральфом Баером, который до этого работал в оборонной промышленности, но только через шесть лет ему удалось найти инвестора для массового производства консоли. Её технические возможности были крайне ограничены: Magnavox Odyssey могла выводить только три движущихся объекта, два из которых управлялись манипуляторами, а один — алгоритмом.

Но даже с таким малым набором функций разработчики умудрились выпустить для консоли 28 игр. Всё дело в том, что изображение дополнялось полупрозрачными цветными фильтрами, которые приклеивались к экрану. На них были изображены поля для хоккея, футбола, гандбола, волейбола, баскетбола и даже гоночные трассы. Они-то и придавали происходящему на дисплее «смысл», превращая хаотичные перемещения объектов в спортивные игры.

Magnavox Odyssey разошлась тиражом более 350 тыс. устройств, однако с коммерческой точки зрения не стала успешной. Спустя несколько лет Magnavox прекратила производство Odyssey и была куплена голландской корпорацией Philips.

Всё, чем комплектовалась Magnavox Odyssey

Однако именно эта консоль вдохновила начинающего игрового разработчика Аллана Алькорна из Atari (кстати, компанию открыл производитель Computer Space) на создание аркадного автомата Pong, ставшего настоящим хитом. Эта игра впервые принесла создателям аркадных автоматов прибыль. Вскоре примеру Atari последовали и другие компании — Konami, Namco, Sega и так далее.

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

Альтернативой растровому принципу был векторный. При нём изображение формируется из простейших геометрических фигур (примитивов) — окружностей, прямых, дуг и так далее, — расположение которых описано в файле. Из-за этого векторные картинки легко масштабировались, а потому с их помощью можно было легко имитировать трёхмерность, создавая модельки из каркаса векторов и постепенно увеличивая или уменьшая их в реальном времени. Например, этот принцип был реализован в аркадном автомате Atari Red Baron 1980 года.

Векторная графика в Atari Red Baron

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

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

Screen-Space Ambient Occlusion.

Для получения действительно высококачественных изображений близких к реалистичным очень важно учитывать так называемое глобальное освещение (Global Illumination, GI) — рассеянное освещение падающее практически со всех сторон. Фактически любой объект рассеивает падающий на него свет и, таких образом, вносит свой вклад в освещение других объектов (и себя самого в том числе).

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

Поэтому возникает потребность в методе, способном достаточно эффективно моделировать такое рассеянное освещение, пусть и не с очень высокой степенью точности.

Традиционно в основных моделях освещения существует понятие фонового освещения, однако там оно рассматривается как некоторое равномерное, ничем не затеняемое освещение, падающее со всех сторон.

Ясно, что подобный подход для реальных сцен малоприменим. Однако существует его развитие, основанное на понятие Ambient Occlusion (AO, далее мы будем использовать термин затенение). Фактически Ambient Occlusion характеризует насколько данная точка закрыта близкорасположенными объектами (и, следовательно, как много рассеянного света она может получать).

Существует несколько вариантов Ambient Occlusion, но все они таки или иначе заключаются в определении того, какая часть полусферы, построенной вокруг заданной точки, закрыта близкорасположенными объектами (рис 1).

Рис 1. Разные случаи для «закрывания» окрестности точки.

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

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

Существует несколько вариантов определения самого понятия Ambient Occlusion. Самое простое из них заключается в том, что Ambient Occlusion — это доля полусферы, описанное вокруг точки, которая не закрыта близкорасположенными объектами:

Через S + здесь обозначена верхняя полусфера, описанная вокруг точки x, а функция V(x,y) принимает значение, равное единице тогда, кода точки x и y видны друг из друга (т.е. соединяющий их отрезок не пересекает никаких объектов). Иначе значение функции равно нулю.

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

Здесь для учета расстояния используется специальная функция, на которую накладываются следующие требования:

Простейшим примером такой функции является следующая:

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

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

При этом обычно в используется набор случайных направлений с равномерным распределением и мы получаем нахождение интеграла методом Монте-Карло. Однако подобный подход очень ресурсоемкий. Существует его GPU-аналог, успешно использующий возможности современных GPU.

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

Рис 2. Использование полукуба вместо полусферы.

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

Тем самым достаочно всего лишь 5 раз отрендерить окрестность каждой точки и осуществить еще один проход шейдера для вычисления затенения. Существует готовый пакет, предоставляющий такую возможность — Fast Ambient Occlusion Generator.

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

Помимо расчета самой затененности довольно часто рассчитывается и так называемая bent normal — среднее значение нормали по всем видимым («не заблокированным») направлениям (рис 3).

Рис 3. Bent normal для случаев с рис. 1.

Далее это значение может использоваться вместо обычной нормали при расчете освещенности позволяя учитывать затененность и при расчете непосредственного освещения. Таким образом достаточно хранить всего четыре числа для каждой вершины — Ambient Occlusion и три компоненты bent normal.

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

Читайте также: 

Одним из наиболее известных подобных методов является так называемое Screen-Space Ambient Occlusion (SSAO, иногда также используется термин ISAOImage Space Ambient Occlusion), впервые использованная в игре Crysis.

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

Для этого достаточно для каждого пиксела восстановить исходные трехмерные координаты соответствующей точки (в системе координат камеры) (xeye, yeye, zeye), после чего выбирается некоторая окрестность этой точки и в ней набор точек (xi, yi, zi),i=1. N. Далее для каждой из них можно проверить их видимость из (xeye, yeye, zeye) и получить приближенное значение затенения.

Рис 4. Нахождение затенения точки изображения по буферу глубины.

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

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

Рис 5. Не попавший в буфер глубины объект А может оказывать большое влияние на затенение точки Р (в отличии от закрывающей его грани слишком далеко расположенной от точки Р).

Однако явная трассировка лучей к каждой выбранной в окрестности точке хотя и верна с точки зрения исходной формулы и вполне реализуема на основе данных из буфера глубины (получается просто трассировка лучей в height field‘е), но является все же явным overkill‘ом.

На практике (и в частности в Crysis’е) используется гораздо более простой подход — каждая из точек из окрестности (xi, yi, zi) проектируется на буфер глубины (т.е. для каждой такой точки определяется точка (x’i, y’i, z’i) исходной сцены, проектирующаяся в тот же пиксел экрана)и полученная проекция (x’i, y’i, z’i) трактуется как некоторый локальный загораживатель (occluder) интересующей нас точки (xeye, yeye, zeye). Тогда приближенное значение загораживания может быть посчитано как просто как сумма загораживаний для каждой из этих точек.

При этом степень загораживания для точки обычно является функцией разности dz=zeye-z’i для интересующей нас точки (xeye, yeye, zeye) и данной точки (x’i, y’i, z’i).

Рис 6. Проектирование точек на буфер глубины

Самый простой вариант использует в качестве функции, определяющей степень загораживания, следующую функцию:

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

Простейшая реализация данного подхода должна учесть некоторые детали. Количество точек-образцов их отличие от исходной точки обычно постоянно и хранится в массиве (в приведенных листингах для этого используется массив rndTable).

Однако использование одних и тех же смещений без какой-либо рандомизации для расчета затенения приведет к появлению заметного aliasing‘а. Для борьбы с ним вполне подходит подход, использованный в Crysis’е — в специальной текстуре (обычно небольшого размера, например 4х4) хранятся псевдослучайные трехмерные вектора. Тем самым каждому пикселу сопоставляется такой псевдослучайный единичный вектор.

Рис 7. Увеличенный пример текстуры с псевдослучайными векторами из Crysis’а.

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

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

Ниже приводится вариант вершинного и фрагментного шейдера, реализующих данный подход:

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

Рис 8. Фоновое затенение для простой сцены.

Причина затенения плоских граней проиллюстрирована на рис 9 — если грань не перпендикулярна направлению взгляда, то всегда часть точек из рассматриваемой окрестности после проектирования на буфер глубины (т.е. эту грань) окажется дальше центра окрестности. Для борьбы с этим и вводится параметр attBias. позволяющий частично скомпенсировать подобное «самозатенение» грани.

Рис 9. Причина возникновения самозатенения плоских граней.

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

Чтобы этого избежать можно подвергнуть dz простому преобразованию:

Ниже приводится соответствующим образом модифицированный фрагментный шейдер и на рис 10 приводится результат его работы.

Рис 10. Фоновое затенение для сцены с ящиками при использовании второго варианта шейдера.

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

Рис 11. Использование угла между нормалью и направлением на точку-образец.

Так точка A вносит вклад (для нее соответствующий угол острый), точки B и C вклада не вносят — для них углы не острые. Тем самым можно ввести дополнительный множитель в выражение, дающее затенение для точки, зависящее от данного угла в виде max(dot(n,v)+bias,0), где v — это вектор от точки, в которой расчитывается затенение, до точки-образца.

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

Ниже приводятся фрагментные шейдеры для первого (строящего G-буфер) и второго (рассчитывающего затенения) проходов.

Рис. 12. Затенение, посчитанное с учетом нормалей.

Кроме рассмотренных способов вычисления SSAO есть еще один, используемый в Blender’е (см.. ссылки в конце статьи) — просто строится blurred буфер глубины, находится разница между blurred— и нормальным буфером глубины и отсекается по отрезку [0,1]. Этот способ работает, хотя он требует большего числа обращений к буферу глубины и в ряде случаев приводит к возникновению «хало» за счет размытия буфера глубины.

Рис 13. Затенение, полученное при помощи размытия буфера глубины.

Получаемое практически любым рассмотренным выше способом имеет «зернистый» характер и перед наложением на изображение должна быть «размыта» (сглажена). Ниже приводится исходный код для самого простого варианта сглаживания, более качественных результатов можно добиться увеличив размеры ядра сглаживания и (чтобы избежать появления «хало») учитывая при сглаживании только те пикселы, для которых dz>0.

Приводимый ниже вариант просто «в лоб» осуществляет сглаживание с небольшим размером ядра и накладывает его на исходное изображение (хотя вместо явного умножения можно было просто настроить alpha blending).

Ниже приводится исходный код соответствующей программы на С++.

На следующих скриншотах показывается результат наложения затенения на модельную сцену.

Рис. 14. Сцена с ящиками выведенная описанным выше методом.

Рис. 15. Сцена с ящиками выведенная описанным выше методом.

По этой ссылке можно скачать весь исходный код к этой статье. Также доступны для скачивания откомпилированные версии для M$ Windows и Linux.

Влияние количества ядер на производительность в современных играх (страница 4)

DirectX 10.0, полноэкранное сглаживание (AA) on, анизотропная фильтрация (AF16), аппаратная физика — on, качество текстур — high, карты нормалей — high, карты отражений — high, тени — high, размытие движений — on, отражение в воде — on, каустика — on.


4 ядра


3 ядра


2 ядра

По диаграммам загрузки процессоров сложно судить, под какой процессор оптимизирована игра Cryostasis. Загружены все процессорные ядра у многоядерных процессоров, но у трех- и четырехъядерников загрузка неравномерна. Двухъядерный процессор загружен равномерно, что позволяет нам сделать гипотезу о том, что игра не будет реагировать на изменение процессорных ядер. Средняя загрузка квада равна 26,6%, трехъядерного процессора — 34,9% и двухъядерного — 48,1%. Как видно процессоры нагружены не полностью и есть большая вероятность, что игра будет незначительно реагировать на повышение их тактовых частот.

Тесты подтвердили наше предположение о том, что Cryostasis никак не реагирует на количество ядер в системе и изменение тактовых частот процессоров. Увеличение частоты с 2400 до 2800 МГц повышает производительность системы на 8%. Дальнейший разгон процессора приносит минимальные дивиденды.

DirectX 10.0, полноэкранное сглаживание (АА) 2, анизотропная фильтрация (AF) 0, качество текстур — high, качество объектов — high, качество теней — high, качество физики — high, качество шейдеров — high, качество объемного освещения — high, качество спецэффектов — high, качество постобработки — high, качество частиц — high, качество воды — high, качество размытия — high.

анонсы и реклама

Цена на память снижена в 2 раза в Регарде — везде дороже

Core i9 10 серии вдвое дешевле такого же 9 серии

Новейшая RTX 4000 — 75тр

серии в составе компьютеров уже Ситилинке

MSI 2060 в Регарде дешевле чем везде

Супердешевая 1660 — смотри цену сидя

Ryzen 9 3900XT в Регарде — смотри цену!!
gpu_test


4 ядра


3 ядра


2 ядра

В Crysis мы наблюдаем загрузку всех процессорных ядер, но у квада и трехъядерного процессора они загружены неравномерно. У двухъядерника ядра загружены равномерно. Довольно сложно судить по загрузке процессоров о оптимизации игры под тот или иной тип CPU. В этом тесте мы наблюдаем любопытное явление: средняя загрузка трех и четырехъядерного процессоров одинакова — 26,7 — 27,3%. Двухъядерный собрат загружен значительно больше — 40,1%.

Тесты показали, что Crysis оптимизирован под многоядерные процессоры, но трех- и четерехъядерники показали более высокую производительность над двухъядерником только на низких частотах 2400 — 2800 МГц. Это объясняется большой загрузкой двухъядерного процессора на этих частотах, поэтому менее нагруженные трех- и четырехъядерные собратья показали более высокую производительность.

Но при повышении тактовой частоты выше 2800 МГц двухъядерный CPU без проблем догнал старших конкурентов.
cpu_test


4 ядра


3 ядра


2 ядра

Диаграммы загрузки процессоров в cpu_test показали несколько иную ситуацию, чем в gpu_test. В этот раз ядра у всех процессоров загружены неравномерно и двух- / трехъядерный CPU одинаково нагружены: 38,4 — 40,4%. Средняя загрузка у квада ниже — 29,1%.

Игровое тестирование показало, что игра все же процессорозависима, хотя этого нельзя было сказать по gpu_test. Увеличение частоты на 50% повышает производительность системы на 22% (если судить по двухъядерному процессору). Причем производительность продолжает расти и при повышении тактовой частоты CPU свыше 2800 МГц, чего мы не наблюдали в прошлом тесте.

В этом тесте двухъядерник уступил трех- и четырехъядерному процессорам на частотах 2400 — 2800 МГц. Но при разгон свыше 3200 МГц он уверенно догоняет конкурентов.

Для комфортной игры в Crysis будет достаточно двухъядерного процессора, работающего на тактовой частоте 3000 МГц и выше. Как правило на этой частоте он показывает равную производительность с двух- и четырехъядерным CPU.

DirectX 10.0, полноэкранное сглаживание (АА) 2, анизотропная фильтрация (AF) 0, качество текстур — high, качество объектов — high, качество теней — high, качество физики — high, качество шейдеров — high, качество объемного освещения — high, качество спецэффектов — high, качество постобработки — high, качество частиц — high, качество воды — high, качество размытия — high.


4 ядра


3 ядра


2 ядра


4 ядра


3 ядра


2 ядра

Диаграммы загрузки процессоров обоих тестовых сцен Crysis Warhead показали, что игру попытались оптимизировать под многоядерные CPU. Об этом говорит средняя загрузка процессоров: четырехъядерного — 23,9 — 30,1 %, трехъядерного — 32,8 — 40,8% и двухъядерного — 60,2 — 63%.

Но, похоже, у разработчиков не получилось реализовать задуманное, так как процессорные ядра у всех CPU, как и в Crysis загружены, рвано и неравномерно.

Тестирование показало схожую картину производительности с Crysis. Для комфортного геймплея будет достаточно 3000 МГц двухъядерного процессора.

PS Не стоит обращать внимание на min fps в cpu_test Crysis и ambush Crysis Warhead, так как он отображается в этих тестах некорректно.

DirectX 9.0, полноэкранное сглаживание (AA) — on (не работает в игре), эффект Bloom — on, эффект Glow — on, эффект Blur — on, эффект Flares — on, зона видимости — on, постобработка — on, размытие движений — on, следы — on, качество эффектов — high, качество теней — high.


4 ядра


3 ядра


2 ядра

В Dead Space мы наблюдаем большую загрузку процессорных ядер у всех CPU. Средняя загрузка четырехъядерного CPU равна 64,7%, трехъядерного — 76,1% и двухъядерного процессора — 93%. Последний CPU явно загружен «под завязку», поэтому, возможно игра будет реагировать на изменение количества процессорных ядер в системе.

Тестирование подтвердила наше предположение об оптимизации Dead Space под многоядерные процессоры. Трех- и четырехядерный CPU продемонстрировали свое превосходство над двухъядерным собратом. 2400 МГц четырехъядерный процессор незначительно отстал от двухъядерного, работающего на частоте 3600 МГц. Трехъядерник, работающий на минимальной частоте, на 3% обошел двухъядерный CPU, функционирующий на частоте 3200 МГц.

Трех- и четырехъядерный процессоры демонстрируют незначительную разницу в производительности на частотах 2400 — 2800 МГц, которая исчезает при разгоне свыше 3000 МГц.

Также стоит отметить, что игра процессорозависима и рост производительности в случае с разгоном квада линеен.

Но несмотря на все описанные выше преимущества многоядерных процессоров, для комфортной игры в Dead Space будет достаточно двухъядерного процессора, функционирующего на частоте 2400 МГц.

DirectX 9.0, полноэкранное сглаживание (AA) 4, качество изображения — high, качество теней — high, детализация текстур — high, детализация объектов — high.


4 ядра


3 ядра


2 ядра

В Demigod средняя загрузка четырехъядерного процессора равна 24,9%, трехъядерного — 29,1% и двухъядерного — 46,9%. Причем у всех трех процессоров больше остальных загружено одно ядро. Этот факт и малая загрузка процессоров говорят о том, что скорее всего система в этой игре не будет реагировать на изменение в ней как типа процессора, так и его тактовой частоты.

Практическое тестирование полностью подтвердило нашу гипотезу.

Как и обещал, в последней части я выкладываю куски кода:

Запись и восстановление нормалей (взято отсюда):

Восстановление положения во view space из глубины и проецирование обратно:

clipPlanes — это расстояние до ближней и дальней плоскости отсечения (то, что мы скармливаем в функцию установки перспективной проекции).
texCoordScales — компоненты обратной матриции проекции взятые со знаком минус.

Вообще, в демке много чего есть, кроме затенения и отражения света:

ao-demo-final | Screen space ambient occlusion с учетом нормалей и расчет одного отражения света.

Типы сглаживания в играх

ЕгорЕгор Морозов | 1 Марта, 2017 — 18:00

1.jpg

Начнем с определения:

Сгла́живание (англ. anti-aliasing) — технология, используемая для устранения эффекта «зубчатости», возникающего на краях одновременно выводимого на экран множества отдельных друг от друга плоских или объёмных изображений.

Безымянный.png

Почему возникает «зубчатость»? Проблема в том, что мониторы современных ПК состоят из квадратных пикселей, а значит на них действительно прямыми будут только горизонтальные и вертикальные линии. Все линии, находящиеся под углом, будут строиться из пикселей, находящихся по диагонали друг к другу, что и вызывает «зубчатость». К примеру, справа на картинке — вроде бы ровная линия. Однако стоит ее увеличить, как сразу становится видно, что никакая она не прямая:

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

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

Типы сглаживания

SSAA (Supersample anti-aliasing) — самое тяжелое сглаживание, потому что оно, по сути, описывает способ убирания лесенок, который я привел выше: при четырехкратном (4х) сглаживании видеокарта готовит картинку в разрешении вчетверо выше, чем выводит на экран, потом происходит усреднение цвета соседних пикселей и вывод на экран в исходном разрешении. Получается, что виртуальная плотность пикселей вдвое выше, чем у экрана, и лесенки практически перестают быть заметными. Очень сильно сказывается на производительности: к примеру, если разрешение в игре 1920х1080, то видеокарта вынуждена готовить картинку в 4К — 3840х2160. Однако результат получается великолепным — картинка выглядит как живая, никакого мельтешения нет:

ssaa-696x392.jpg

MSAA (Multisample anti-aliasing) — улучшенная версия SSAA, которая потребляет гораздо меньше ресурсов. К примеру — зачем сглаживать то, что находится внутри текстуры, если лесенки есть только на краях? Если текстура представляет собой прямую линию под углом к игроку, то можно сгладить лишь один участок и продолжить эффект на весь край текстуры. В результате нагрузка на видеокарту становится ощутимо меньше, и по тяжести даже 8х MSAA оказывается ощутимо легче 4х SSAA при сравнимом качестве картинки.

CSAA и CFAA (Coverage Sampling anti-aliasing и Custom-filter anti-aliasing) — по сути несколько улучшенный MSAA от Nvidia и AMD (позволяют выбирать дополнительные отсчёты «перекрытия» пикселя, по которым можно уточнять итоговое значение цвета попадающего на край треугольника экранного пикселя). 8x CSAA/CFAA дает сравнимое с 8x MSAA качество картинки, однако потребляет примерно столько же ресурсов, столько и 4х MSAA. На сегодняшний момент оба сглаживания не используются — разработчики игр решили использовать унифицированные для всех видеокарт сглаживания.

FXAA (Fast approXimate anti-aliasing) — нетребовательное быстрое сглаживание. Алгоритм прост — совершается один проход по всем пикселям изображения и усредняются цвета соседних пикселей. Это слабо нагружает видеокарту, однако сильно мылит картинку (обратите внимание на четкость текстуры камня), делая далекие объекты вообще неузнаваемыми:

869846.jpg

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

MLAA (MorphoLogical anti-aliasing) — аналог FXAA от Intel. Работает схожим образом, однако алгоритм сложнее — все изображение разбивается на Z, L и U -образные части, и сглаживание происходит смешением цветов пикселей, входящих в каждую такую часть:

c69f9e11.jpg

Из особенностей — это единственное сглаживание, работающее полностью на процессоре, поэтому практически не влияет на fps в играх при мощном процессоре. Из-за более сложного алгоритма изображение получается более качественным, чем с FXAA, однако до 2x MSAA все еще далеко.

SMAA (Subpixel Morphological anti-aliasing) — смесь FXAA и MLAA. По сути несколько улучшенный MLAA, но работающий на видеокарте (так как процессор для сглаживания подходит гораздо хуже). Дает картинку, сравнимую с MLAA, лучше, чем FXAA (обратите внимание на бочки), однако потребляет больше ресурсов:

GOTHIC3.jpg

Такое сглаживание является хорошей заменой FXAA, и по уровню нагрузки на видеокарту находится между отсутствием сглаживания и 2x MSAA, так что есть надежда, что в будущем игр с ним будет все больше.

TXAA(Temporal antialiasing) — новая технология сглаживания от Nvidia. В отличии от других типов сглаживания, которые работают только с одним кадром (то есть с неподвижной картинкой), это умеет работать с движущимися объектами и хорошо убирает «мельтешение» картинки. По сути является смесью MSAA и SMAA, дает очень качественную картинку, однако немного ее мылит и очень требовательно к ресурсам.

В итоге — какое сглаживание выбрать? Если видеокарта совсем плохо тянет игру, то или оставаться без сглаживания и смотреть на лесенки, или же выбрать FXAA и любоваться на мыло. Если же система по-мощнее, но MSAA все еще не тянет — стоит выбрать MLAA или SMAA. Если видеокарта играючи справилась с 8х MSAA — стоит смотреть на SSAA или TXAA.

Под капотом: объяснение SSAO

Под капотом: объяснение SSAO

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

Под капотом: объяснение SSAO

Резюме TL; DR приведенного ниже текста гласит, что Screen Space Ambient Occlusion — это крутая новая, но высокопроизводительная техника для обогащения рендеринга нашего игрового мира. Вам не нужно его использовать, если вы чувствуете, что он слишком сильно снижает производительность по своему вкусу, или вам может понравиться и вы можете позволить себе торговать несколькими кадрами в секунду для улучшения восприятия тени и глубины. Эффект может быть тонким, он в основном работает на уровне подсознания, но как только вы привыкнете к нему, может быть трудно вернуться назад. Это еще одна веха в нашем плане улучшений освещения / затенения, который мы сейчас выполняем, за которым последует новая обработка HDR-света и введение более нормальных поверхностей в будущих обновлениях.

Под капотом: объяснение SSAO

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

alt=»Под капотом: объяснение SSAO» /> alt=»Под капотом: объяснение SSAO» />
Мы находимся под постоянным давлением, чтобы улучшить внешний вид нашей игры с помощью вокальной базы наших фанатов. В то же время всегда есть желание заставить игры работать быстрее. Вдобавок к этим иногда конкурирующим запросам, исходящим от базы игроков, наш собственный художественный отдел всегда стремится заполучить новые графические игрушки, чтобы сделать нашу игру богаче и лучше. Всякий раз, когда мы вводим в игру новую графическую функцию, мы стараемся сделать это так, чтобы это не повлияло на производительность игроков со старыми компьютерами, мы не хотим делать игру несовместимой с нашими существующими клиентами. Вот почему есть возможность полностью отключить SSAO и несколько настроек его качества / производительности.

alt=»Под капотом: объяснение SSAO» /> alt=»Под капотом: объяснение SSAO» />
Работа наших программистов над новыми технологиями SSAO / HBAO также потребовала изменений в нашем конвейере искусства и создания произведений искусства. Все 3D-модели в наших играх должны были быть повторно рассмотрены отделом по художественным работам, и любые случаи, когда любые искусственные тени и затемнения уже применялись к модели художником, были изменены. Для некоторых более сложных игровых моделей это было упрощением, которое фактически уменьшило количество треугольников в них, чтобы повысить производительность рендеринга. В какой-то степени мы обменяли часть предполагаемых будущих ручных усилий, которые потребовались бы для создания отдельных красивых 3D-моделей для алгоритмического прохода рендеринга, который объединяет теневое представление для всей сцены, помогая «укоренять» такие объекты, как здания, фонарные столбы и растительность на местности. Что такое SSAO и как это работает?

Под капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAO

Прежде чем мы начнем — обратите внимание, что SSAO является общей аббревиатурой для «окклюзии окружающего пространства экрана». Имя включает в себя все различные методы окклюзии окружающей среды (AO) и их варианты, которые работают в пространстве экрана (это означает, что они получают всю информацию во время выполнения из данных, которые отображаются на экране компьютера и в связанных буферах памяти). Есть SSAO (технология Crytek 2007, которая в основном дала общее название всем методам), MSSAO, HBAO, HDAO, GTAO, и многие другие методы, каждый из которых использует по-разному настроенные подходы, каждый из которых имеет свои преимущества и недостатки. Мы основали наш подход на методике на основе горизонта под названием GTAO, которая была представлена ​​Activision в документе 2016 года.

Читайте также: 

Часть имени ambient occlusion (AO) означает, что мы оцениваем, сколько входящего света (преимущественно небесного света, но иногда вычисляемая окклюзия применяется и к другим источникам света) перекрывается в определенном месте игрового мира. Представьте, что вы стоите на ровной поверхности — вы увидите все небо выше, поэтому окклюзия 0%, земля полностью освещается небом. Теперь представьте, что вы находитесь на дне колодца — вы увидите только небольшой участок неба, это означает, что небо закрывается почти на 100% и лишь незначительно влияет на окружающее освещение в этом колодце, и, естественно, в нем довольно темно. дно колодца. Определенный уровень внешней окклюзии в определенном месте влияет на расчеты освещения и создает затененные области в складках, дырах и других «сложных» местах.

Под капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAO
Вычисление окклюзии с высокой детализацией и точностью требует значительных ресурсов; в основном вам нужно будет стрелять лучами из любой оцененной позиции во всех направлениях и проверять, попадают ли они в небо или нет, а затем усреднять результат. Чем больше лучей вы снимаете, тем лучше информация, которую вы получаете, но с большими вычислительными затратами. Этот процесс может быть обработан в автономном режиме, например, когда игровая карта сохраняется ее разработчиком. Некоторые игры и движки используют этот подход. Но таким образом, вы можете только запекать информацию об окклюзии окружающей среды о статических неподвижных объектах, потому что в это время нет ни транспортных средств, ни анимированных объектов.

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

Под капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAO
Хорошо, теперь мы знаем, что оценивать (окружающая окклюзия), и мы знаем, какие данные у нас есть (что мы видим на экране). Что мы делаем? Ну, для каждого пикселя на экране (то есть 2 миллиона пикселей в разрешении HD, умноженного на четыре (!) При 400% масштабировании!) Нашему шейдерному коду необходимо запросить значение z-буфера окружающих пикселей, пытаясь получить представление о геометрическая форма области, окружающей его. Мы можем сделать только ограниченное количество таких «отводов», поскольку резко возрастают затраты производительности при увеличении количества отводов, это операция, которая действительно облагает налогом 3D-ускоритель. Ограничение на количество нажатий, в свою очередь, влияет на точность внешней окклюзии (и в некоторых ситуациях может привести к неточностям и полосам). Представьте, что вы хотите оценить свое окружение по 2-метровой прямой линии и готовы потратить 8 нажатий, чтобы приблизиться к нему. Вы запрашиваете линию каждые 25 сантиметров, и любая деталь, меньшая, чем эта, может оказаться совершенно незамеченной, если только вам не повезет и вы не попали в нее (или не повезло, потому что вы можете пропустить ее в следующем кадре, так что окружение внезапно может измениться между кадры и вызывают мерцание). Чем дальше ваш алгоритм исследует, тем менее точным он будет. Таким образом, вам нужно ограничить размер области, которую вы анализируете, вокруг каждого игрового пикселя, что, в свою очередь, ограничивает расстояние, которое «видит» AO — поэтому он не подходит для вычисления окклюзии в больших пространствах, например, под арками моста. потому что вы можете пропустить следующий кадр, так что окружение внезапно может измениться между кадрами и вызвать мерцание). Чем дальше ваш алгоритм исследует, тем менее точным он будет. Таким образом, вам нужно ограничить размер области, которую вы анализируете, вокруг каждого игрового пикселя, что, в свою очередь, ограничивает расстояние, которое «видит» AO — поэтому он не подходит для вычисления окклюзии в больших пространствах, например, под арками моста. потому что вы можете пропустить следующий кадр, так что окружение внезапно может измениться между кадрами и вызвать мерцание). Чем дальше ваш алгоритм исследует, тем менее точным он будет. Таким образом, вам нужно ограничить размер области, которую вы анализируете, вокруг каждого игрового пикселя, что, в свою очередь, ограничивает расстояние, которое «видит» AO — поэтому он не подходит для вычисления окклюзии в больших пространствах, например, под арками моста.

Под капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAO
Мы упоминали, что методика нашего выбора основана на горизонте. Это означает, что мы не исследуем окружающую среду, снимая лучи в трехмерном мире, вместо этого мы анализируем полусферу выше / вокруг каждого пикселя, чтобы увидеть, как далеко он открывается, пока не заблокирован, сколько света пропускает окружающая геометрия используя z-буфер в качестве нашего прокси. Полушарие фактически аппроксимируется несколькими прогонами вдоль линии, повернутой вокруг данного пикселя. Если мы сможем полностью следовать вдоль этого полушария, то нет преграды. Если алгоритм выбирает значение в z-буфере, которое блокирует входящий свет, он определяет уровень окклюзии. Алгоритм оптимизирован для производительности, но его ограничение заключается в том, что как только он попадает во что-либо, даже, возможно, в небольшой объект, он прекращает дальнейшее исследование. Это может вызвать «чрезмерную окклюзию» проблема и может быть замечена как визуальный артефакт, когда какой-то относительно тонкий объект, такой как столб дорожного знака, вызывает сильную окклюзию на соседней стене. Вы можете попытаться обнаружить такие маленькие объекты и пропустить их, что, в свою очередь, может привести к «недостаточной окклюзии» на тонких уступах. Мы выбрали первое.

Под капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAO
Есть еще одно интересное и полезное свойство технологий, основанных на горизонте. В зависимости от того, какая часть полусферы выше данного пикселя перекрыта, вы можете вычислить направление, которое наименее закрыто. Степень окклюзии можно рассматривать как конус мороженого с изменяющимся углом апекса, ориентированным в этом направлении. Это направление называется «изогнутой нормалью», и мы используем его для различных вычислений света, например, для перекрытия отражения на блестящих поверхностях. Идея состоит в том, что если вы посмотрите на поверхность и направление отражения от зеркала выходит из этого конуса, мы считаем его (по крайней мере, частично) перекрытым, уменьшая интенсивность отражения. Лучший способ увидеть этот эффект — взглянуть на более крупные и круглые хромированные детали, такие как дизельные цистерны, с включенным и выключенным SSAO.

Под капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAOПод капотом: объяснение SSAO
Так что, как видите, идея не такая уж сложная, для опытного программиста в любом случае;), но здесь требуется много вычислений, что создает некоторую нагрузку на 3D-ускоритель. Итак, мы создали несколько профилей производительности, каждый из которых использует сочетание методов оптимизации:

  • Использование меньшего количества нажатий на направление — это быстрее, но позволяет AO пропускать более крупные объекты, чем при более точной выборке.
  • Репроекция результатов AO из предыдущего кадра — это позволяет нам скрыть артефакты от недостаточной выборки, но может создать ореолы, когда репроекция не удалась (когда то, что вы видите между кадрами, сильно меняется).
  • Рендеринг с половинным разрешением — уменьшает количество вычислений до 1/4, но создает менее точный AO — результат может быть слегка размытым

Мы надеемся, что вся эта информация была интересной и полезной для вас. Мы отправим вам виртуальную пятерку, если вы прочитаете эту статью до этого момента. Вы заслуживаете печенье и большую чашку горячего шоколада! Если вы все еще хотите получить более подробную информацию по этой теме, см., Например, эту ссылку [www.cse.chalmers.se].

Спасибо за ваше время и поддержку, и мы еще увидимся в некоторых следующих статьях из раздела «Под капотом», которые мы время от времени приносим для нашего #BestCommunityEver.

Также не забывайте, что летняя распродажа Steam скоро заканчивается! Посетите нашу страницу для разработчиков.

SSAO в играх что это

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

Смысл создания темы — дать ответ, чем можно пожертвовать, сохранив максимальное качество картинки с приемлемым FPS. А так же расширить знания в этом напрвлении.

1) Анизотропная фильтрация спойлер Наиболее продвинутый способ. Устраняет заметные искажения на объектах, сильно наклоненных относительно камеры. При использовании билинейной или трилинейной фильтрации с увеличением расстояния текстура становится все более размытой, анизотропная же этого недостатка лишена.

Учитывая объем обрабатываемых данных (текстуры высокого разрешения), анизотропная фильтрация особенно требовательна к пропускной способности памяти. На современных начиная с среднего уровня производительности видеокартах она почти не влияет на fps.

Анизотропная фильтрация имеет лишь одну настройку – коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. 2) Шейдеры спойлер Небольшие программы, которые могут производить определенные манипуляции с 3D-сценой, например, изменять освещенность, накладывать текстуру, добавлять постобработку и другие эффекты.

Шейдеры делятся на три типа:
А) Вершинные (Vertex Shader) оперируют координатами;
Б) Геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин;
В) Пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.

Шейдеры в основном применяются для создания новых эффектов, по умолчанию не заложенных в видеокарте. Без них набор операций, которые разработчики могли бы использовать в играх, весьма ограничен. Очень продуктивно работают в параллельном режиме, и именно поэтому в современных графических адаптерах так много потоковых процессоров. 3) Parallax mapping спойлер модифицированная версия известной техники bumpmapping, используемой для придания текстурам рельефности. Parallax mapping не создаёт 3D-объектов. Пол или стена в игровой сцене будут выглядеть шероховатыми, оставаясь на самом деле абсолютно плоскими, эффект рельефности достигается лишь за счет манипуляций с текстурами. Существенно экономит вычислительные ресурсы компьютера, поскольку при использовании объектов-аналогов со столь же детальной 3D-структурой роизводительности видеоадаптеров не хватало бы для просчета сцен в режиме реального времени. Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки. 4) Тесселяция спойлер с помощью тесселяции, в компьютерной модели повышается количество полигонов в произвольное число раз. Работает это так — каждый полигон разбивается на несколько новых, которые располагаются максимально приближенно к исходной поверхности. Такой способ позволяет легко увеличивать детализацию простых 3D-объектов.
В отличии от Parallax mapping, тесселяция реально изменяет геометрическую форму предмета, а не просто симулирует рельефность. Помимо этого, ее можно применять практически для любых объектов.
При включении тесселяции, нагрузка на компьютер существенно возрастает и в ряде случаев не исключены артефакты.
Технология требует видеокарту с поддержкой DirectX 11.
5) DOF (Depth of field) спойлер глубина резкости – расстояние между ближней и дальней границей пространства, в пределах которого все объекты будут в фокусе, в то время как остальная сцена окажется размытой.
В определенной мере глубину резкости можно наблюдать, просто сосредоточившись на близко расположенном перед глазами предмете. Все, что находится позади него, будет размываться. Верно и обратное: если фокусироваться на удаленных объектах, то все, что размещено перед ними, получится нечетким.
В играх с использованием DOF обычно сильнее ощущается эффект присутствия. Например, заглядывая куда-то через траву или кусты, в фокусе видны лишь небольшие фрагменты сцены, так, как это происходит с нашим зрением в жизни.
При включении DOF, нагрузка на компьютер существенно возрастает.

Так же как и тесселяция требует видеокарту с поддержкой DirectX 11. 6) HDR (High dynamic range) спойлер часто используется в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. HDR часто применяется для реализации эффекта приспособления зрения, когда герой в играх выходит из темного туннеля на хорошо освещенную поверхность.
Включение HDR в зависимости от настроек может значительно понизить FPS. В некоторых случаях его совместная работа с Anti-Aliasing невозможна в принципе. 7) Bloom спойлер нередко применяется совместно с HDR, ( не путать с Glow).
Bloom симулирует эффект, который можно наблюдать при съемке очень ярких сцен обычными камерами. На полученном изображении кажется, что интенсивный свет занимает больше объема, чем должен, и «залазит» на объекты, хотя и находится позади них.
При использовании Bloom на границах предметов могут появляться дополнительные артефакты в виде цветных линий. 8) Glow спойлер визуальный световой эффект в трёхмерной или растровой графике. В трёхмерной графике, эффект заключается в том, что у ярких областей объекта наблюдается засвеченность по периметру этих областей, из-за чего создаётся впечатление, что на поверхности яркого объекта виден световой ореол. Часто путают с Bloom. 9) Film Grain спойлер зернистость – данный эффект влияет на восприятие и не везде применим, например в Silent Hill, шум на экране, добавляет атмосферности, а в FEAR 2 лично мне он абсолютно не понравился. 10) Motion Blur спойлер эффект смазывания изображения при быстром перемещении камеры. Применим, когда сцене следует придать больше динамики и скорости. Опять же лично по мне прекрасно выглядит в гоночных симуляторах, а в шутерах я его отключаю.
Правильное применение Motion Blur способно добавить кинематографичности в происходящее на экране, завуалировать низкую частоту смены кадров, добавить плавности в игровой процесс. 11) Ambient Occlusion спойлер модель затенения, используемая в трёхмерной графике и позволяющая добавить реалистичности изображению за счёт вычисления интенсивности света, доходящего до точки поверхности. В отличие от локальных методов, как например затенение по Фонгу, AO является глобальным методом, то есть значение яркости каждой точки объекта зависит от других объектов сцены. В принципе, это достаточно отдалённо напоминает глобальное освещение.
При включении AO, нагрузка на компьютер существенно возрастает.

12) SSAO (Screen Space Ambient Occlusion) спойлер техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света. Является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.
Не смотря на работу по упрощенной схеме, у SSAO есть множество преимуществ: метод не зависит от сложности сцены, не использует оперативную память, может функционировать в динамичных сценах, не требует предварительной обработки кадра и нагружает только графический адаптер, не потребляя ресурсов CPU. 13) V-Sync (вертикальная синхронизация) спойлер синхронизация кадров игры с частотой вертикальной развертки монитора. Ее суть заключается в том, что полностью просчитанный игровой кадр выводится на экран в момент обновления на нем картинки. Важно, что очередной кадр (если он уже готов) также появится не позже и не раньше, чем закончится вывод предыдущего и начнется следующего.
Если частота обновления монитора составляет 60 Гц, и видеокарта успевает просчитывать 3D-сцену как минимум с таким же количеством кадров, то каждое обновление монитора будет отображать новый кадр. Другими словами, с интервалом 16,66 мс пользователь будет видеть полное обновление игровой сцены на экране.

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

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

На заметку:
— в случае избыточной производительности видеоадаптера, V-Sync снижает нагрузку на GPU и как следствие, продлевает жизнь вентиляторам;

— в редких случаях активация V-Sync может снижать FPS;

— при тестировании видеоадаптера бенчмарками, V-Sync следует отключить. 14) Post-processing спойлер общее название всех эффектов, которые накладываются на уже готовый кадр полностью просчитанной 3D-сцены (иными словами, на двухмерное изображение) для улучшения качества финальной картинки. Постпроцессинг использует пиксельные шейдеры. Применим в случаях, когда для дополнительных эффектов требуется полная информация обо всей сцене.

Изолированно к отдельным 3D-объектам такие приемы не могут быть применены без появления в кадре артефактов. 15) Anti-Aliasing спойлер технология, использующаяся в обработке изображений с целью сделать границы кривых линий визуально более гладкими, убирая «зубцы», возникающие при растеризации на краях объектов. В большинстве случаев, а так же в зависимости от типа (об этом ниже) может существенно снижать fps в играх, хотя при должной оптимизации, что встречается сейчас крайне редко, влияет на количество кадров незначительно.

Типы сглаживания (Anti-Aliasing)

15.1) SSAA (Super Sampling Anti-Aliasing)
известный также как Full-Scene Anti-Aliasing (FSAA). Его применение приводит к значительному снижению быстродействия. Учитывая, даже то, что за последние несколько лет быстродействие видеокарт заметно увеличилось, полноценно использовать данный тип сглаживания в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, в NVIDIA функционирует также в режимах DX10 и DX11.

15.2) MSAA (Multisample Аnti-Аliasing).
Несмотря на, то что данный способ даёт худшие результаты относительно SSAA(FSAA), он гораздо производительнее. В отличие от SSAA(FSAA) сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.

15.3) CSAA (nVidia) / CFAA (Radeon)

15.3.1) CSAA
запатентованная технология nVivia. По сути является расширением MSAA позволяющий выбирать дополнительные отсчёты «перекрытия» пикселя, по которым можно уточнять итоговое значение цвета попадающего на край треугольника экранного пикселя.

NVIDIA создала небесспорную, но сравнительно стройную линейку режимов:
•Off
•2x (MSAA)
•4x (MSAA)
•8x (4x MSAA + 8x CSAA)
•8xQ (8x MSAA)
•16x (4x MSAA + 16x CSAA)
•16xQ (8x MSAA + 16x CSAA)

Спорным в этой схеме выглядит расположение режима 16х выше, чем режима 8xQ, так как «настоящий» MSAA 8x зачастую оказывается лучше CSAA 16x, в котором используется только 4 отсчёта цвета на пиксель. В принципе достаточно уяснить, следующее. Все режимы от 4х до 16х по сути – MSAA. Но в случаях 8х и 16х это «4x MSAA с улучшением (CSAA)». Так же, видно, что режим 8xQ это 8xMSAA, а 16xQ – «8xMSAA с улучшением (CSAA)».

Все режимы выше MSAA 4x выдают очень близкое качество сглаживания, а в динамике разница будет еще меньше, чем на статичных скриншотах.

15.3.2) CFAA (custom-filter antialiasing)
является технологией расширения MSAA от АМД.

По сути, CFAA включает в себя три метода сглаживания, достаточно сильно различающихся между собой:
А) фильтр wide tent;
Б) фильтр narrow tent;
В) с адаптивным детектированием граней (adaptive edge detect).

Режимы narrow и wide tent, которые можно активизировать в сумме с любым из режимов MSAA, представляют собой MSAA с захватом цветовых отсчётов из соседних пикселей. Это позволяет улучшить качество сглаживания (за счёт использования в расчёте цвета пикселя дополнительных значений), однако приводит к «замыливанию» картинки, поскольку значения цветов соседних экранных пикселей, по сути, перемешиваются. По этой причине эти фильтры в основном попросту бесполезны.

Edge detect — сглаживание с адаптивным фильтром детектирования граней. Осуществляется проход, детектирующий грани на уже отрендеренном изображении, и затем применят к нему сглаживание с повышенным числом сэмплов на пиксели, отличающиеся друг от друга больше, чем другие, т.е., края текстур больших изображений. Позволяет уменьшить мерцание текстур и избежать замыливания, но так как текстуры с множеством мелких деталей могут быть ошибочно подвергнуты сильному сглаживанию, может возникнуть ситуация, когда они станут расплывчатыми.
Режимы выше MSAA 4x почти не отличаются друг от друга по качеству сглаживания краёв треугольников. В динамике заметить разницу будет очень трудно.

15.4) TXAA
Технология от nVidia. По заявлениям разработчиков, TXAA доступно в двух вариантах: TXAA 2x и TXAA 4x. TXAA 2x обеспечивает четкость изображения, сравнимую с 8xMSAA, при равных с 2xMSAA затратах производительности, а TXAA 4x обеспечивает четкость изображения выше, чем при 8xMSAA, при этом затраты производительности сравнимы с 4xMSAA.
Для сглаживания пикселей в TXAA используется выборка субпикселей как внутри так и снаружи пикселя, да ещё в сочетании со значениями из предыдущих кадров (опциональная временная компонента), что обеспечивает отличное качество фильтрации. В сценах с движением камеры, при помощи TXAA достигается качество сглаживания, аналогичное тому, что мы видим при оффлайновом рендеринге, например, в 3D-мультфильмах.
Сглаживающий фильтр методом TXAA работает качественнее, чем MSAA, и особенно это заметно на растительности и прочих подобных объектах.

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

TXAA поддерживают новые карты Geforce 600 серии.

15.5) MLAA (Morphological Anti-Aliasing)
полноэкранное сглаживание, разработанное корпорацией Intel, которое предназначено для работы в реальном времени на CPU. Алгоритм Intel не выполняет масштабирование изображения, а работает с пикселями в исходном разрешении . Он находит разрывы в изображениях и смешивает цвета в районе этих разрывов, что обеспечивает эффективный антиалиасинг.
Алгоритм MLAA обрабатывает изображение за три шага:
А) находит разрывы между пикселями данного изображения;
Б) определяет U, Z, L-образные профили;
В) смешивает цвета в районе этих профилей.

Фильтр работает покадрово с уже отрендеренным изображением, и его производительность можно чётко просчитать заранее. Она не зависит от сложности сцены, так что можно гарантировать отсутствие «подтормаживаний» в любой момент.

AMD реализовала в драйвере Catalyst свою версию MLAA , в форме применяющейся в драйвере к готовому изображению игры постобработки.

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

Примеры:
А) Метро 2033 при включении АА4Х картинка сильно замыливается, а технология DOF сильно снижает FPS, притом, что всю её красоту можно увидеть только на открытых пространствах. Учитывая, что 99% времени мы проводим в тоннелях включение данной технологии в данном случае не оправдано.

Б) Darksiders 2 — прозрачные текстуры. Решение — принудительное отключениет сглаживания в настройках драйвера.

При выявлении неточностей, противоречивых ситуаций, более логичных пояснений, а так же арфаграфических ошипак, не стесняйтесь, отписыватесь в теме. Сам вникнул еще далеко не во все, потому просьба сильно не пинать. Было бы не плохо, если есть грамотно подкованный камрад, по совместительству желающий стать куратором темы! Если администрация не против могу взять на себя данную обязанность.

Убедительная просьба воздержатся в теме от извечного противостояния AMD/nVidia/Intell, а так же давать непроверенные либо ложные рекомендации, не имея понимания и представления технической стороны вопроса.

Да кто такой этот ваш MSAA и SSAA?!

Вы часто видели эти MSAA и SSAA в настройках — и выбирали опцию наугад. Знали примерно, что эти загадочные буквы связаны со сглаживанием картинки, и этого вам всегда хватало. Но червячок сомнений всё-таки точил ваш разум. Иначе бы вы, как и мы сейчас, не задались вопросом: «Кто же такие эти самые MSAA и SSAA на самом деле?». Ну что ж, давайте разберёмся со всем этим по порядку и без заумных словечек.

Что такое сглаживание?

Минутка очевидных вещей. Изображение на вашем мониторе состоит из пикселей — очень маленьких квадратиков. По законам геометрии, из них получаются отличные вертикальные и горизонтальные линии и идеальные прямоугольники. А вот если нарисовать в Paint наклонную линию или круг, то тут же на белый свет явятся пиксельные «лесенки».

Далеко не каждую 2D фигуру можно создать только при помощи квадратов и линий под прямым углом, а о трёхмерных объектах нечего и говорить. Так что проблема сглаживания существует в играх как сейчас, так и тридцать лет назад — вам не хуже меня видно, где стоило бы сгладить Лару Крофт.

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

Читайте также:  Asus hipost что это за программа

Первый — это увеличить разрешение. Тогда на один экранный дюйм будет приходиться больше пикселей, и вероятность увидеть резкие переходы снизится: не зря сейчас индустрия потихоньку переходит на 4к. За ним последует 8к, потом 16к, и в конце концов вы скорее разглядите пиксели на оконном стекле, чем на экране. К сожалению, подобная роскошь кусается как в плане цены, так и в плане производства, а сорок лет назад не было даже возможности создать экран с таким разрешением. Поэтому пришлось придумать второй способ.

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

Как это работает?

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

Для некоторых графических элементов используются специальные алгоритмы сглаживания. Так, для смягчения контуров букв придумали ClearType, а для самых простых линий — Алгоритм Ву. Некоторые алгоритмы работают только с уже существующим изображением, а другие применяются прямо во время построения сцены. Одни из них жрут мощности вашей видеокарты, а другие сосредоточенно жуют ваш процессор и не влияют на FPS.

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

Буферы выборки

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

вектор позиции каждого фрагмента;

вектор нормали каждого фрагмента;

цвет альбедо каждого фрагмента;

ядро выборки;

вектор произвольного поворота для каждого фрагмента, используемый для вращения ядра.

Используя позицию каждого фрагмента (в координатах видового пространства), мы можем ориентировать полусферическое ядро выборки вокруг (в координатах видового пространства) нормали поверхности фрагмента и применить это ядро для выборки значений из текстуры буфера позиций при различных смещениях. Для каждой фрагментной точки выборки из ядра выборки мы сравниваем её значение глубины со значением глубины в буфере позиций, чтобы определить величину затенения. Затем полученный коэффициент затенения используется для ограничения итогового значения компонента AO. Кроме того, задействовав для каждого фрагмента вектор поворота, у нас появится возможность значительно сократить необходимое количество выборок:

Поскольку SSAO — это метод экранного пространства, то мы рассчитываем его влияние на каждый фрагмент экранного прямоугольника. Это означает, что у нас нет никакой геометрической информации о сцене. То, что мы могли бы сделать, — это визуализировать геометрические данные каждого фрагмента в текстуры экранного пространства, которые затем отправим в шейдер SSAO, чтобы иметь доступ к геометрическим данным каждого фрагмента. Это очень похоже на настройку G-буфера отложенного рендеринга. По этой причине использование SSAO идеально сочетается с методом отложенного рендеринга, поскольку в G-буфере у нас уже есть векторы позиций и нормали.

Примечание: На этом уроке мы собираемся реализовать SSAO поверх немного упрощенной версии отложенного рендеринга из урока об отложенном затенении в OpenGL.

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

Декомпозируем игровую графику: технологии под капотом современных игр

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

С момента релиза War Robots прошло уже более 7 лет. В 2014 году мобильный игровой рынок был гораздо скромнее, чем сейчас, а девайсов, которые могли без проблем тянуть трехмерную игровую графику, — и того меньше. Несмотря на то, что уже случилась шейдерная «революция», и на замену графического конвейера с фиксированным функционалом (fixed-function pipeline) пришли вершинные и фрагментные шейдеры, возможностей для создания качественной картинки уровня настольного компьютера было явно недостаточно.

В основе же работы с любой графической системой лежит набор стандартизированных методов, маскирующих обращения к видеодрайверу для передачи команд графическому процессору — или, иными словами, контракт, в котором прописано, как с ней обращаться. Его называют графическим прикладным интерфейсом программирования — API (application programming interface). На старте разработки оригинальной игры фактически единственным среди графических API на мобильных платформах (Android, iOS) был OpenGL ES 2.0. Результат его эволюционного развития, OpenGL ES 3.0, был только-только утвержден, и на рынке даже не было устройств, которые бы его поддерживали. Таким образом, графика в Walking War Robots была основана на технологиях и возможностях, предоставляемых именно OpenGL ES 2.0.

У War Robots тех времен был вполне себе типичный графический стек, поддерживающий один направленный источник света и способный рассчитать от него затенение с учетом весьма простой системы материалов. Но в то же время игру отличали и довольно смелые решения: например, уже тогда применялась технология отрисовки террейна со сплатмапой, за счет плавного смешивания позволяющая рисовать протяженные комплексные поверхности без повторений однотипных мелких рисунков. Хотя и не все набирающие популярность методы нашли место в проекте — скажем, запеченное освещение (лайтмапы и лайтпробы) и система с множественными материалами тогда его обошли стороной.

Со временем графика в игре улучшалась и совершенствовалась, но довольно быстро ее развитие стало упираться ограничения OpenGL ES 2.0. Например, для полноценного использования получающих все большее распространение PBR-техник (physically-based rendering — PBR) нужна была возможность работы в линейном цветовом пространстве, что являлось неразрешимой проблемой для GLES 2.0. Наступил момент, когда потенциал эволюционного развития был достигнут, и без комплексного революционного подхода рывок в графике уже не представлялся возможным.

К сожалению, несмотря на бытующее в некоторых кругах мнение, невозможно улучшить качество картинки в игре, просто «выкрутив настройки на максимум». А улучшить качество картинки в игре, которая находится в оперировании много лет, постоянно меняясь и развиваясь, — задача крайне нетривиальная. Как минимум, не выйдет сделать графику с нуля, без оглядки на ожидания игроков и на то, что уже прижилось в игре. Нужно очень бережно обращаться с существующим геймплеем и атмосферой, учесть огромное количество деталей, причем зачастую неочевидных. И, конечно, где долгая история активного оперирования, там легаси. За годы существования War Robots, в игре накопилось множество крайне неочевидных решений: от уникальных и нужных, удивляющих своей изящностью, до поражающих воображение художественных костылей, когда-то решавших разнообразные технические проблемы, которые неизбежно приходили в проект с каждой новой версией Unity.

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

К счастью, была возможность проверить идеи и уточнить многие детали с минимальным привлечением основной команды разработки: провести эксперимент на версии War Robots для Steam. Она хорошо подходила для этой цели по многим параметрам: практически полностью совпадающая кодовая база и арт, сравнительно небольшое количество игроков, при этом в среднем изрядно более мощное железо у этих самых игроков позволяло не так сильно заботиться об оптимизации на данном этапе, а сосредоточиться на красочной и насыщенной картинке.

В общих чертах идея эксперимента выглядела так:

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

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

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

Первым делом, еще до каких-либо серьезных работ по графике, цветовое пространство проекта было переведено в линейное. Картинку, намекающую на реализм, можно получить и в цветовом пространстве sRGB, но это связано с таким количеством сложностей и неудобств на каждом этапе, что всерьез так делать имеет смысл только при необходимости поддерживать совсем устаревшие на сегодня устройства с версией OpenGL ES 2.0.

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

На получившейся картинке, помимо всего прочего, явно заметна нехватка динамического диапазона: освещение слишком однородное, будто в пасмурный день или в старой игре. В реальности освещенность ярких участков такой сцены может превосходить освещенность участков в тени в тысячи и десятки тысяч раз и доходить до сотни тысяч люкс. Невозможность работать с таким диапазоном (и значениями выше 1.0) при использовании буферов отрисовки форматов вроде R8G8B8A8_UNorm (8 бит беззнаковый целочисленный на канал) приводит к следующему почти обязательному требованию PBR — возможности отрисовки в широком динамическом диапазоне. Для этого используются буферы с плавающей запятой разной точности: от R32G32B32A32_FLOAT до формата R11G11B10_FLOAT. Табличка для понимания:

Из таблицы видно, что, например, формат R32G32B32A32_FLOAT имеет точность 7.22 ненулевых знаков и огромное максимальное значение, однако требует значительно большего объема памяти для хранения — в 4 раза больше, чем R8G8B8A8_UNorm. На практике для хранения значений кадра в широком динамическом диапазоне нам достаточно максимального значения и точности R16G16B16A16_FLOAT — он и использовался в версии для Steam. Более того, в большинстве случаев и при должном обращении достаточно и точности, обеспечиваемой форматом R11G11B10_FLOAT. Этот формат занимает в два раза меньше памяти, чем R16G16B16A16_FLOAT, и в точности вписывается в тот же «битовый бюджет», что и R8G8B8A8_UNorm. Отсутствие четвертого канала и вероятность возникновения небольшого цветового сдвига по причине меньшей точности синего канала не играют значительной роли, поэтому в мобильной версии мы по возможности используем его.

После получения кадра и постобработки получившегося HDR-изображения диапазон необходимо вернуть в рамки значений, доступных для вывода на экран, — для этого применяется процедура тонального отображения (tonemapping). Как в ремастере версии для Steam, так и в ремастере мобильном почти всегда мы используем алгоритм тонального отображения ACES: он позволяет получить «кинематографичную» картинку со слегка выжженными цветами в ярких областях.

На самой сцене больше всего изменений претерпел ландшафт. Логично было никак не затрагивать геймплей сцены — а значит, форма ландшафта в игровой зоне должна была остаться абсолютно такой же. Для этого с игровой зоны была снята карта высот (с точностью ±4 см), а на ее основе был процедурно сгенерирован новый ландшафт, изменения в форме которого касались только заднего плана. Текстуры ландшафта были, конечно же, перерисованы, маски сгенерированы, тесселяция добавлена, ручей налит, а после — подсушен. На небе появились динамические облака, в воздухе — пыль и дымка, а мост в центре карты — в очередной (но не в последний) раз переделан. Для понимания дальнейшего направления этого было достаточно.

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

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

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

Также были переработаны почти два десятка единиц вооружения: текстуры заменены на PBR, изменены некоторые анимации, слегка доработаны шейдеры эффектов, а для выстрелов и взрывов добавлены источники света.

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

Для каждой сцены на основе старых текстур был сгенерирован новый набор: выше разрешением и включающий в себя все необходимые карты для корректной работы PBR-шейдера. Некоторые из новых текстур были доработаны вручную для более корректной передачи физических свойств материалов, так что итоговый результат получился вполне адекватным, учитывая его полуавтоматическую природу. Также на каждой карте был настроен свет, постобработка и прочие параметры сцены и объектов окружения, связанные с освещением. На некоторых картах были доработаны модели, расставлены дополнительные источники освещения, а небо было заменено на динамическое. С помощью подключившихся на завершающем этапе художников на некоторых сценах был переделан ландшафт и, наконец, на всех картах были сделаны настройки для глобального освещения в реальном времени и запечен свет. Результат, конечно, не поражал, но разница с Canyon хотя бы не так бросалась в глаза.

Из чего состоит графика?

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

Статья будет разделена на несколько отдельных частей:

Стоит начать с текстур. Возможно многие не знают, но в играх уже давно модель персонажа или любого другого объекта состоит не из одной текстуры. В Call Of Duty: Black Ops 3 для лиц героев используется 6 текстурных карт, которые сейчас детально разберём.

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

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

Карты нормалей – это RGB изображения, где каждый из каналов (красный, зелёный, синий) интерпретируется в X, Y и Z координаты нормалей поверхности соответственно. Красный канал пространства касательных карты нормалей отвечает за ось X (нормали направленны влево или вправо), зелёный канал за ось Y (нормали направлены вверх или вниз) и синий канал за ось Z (нормали направлены прямо от поверхности.

Gloss — эта карта контролирует резкость отражений. При самом высоком показателе материал становится зеркальным, а при нулевом значении — матовым.

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

Fuzz map используется для создания различной растительности. Например, борода, брови, мох на дереве.

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

Тени считаются реалистичными, когда их основание выглядит четко, а дальше тень рассеивается. За такой эффект отвечают soft shadows.

Ambient occlusion используется для затенения объеĸтов, создания теней на стыĸах стен.

Возможно вы часто видели в игре, как пробиваются лучи света сквозь листву. Это выглядит и вправду красиво. В данный момент используется два вида прямого освещения: SSGR освещение и Volumetric light.

Screen space god rays это более «дешёвый» способ отображения солнечных лучей. Самый главный минус этого метода в том, что лучи находятся в пространстве экрана, если смотреть на источник освещения. Отводя камеру от источника света, лучей будет не видно и эффект объема пропадёт.

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

Global illumination — это название ряда алгоритмов, используемых в трёхмерной графике для более реалистичной имитации света.

Глобальное освещение рассчитывает не только прямое освещение, но и отражения света, цветовые отскоки.

Cube map — методика для моделирования отражений на поверхности объекта. Кубические карты не показывают динамику, а это значит, что декали и персонажи не будут отображены при таком методе отражения.

Screen space reflections — отражения, построенные по принципу трассировки лучей в пространстве экрана. Главные минусы таких отражений, это артефакты по краям экрана и исчезновение отражения при повороте камеры вниз или вверх.

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

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

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

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

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

Извини меня, но тут капец как поверхностно и пользы не принесёт вообще тому, кто это читает. Читателю же по-любому интересно, как работают технологии. Собственно половины настроек, встречающихся в играх, тут нет. Написал бы хоть влияние на производительность. Ну и отдельно стоит упомянуть текстурирование black ops 3. Почему именно эту игру? Тут даже не все карты используются, а также часть названий искажены под их движок. Roughness — это почти тот же glossness, только первое название встречается почти во всех движках. Про карту трансмиссии вообще впервые слышу, но звучит как z-buiffer, так что какой в ней смысл?
Касательно статьи о трассировке, может просто своруешь у IXBT огроменную статью? Смысла писать про неё нет, т.к. коротеньких статей по ней куча, а если напишешь также, то она шибко не разъяснит, как лучи работают.
Для тех, кому реально интересно, как работает графон, держите ссылочки на статьи поподробнее. Сначала лучше начать с сайта stopgame, там и весело, и понятно. Статья о PBR освещении: https://stopgame.ru/blogs/topic/66047 Линия статей по основам нового графона + как влияет на производительность.
Часть 1: https://stopgame.ru/blogs/topic/55415
Часть 2: https://stopgame.ru/blogs/topic/55667
Часть про сглаживание: https://stopgame.ru/blogs/topic/55929
Часть 3: https://stopgame.ru/blogs/topic/55951
Как работает трассировка лучей во всех подробностях: https://www.ixbt.com/3dv/directx-raytracing.html Но предупреждаю, она тут на 2 часа чтения, что весьма много, ещё и лучше читать всё целиком за раз.
Лучшая статья о том, как работает затенение, вокселями и просто SSAO/HBAO: https://nvpixels.wordpress.com/2017/10/13/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-ambient-occlusion-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-%D0%BE%D0%BD-%D0%BD%D1%83%D0%B6%D0%B5%D0%BD/
Как работают мягкие тени PCSS. HFTS от Nvidia: https://nvpixels.wordpress.com/2017/12/08/%D0%BA%D0%B0%D0%BA-pcss-%D0%B8-hfts-%D1%82%D0%B5%D0%BD%D0%B8-%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B0%D1%8E%D1%82-%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE-%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA/
Статья про DLSS: https://dtf.ru/hard/108592-4k-i-120-fps-na-maksimalkah-kak-tehnologiya-dlss-2-0-izmenit-nashe-otnoshenie-k-proizvoditelnosti-v-igrah
Как работает VXGI/SVOGI: https://habr.com/ru/company/mailru/blog/353740/
Хорошая статья XYZ по нормалям: https://dtf.ru/gamedev/96898-vse-pro-bake-zapechku-kak-etap-aaa-payplayna
И развёртке: https://dtf.ru/gamedev/83063-uv-razvertka-aaa-payplayn-4-7-samyy-polnyy-gayd
Ну и это в основном всё, что понадобится для настройки графики + знание, как оно работает и почему столько ест. Чтобы узнать, почему настройки съедают много, то лучше пользоваться nvidia guidence(https://www.geforce.com/whats-new/guides) даже через переводчик, т.к. подробно разъясняется сколько отдельная настройка ест в кадрах и как влияет на видяху, процессор.

Эта статья была нужна уже хотя бы для того, чтобы ты ссылок накидал.

Спасибо. Данная статься для меня была больше экспериментом, ведь я просто любитель, а не графический инженер. Я никогда сам не работал с 3д графикой. Я обычный игрок, которому просто интересно, как работает графика в видеоиграх, из чего она устроена и почему. Согласен, что статья не очень глубокая, но она больше как знакомит с основными простыми вещами в графической составляющей. Потому что я сам когда пытался искать информацию о технологиях и методах графики, то приходил в ступор, и приходилось собирать информацию по частям: от ютуберов, таких же постов про какую либо одну из технологий, презентации разработчиков на gdc.

с последним сильно соглашусь. Сам только недавно начал осваивать UE4 и Blender, т.к. слишком долго читал только информацию, без практики. Широких статей обо всём нет, но они банально нужны обществу, учитывая как прогрессирует геймдев. Ещё и технологии эволюционируют, появляются новые костыли, а всё их описание остаётся с 1990-2000 годов, что тоже подбешивает. Тут чисто нужно тонну времени и терпение, чтобы сделать много статей конкретно на DTF, а остальные сайты морально устарели, т.к. картинки фигового разрешения, сами сайты привет из 2000 и гифок нет. Сейчас более-менее канал "Этот компьютер" начинает разбирать настройки графики и как они работают, в будущем поможет, впринципе. Желаю успехов в просвещении DTF, но попробуй не так сжато расписывать, всё-таки народ на DTF хоть и агрессивный, даже легион и киберпанк удалось унизить, но вполне интересующийся геймдевом.

Лучшая статья о том, как работает затенение, вокселями и просто SSAO/HBAO

но тут капец как поверхностно

Лучше по конкретным примерам изучать что бы то ни было, т.е. код рендера и шейдеры. А это всё теория, понимать и самостоятельно имплементировать(!) которую можно только уже хорошо, практически разбираясь в этом. Так что это разные уровни поверхностного мема "Рисуем сову" 🙂
Но опять же какова цель, разбираться теоретически в принципах и писать код (либо разбирать чужой) разные вещи, шишек не мало на этом набито 🙂

как по мне писать код вообще не надо, когда уже всё готово у Nvidia, AMD и github. Копируй и вставляй. Потом одним движением переключай. Сейчас мало кому нужны собственные движки, разве что для развлечения. У больших и средних студий уже свои движки готовые с документацией, скорее всего. Просто если писать трассировщик лучей самому в 300 строк, чтобы посмотреть на 3 шарика с отражениями в окошке собственной программки. Тут только если у тебя наполеоновские планы, чтобы уйти в старшие инженеры-разработчики NVIDIA, AMD.

как по мне писать код вообще не надо, когда уже всё готово у Nvidia, AMD и github. Копируй и вставляй. Потом одним движением переключай.

Прикрутите одним движением код TAA (просто как пример) к любой игре (сурс порту) от ID Software 🙂
Я говорю, все представления розобьются о практику, ничего просто так не делается нужно понимание чужого кода, чужого движка, API. И общих навыков программирования.

cохранил тупую статью, что бы сохранить умный комент

Было бы хорошо еще увидеть в подробностях, что такое SSGI, и чем он отличается от SSRTGI. Очень мало информации на эту тему можно найти.

Очень странный пост непонятно для кого. Выглядит как выжимка из доклада в универе по комп. графике
Не стоит считать всю написанную мной информацию 100% точной. Если вам интересно — углубитесь в тему и перепроверьте.

А зачем тогда это читать, если в итоге надо перепроверять?

Сыш ты не базарь так э! Умный э? Профессор наук?

Куда не зайду, всюду вижу его.

Большинство местных комментаторов даже таких основ не знают. Пусть будет ликбез.

Ссылка на основную публикацию