games101-课堂笔记 raytracing
RayTracing
Shadow mapping--处理点光源问题
解决光栅化过程中遮挡的问题。
如果一个点在阴影里,那么我们可以看到这个点,光不可以看到这个点。不在阴影里的化则是我们都能看到这个点。
Pass 1:Render from light
Depth image from light source
在光源处设置一个摄像头获得从光源看向场景所能获得的各个点的深度。
Pass2:Render from eye
Standard image(with depth)from eye.
摄像头从眼睛处出发再次看向这个场景。
将看到的点投影回在光源处看到的深度图的像素上,如果摄像机视角上看到的点计算到光源的距离与之前光源计算的深度图一致 ,那么说明该点是可见的且不处于阴影中。
Shadow maps 只能做硬阴影。
硬阴影VS软阴影
硬阴影非常锐利,软阴影有过度。

软阴影实际就是本影(Umbra)和伴影(Penumbra)的区别.软阴影一定是因为光源有一定的大小。

光线追踪
光栅化在一些问题上解决的不好。
不善于表示某些全局效果,如软阴影,glossy reflection,间接光照--到达人眼前弹射不只一次。
光线追踪效果很好,但是很慢。
光线的可逆性
近处的点会遮挡住远处的点,只看到最近的点
考虑一个点会不会被照亮,从看到的点向light source 延伸出一条shadow ray,如果这条shadow ray没有被遮挡,就说明它没在暗处。然后着色,写回像素的值。
Recursive(Whitted-style) Ray Tracing
光线弹射的多了,在每个点都会折射或者反射的点都要发生着色。而实际就是把每个点发生的着色都加权到像素上去。
该算法先判断点是否在三角形所在的平面内,若在平面的话可以根据叉乘结果的正负判断。

该算法用于直接判断点是否在三角形内,就是看能否用三角形三个点的重心坐标表示光的射线上的点。应用了克拉默法则。

接下来的主要问题是怎么样做光线与模型求交的流程优化,毕竟与每个三角形都做求交太慢了。
包围盒Bounding Volumes
先用包围和做比较粗略的检测,包围盒都不交,更不用说里面了。
判断与包围盒的交点
二位情况:先求od射线与无限延伸y0,y1的交点,再求od射线与无限延伸的x0,x1的交点。最后求这两条线的交集如下图。

key ideas:
三个对面都满足光线已经进去了,才能说光线进入了盒子。
当从任意一个面离开盒子时,就说光线已经离开盒子了。
再来讨论光线经过某个面的时间为负的情况。
如果经过某个面的时间为负说明这个面在光源背后。
如果光线从一对面出来的时间小于0说明,说明盒子在光线后面,没有交点。

Using AABBS to accelerate ray tracing
-Uniform grids
-Spatial partitions

浙公网安备 33010602011771号