1.2.2 射线与材质的交叉点

相机生成一个射线,首要的渲染工作是决定物体的材质,如果有的话,还要确定射线第一次交互和在哪发生交互。这个交互点顺着射线是可见的,且我们希望模仿光线与物体在这个点的交互。为了找到光线交互,必须测试射线与所有物体在这个场景的交互,并且选择出射线第一个交互的点。假如射线为r,我们可以参数化如下形式:

r(t) = o + td,

o为射线的原点,d是它的方向向量,t是一个(0,正无穷)的参数。这样就可以通过制定参数 t 获得一个顺着射线的点,并且可以评估上述等式。

很容找到射线 r 与由函数F( x, y, y) = 0 定义的表面交互点。首先分解射线等式成隐含等式,产生一个仅由参数 t 表示新函数,然后求解这个以 t 参数的函数,并由射线等式替代最小的正根,来找到期望的点。例如,在球心以 r 为半径的隐含等式:


替换射线等式,得到:

所有的变量值除了 t 之外都是已知的,这样更容易的求解 t 的二次等式。如果没有实根,射线将偏离求表面;如果有个正根,则最小的那个就是交互点。

仅仅由交互点不能为剩余的射线追踪器提供足够的信息;还需要知道在这个点表面的某些属性。首先,在这个点材质的表现必须确定,且需要一直传递到后面阶段的射线追踪算法。其次,为了描绘阴影,交互点处额外的几何信息需要获取。例如,表面法线 n 一直都需要。虽然许多射线追踪仅对 n 进行操作,但精确的渲染系统如bprt需要更多信息,如各种位置的偏导数和关于表面局部参数的表面法线。

当然,多数场景下是会有多个物体。使用蛮力的方法将实验对每一个物体的射线,然后在所有的交互点中选择最小的正根 t 作为最接近的交互点。这种方法虽然正确,但很慢,即使对于适度复杂的场景。一个比较好的方法就是在对射线交互点处理的过程中,融合加速结构快速的过滤整个物体组。这种快速剔除几何的能力意味着射线追踪复杂度通常为 O(IlogN) ,I为图像中的像素点数,N为场景中的物体数。

pbrt 的几何接口和它为各种形状的实现见第3章,加速接口和实现见4章。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值