[优化] 阴影剔除 [Optimizations] Shadow Culling [Оптимизации] отсечения по теням

If you liked this item, please rate it up on Steam Workshop page.

Author: whosyourdaddy

Last revision: 13 Dec, 2025 at 10:16 UTC

File size: 86.86 KB

On Steam Workshop

Description:
介绍 | Introduction | Введение

渲染过程中会忽略被阴影遮挡的物品,显著减轻CPU和低配GPU负载,CPU性能开销约降低5%~15%,特别适合物品繁多的密室场景。

During rendering, items occluded by shadows are ignored, which significantly reduces the CPU and low‑end GPU workload. CPU performance overhead is lowered by approximately 5%–15%, making this especially suitable for cluttered room scenes with many objects.

В процессе рендеринга игнорируются объекты, перекрытые тенями, что значительно снижает нагрузку на процессор и маломощные видеокарты. Затраты производительности ЦП снижаются примерно на 5–15%, что особенно удобно для сцен с множеством предметов, например, в заполненных помещениях.


剔除 | Culling | Отсечение

五点采样,剔除中心、轴对齐包围盒四顶点都位于阴影中的物品,同时运用阴影预测手段来减少物体闪烁现象。

Five-point sampling is employed to cull objects whose center and all four vertices of the axis-aligned bounding box are located within shadowed areas, while shadow prediction is applied to reduce object flickering.

Используется пятиточечная выборка для отбраковки объектов, у которых центр и все четыре вершины выровненного по осям ограничивающего параллелепипеда (AABB) находятся в затенённых областях, а также применяется прогнозирование теней для уменьшения мерцания объектов.


优化细节 | Optimize details | Оптимизировать детали
  • stackalloc减轻GC压力。
  • 多核调度,同时支持8个逻辑核心
  • 引用结构体,避免创建副本。
  • 视窗内AABB相交测试获取凸包(会投射阴影的对象)。
  • 凸包预筛选,提前过滤阴影中的凸包,倍数级减少处理量。
  • 凸包阴影AABB缓存,用于与物品快速相交测试。
  • 不对视窗外的物品执行阴影剔除。
  • 有个点子灵光一闪,但我忘了。
  • stackalloc reduces GC pressure.
  • Multi-core scheduling, supporting up to 8 logical cores simultaneously.
  • Using ref structs to avoid copies.
  • Perform AABB intersection tests within the viewport to obtain convex hulls (objects that cast shadows).
  • Pre-filter convex hulls to exclude those in shadows early, reducing the processing load by multiples.
  • Caching convex hull shadow AABBs for fast intersection tests with items.
  • Shadow culling is not performed on items outside the viewport.
  • I had a spark of inspiration, but I forgot it.
  • stackalloc снижает нагрузку на сборщик мусора (GC).
  • Многопроцессорное планирование с одновременной поддержкой до 8 логических ядер.
  • Использование структур по ссылке (ref struct) для избежания копирования.
  • Тест пересечения AABB в пределах окна вида для получения выпуклых оболочек (объектов, отбрасывающих тени).
  • Предварительная фильтрация выпуклых оболочек для раннего исключения находящихся в тенях, что в разы снижает объем обработки.
  • Кэширование теневых AABB выпуклых оболочек для быстрого теста пересечения с объектами.
  • Отсечение по теням не выполняется для объектов вне окна вида.
  • Был проблеск идеи, но я о ней забыл.


控制台命令 | Console Commands | Консольные команды
  • shadowcullingtoggle 功能 开关阴影剔除
  • shadowcullingdebugonce 调试 执行一次阴影剔除
  • shadowcullingdebugdrawaabb 调试 绘制物品的AABB
  • shadowcullingdebuglog 调试 显示日志
  • shadowcullingtoggle Function Toggle shadow culling
  • shadowcullingdebugonce Debug Perform shadow culling once
  • shadowcullingdebugdrawaabb Debug Draw the AABB of items
  • shadowcullingdebuglog Debug Show logs
  • shadowcullingtoggle Функция Включение/отключение отсечения по теням
  • shadowcullingdebugonce Отладка Выполнить отсечение по теням один раз
  • shadowcullingdebugdrawaabb Отладка Отобразить AABB объектов
  • shadowcullingdebuglog Отладка Показать логи


Github[github.com]


仍在完善中 | WIP Stage | Находится в стадии разработки

当前的性能提升预计只发挥了不到30%,我将继续改良其剔除算法,希望能在12.21日前完成提升到70%。
The current performance improvement is estimated to be less than 30% utilized. I will continue to refine its culling algorithm, aiming to increase it to 70% by December 21st.
текущее повышение производительности оценивается менее чем в 30%. Я продолжу совершенствовать алгоритм отсечения, стремясь достичь 70% к 21 декабря.

Download
Required items:

Click the title to search on this site.


Lua For BarotraumaSteam Workshop