概念页
形状采样
Shape Sampling
把形状当作面光源时,需要在形状上采样点。最简单的是按面积均匀采样再把 PDF 换算成立体角;更好的是只在参考点看得到的立体角内均匀采样,消掉 和背面带来的方差。本页按 PBRT 第 4 版第 6 章整理各种形状的采样公式及其推导要点。
两种采样接口与测度换算(6.1.7)
- 按面积:返回点和面积 PDF ;均匀时 。
- 按参考点立体角:返回立体角 PDF 。两者关系(见 球面几何与方向参数化 中立体角与面积的换算):
是光源法线与连线的夹角; 时 PDF 无穷大,放弃该样本。
PDF(ctx, wi)只应对确实击中该形状的方向调用;需要时它会从参考点沿 只对这一个形状求交。
按面积采样得到 后,用距离与入射角换算成立体角 PDF;也可直接在可见立体角内采样以降低方差。
flowchart TD
Shape["形状"] --> Mode{"采样策略"}
Mode -->|"按面积均匀"| Area["得到点与 p_A = 1/A"]
Mode -->|"按立体角均匀"| Solid["在可见锥/球面多边形内采方向"]
Area --> Conv["换算 p_ω = p_A · r² / |cos θ_o|"]
Solid --> Pw["直接得到 p_ω"]
Conv --> Use["用于面光源积分"]
Pw --> Use球(6.2.4)
- 参考点在球内:整个球都可见,按面积均匀采样(
SampleUniformSphere后乘半径并重投影到球面以界定误差)。判断"在球内"要用经偏移的原点,避免交点恰在球面上时误判。 - 参考点在球外:球所张锥角 ,即 在锥内均匀采样( 在 内均匀),PDF 为 。 很小时 精度很差,改用一阶泰勒展开 、。
- 由采样角 求球面点,不用反三角函数(Akalin 2015):正弦定理 , 为钝角,,化简得 本页用随机参数把这一结果与"射线与球求最近交点再算夹角"的直接几何计算对比,5 组数据在 内一致。
圆柱、圆盘(6.3.3、6.4.3)
- 圆柱是卷起来的矩形,均匀采样 和 即按面积均匀。
- 圆盘用同心映射
SampleUniformDiskConcentric采样单位圆盘再缩放。原书承认实现没有考虑内半径和 (部分球的Sample同样如此),留作习题修正。 - 两者都没有专门的立体角采样,只做面积到立体角的换算。
三角形(6.5.4)
- 按面积均匀:重心坐标的线性性使"均匀采样一个三角形的重心坐标"适用于任何三角形,只需构造单位正方形到单位直角三角形的保面积映射。沿对角线折叠虽然正确,但会把 与 映到同一点,破坏低差异样本的分层;PBRT 用 Talbot/Heitz 的映射 雅可比行列式恒为 (本页验算: 时雅可比矩阵为 ),故保面积。
- 为什么值得按立体角采样:漫反射面受均匀发光三角形照射时,立体角均匀采样的估计量只剩 两个都在 的因子;按面积采样则多出 ,其中 在离光源近、三角形大时变化无界。书中图 6.16 的场景 MSE 降为 1/3.86。前三版都按面积采样。
- 球面三角形采样(Arvo 1995):先按 在 弧上找新顶点 ,使 面积为 ;再沿 弧取 (式 6.10)。为避免小三角形 的抵消,实现里用 。由两条球面余弦定理消去未知角,得
本页对 4 个随机球面三角形验算:用此式求出 后, 的 Girard 面积与目标 相对误差约 。采到的方向用 Möller-Trumbore 求重心坐标,并钳制到三角形内。PDF 计算需要逆映射
InvertSphericalTriangleSample(Arvo 2001)。 - 数值退化时回退:立体角太小或接近整个半球的三角形改用面积采样;
PDF()必须做与Sample()完全相同的判断。
双线性面片(6.6.2)
- 没有精确的等面积采样(面积积分 没有闭式),用以四角微分面积为权的双线性分布近似;矩形则直接用 。参数空间 PDF 再除以 得面积 PDF。
- 带发光贴图的面片按图像亮度分布采样 ,书中图 6.26 MSE 降为 1/2.28。
- 矩形按立体角采样为球面矩形(Ureña 等 2013)。
近似余弦因子:warp 乘积采样
余弦加权半球常用 Malley 方法:先在圆盘上均匀(或同心)采样,再竖直投影到半球,自动带上 因子。
flowchart LR U["二维均匀样本"] --> Disk["圆盘均匀 / 同心映射"] Disk --> Proj["竖直投影到半球"] Proj --> Dir["方向 ω;PDF ∝ cos θ"]
立体角均匀采样仍没有考虑参考点处的 ,目前没有解析方法。由于球面三角形/矩形采样是连续映射, 拉回到 后仍是光滑的,于是用四角取对应顶点 的双线性函数近似,先按它扭曲均匀样本,再送进球面采样(Hart 等 2020)。总 PDF 是两者之积。三角形的三个顶点对应 的四个角:, 与 ,。介质中的点没有法线,不做扭曲。
相关进展(延伸阅读)
Peters (2021) 给出更快的三角形立体角采样和多边形投影立体角采样;球是唯一已知能直接按投影立体角采样的形状(Ureña & Georgiev 2018;Peters & Dachsbacher 2019);Gamito (2016) 与 Guillén 等 (2017) 处理圆盘和圆柱的立体角采样。
原书问题(PBRT 第 6 章,在线版)
| 位置 | 原书说法 | 核对结果 |
|---|---|---|
| 第 6 章延伸阅读参考文献 | "Peters, C. 2021b. BRDF importance sampling for polygonal lights. ACM Transactions on Graphics (Proceedings of SIGGRAPH) 40 (8), 31–40." | 应为第 40 卷第 4 期(SIGGRAPH 2021),共 14 页;"40 (8), 31–40" 看起来是把出版日期 2021-08-31 误当成了期号和页码(来源:Crossref 元数据 doi 10.1145/3450626.3459672:volume 40, issue 4, page 1–14, published-print 2021-08-31) |
取舍
- 立体角采样实现复杂、每个样本更贵,但近处的大光源方差降低很多;远处的小光源面积采样就够了。
- 大光源还要靠 BSDF 采样加多重重要性采样(见 蒙特卡洛积分与重要性采样)。
出处
- PBRT 4e source excerpt: chapter 06 (Shapes)
- Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 6 章 6.1.7、6.2.4、6.3.3、6.4.3、6.5.4、6.6.2 节,pbr-book.org/4ed/Shapes
相关页面
游戏数学随机变量变换与逆变换采样Random Variable Transforms & Inversion Sampling蒙特卡洛估计器要求能从指定的概率密度里抽样。最基本的工具是逆变换法 (Inversion Method):对 CDF 求逆,把 [0,1) 上的均匀随机数映射成目标分布;更一般地,随机变量经过一一映射后的密度由导数(多维时是雅可比行列式)决定;多维非独立分布则先采边缘密度、再采条件密度。本页按 PBRT 第 4 版 2.1.1、2.3、2.4 节整理,是 蒙特卡洛积分与重要性采样 的数学部分。图形学蒙特卡洛积分与重要性采样Monte Carlo Integration & Importance Sampling渲染方程里的半球积分没有闭式解,只能数值积分。蒙特卡洛积分在定义域里随机取样、按概率密度加权求平均,期望值正好等于积分真值,误差随样本数 N 按 1/\sqrt{N} 下降,而且与积分维数无关,所以成了光线追踪类渲染的数学基础。降低误差的主要手段是让采样分布接近被积函数的形状,也就是重要性采样(GEA4 卷 II 12.6.2、12.6.4)。游戏数学球面几何与方向参数化Spherical Geometry & Direction Parameterizations渲染中大量计算发生在单位球面上:方向就是球面上的点,一组方向就是球面上的一块区域。本页按 PBRT 4e 3.8 节整理立体角、球面多边形面积、三种球面参数化(球坐标、八面体编码、等面积映射)以及用于剔除光源的方向锥,并附原书一处公式问题。图形学面光源Area Lights真实光源从来不是点。面光源要求对光源所张立体角 \omegal 积分 BRDF,实时渲染倾向于用闭式解或近似而不是多条光线取平均。主要做法有:Lambert 表面的矢量辐照度与包裹光照、光泽表面的粗糙度修正和"最具代表性的点",以及最准确的线性变换余弦 (LTC)。图形学参数曲面与贝塞尔面片Parametric Surfaces & Bézier Patches参数曲面把参数曲线从一个参数推广到两个参数 (u,v),由少量控制点定义,运行时细分成任意多个三角形,是质量与速度之间的天然权衡:三角形多则着色和轮廓更好。矩形定义域的是贝塞尔面片(张量积曲面),三角形定义域的是贝塞尔三角形,后者是 PN 三角形和 Phong 细分的基础。游戏数学光线求交测试Ray Intersection Tests光线求交用于拾取、光线追踪、地面高度查询等。本页给出四类经典测试:光线-球(代数解与带早期拒绝的几何优化解)、光线-盒(平板法与光线斜率法)、光线-三角形(Möller-Trumbore,直接从顶点求重心坐标与距离)、光线-多边形(先求平面交点,再投影到二维做交叉数测试)。共同思路是先做便宜的拒绝测试、推迟除法与开方、必要时降维。