[优化] 阴影剔除 [Optimizations] Shadow Culling [Оптимизации] отсечения по теням
渲染过程中会忽略被阴影遮挡的物品,显著减轻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%, что особенно удобно для сцен с множеством предметов, например, в заполненных помещениях.
五点采样,剔除中心、轴对齐包围盒四顶点都位于阴影中的物品,同时运用阴影预测手段来减少物体闪烁现象。
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) находятся в затенённых областях, а также применяется прогнозирование теней для уменьшения мерцания объектов.
- 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 выпуклых оболочек для быстрого теста пересечения с объектами.
- Отсечение по теням не выполняется для объектов вне окна вида.
- Был проблеск идеи, но я о ней забыл.
- 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]
当前的性能提升预计只发挥了不到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 декабря.