Список тэгов
Программирование
#cpp - C++
#cpu_opt - оптимизации для ЦП
#atomics - атомарные операции, работа с кэшем
#threading - многопоточка
#lockfree - Lock free, wait free алгоритмы
#backend - сервера
#ecs - entity component system
#dod - data oriented design, низкоуровневая оптимизация
Графические API, работа на низком уровне
#gpu_opt - оптимизации для ГПУ
#gapi - все графические API
#vulkan #vk - Vulkan API
#metal - Apple Metal
#opengl #gl - OpenGL
#dx - DirectX 11, 12
Рендеринг
#cg - все что связано с компьютерной графикой
#proc_gen - процедурная генерация
#games - обзор технологий из игр
Другое
#news - новости по теме
#blog - новости по моим разработкам
#hw - все что связано с компьютерным железом
#desktop #win #mac #linux - относится к ПК, ноутбуки
#mobile #android #ios - относится к мобильным платфомам
#vr - VR, виртуальная реальность
Программирование
#cpp - C++
#cpu_opt - оптимизации для ЦП
#atomics - атомарные операции, работа с кэшем
#threading - многопоточка
#lockfree - Lock free, wait free алгоритмы
#backend - сервера
#ecs - entity component system
#dod - data oriented design, низкоуровневая оптимизация
Графические API, работа на низком уровне
#gpu_opt - оптимизации для ГПУ
#gapi - все графические API
#vulkan #vk - Vulkan API
#metal - Apple Metal
#opengl #gl - OpenGL
#dx - DirectX 11, 12
Рендеринг
#cg - все что связано с компьютерной графикой
#proc_gen - процедурная генерация
#games - обзор технологий из игр
Другое
#news - новости по теме
#blog - новости по моим разработкам
#hw - все что связано с компьютерным железом
#desktop #win #mac #linux - относится к ПК, ноутбуки
#mobile #android #ios - относится к мобильным платфомам
#vr - VR, виртуальная реальность
Cyberpunk 2077. Разница между screen space reflections и трассировкой лучей. Для оптимизации SSR применяется везде, где возможно и только за пределами экрана включается RT. Результат сильно различается.
#raytracing #SSR #cg
#raytracing #SSR #cg
Screen space reflections неправильно обрабатывают двойное отражение, так как отражение зависит от того, под каким углом приходит луч. То же самое относится и к кэшированию освещения при трассировке.
#cg #raytracing #SSR #blog
#cg #raytracing #SSR #blog
Advanced Shading Techniques with Pixel Local Storage
Примеры использования внутренней памяти тайла (tile/pixel local storage).
Поддерживается на OpenGLES с Mali GPU, а так же на Metal с Apple GPU.
На Adreno используется другое расширение, только для сложного блендинга.
Поддержка TLS/PLS на Vulkan добавленна только в новых версиях API и только в новых девайсах из-за невозможности обновления графических драйверов.
#cg #gl #vk #OIT #mali
Примеры использования внутренней памяти тайла (tile/pixel local storage).
Поддерживается на OpenGLES с Mali GPU, а так же на Metal с Apple GPU.
На Adreno используется другое расширение, только для сложного блендинга.
Поддержка TLS/PLS на Vulkan добавленна только в новых версиях API и только в новых девайсах из-за невозможности обновления графических драйверов.
#cg #gl #vk #OIT #mali
An Overview of the Diablo II: Resurrected Renderer
1..34 - общий обзор рендер пайплайна
39..47 - В игре используется фиксированый угол обзора, за счет этого они использовали интересный способ оптимизации освещения.
Освещение записывается в 3D текстуру 32х8х32 и используется вместо light probe.
56..71 - порядко-независимая прозрачность (Weighted blended OIT), для такой нагруженной на эффекты игры это хорошая оптимизация.
74..88 - показывают сколько занимает каждый проход на XBox. Судя по всему использование варпов у них далеко от 100% и есть куда оптимизировать.
#cg #OIT
1..34 - общий обзор рендер пайплайна
39..47 - В игре используется фиксированый угол обзора, за счет этого они использовали интересный способ оптимизации освещения.
Освещение записывается в 3D текстуру 32х8х32 и используется вместо light probe.
56..71 - порядко-независимая прозрачность (Weighted blended OIT), для такой нагруженной на эффекты игры это хорошая оптимизация.
74..88 - показывают сколько занимает каждый проход на XBox. Судя по всему использование варпов у них далеко от 100% и есть куда оптимизировать.
#cg #OIT
Geometry Rendering Pipeline Architecture
Как и в Horizon Forbidden West используется гибрид forward+ или deferred и visibility buffer.
Опятьже много общего с nanite: нарезание на мешлеты, тест видимости.
#cg #vis_buf
Как и в Horizon Forbidden West используется гибрид forward+ или deferred и visibility buffer.
Опятьже много общего с nanite: нарезание на мешлеты, тест видимости.
#cg #vis_buf
Activision
Geometry Rendering Pipeline Architecture
Как расчитать TBN в шейдере
Tangent и Bitangent вектора должны быть направлены в ту же сторону что и текстурные координаты UV.
Это легко сделать в фрагментном шейдере на основе деривативов.
Деривативы
Зная как меняется
Работает отлично на плоских поверхностях и детализированных изогнутых.
Если не работает, то достаточно поменять направление
#blog #cg
Tangent и Bitangent вектора должны быть направлены в ту же сторону что и текстурные координаты UV.
Это легко сделать в фрагментном шейдере на основе деривативов.
Деривативы
dFdx/dFdy
вернут разницу переданного значения между соседними пикселями.Зная как меняется
worldPos
и uv
можно рассчитать нормаль как векторное произведение и касательные (TB) как 3D вектор для uv
.float3x3 ComputeTBNinFS (float2 uv, float3 worldPos)
{
float3 wp_dx = dFdx( worldPos );
float3 wp_dy = dFdy( worldPos );
float2 uv_dx = dFdx( uv );
float2 uv_dy = dFdy( uv );
float3 t = normalize( wp_dx * uv_dy.t - wp_dy * uv_dx.t );
float3 b = normalize( -wp_dx * uv_dy.s + wp_dy * uv_dx.s );
float3 n = normalize( cross( wp_dy, wp_dx ));
return float3x3( t, b, n );
}
Работает отлично на плоских поверхностях и детализированных изогнутых.
Если не работает, то достаточно поменять направление
uv
.#blog #cg