1.简介
•现在,我们将考虑全球方面
•合并间接反射和发射光
•我们将考虑最常用的模型:射线跟踪
•图显示了从光线追踪的抽象光线,但这不是射线追踪的工作方式…
其他几点:
•幼稚的射线跟踪仅处理镜面至镜面相互作用
•需要高级方法来建模完整的“渲染方程”
栅格渲染管道:
•针对像素的项目场景
•离散最后
• 算法:
For each triangle
For each pixel
射线铸造
•将像素发送到场景
•首先离散
• 算法:
For each pixel
For each object
2.可见的表面射线跟踪
•通过追踪从观看者的眼睛到场景中的物体来确定的表面的可见性
• 三个部分:
•初始射线方向 - 每个像素的不同
•隐藏的表面去除 - 最接近哪个表面?
•阴影 - 表面可以“看到”光源
2.1初始射线方向
•定义了相机和视图平面的位置:
View Plane沿N的距离d
•射线通过每个屏幕像素从相机中追踪(= WXH射线):
射线使用位置和方向使用C, d, N, x, V, y and U
2.2隐藏的表面去除
•必须针对场景中的所有对象进行测试,即数据结构: (wxh rays) x (m objects)
•找到交叉点的列表:
•对于P像素(= WXH)和M对象,即P X M Ray-Object相交计算 : If: p=wxh=1000x1000 and m=100, then 100,000,000 ray-object intersection calculations
•如果每个对象的n多边形,则是p x m x n射线多边形交点计算: If: p=1000x1000 and m=100 and n=1000, then 100,000,000,000 ray-polygon intersection calculations
•并确定最近的交叉点
2.3阴影
•在交叉点应用phong或blinn-phong方程
2.4阴影
•在表面交点P处,将阴影触角射线(或灯光射线)呈现到光源(对于每个光源)
•现场中的所有对象都针对此射线进行了测试, 更多交叉计算
•如果阴影触角在通往光源的途中相交的对象,则点P在阴影中: “早期”停止交叉测试
•仅通过这种简单的方法产生硬边阴影
•当心数值准确性
•由于数值不准确,相交点在形状内部,因此浅射线会相交相同的对象,从而产生“阴影”(斑点外观)
•解决方案:添加少量以确保相交点在物体外部
2.5作为算法
For every pixel
Construct a ray from the eye
// find closest intersection point:
For every object in the scene
Find intersection with the ray
Keep if closest
// then shade using the closest intersection point:
Shade depending on light and normal vector
关键部分:
•交叉测试
•计算正常用于照明计算
3.递归射线跟踪(Whitted,80)
•称为标准的幼稚射线跟踪
•优雅的组合:
•隐藏的表面去除;
•由于直接照明而引起的阴影;
•全局镜面相互作用效果 - 反射的射线和折射射线;
•阴影(几何)计算。
3.1阶段
•初始射线方向 - 和以前一样
•隐藏的表面拆除 - 和以前一样
•反射和折射光线
•照明模型
•阴影 - 和以前一样
•递归
3.2反射射线
•在交叉点,形成反射射线: R = 2(N.L)N – L
•然后可以进一步追踪,即递归
With epsilon means limit the boundary so that make the image more clearly
3.3折射射线
•根据物体的性质,可能需要折射射线。
Snell的定律(也称为Snell-Descartes Law和Ibn-Sahl Law和折射法)是一种公式 不同的各向同性介质,例如水,玻璃或空气。 该法律以荷兰天文学家和数学家威勒布罗德·斯内利乌斯(Snell)(也称为斯内尔)的名字命名。
在光学元件中,该定律用于射线跟踪来计算入射率或折射的角度,并在实验光学上找到材料的折射率。 该法律也可以在元材料中满足,这使得光以负折射率为负的折射角“向后”。
sin a1/sin a2 = n2/n1 = v1/v2
顺便说一句:折射取决于波长
•折射取决于波长→棱镜
•彩虹是由折射 +内部反射 +折射, 最大角度约42度
3.4结合照明模型组件
•热点P处的强度=本地 +反射 +传输
I§ = Ilocal§ + Iglobal§
I§ = Ilocal§ + krgI(Pr) + ktgI(Pt)
权重krg和ktg控制最终组合
•本地模型 - phong或blinn-phong:
Ilocal = ambient + diffuse + specular
= Ia ka + Ip (kd(L.N) + ks (R.V)^n)
(或者,如果光源“后面”透明的对象,其中r’或h’涉及材料的折射率)
=Ia ka + Ip (kd(L.N) + kt (R’.V)^m)
or Ia ka + Ip (kd(L.N) + kt (N.H’)^m)
•由于本地和全球组件的组合,我们具有模糊的镜头亮点和完美的镜面反射
•分散术语是本地的。
•(可以使用Monte Carlo方法建模弥漫性扩散效果
3.5阴影
•在表面交点处,阴影触角射线(或灯光射线)可以呈现向光源
•如果阴影触角在通往光源的途中相交不透明的对象,则将Ilocal设置为该光源的环境术语(或调制分散项)
对于透明物体,ILocal被减弱
•仅通过这种简单的方法产生硬边阴影
请参阅Penumbra的分布式射线跟踪
3.6递归
•对于单射线,我们可以遵循反射和折射
•这是一个递归过程,因为射线可能会引起进一步的射线,等等
shootRay ( ray structure )
intersection test for all objects;
if ray intersects objects {
get closest object intersection;
for every light, cast shadow ray;
get normal at intersection point;
calculate local intensity (Ilocal);
if (reflection)
calculate and shootRay(reflected ray)
if (refraction)
calculate and shootRay(refracted ray)
Intensity at hit point P = local
+ reflected + transmitted
}