一直没有发“翻译类”的博文,借此机会,翻译PBRT-V3的14.3章节。
14.3 Direct Lighting(直接光照)
在介绍完全一般性的光传播方程之前,我们先实现DirectLightingIntegrator。
不出所料,这个积分器只考虑“直接光照”。“直接光照”是指从光源直接传播到渲染点(撞击点)的光。
这个积分器忽略除基本的镜面反射和镜面折射之外的本身不发光物体的“间接光照”(换句话说,只考虑“镜面反射和镜面折射”的“间接光照“)。
以这个积分器开始(学习),可以使我们(重点)关注直接光照的一些重要细节,而不用关心完整的光传播方程。而且,这里实现的一些程序将会在后续求解完整的光传播方程的积分器中再次用到。图14.12展示的是只用直接光照渲染的San Miguel场景。
这个积分器提供了两种不同的计算直接光照的策略。每种策略都能在一个撞击点的一个给定方向上计算出反射辐射率的一个不偏的估值。
LightStrategy这个枚举记录着使用的是哪种计算策略。
第一种策略是UniformSampleAll。(这种策略会)循环所有的光源,然后基于每个光源的Light::nSamples参数抽取多个采样点。(回忆在13.7.1章节中关于“spliting”的介绍——UniformSampleAll策略将使用这个技巧)
第二种策略是UniformSampleOne。从随机选取的一个光源上抽取一个采样点。
依据被渲染的场景(不同),这两种策略都可能是“更为合适的”。
比如,每个像素点被抽取多个采样点时(比如,解决景深噪声问题),那么每个图片采样点一个光源采样点可能更为合适:在一个像素点的所有图片采样点中,将对光源进行足够生成高质量图片的采样。
或者,每个像素点被抽取的采样点很少时,为了确保生成没有噪声的图片,对所有光源进行采样可能更为合适。
在这里,我们不会包含DirectLightingIntegrator的构造函数。它只是给SamplerIntegrator基类的构造函数传递一个Camera参数和一个Sampler参数,初始化两个成员变量。
除了直接光照(的计算)策略,DirectLightingIntegrator还保存着一个最大递归深度。这个是考虑到镜面反射或者镜面折射。
这个积分器所需要的采样随机数的类型和数目由其所用的采样策略所决定。
如果对单个光源只进行一次采样,那么通过Sampler::Get2D获取两个二维采样随机数就可以了——一个用于在光源上选一个点;一个用于在BSDF上选一个方向(换句话说,一个用于光源采样,一个用于BSDF采样)。
当对单个光源进行多点采样时,……
(文明用语),没法翻译啦!翻译之后,味道全变了。
看原版!看原版!看原版!
英语不好的话,有几个选择:
1,先学好英语;
2,硬着头皮看原版,看完之后,英语就学好了;
3,别学了;
后文还是用自己的话说吧!!!!!!!!!!!!!!!!!
只记录自己认为重要的内容,主要是抓逻辑。