光线追踪
October 8, 2020About 1 min
光线追踪
以相机为原点,发出射线与每个像素中心点相交,射出射线,检测射线与是否与场景中的物体相交,来判断物体是否可见。
光线追踪 vs 光栅化
光栅化(Rasterization)是将三角形投影到屏幕,逐像素填色;速度快,但全局光照效果(阴影、反射、折射)需要额外技巧才能实现。
光线追踪(Ray Tracing)反向模拟光路:从摄像机出发,经像素射入场景,在交点处递归生成次级光线,天然支持全局光照,但计算量远大于光栅化。
基本流程
- 生成主光线(Primary Ray):从摄像机出发,穿过每个像素中心射入场景。
- 光线-场景求交(Ray-Scene Intersection):测试光线与三角形、球体、BVH 等加速结构,找到最近交点。
- 着色:在交点处根据材质和法线计算颜色,并向光源发出**阴影光线(Shadow Ray)**判断是否被遮挡。
- 递归次级光线:
- 反射光线(Reflection Ray):镜面或金属表面沿反射方向继续追踪。
- 折射光线(Refraction Ray):透明材质按 Snell 定律折射后继续追踪。
- 递归深度到达上限或能量衰减至阈值时终止。
加速结构
朴素的逐三角形求交复杂度为