Download - Skyforge rendering tech (KRI 2014)
![Page 1: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/1.jpg)
SKYFORGE: Технологии рендерингаСергей Макеев, технический директор
![Page 2: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/2.jpg)
План! Что такое Skyforge?! Графические технологии, использованные при разработке графического движка Skyforge
! Physically Based Shading! Deferred Shading! Reversed Depth buffer
! Выводы! Q&A
![Page 3: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/3.jpg)
![Page 4: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/4.jpg)
Skyforge для программиста
! Fantasy + Sci-fi ! Свой движок! Nextgen графика в MMO! Стилизованная реальность! Огромные открытые локации! Материалы и освещение максимально естественны! 4 графических программиста
![Page 5: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/5.jpg)
![Page 6: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/6.jpg)
![Page 7: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/7.jpg)
![Page 8: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/8.jpg)
![Page 9: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/9.jpg)
![Page 10: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/10.jpg)
![Page 11: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/11.jpg)
![Page 12: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/12.jpg)
Physically Based Shading
![Page 13: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/13.jpg)
Зачем ?! Зачем нужен шейдинг, основанный на физике?
! Более реалистичная и сведенная картинка – меньше настраивать
! Материалы и свет разделены – меньше настраивать! Меньше параметров в материале – меньше настраивать! Соблюдается закон сохранения энергии – меньше настраивать
! Физически корректно не значит фотореалистично(см. работы Disney, Pixar и т.д.)
![Page 14: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/14.jpg)
Физика процесса! В реальной жизни поверхность не гладкая! Поверхность объектов состоит из множества маленьких неровностей. Эти неровности настолько маленькие, что не видны невооруженным глазом! Размер микронеровностей больше длины волны и они влияют на отражение света от поверхности
![Page 15: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/15.jpg)
Бумага под электронным микроскопом
![Page 16: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/16.jpg)
Бумага под электронным микроскопом
![Page 17: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/17.jpg)
Микрогеометрия поверхности! Часть света отражается от поверхности! Часть проникает внутрь поверхности и переизлучается или поглощается
![Page 18: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/18.jpg)
Микрогеометрия поверхности! Мы оперируем на уровне пикселей! Нужно учитывать отраженный и переизлученный свет
![Page 19: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/19.jpg)
! BRDF ! Bidirectional! Reflection! Distribution! Function
! Цель: рассчитать количество энергии, излучаемой в сторону наблюдателя, при заданном входящем излучении! В теории, многомерная функция - 3D, 4D, 6D! На практике, мы будем рассматривать функцию от двух параметров
BRDF
![Page 20: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/20.jpg)
Рассеянный свет (diffuse)! Можно пренебречь точкой входа и выхода луча! Считаем, что весь рассеянный свет распределяется равномерно
![Page 21: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/21.jpg)
Рассеянный свет (diffuse)! Функция для расчета рассеянного света
! l – направление света! v – направление взгляда (не используется в данной модели)! albedo – векторный параметр, который определяет сколько энергии рассеивается, а сколько поглощается материалом ! n – нормаль поверхности! Деление на PI закон сохранения энергии
! Всем известный dot ( N, L )! dot ( N, L ) это cos между векторами N, L
![Page 22: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/22.jpg)
Рассеянный свет (diffuse)! Площадь проекции зависит от угла падения! И равна cos(N, L)
![Page 23: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/23.jpg)
Рассеянный свет (diffuse)! На поверхность попадает меньше энергии в зависимости от угла падения
![Page 24: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/24.jpg)
Отраженный свет (specular)! Отражение света
! Направление отражения меняетсяиз-за микрограней
![Page 25: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/25.jpg)
Отраженный свет (specular)! Отражение света
! Менее гладкая поверхность
![Page 26: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/26.jpg)
Микрогеометрия поверхности! Microfacet theory
! Моделирует поверхность как множество микрограней
! Каждая микрогрань - идеально отражающее зеркало
! Нам нужна сумма вклада каждой микрограни в освещение (интеграл)
! Слишком много вычислений, чтобы решить численно
![Page 27: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/27.jpg)
Microfacet BRDF! Функция для расчета отраженного света (microfacet theory)
! D – функция распределения нормали. Определяет, как микрограни распределены вдоль направления h (от этой функции меняется форма блика)! F – формула Френеля! G – функция затенения микрогранями друг друга
! l – направление света! v – направление взгляда! n – нормаль поверхности! h – вектор между векторами l and v (half vector)
![Page 28: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/28.jpg)
Half vector! Half vector, вектор между L и V! Физический смысл half vector
! Фильтрация микрограней, которые вносят вклад в BRDF! h = m значит микрогрань отражает свет, видимый наблюдателю
![Page 29: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/29.jpg)
Microfacet BRDF! Функция для расчета отраженного света (microfacet theory)
! D – функция распределения нормали. Определяет, как микрограни распределены вдоль направления h (от этой функции меняется форма блика)! F – формула Френеля! G – функция затенения микрогранями друг друга
! l – направление света! v – направление взгляда! n – нормаль поверхности! h – вектор между векторами l and v (half vector)
![Page 30: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/30.jpg)
Распределение микрограней! Степень косинуса в качестве функции распределения микрограней (Blinn-Phong)! Степень 0.25 .. 65536
![Page 31: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/31.jpg)
Microfacet BRDF! Функция для расчета отраженного света (microfacet theory)
! D – функция распределения нормали. Определяет, как микрограни распределены вдоль направления h (от этой функции меняется форма блика)! F – формула Френеля! G – функция затенения микрогранями друг друга
! l – направление света! v – направление взгляда! n – нормаль поверхности! h – вектор между векторами l and v (half vector)
![Page 32: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/32.jpg)
Френель!ло
![Page 33: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/33.jpg)
Френель
![Page 34: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/34.jpg)
Френель! Аппроксимация Шлика
! f0 – можно получить из IOR (Index of refraction)
![Page 35: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/35.jpg)
Френель! Френель: задает, сколько света будет поглощено, а сколько отражено под разными углами
! Физический смысл f0: процент света, отраженный от материала под прямым углом
! Обычное значение f0 для диэлектриков 2% - 5%
! Металлы рассеивают мало света, в основном отражают
![Page 36: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/36.jpg)
Microfacet BRDF! Функция для расчета отраженного света (microfacet theory)
! D – функция распределения нормали. Определяет, как микрограни распределены вдоль направления h (от этой функции меняется форма блика)! F – формула Френеля! G – функция затенения микрогранями друг друга
! l – направление света! v – направление взгляда! n – нормаль поверхности! h – вектор между векторами l and v (half vector)
![Page 37: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/37.jpg)
Microfacet BRDF! Пример того, какая часть света скрывается микрогранями
![Page 38: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/38.jpg)
Видимость микрограней
! Используем простейшую функцию видимости
![Page 39: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/39.jpg)
! Функция отраженного света! Соответствует normalized Blinn-Phong model
Отраженный свет (specular)
![Page 40: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/40.jpg)
Изменение параметров! Изменение F0 ( IOR )
! Изменение шероховатости
![Page 41: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/41.jpg)
Сохранение энергии! Закон сохранения энергии
! Количество отраженного света <= 1! Т.е. рассеянный + отраженный свет <= 1
! Из этого следует: яркость и площадь блика от источника света связаны
![Page 42: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/42.jpg)
Шероховатость 100%
![Page 43: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/43.jpg)
Шероховатость 80%
![Page 44: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/44.jpg)
Шероховатость 50%
![Page 45: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/45.jpg)
Шероховатость 30%
![Page 46: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/46.jpg)
Шероховатость 10%
![Page 47: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/47.jpg)
Интенсивность света! Интенсивность света обратно пропорциональна квадрату расстояния до источника света
! Хорошо подходит для точечных источников, не имеющих объема! Мы хотим источник света, у которого есть размер (area light)! Стремится к нулю, но никогда его не достигает
![Page 48: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/48.jpg)
Интенсивность света! Нужно учесть два радиуса
! Rinner – размер источника! Router – дистанция, на которой вкладом в освещение можно пренебречь
![Page 49: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/49.jpg)
Интенсивность света! Наша функция затухания! Константа внутри Rinner
! На дистанции Router равна 0
float GetAttenuation(float distance, float lightInnerR, float invLightOuterR){ float d = max(distance, lightInnerR); return saturate(1.0 - pow(d * invLightOuterR, 4.0)) / (d * d + 1.0);}
![Page 50: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/50.jpg)
Интенсивность света! График затухания света
![Page 51: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/51.jpg)
Модель материала! Модель материала
! Base color! Albedo для диэлектрика! Векторная часть F0 для проводника
! Normal (нормаль поверхности, макро)! Roughness (шероховатость поверхности, микро)! Fresnel F0 (практически всегда константа для диэлектрика, скалярная часть F0 для металла)
! Metal (маска: металл или диэлектрик)
![Page 52: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/52.jpg)
![Page 53: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/53.jpg)
Base color ( Albedo )
![Page 54: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/54.jpg)
Base color ( Albedo )
![Page 55: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/55.jpg)
Normal map
![Page 56: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/56.jpg)
Gloss (Roughness)
![Page 57: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/57.jpg)
Specular ( F0 / IOR )
![Page 58: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/58.jpg)
Metal
![Page 59: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/59.jpg)
Пример материала
![Page 60: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/60.jpg)
Пример материала
![Page 61: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/61.jpg)
Пример материала
![Page 62: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/62.jpg)
Пример материала
![Page 63: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/63.jpg)
Пример материала
![Page 64: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/64.jpg)
Пример материала
![Page 65: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/65.jpg)
Deferred Shading
![Page 66: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/66.jpg)
Deferred shading! Плюсы
! Геометрия отделена от освещения! Много источников света! Нет комбинаторного взрыва в шейдерах
! Минусы! Bandwidth! Источники света с тенями по-прежнему дорогие! Сложность с разными BRDF! Поддержка прозрачности
![Page 67: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/67.jpg)
Deferred shading! Skyforge Gbuffer layout (2xRGBA8, 1xRGB10A2, 1xD24S8)
! 96 bits + 24 bits + 8 bits = 128 bits per pixel
![Page 68: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/68.jpg)
Финальный результат
![Page 69: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/69.jpg)
Base color
![Page 70: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/70.jpg)
Нормали (world space)
![Page 71: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/71.jpg)
Шероховатость
![Page 72: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/72.jpg)
Fresnel reflectance (F0)
![Page 73: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/73.jpg)
Metallic
![Page 74: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/74.jpg)
HDR: Global Illumination + Emissive
![Page 75: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/75.jpg)
Ambient occlusion
![Page 76: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/76.jpg)
Без локального освещения и волюметриков
![Page 77: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/77.jpg)
Финальный результат
![Page 78: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/78.jpg)
Tips & Tricks
![Page 79: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/79.jpg)
Реконструкция позиции! Алгоритмам освещения нужна позиция
! world space! shadow space! view space! и т.д.
! В Gbuffer хранится только глубина! используем INTZ (DX9)! гиперболическое распределение "
! Нужна реконструкция позиции из глубины
![Page 80: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/80.jpg)
Реконструкция позиции! Преобразуем depth буфер в линейный! INTZ в R32F! Сразу после заполнения Gbuffer
// Функция для преобразования глубины с гиперболическим распределением в линейнуюfloat ConvertHyperbolicDepthToLinear(float hyperbolicDepth){ return ((zNear / (zNear-zFar)) * zFar) / (hyperbolicDepth - (zFar / (zFar-zNear)));}
![Page 81: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/81.jpg)
Подобие треугольников! Треугольник P1, P2, P3 подобен треугольнику P1, P4, P5
![Page 82: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/82.jpg)
Подобие треугольников! Треугольник P1, P2, P3
![Page 83: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/83.jpg)
Подобие треугольников! Треугольник P1, P4, P5
![Page 84: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/84.jpg)
Реконструкция позиции! Вершинный шейдер
! Считаем треугольник P1, P2, P3 в вершинном шейдере! Передаем отрезок P1, P3 в пиксельный шейдер
! Пиксельный шейдер! Получаем интерполированный вектор P1,P3 (rayDir) через интерполятор! Считываем линейную глубину! position = cameraPosition + rayDir * linearDepth
! Очень быстро: mad + интерполятор! Можно реконструировать позицию в любом удобном пространстве. world, view, shadow и т.д.! HLSL код в бонус слайдах
![Page 85: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/85.jpg)
Reversed Depth Buffer
![Page 86: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/86.jpg)
Большая дальность видимости
![Page 87: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/87.jpg)
Большая дальность видимости
![Page 88: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/88.jpg)
Большая дальность видимости
![Page 89: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/89.jpg)
Большая дальность видимости
![Page 90: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/90.jpg)
Reversed Depth Buffer! Reversed depth buffer
near = 1far = 0
! Работает с fixed point depth, формат D24S8! Нужно инвертировать D3DRS_ZFUNC
D3DCMP_GREATEREQUAL! Всегда инвертируйте матрицу проекции
Некорректно инвертировать на стадии viewport’а или в шейдере
![Page 91: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/91.jpg)
Матрица проекции
![Page 92: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/92.jpg)
! Как получается глубина?! float4 p = mul( float4( pos, 1 ), mtxProjection );! float depth = p.z / p.w;
Матрица проекции
![Page 93: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/93.jpg)
Сравнение методов! Z near = 0.5! Z far = 50000.0
![Page 94: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/94.jpg)
Сравнение методов! Стандартный метод
! Reversed depth buffer
![Page 95: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/95.jpg)
Сравнение методов! Стандартный метод
! Reversed depth buffer
![Page 96: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/96.jpg)
Numeric error – стандартный метод
![Page 97: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/97.jpg)
Numeric error – reversed depth buffer
![Page 98: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/98.jpg)
Numeric error – reversed depth buffer
![Page 99: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/99.jpg)
Reversed depth buffer : выводы
! D24 легко покрывает дальность в 50 км! Reverse depth подходит для любого движка! Лучше закладывать с самого начала проекта
! Извлечение плоскостей фрустума из матрицы! Bias у теней! и т.д.
! При возможности используйте float depth буфер
![Page 100: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/100.jpg)
Заключение! Nextgen графика в MMO уже реальность
! Все меньше отличий от ААА консольных тайтлов
! Физичный шейдинг упрощает производство контента
! Нам нужны графические программисты !
![Page 101: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/101.jpg)
СПАСИБО ЗА ВНИМАНИЕ!ВОПРОСЫ[email protected]
![Page 102: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/102.jpg)
Bonus
![Page 103: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/103.jpg)
Реконструкция позиции: Vertex shader
// Часть матрицы проекцииfloat tanHalfVerticalFov; // invProjection.11;float tanHalfHorizontalFov; // invProjection.00;
// Базис камеры в пространстве реконструкцииfloat3 camBasisUp;float3 camBasisSide;float3 camBasisFront;
// postProjectiveSpacePosition в homogeneous projection spacefloat3 CreateRay(float4 postProjectiveSpacePosition){ float3 leftRight = camBasisSide * -postProjectiveSpacePosition.x * tanHalfHorizontalFov; float3 upDown = camBasisUp * postProjectiveSpacePosition.y * tanHalfVerticalFov; float3 forward = camBasisFront; return (forward + leftRight + upDown);}
void VertexShader(float4 inPos, out float4 outPos : POSITION, out float3 rayDir : TEXCOORD0){ outPos = inPos; rayDir = CreateRay(inPos);}
![Page 104: Skyforge rendering tech (KRI 2014)](https://reader033.vdocument.in/reader033/viewer/2022052317/55a89af51a28abb17f8b461d/html5/thumbnails/104.jpg)
Реконструкция позиции: Pixel shader
// Позиция камеры в пространстве реконструкцииfloat3 camPosition;
float4 PixelShader(float3 rayDir : TEXCOORD0) : COLOR0{ ... float linearDepth = tex2D(linearDepthSampler, uv).r; float3 position = camPosition + rayDir * linearDepth; ...}
// Функция для преобразования глубины с гиперболическим распределением в линейнуюfloat ConvertHyperbolicDepthToLinear(float hyperbolicDepth){ return ((zNear / (zNear-zFar)) * zFar) / (hyperbolicDepth - (zFar / (zFar-zNear)));}