Ssr графика что это
Оптимизация настроек Escape From Tarkov
Escape from Tarkov находится в раннем доступе с августа 2016 года и до сих пор не выходит из стадии беты. Как можно предположить, в игре есть проблемы с производительностью, но надеемся, наше руководство позволит вам с ними разобраться.
Мы поможем вам с оптимизацией настроек Escape from Tarkov, которая позволит вам играть более гладко. В этом гайде мы коснемся таких проблем с быстродействием Escape from Tarkov, как лаги, замирания, стабильно низкая частота кадров, дергание, резкие пики задержки и внезапные падения частоты кадров.
Первое, что вам нужно сделать – убедиться, что ваш компьютер удовлетворяет указанным ниже системным требованиям. Если ваше железо им не соответствует, упомянутые проблемы могут быть связаны именно с этим. В таком случае мы рекомендуем сделать апгрейд. Игра сильно нагружает процессор, поэтому освободите его ресурсы или купите более мощный.
Минимальные системные требования
Рекомендуемые системные требования
Бывает, что в требованиях к видеокарте указывается одна или несколько моделей, но это не тот случай. Чтобы проверить, с какой версией DirectX cовместима ваша карта, выполните следующие действия:
Теперь вы должны увидеть свою версию DirectX.
Существует множество методов повысить быстродействие в Escape from Tarkov. Начнем с наиболее очевидного.
Обновите драйверы видеокарты
Это может показаться банальным, но обновление драйверов – действительно первое, что стоит попробовать, потому что как правило новые драйверы AMD и NVIDIA способны значительно повысить частоту кадров. Это легко и не отличается от обновления любых других программ.
Откройте приложение AMD Radeon Software (для видеокарт AMD) или NVIDIA GeForce Experience (для видеокарт NVIDIA) и проверьте наличие обновлений. Если они доступны, скачайте и установите их.
Настройка графики
Следующий шаг – оптимизация настроек в самой игре. Скорее всего, вы искали здесь именно это, так что давайте приступим.
Обратите внимание, что это настройки для высокого быстродействия, актуальные прежде всего для систем, едва соответствующим минимальным или рекомендуемым требованиям. Если у вас мощный компьютер, и вы не хотите жертвовать графикой ради быстродействия, этот этап можно пропустить.
Вот что необходимо сделать:
Настройка игры
Для повышения быстродействия можно также дополнительно оптимизировать игровые настройки. Просто выполните следующие действия:
Оптимизация настроек Панели управления NVIDIA
Если у вас видеокарта NVIDIA, настройки Панели управления NVIDIA можно оптимизировать следующим образом:
Отлично! Теперь давайте установим ряд настроек специально для Escape from Tarkov:
Если вы играете на ноутбуке, убедитесь, что в качестве предпочтительного графического процессора выбран Высокопроизводительный процессор NVIDIA
Оптимизация настроек AMD Radeon
Если у вас видеокарта AMD, настройки можно оптимизировать следующим образом:
Оптимизация обновления Windows
Далее мы можем сделать простой шаг, который освободит немного ресурсов:
Отключение OneDrive
Мы также рекомендуем отключать OneDrive, если вы им не пользуетесь. Щелкните по значку OneDrive на панели задач правой кнопкой мыши и кликните Закрыть OneDrive.
Оптимизация Discord
Если во время игры вы пользуетесь Discord для связи, или он просто запущен, когда вы играете в одиночку, его тоже можно быстро оптимизировать. Вот как это делается:
Оптимизация Google Chrome
Если вы пользуетесь Google Chrome, аппаратное ускорение также стоит отключить:
Оптимизация электропитания
Можно повысить быстродействие, включив схему электропитания, ориентированную на высокую производительность. Вот как это делается:
Включить игровой режим
В Windows 10 есть так называемый Игровой режим, который мы рекомендуем включить:
Если Escape from Tarkov у вас установлена на HDD (что мы не рекомендуем), можно существенно ускорить время загрузки, переместив игру на SSD (при наличии).
Заключение
Вот и все! Надеемся, что вы смогли поднять частоту кадров.
Если у вас высокий пинг, рекомендуем познакомиться с нашим руководством о том, как снизить пинг в играх. А так как Escape from Tarkov сильно загружает процессор, можно рассмотреть вариант покупки нового процессора, а может быть, видеокарты или дополнительной оперативной памяти, если у вас достаточно средств.
SSLR: Screen Space Local Reflections в AAA-играх
Привет, друг! В этот раз я опять подниму вопрос о графике в ААА-играх. Я уже разобрал методику HDRR (не путать с HDRI) тут и чуть-чуть поговорил о коррекции цвета. Сегодня я расскажу, что такое SSLR (так же известная как SSPR, SSR): Screen Space Local Reflections. Кому интересно — под кат.
Введение в Deferred Rendering
Для начала введу такое понятие как Deferred Rendering (не путать с Deferred Shading, т.к. последнее относится к освещению). В чем суть Deferred Rendering? Дело в том, что все эффекты (такие как освещение, глобальное затенение, отражения, DOF) можно отделить от геометрии и реализовать эти эффекты как особый вид постпроцессинга. К примеру, что нужно, чтобы применить DOF (Depth Of Field, размытие на дальних расстояниях) к нашей сцене? Иметь саму сцену (Color Map) и иметь информацию о позиции текселя (другими словами на сколько пиксель далеко от камеры). Далее — все просто. Применяем Blur к Color Map, где радиус размытия будет зависеть от глубины пикселя (из Depth Map). И если взглянуть на результат — чем дальше объект, тем сильнее он будет размыт. Так что же делает методика Deferred Rendering? Она строит так называемый GBuffer, который, обычно, в себя включает три текстуры (RenderTarget):
В случае с Color map, Normal map вроде все понятно, это обычные Surface.Color текстуры: пожалуй, за исключением того, что вектор нормали может лежать в пределах [-1, 1] (используется простая упаковка вектора в формат [0, 1]).
А вот ситуация с Depth map становится непонятной. Как же Depth map хранит в себе информацию о позиции пикселя, да еще и одним числом? Если говорить сильно упрощенно, трансформация примитива:
Дает нам экранные координаты:
И некоторую информацию о том, насколько “далеко” от камеры пиксель:
Исходя из этого UV нам не нужен, т.к. при рисовании обычного квада на весь экран он и так известен. Поэтому стоит хранить в карте глубины не позицию пикселя, а только глубину.
В дальнейшем мы сможем реконструировать позицию пикселя очень простым способом:
Напомню, что для построения GBuffer необходима такая методика как MRT (Multiple Render Targets), которая рисует модель сразу в несколько Render Target (причем в каждом RT содержится разная информация). Одно из правил MRT — размерность всех Render Target должна быть одинаковой. В случае Color Map, Normal Map — Surface.Color: 32-ух битная RT, где на каждый канал ARGB приходится по 8 бит, т.е. 256 градаций от 0 до 1.
Благодаря такому подходу мы можем применять сложные эффекты к любой геометрии, например самый популярный Screen Space эффект: SSAO (Screen Space Ambient Occlusion). Этот алгоритм анализирует буферы глубины и нормали, считая уровень затенения. Весь алгоритм я описывать не буду, он уже описывался на хабре, скажу лишь то, что задача алгоритма сводится к трассировки карты глубины: у нас есть набор случайных векторов, направленных из считаемого “пикселя” и нам нужно найти кол-во пересечений с геометрией.
Пример эффекта (слева без SSAO, справа с SSAO):
Так же Deferred Shading является Screen Space эффектом. Т.е. для каждого источника света на экране (без всяких оптимизаций) мы рисуем квад в режиме Additive в так называемый RenderTarget: Light Map. И зная мировую позицию “пикселя”, его нормаль, позицию источника света — мы можем посчитать освещенность этого пикселя.
Пример Deferred Shading (освещение выполнено отложено, после отрисовки геометрии):
Достоинства и проблемы Screen Space эффектов
Самый главный плюс Screen Space эффектов — независимость сложности эффекта от геометрии.
Самый главный минус — локальность всех эффектов. Дело в том, что мы постоянно будем сталкиваться с Information Lost, во многих случаях это сильно зависит обзора, поскольку SSE зависит от смежных глубин текселей, которые могут быть сгенерированы любой геометрией.
Ну и стоит отменить, что Screen Space эффекты выполняются полностью на GPU и являются пост-процессингом.
Наконец SSLR
После всей теории мы подошли к такому эффекту, как Screen Space Local Reflections: локальные отражения в экранном пространстве.
Для начала разберемся с перспективной проекцией:
Горизонтальный и вертикальный угол зрения задается FOV (обычно 45 градусов, я предпочитаю 60 градусов), в виртуальной камере они разные т.к. учитывается еще и Aspect Ratio (соотношение сторон).
Окно проекции (там, где мы оперируем UV-space данными) — это, что мы видим, на то мы проецируем нашу сцену.
Передняя и задняя плоскости отсечения это соответственно Near Plane, Far Plane, задаются так же в проекцию как параметры. Делать в случае Deferred Rendering слишком большим значением Far Plane стоит, т.к. точность Depth Buffer сильно упадет: все зависит от сцены.
Теперь, зная матрицу проекции и позицию на окне проекции (а так же глубину) для каждого пикселя мы вычисляем его позицию следующим образом:
После нам нужно найти вектор взгляда на этот пиксель:
В качестве CameraPosition выступает позиция камеры.
И найти отражение этого вектора от нормали в текущем пикселе:
Далее задача сводится к трассировке карты глубины. Т.е. нам нужно найти пересечение отраженного вектора с какой-либо геометрией. Понятное дело, что любая трассировка производится через итерации. И мы в них сильно ограниченны. Т.к. каждая выборка из Depth Map стоит времени. В моем варианте мы берем некоторое начальное приближение L и динамически меняем его исходя из расстояния между нашим текселем и позицией, которую мы “восстановили”:
Вспомогательные функции, перевод мировой точки на экранное пространство:
После завершения итераций мы имеет позицию “пересечения с отраженной геометрией”. А наше значение nuv будет проекцией этого пересечения на экран, т.е. nuv.xy – это UV координаты в экранном нашем пространстве, а nuv.z это восстановленная глубина (т.е. abs(GetDepth(nuv.xy)-nuv.z) должен быть очень маленьким).
В конце итераций L будет показывать расстояние отраженного пикселя. Последний этап — собственно добавление отражения к Color Map:
Разбавим теорию иллюстрациями, исходное изображение (содержание Color Map из GBuffer):
После компиляции шейдера (отражения) мы получим следующую картину (Color Map из GBuffer + результат шейдера SSLR):
Не густо. И тут стоит еще раз напомнить, что Space-Screen эффекты это сплошной Information Lost (примеры выделены в красные рамки).
Дело в том, что если вектор отражения выходит за пределы Space-Screen – информация о Color-карте становится недоступной и мы видим Clamping нашего UV.
Чтобы частично исправить эту проблему, можно ввести дополнительный коэффициент, который будет отражать “дальность” отражения. И далее по этому коэффициенту мы будем затенять отражение, проблема частично решается:
Результат, отражение умноженное на error (попытка убрать артефакт SSLR — information lost):
Уже лучше, но мы замечаем еще одну проблему, что будет, если вектор отразится в направлении камеры? Clamping’а UV происходить не будет, однако, несмотря на актуальность UV (x > 0, y > 0, x
Ssr графика что это
Думаю, с понятием разрешения знакомы уже более-менее все игроки, но на всякий случай вспомним основы. Все же, пожалуй, главный параметр графики в играх.
Изображение, которое вы видите на экране, состоит из пикселей. Разрешение — это количество пикселей в строке, где первое число — их количество по горизонтали, второе — по вертикали. В Full HD эти числа — 1920 и 1080 соответственно. Чем выше разрешение, тем из большего количества пикселей состоит изображение, а значит, тем оно четче и детализированнее.
Влияние на производительность
Очень большое.Увеличение разрешения существенно снижает производительность. Именно поэтому, например, даже топовая RTX 2080 TI неспособна выдать 60 кадров в 4K в некоторых играх, хотя в том же Full HD счетчик с запасом переваливает за 100. Снижение разрешения — один из главных способов поднять FPS. Правда, и картинка станет ощутимо хуже.
В некоторых играх (например, в Titanfall) есть параметр так называемого динамического разрешения. Если включить его, то игра будет в реальном времени автоматически менять разрешение, чтобы добиться заданной вами частоты кадров.
Вертикальная синхронизация
Если частота кадров в игре существенно превосходит частоту развертки монитора, на экране могут появляться так называемые разрывы изображения. Возникают они потому, что видеокарта отправляет на монитор больше кадров, чем тот может показать за единицу времени, а потому картинка рендерится словно «кусками».
Вертикальная синхронизация исправляет эту проблему. Это синхронизация частоты кадров игры с частотой развертки монитора. То если максимум вашего монитора — 60 герц, игра не будет работать с частотой выше 60 кадров в секунду и так далее.
Есть и еще одно полезное свойство этой опции — она помогает снизить нагрузку на «железо» — вместо 200 потенциальных кадров ваша видеокарта будет отрисовывать всего 60, а значит, загружаться не на полную и греться гораздо меньше.
Впрочем, есть у Vsync и недостатки. Главная — очень заметный «инпут-лаг», задержка между вашими командами (например, движениями мыши) и их отображением в игре.
Поэтому играть со включенной вертикальной синхронизацией в мультипеере противопоказано. Кроме того, если ваш компьютер «тянет» игру при частоте ниже, чем заветные 60 FPS, Vsync может автоматически «лочиться» уже на 30 FPS, что приведет к неслабым таким лагам.
Лучший способ бороться с разрывами изображения на сегодняшний день — купить монитор с поддержкой G-Sync или FreeSync и соответствующую видеокарту Nvidia или AMD. Ни разрывов, ни инпут-лага.
Влияние на производительность
В общем и целом — никакого.
Сглаживание(Anti-aliasing)
Если нарисовать из квадратных по своей природе пикселей ровную линию, она получится не гладкой, а с так называемыми «лесенками». Особенно эти лесенки заметны при низких разрешениях. Чтобы устранить этот неприятный дефект и сделать изображения более четким и гладким, и нужно сглаживание.
Здесь и далее — слева изображение с отключенной графической опцией (или установленной на низком значении), справа — с включенной (или установленной на максимальном значении).
Технологий сглаживания несколько, вот основные:
Влияние на производительность
От ничтожного (FXAA) до колоссального (SSAA). В среднем — умеренное.
Качество текстур
Один из самых важных параметров в настройках игры. Поверхности всех предметов во всех современных трехмерных играх покрыты текстурами, а потому чем выше их качество и разрешение — тем четче, реалистичнее картинка. Даже самая красивая игра с ультра-низкими текстурами превратится в фестиваль мыловарения.
Влияние на производительность
Если в видеокарте достаточно видеопамяти, то практически никакого. Если же ее не хватает, вы получите ощутимые фризы и тормоза. 4 гигабайт VRAM хватает для подавляющего числа современных игр, но лучше бы в вашей следующей видеокарте памяти было 8 или хотя бы 6 гигабайт.
Анизотропная фильтрация
Анизотропная фильтрация, или фильтрация текстур, добавляет поверхностям, на которые вы смотрите под углом, четкости. Особенно ее эффективность заметна на удаленных от игрока текстурах земли или стен.
Чем выше степень фильтрации, чем четче будут поверхности в отдалении.
Этот параметр влияет на общее качество картинки довольно сильно, но систему при этом практически не нагружает, так что в графе «фильтрация текстур» советуем всегда выставлять 8x или 16x. Билинейная и трилинейная фильтрации уступают анизотропной, а потому особенного смысла в них уже нет.
Влияние на производительность
Тесселяция
Технология, буквально преображающая поверхности в игре, делающая их выпуклыми, рельефными, натуралистичными. В общем, тесселяция позволяет отрисовывать гораздо более геометрически сложные объекты. Просто посмотрите на скриншоты.
Влияние на производительность
Зависит от игры, от того, как именно движок применяет ее к объектам. Чаще всего — среднее.
Качество теней
Все просто: чем выше этот параметр, тем четче и подробнее тени, отбрасываемые объектами. Добавить тут нечего. Иногда в играх также встречается параметр «Дальность прорисовки теней» (а иногда он «вшит» в общие настройки). Тут все тоже понятно: выше дальность — больше теней вдалеке.
Влияние на производительность
Зависит от игры. Чаще всего разница между низкими и средними настройками не столь велика, а вот ультра-тени способны по полной загрузить ваш ПК, поскольку в этом случае количество объектов, отбрасывающих реалистичные тени, серьезно вырастает.
Глобальное затенение (Ambient Occlusion)
Один из самых важных параметров, влияющий на картинку разительным образом. Если вкратце, то AO помогает имитировать поведения света в трехмерном мире — а именно, затенять места, куда не должны попадать лучи: углы комнат, щели между предметами и стенами, корни деревьев и так далее.
Существует два основных вида глобального затенения:
SSAO (Screen space ambient occlusion). Впервые появилось в Crysis — потому тот и выглядел для своего времени совершенно фантастически. Затеняются пиксели, заблокированные от источников света.
HBAO (Horizon ambient occlusion). Работает по тому же принципу, просто количество затененных объектов и зон гораздо больше, чем при SSAO.
Влияние на производительность
Глубина резкости (Depth of Field)
То самое «боке», которое пытаются симулировать камеры большинства современных объектов. В каком-то смысле это имитация особенностей человеческого зрения: объект, на который мы смотрим, находится в идеальном фокусе, а объекты на фоне — размыты. Чаще всего глубину резкости сейчас используют в шутерах: обратите внимание, что когда вы целитесь через мушку, руки персонажа и часть ствола чаще всего размыты.
Впрочем, иногда DoF только мешает — складывается впечатление, что у героя близорукость.
Влияние на производительность
Целиком и полностью зависит от игры. От ничтожного до довольно сильного (как, например, в Destiny 2).
Bloom (Свечение)
Этот параметр отвечает за интенсивность источников света в игре. Например, с включенным Bloom, свет, пробивающийся из окна в помещение, будет выглядеть куда ярче. А солнце создавать натуральные «засветы». Правда, некоторые игры выглядят куда реалистичнее без свечения — тут нужно проверять самому.
Влияние на производительность
Чаще всего — низкое.
Motion Blur (Размытие в движении)
Motion Blur помогает передать динамику при перемещениях объекта. Работает он просто: когда вы быстро двигаете камерой, изображение начинает «плыть». При этом главный объект (например, руки персонажа с оружием) остается четким.
Русские Блоги
[OpenGL] Эффект отражения экранного пространства
Введение в концепцию
Отражение экранного пространства, также известное как SSR, является одним из алгоритмов серии SS. Алгоритм основан на отложенном рендеринге, то есть перед внедрением SSR вам необходимо знать об отложенном рендеринге, включая: запись информации, относящейся к G-буферу, и восстановление положения, вектора линии визирования, нормали и т. Д. В соответствии с G-буфером. Серия информации и т. Д.
Принцип самого алгоритма очень прост, то есть для каждого пикселя объекта в пространстве экрана решается вектор отражения в соответствии с информацией о нормали и линии визирования, соответствующей пикселю. Затем начните с текущей точки и шагайте по направлению вектора отражения, чтобы определить, равна ли глубина координат после пошагового перехода глубине объекта, хранящегося в G-буфере. Если они равны, это означает, что есть пересечение, и цвет объекта на пересечении принимается в качестве окончательного Цвет отражения.
Сам по себе этот алгоритм не является реальным отражением, а представляет собой грубое моделирование отражения, поэтому его эффект намного хуже, чем у оптического отслеживания в реальном времени. Согласно экспериментам, если SSR реализован чисто без какой-либо оптимизации или маскировки, эффект действительно Очень плохой.
Во-первых, есть существенное ограничение: поскольку это алгоритм экранного пространства, он может получать только те цвета пикселей, которые можно увидеть на текущем экране. Если часть столкновения отражения является частью объекта, который перекрывается, часть за пределами камеры В такие места потом попасть невозможно. Для пикселей, не прошедших проверку попадания, можно использовать выборку только кубического отображения (из кубической карты фона или предварительно обработанной кубической карты окружающей сцены), чтобы восполнить недостаток, или, если возможно, данные могут быть получены из предыдущего кадра в движущемся изображении.
Другая очень серьезная проблема заключается в том, что, поскольку наше обнаружение пересечения представляет собой алгоритм легкого пошагового выполнения, а пошаговое выполнение имеет определенную длину шага, оно не может быть очень точным. Поскольку при пошаговом режиме существует определенный интервал, будут появляться артефакты в форме полос или некоторые места, где отражения не должны появляться, поскольку существует ошибка в определении равных чисел с плавающей запятой, это может быть ошибочно оценено как отражение попадания, поэтому появляются странные цвета. В первом случае, если мы внесем случайное возмущение в начальную позицию светового шага, эффект будет немного лучше (но на самом деле он только превратит искаженное изображение в форме полосы в искаженное изображение с зернистым шумом, что эквивалентно изменению искажения. «Равномерно разложить» в сторону Ray-match).
Это ограничение также ограничивает сценарии применения SSR. Например, если мы хотим добиться очень гладкого и четкого зеркального эффекта, то лучшим выбором должна быть плоская проекция, которая заключается в использовании дополнительной камеры для рендеринга сцены в зеркале отдельно (трассировка лучей также возможна, но она плавно применяется в играх. По оценкам, некоторые трудности все еще существуют). Что касается SSR, мы обычно используем его там, где качество отражения не такое высокое, например, вода на земле после дождя или высокие здания со светозагрязненным стеклом. В первом случае цвет и очертания отраженного объекта можно смутно различить из стоячей воды. Поскольку сама стоячая вода имеет некоторые нормальные возмущения и помехи в освещении, она в определенной степени исказит изображение. В это время отражение Точность изображения не так уж и важна.
Мы вводим в игру SSR, который представляет собой относительно недорогой метод отражения в реальном времени, который в определенной степени улучшит качество изображения, а также изменит содержание отражения по мере движения объекта. В это время в сочетании с традиционным методом отражения, то есть кубическая карта объединяется, и система отражения может быть изначально построена.
Демонстрация эффекта
Я сделал эту демонстрацию, потому что случайно увидел описание алгоритма отражения экранного пространства, когда читал книгу. В нем всего несколько строк, но я могу понять смысл после прочтения. Поэтому я подумал о повторной реализации этого алгоритма, чтобы увидеть, есть ли какие-нибудь проблемы с моим пониманием. Конечно, я очень сожалею об этом после того, как сделал это, потому что эффект от простого внедрения SSR будет очень разочаровывающим.В основном, картина, которую можно увидеть, выглядит так:
Эффект 1:
Если порог сравнения слишком велик, будут возникать повторяющиеся отражения, такие как отражения, появляющиеся под сферой, где отражения не должны появляться.
Эффект 2:
Если шаг выборки слишком велик, появятся артефакты полосатости.
Эффект 3:
Добавьте случайный шум возмущения в начальную позицию трассировки лучей для эффекта 2,
Но на самом деле он меняется с артефактов полос на артефакты зернистости.
Эффект 4 :
На основе эффекта 3 размер шага уменьшается (исходный размер шага 2/5), а искажения лучше
Эффект 5 :
Добавлена оптимизация бинарного поиска на основе эффекта 4, но кажется, что отражения появятся там, где отражения не должны появляться
также может быть связано с выбором порога. Бинарный поиск более точен и требует меньшего порога.
Эффект 6 :
На основе эффекта 5 порог сравнения глубины во время двоичного поиска немного снижен, чтобы уменьшить количество ложных отражений.
В любом случае, это не похоже на эффект, который можно хорошо применить к игровому контенту. Я не слишком оптимизировал результаты и едва смог добиться эффекта исходного изображения, но все же не могу избежать некоторых неверно идентифицированных отражений (например, некоторых белых шумов слева и справа от нижней части сферы), а также возможности неправильного получения изображения под определенными углами. Цвет отражения.
Эффект 7:
Отражение полностью открыто, а цвет отражения размыт
Эффект 8:
Один из недостатков алгоритма, например, если верхняя часть мяча вынесена за пределы экрана, полученный результат отражения будет неполным.
Реализация
В настоящее время все вычисления выполняются в пространстве просмотра. Возможно, будет более точным использовать постоянный размер шага в пространстве экрана.
Сначала вычислите вектор отражения и преобразуйте вектор отражения в пространство обзора. Mat3 добавлен, чтобы исключить эффект смещения.
После этого я получил случайный размер начального шага.Я получил этот джиттер из проекта объемного света и не подтвердил, как Crytex сделал это в начале.
Получите основной цвет объекта из g-буфера, а затем смешайте основной цвет и цвет отражения, выбранный кубической картой, для пикселей, которые должны быть отражены как цвет значения отражения по умолчанию.
Установите длину шага и общее количество шагов. Здесь количество шагов также может быть записано как фиксированное значение в соответствии с потребностями. Это эквивалентно тому, что объекты, находящиеся слишком далеко, относятся к вторичной информации, поэтому отражение не рассчитывается.
Начните входить в цикл Ray-Match, сначала рассчитайте длину шага в направлении вектора отражения, а затем получите окончательное положение шага pos:
Запишите текущую глубину. Для объекта перед камерой глубина отрицательная, поэтому мы принимаем обратное:
Затем положение пространства просмотра преобразуется в пространство экрана. В это время диапазон значений x, y равен [-1,1]. Переназначить его на [0,1], что соответствует координатам текстуры G-буфера. :
Когда обнаруживается, что глубина луча больше, чем глубина объекта в сцене, дополнительно оценивается, меньше ли разница между ними, чем определенный порог.По результатам оценки положение считается положением отражения. Мы выбираем цвет размытия по Гауссу, а затем выходим из цикла.
Рассчитайте ленивую версию размытого цвета (потому что лучше использовать mipmap для понижающей дискретизации или размытия горизонтального и вертикального направлений 🙂
Оптимизация двоичного поиска также выполняется локально. Основная идея состоит в том, чтобы использовать текущую позицию выборки и предыдущую позицию выборки в качестве двух конечных точек пополам, когда глубина луча больше глубины объекта сцены, а затем определять глубину и сцену в средней позиции выборки. Если разница в глубине объекта меньше определенного порога, в противном случае установите начальную точку как текущую среднюю точку или конечную точку как текущую среднюю точку в соответствии с соотношением между двумя глубинами.
Лучше всего установить ограничение на количество циклов (оно будет зависать, если не было установлено ранее). Я думаю, это потому, что глубина сцены не монотонна, ее глубина монотонна лишь частично. В противном случае мы будем выполнять двоичный поиск в начале вместо того, чтобы находить диапазон значений пересечения, а затем проводить дихотомию в этом небольшом диапазоне. Мы можем провести дихотомию в этом небольшом диапазоне, потому что мы согласны с тем, что этот раздел может быть удовлетворен. Локальная монотонность. Но это не абсолютное значение, поэтому мы все еще можем не найти конечную позицию попадания, поэтому необходимо установить максимальное количество циклов.
После добавления двоичного поиска, хотя отражающих попаданий действительно намного больше, но есть цвета отражения во многих местах, где не должно быть отражающих попаданий. Предполагается, что существует определенная взаимосвязь с выбором порога:
некоторые проблемы
Кроме того, эта реализация оставила некоторые проблемы:
Кроме того, текстура глубины объекта сцены, которую мы выбрали, является глубиной передней части объекта, а объект имеет толщину. При вычислении точки пересечения вектора отражения и объекта она должна пересекаться с задней стороной объекта. Поскольку глубина задней части неизвестна, она может быть Просчитано как пересечение объекта спереди. Если объект сплошного цвета, ошибка не выглядит столь очевидной, но если разница в цвете между передней и задней текстурами велика, выбранный цвет отражения будет иметь очень очевидную мутацию.