CG & C++ blog
57 subscribers
13 photos
2 files
129 links
Краткий обзор публикаций, презентаций, докладов по графике и C++
Download Telegram
Список тэгов

Программирование
#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, виртуальная реальность
Doom 2016. Комбинация light probes и screen space reflections приводит к таким двойным отражениям, когда light probe находится в стороне от источника освещения.
#cg #SSR
Cyberpunk 2077. Разница между screen space reflections и трассировкой лучей. Для оптимизации SSR применяется везде, где возможно и только за пределами экрана включается RT. Результат сильно различается.
#raytracing #SSR #cg
Screen space reflections неправильно обрабатывают двойное отражение, так как отражение зависит от того, под каким углом приходит луч. То же самое относится и к кэшированию освещения при трассировке.
#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
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
Geometry Rendering Pipeline Architecture
Как и в Horizon Forbidden West используется гибрид forward+ или deferred и visibility buffer.
Опятьже много общего с nanite: нарезание на мешлеты, тест видимости.
#cg #vis_buf
Как расчитать TBN в шейдере
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