Adventures with Deferred Texturing in 'Horizon Forbidden West'
Начинают сразу с низкоуровневых оптимизаций, поэтому лучше посмотреть слайды 61..63, там граф кадра, по которому уже проще будет понять что происходит.
Из интересного - рисование мелкой геометрии используя visibility buffer, трансформацию и растеризацию в компьют шейдере, при этом трансформация и растеризация запускаются поочередно, чтобы использовать промежуточный буфер вершин фиксированного размера. В результате получился гибрид обычного рендера и некого аналога Nanite.
1..14 - детально разбирают в чем проблема рисования мелких треугольников.
15..19 - для оптимизации мелкой геометрии испоьлзуют visibility buffer.
20..25 - visibility buffer дополнили UV, ddx/ddy и ID материала. Вместо компьют шейдера используют фрагментный, а материал выбирается через тест глубины, где буфер глубины - 16 битный ID матриала.
26..36 - параллельно с рисованием каскадов теней используется асинхронный компьют для наложения матриалов на геометрию из visibility buffer и опять хитрые оптимизации.
37..46 - трансформация вершин сделана на асинхронном компьюте, трансформированные вершины сохраняются во временный буфер и отправлются на растеризацию также в компьют шейдере (слайды 26..36). Геометрия разбита на батчи до 64к треугольников, примерно как мешлеты.
47..68 - дальше идут детали реализации.
69..91 - variable rate shading (VRS) устанавливается для примитивов, что необычно.
#gpu_opt #vis_buf #VRS
Начинают сразу с низкоуровневых оптимизаций, поэтому лучше посмотреть слайды 61..63, там граф кадра, по которому уже проще будет понять что происходит.
Из интересного - рисование мелкой геометрии используя visibility buffer, трансформацию и растеризацию в компьют шейдере, при этом трансформация и растеризация запускаются поочередно, чтобы использовать промежуточный буфер вершин фиксированного размера. В результате получился гибрид обычного рендера и некого аналога Nanite.
1..14 - детально разбирают в чем проблема рисования мелких треугольников.
15..19 - для оптимизации мелкой геометрии испоьлзуют visibility buffer.
20..25 - visibility buffer дополнили UV, ddx/ddy и ID материала. Вместо компьют шейдера используют фрагментный, а материал выбирается через тест глубины, где буфер глубины - 16 битный ID матриала.
26..36 - параллельно с рисованием каскадов теней используется асинхронный компьют для наложения матриалов на геометрию из visibility buffer и опять хитрые оптимизации.
37..46 - трансформация вершин сделана на асинхронном компьюте, трансформированные вершины сохраняются во временный буфер и отправлются на растеризацию также в компьют шейдере (слайды 26..36). Геометрия разбита на батчи до 64к треугольников, примерно как мешлеты.
47..68 - дальше идут детали реализации.
69..91 - variable rate shading (VRS) устанавливается для примитивов, что необычно.
#gpu_opt #vis_buf #VRS
Addressing Criticism of RISC-V Microprocessors
перевод
Об отличии ARM от RISC-V. Малополезно для оптимизации, но интересно посмотреть насколько разные у них подходы.
#hw #arm #riscv
перевод
Об отличии ARM от RISC-V. Малополезно для оптимизации, но интересно посмотреть насколько разные у них подходы.
#hw #arm #riscv
Compute versus Hardware
Сравнение растеризации треугольников на фиксиованном конвеере и компьют шейдере (как в Nanite) на разном железе.
Почти на всем современном железе получается быстрее растеризация в компьют шейдере, исключение только Adreno 660.
Интересно что mesh shader оказался медленее компьют шейдера, видимо все упирается в фиксированный конвеер.
#gpu_opt
Сравнение растеризации треугольников на фиксиованном конвеере и компьют шейдере (как в Nanite) на разном железе.
Почти на всем современном железе получается быстрее растеризация в компьют шейдере, исключение только Adreno 660.
Интересно что mesh shader оказался медленее компьют шейдера, видимо все упирается в фиксированный конвеер.
#gpu_opt
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
GDC2022 AMD Ryzen Processor Software Optimization, (video)
19 - некоторые ядра ЦП могут работать быстрее других. Получается у ОС есть больше информации о ЦП, чем доступно из API.
35..41 - Весьма странный тест на производительность, из интересного разве что использование
44..46 - Наглядно показаны кэш промахи при чтении полей структуры, классический array of structure vs structure of arrays.
47..48 - Пример использования
49 - Оптимизация memcpy за счет выравнивания памяти, 64 байт - хорошо, 4Кб - еще лучше.
#cpu_opt #amd_cpu
19 - некоторые ядра ЦП могут работать быстрее других. Получается у ОС есть больше информации о ЦП, чем доступно из API.
35..41 - Весьма странный тест на производительность, из интересного разве что использование
_mm_pause()
при зацикливании на спинлоке.44..46 - Наглядно показаны кэш промахи при чтении полей структуры, классический array of structure vs structure of arrays.
47..48 - Пример использования
_mm_prefetch()
.49 - Оптимизация memcpy за счет выравнивания памяти, 64 байт - хорошо, 4Кб - еще лучше.
#cpu_opt #amd_cpu
How Halo Infinite's Bots Make Decisions
Весьма поверхностное описание, как сделан ИИ ботов в Halo.
Зато ссылаются на более подрбную презентацию о принятии решений на основе рассчитанного веса:
GDC 2010 - Improving AI Decision Modeling Through Utility Theory, (video)
#game_ai
Весьма поверхностное описание, как сделан ИИ ботов в Halo.
Зато ссылаются на более подрбную презентацию о принятии решений на основе рассчитанного веса:
GDC 2010 - Improving AI Decision Modeling Through Utility Theory, (video)
#game_ai
Gdcvault
Thinking Like Players: How 'Halo Infinite's' Multiplayer Bots Make Decisions
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
Development and Deployment of Multiplayer Online Games
Бета версия книги в открытом доступе.
Разбирается все возможные темы связанные с написанием ММО. Наиболее полезна сетевая часть.
Например:
Server-Side MMO Architecture, Front-End Servers and Client-Side Random Load Balancing
#backend
Бета версия книги в открытом доступе.
Разбирается все возможные темы связанные с написанием ММО. Наиболее полезна сетевая часть.
Например:
Server-Side MMO Architecture, Front-End Servers and Client-Side Random Load Balancing
#backend
(video) Transform your geometry with Metal mesh shaders
Mesh shader в Metal.
API не сильно отличается от Vk/DX12, так что портирование не должно вызвать затруднения.
Object shader (task shader в Vk/DX12) проверяет видимость мешлетов и запускает нужное количество меш групп.
Mesh shader генерирует или читает и трансформирует вершины мешлета.
Дальше все как обычно - позиция трансформируется в экранную, нарезаются тайлы и запускается потайловая растеризация.
То есть в отличие от десктопа, где все вершинны всегда в кэше, здесь в любом случае сгенерированные вершины выгружаются в системную память после нарезания на тайлы, чтобы освободить кэш для растеризации тайла.
Все преимущество только в отсечении невидимых мешлетов на ГП и в выборе уровне детализации. Все это можно было сделать и до меш шейдера.
#metal #apple_gpu
Mesh shader в Metal.
API не сильно отличается от Vk/DX12, так что портирование не должно вызвать затруднения.
Object shader (task shader в Vk/DX12) проверяет видимость мешлетов и запускает нужное количество меш групп.
Mesh shader генерирует или читает и трансформирует вершины мешлета.
Дальше все как обычно - позиция трансформируется в экранную, нарезаются тайлы и запускается потайловая растеризация.
То есть в отличие от десктопа, где все вершинны всегда в кэше, здесь в любом случае сгенерированные вершины выгружаются в системную память после нарезания на тайлы, чтобы освободить кэш для растеризации тайла.
Все преимущество только в отсечении невидимых мешлетов на ГП и в выборе уровне детализации. Все это можно было сделать и до меш шейдера.
#metal #apple_gpu
(video) Уязвимости аллокаторов памяти – Павел Филонов
Простой пример как можно занести уязвимость в самописный аллокатор.
#cpp #security #rus
Простой пример как можно занести уязвимость в самописный аллокатор.
#cpp #security #rus
(video) How to Create Content with Signed Distance Functions (Johann Korndörfer)
Объясняют как моделировать сцены с помощью SDF, от простых форм до целого города.
#sdf
Объясняют как моделировать сцены с помощью SDF, от простых форм до целого города.
#sdf
Ada GPU architecture
Описание архитектуры RTX 40xx.
Старшая модель содержит 12 GPC (graphics processing clusters), в каждом кластере свой raster engine, что в теории позволяет рисовать параллельно, но эта фича давно заблокирована в драйверах.
Для трассировки лучей добавили новые возможности:
* Opacity Micromap Engine - используется для ускорения альфа теста, то есть пустые области в геометрии теперь обрабатываются в железе, а не в шейдере (расширение VK_EXT_opacity_micromap).
* Displaced MicroMesh Engine - оптимизирует сложную геометрию, 10х быстрее строится BVH, 20х компактнее.
* Shader Execution Reordering - как следует из описания эта фича только для трассировки и, возможно, требует ручного управления, зато в 2 раза ускоряет вторичные лучи.
Про DLSS 3 пока нечего сказать, надо самому тестировать, прошлые версии местами давали сильные артефакты.
Прошлые модели: Ampere, Turing, Pascal
#nvidia
Описание архитектуры RTX 40xx.
Старшая модель содержит 12 GPC (graphics processing clusters), в каждом кластере свой raster engine, что в теории позволяет рисовать параллельно, но эта фича давно заблокирована в драйверах.
Для трассировки лучей добавили новые возможности:
* Opacity Micromap Engine - используется для ускорения альфа теста, то есть пустые области в геометрии теперь обрабатываются в железе, а не в шейдере (расширение VK_EXT_opacity_micromap).
* Displaced MicroMesh Engine - оптимизирует сложную геометрию, 10х быстрее строится BVH, 20х компактнее.
* Shader Execution Reordering - как следует из описания эта фича только для трассировки и, возможно, требует ручного управления, зато в 2 раза ускоряет вторичные лучи.
Про DLSS 3 пока нечего сказать, надо самому тестировать, прошлые версии местами давали сильные артефакты.
Прошлые модели: Ampere, Turing, Pascal
#nvidia
(video) Metal Compute on MacBook Pro
Различные советы по оптимизации на уровне API и шейдеров.
10:46 - ГП содержит отдельный кэш для буферов и текстур, лучше использовать оба кэша.
15:19 - рекомендуют использовать int вместо uint для обхода массивов.
14:32 .. 22:31 - примеры оптимизации и профилирования.
#gpu_opt #apple_gpu
Различные советы по оптимизации на уровне API и шейдеров.
10:46 - ГП содержит отдельный кэш для буферов и текстур, лучше использовать оба кэша.
15:19 - рекомендуют использовать int вместо uint для обхода массивов.
14:32 .. 22:31 - примеры оптимизации и профилирования.
#gpu_opt #apple_gpu
(video) Tune CPU job scheduling for Apple silicon games
Рекомендации, как делать многопоточку на ЦП от Apple.
6:00 - оверхэд от запуска тасков на разных ядрах.
16:20 - как получить количество P и E ядер ЦП.
19:30 - LibDispatch для тех, кто не пишет свою систему тасков.
21:58 - выбор приоритетов для потоков.
#cpu_opt #threading #apple_cpu
Рекомендации, как делать многопоточку на ЦП от Apple.
6:00 - оверхэд от запуска тасков на разных ядрах.
16:20 - как получить количество P и E ядер ЦП.
19:30 - LibDispatch для тех, кто не пишет свою систему тасков.
21:58 - выбор приоритетов для потоков.
#cpu_opt #threading #apple_cpu
(video) CppCon 2016: Timur Doumler “Want fast C++? Know your hardware!"
Рекомендации по оптимизации, ничего нового, но презентация хорошая.
21:52 - немного про префетчер.
23:00 - ассоциативность кэша, объясняет почему происходит резкое падение производительности при чтении с определенным шагом (256, 512 байт). Ссылается на статью Gallery of Processor Cache Effects.
28:18 - выравнивание данных.
34:20 - предсказание ветвлений.
44:10 - 'false sharing', частые синхронизации кэшей между ядрами ЦП.
48:10 - зависимость между данными в цикле.
#cpu_opt
Рекомендации по оптимизации, ничего нового, но презентация хорошая.
21:52 - немного про префетчер.
23:00 - ассоциативность кэша, объясняет почему происходит резкое падение производительности при чтении с определенным шагом (256, 512 байт). Ссылается на статью Gallery of Processor Cache Effects.
28:18 - выравнивание данных.
34:20 - предсказание ветвлений.
44:10 - 'false sharing', частые синхронизации кэшей между ядрами ЦП.
48:10 - зависимость между данными в цикле.
#cpu_opt
Ghostwire Tokyo: DLSS vs. TSR vs. FSR
Сравнение разных техник сглаживания и апскейлинга.
На скриншотах много тонких линий, что создает проблемы для реконструкции.
Но нехватает тестов в динамике на мелкие движущиеся объекты, DLSS с этим плохо справляется и оставляет шлейфы.
#AA
Сравнение разных техник сглаживания и апскейлинга.
На скриншотах много тонких линий, что создает проблемы для реконструкции.
Но нехватает тестов в динамике на мелкие движущиеся объекты, DLSS с этим плохо справляется и оставляет шлейфы.
#AA