当前位置: 首页 > news >正文

详细介绍:基于屏幕空间投影面积的剔除(Screen-space Area Culling, SSAC)

一、算法原理(Principle)

核心思想:

若是一个物体在当前相机视角下投影到屏幕上的面积小于某个阈值(如仅占屏幕的几个像素),那么它的渲染贡献允许忽略不计,可直接剔除或以极低 LOD 渲染。

此种剔除不是基于物体的真实世界尺寸(World Size),而是基于其在屏幕上的投影面积(Projected Screen-space Area),即“从相机看来它有多大”。

换句话说:

  • 一个体积巨大的物体假如离相机很远,它的屏幕空间面积可能非常小。

  • 而一个微小的零件如果离相机很近,投影面积却可能很大,仍然需要保留。

因此,这种方法更符合人眼的视觉感知规律,也更适合动态视角场景。


二、计算流程(Computation Pipeline)

步骤 1:计算包围体(Bounding Volume)

对每个几何体预先计算包围体(常见为 AABB 或 OBB)。

例如:
B = \left \{ \mathbf{p}{min}, \mathbf{p}{max} \right \}

步骤 2:相机视图变换与投影

将包围体的 8 个顶点变换到裁剪空间(Clip Space):

\mathbf{p}_i' = P \cdot V \cdot \mathbf{p}_i
其中:

  • P:投影矩阵(Perspective/Orthographic)

  • V:视图矩阵

  • \mathbf{p}_i:原始坐标

  • \mathbf{p}_i':裁剪空间坐标

步骤 3:规范化设备坐标 (NDC)

执行透视除法:
\mathbf{p}i^{ndc} = \frac{\mathbf{p}i'}{w_i'}
并将其映射到屏幕坐标:
x{screen} = \frac{(p_x^{ndc} + 1)}{2} W, \quad y{screen} = \frac{(1 - p_y^{ndc})}{2} H
其中W, H为屏幕宽高。

步骤 4:计算屏幕空间投影面积

对所有投影点求最小包围矩形(Screen-space Bounding Box):
A_{proj} = (x_{max} - x_{min}) \times (y_{max} - y_{min})

或者使用更精确的三角面投影面积求和:
A_{proj} = \sum_{t \in T} \frac{1}{2} |(\mathbf{v}_1 - \mathbf{v}_0) \times (\mathbf{v}_2 - \mathbf{v}_0)|

步骤 5:基于阈值剔除

设定一个像素级阈值A_{th}(例如 16 px² 或 32 px²):

\text{if } A_{proj} < A_{th} \RightarrowCull (剔除或使用低 LOD)


三、数学形式与可视化解释

假设物体中心点距相机距离为d,物体包围球半径为r,视角为 \theta,屏幕分辨率为W \times H,则近似的投影面积为:

A_{proj} \approx \pi \left( \frac{r \cdot f}{d} \right)^2 \cdot S

其中:

  • f = \frac{W}{2\tan(\theta / 2)}:投影焦距

  • S:屏幕像素尺度

d较大或r很小时,面积急剧下降。

因此行预先计算“距离阈值表”用于快速剔除:
d_{max} = \frac{r \cdot f}{\sqrt{A_{th} / (\pi S)}}

即距离超过d_{max}的物体,其投影面积一定低于阈值。


四、优化策略(Optimization Strategies)

1. 层级包围体测试 (Hierarchical Bounding Volume Test)

结合 BVH / Octree,将 SSAC 测试由局部几何上升到节点级别,先剔除整个子树。

2. 基于 GPU 的并行计算

使用 Compute Shader 批量计算各个 geometry 的投影面积(每个线程处理一个物体),并写入可见性缓冲区。

3. 动态阈值调整

根据相机运动速度或场景复杂度动态调整剔除阈值A_{th}

  • 快速运动 → 提高阈值(更多剔除)

  • 静止镜头 → 降低阈值(更精细)

4. 与 LOD 管线结合

如果A_{proj}位于两个阈值之间,可选择使用中等 LOD,而非直接剔除,平滑过渡。

投影面积区间操作
(A < A_1)完全剔除
(A_1 < A < A_2)使用低 LOD
(A > A_2)使用全分辨率渲染

5. 与遮挡剔除(Occlusion Culling)组合

先进行视锥剔除,再用 SSAC,再用遮挡剔除,实现三级快速筛选。


五、应用与案例

应用场景实际效果
游戏引擎(Unreal, Unity)在每帧动态场景中自动剔除远处小道具、树叶、螺栓等对象。
工业仿真(CAD/PDPS)对极大量机械零件进行投影面积筛选,显著降低每帧渲染时间。
大规模点云可视化仅保留投影面积较大的点或体素,提高绘制性能。
VR/AR 场景因人眼分辨率有限,SSAC 在边缘区域剔除微小几何几乎无感知差异。

六、总结

特性说明
优势与视觉感知一致、易达成、性能显著、可GPU并行
局限对非刚体或快速变化场景应该每帧重计算;不考虑遮挡
典型优化方向层级剔除、动态阈值、自适应LOD、多阶段过滤

简要伪代码示例

for (Geometry g : scene.geometries) {BoundingBox bb = g.getBoundingBox();Vector3 pts[8] = TransformToClipSpace(bb, camera);ScreenRect rect = ProjectToScreen(pts, screenWidth, screenHeight);float area = rect.width * rect.height;if (area < areaThreshold)g.visible = false;elseg.visible = true;
}
http://www.jsqmd.com/news/34356/

相关文章:

  • Elasticsearch、OpenSearch 与 Easysearch:三代搜索引擎的演化与抉择 - 指南
  • 从 Java 到鸿蒙开发:我的跨平台转型之路
  • 淘宝店铺全量商品接口开发:从分类穿透到增量同步的高效采集方案
  • 分布式专题——35 Netty的使用和常用组件辨析 - 详解
  • 米尔SECC方案助力国标充电桩出海
  • Javascrip 之 await fetch()
  • P2P CDN Tracker 技术深度解析(四):NAT穿透与Relay中继策略
  • 2025年11月油脂提取设备知名品牌与破碎仪厂家介绍
  • 开发笔记|PHP+AJAX前后端交互调试的关键注意事项
  • jenkins使用github的项目(springboot)进行构建配置例子
  • 28335中断ID
  • 2025年耐用的高精度内圆磨床订制厂家权威推荐榜单:比较好的高精度内圆磨床/好的高精度内圆磨床/靠谱的高精度内圆磨床源头厂家精选
  • 工业主板VS商用主板:五大核心差异,选对才能高效运行
  • 完整教程:Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维
  • Codeforces Global Round 30 (div.1 + div.2) A~E 题解
  • 2025 年最新推荐!国内胶粘剂源头厂家优质品牌排行榜:聚焦实力厂商,助力企业精准选品水性胶粘剂 / 电子胶粘剂 / 注塑胶粘剂公司推荐
  • 工业互联网高级计划排程(APS):智能制造时代的生产协同核心引擎
  • Ubuntu VNC传输文件
  • 【IEEE出版|往届均已完成EI检索】第四届地理信息与遥感技术国际学术会议(GIRST 2025)
  • Studio 3T 2025.19 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
  • vue3+ts 简单封装axios:实现错误重试、重复请求取消、手动取消
  • 2025 年压敏胶源头厂家最新推荐榜单:覆盖多类型产品且经协会测评的权威甄选指南耐高温压敏胶/环保压敏胶/水性压敏胶/医用压敏胶公司推荐
  • window.open()与session
  • 2025年安全网与遮阳网厂家综合实力Top5
  • 2025年热门的安全检测检验公司榜单
  • 2025年安全检测检验公司排行榜:前十名权威推荐与行业洞察
  • 2025年有实力的安全检测检验公司热门排行前十强榜单
  • 2025年11月四川护栏厂家排名榜:五家实力对比与选购指南
  • 2025年11月四川护栏厂家推荐榜:五强产能对比与口碑评价全解析
  • 同城洗车小程序系统:一站式洗车服务解决方案