Q133:PBRT-V3,BSSRDF的采样(15.4章节)

本文详细介绍了如何仅知(po,wo)时对BSSRDF进行采样,包括找到(pi,wi)、计算对应的概率及S(po,wo,pi,wi)的值。通过分析Sp(po,pi)与Sw(wi),并给出具体的采样过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前续:Q132:PBRT-V3,BSSRDF(双向散射表面反射分布函数)(5.6.2章节、11.4章节)
从Q132中,咱知道了在给定(po, wo, pi, wi)的情况下怎么求解S(po, wo, pi, wi)。

〇,概述

这一章节,要做的事情主要是:
在只知道(po, wo)的情况,怎么对BSSRDF进行采样,然后得到(pi, wi)、其对应的概率pdf、S(po, wo, pi, wi)的值。

还是用这个近似式子:
这里写图片描述

采样的思路是:对式子右端的各个因子分别进行单独采样

第一个因子:
这里写图片描述
不用管这个因子。
原因是:咱们这里考虑的是次表面的散射情况,既然已经进入了次表面,说明在此之前的表面的BSDF已经处理过反射和折射了。进入次表面的光已经是经过折射之后的光了。或者说,这个因子已经在此前的bsdf->f()中,已经累乘到beta中了。

第二因子:
这里写图片描述
对这个因子的采样最终要得到“交点”pi的值、对应的概率、Sp的值。
这个计算起来最为复杂,后面重点讲这个。

第三个因子:
这里写图片描述
在完成第二个因子的采样后,得到一个“交点”pi。
对Sw的采样是这样:将Sw看做一个类似diffuse的BSDF加到pi->bsdf中。
什么叫做“类似diffuse的BSDF”呢?
其一:入射光的方向wi均匀的来自各个方向;
其二:入射光的强度根据Sw()来计算;

一、Sp(po, pi)的采样

这里写图片描述
对这个因子的采样最终要得到“交点”pi的值、对应的概率、Sp的值。

从Q132中,咱知道了:求Sr的值,其实就是根据r去查一个BSSRDTable对象中的一个叫做“profile”的表。
所以,现在要对“式子[15.14.2]”进行采样,其实也就是对“r”进行采样,然后根据r到“profile”表中去找一个Sr的值。当然,这个“r”和pi是对应的。

简而言之:将“profile”中中Sr的值映射到几何体上Po点附近的区域上。每个Pi点对应一个映射点,对应一个概率,对应一个Sr值。

我们要做的是:
1,找Pi
2,求Pi对应的概率;
3,求Pi对应的Sr(这个参照Q132,直接查表);

1.1 找Pi

这里写图片描述

1.1.1,过Po做曲面在该点的切平面(no为Po处的法向量)。并在Po点建立局部坐标系。
这里写图片描述

1.1.2,以Po为球心,r_max(Sr表中一个很大的r)为半径做一个球面。(所有可能的Pi都应该在这个球面以内)。在局部坐标系中,先对球面的极坐标phi进行采样(所以,图15.8中显示的是是个圆)。

1.1.3,对球面的极坐标r进行采样(图15.8中标记的r即为采样点)。
做一条距离数轴长度为r平行于该数轴(图15.8中选的数轴为no)的直线,该直线和圆相较于P_base、P_target两点(如图15.8所示)。设这两点之间的距离为l(如图15.10所示)。
这里写图片描述

1.1.4,P_base和P_target所在的直线和Po所在的几何体可能有多个交点。(如图15.11所示)
这里写图片描述

1.1.5,从“步骤1.1.4”中所求的交点中随机选取一个交点,作为Pi。

相关代码截图如下:

这里写图片描述
这里写图片描述
这里写图片描述

1.2,求Pi对应的概率

这里写图片描述

这里写图片描述

因为:

这里写图片描述

二、Sw(wi)的采样

“Sp(po, pi)”的采样中已经确定了Pi。

接下来,要采样的是wi。

对Sw的采样是这样:将Sw看做一个类似diffuse的BSDF加到pi->bsdf中。

这里写图片描述

这里写图片描述

这里写图片描述

三、用PathIntegrator渲染BSSRDF模型对应的材质

下方是PathIntegrator::Li()函数中部分代码的截图:

这里写图片描述
这里写图片描述

### 关于 pbrt-v3 中 LESS 文件或样式相关内容 pbrt-v3 是一个专注于物理基础渲染的开源项目,其核心目标是实现高质量的光线追踪渲染效果。然而,在该项目中并未涉及前端开发中的 CSS 预处理器(如 LESS 或 SASS),因为这些工具主要用于网页设计和前端界面开发领域[^1]。 #### 1. pbrt-v3 的文件结构分析 pbrt-v3 主要由 C++ 编写而成,源码目录按照功能模块进行了划分。例如,`src/core` 存放核心算法逻辑,而 `src/integrators` 则定义了不同的光照积分器实现方式。如果尝试寻找与样式相关的文件,则需注意以下几点: - **LESS 文件用途**:LESS 是一种动态样式表语言,扩展了标准 CSS 功能,允许变量、嵌套规则等功能。这种技术通常用于 Web 开发环境下的 UI 设计。 - **pbrt-v3 不适用场景**:由于 pbrt-v3 并未提供图形化用户界面(GUI),也无需处理 HTML/CSS 渲染问题,因此不会存在任何 LESS 文件或其他类似的样式资源[^4]。 #### 2. 如果需要自定义可视化风格怎么办? 尽管官方版本不支持 GUI 和样式定制,但开发者可以借助第三方库来增强用户体验。以下是两种可能的方向: - 使用 Qt 创建跨平台桌面应用程序接口; - 将渲染结果导出至图像文件并通过外部框架展示出来。 对于上述需求之一——即通过 Qt 实现带样式的交互窗口——则确实需要用到一些类似于主题设置的概念。不过这属于二次开发范畴,并不在原始代码库范围内[^2]。 ```cpp // 示例:假设我们想基于 Qt 构建简单的查看器 #include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.resize(800, 600); // 设置大小 window.setWindowTitle("Custom Styled Viewer"); // 添加标题 QString styleSheet = "background-color: #f0f0f0; color: black;"; window.setStyleSheet(styleSheet); window.show(); return app.exec(); } ``` 此片段展示了如何利用 stylesheet 属性改变控件外观属性。当然实际应用时还需要进一步集成到整个工作流当中去[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值