学习教程来自:【技术美术百人计划】图形 5.2 光线追踪、路径追踪、光线投射、光线步进介绍
笔记
1. 光线追踪 Ray Tracing
光栅化渲染:并行的按照物体->三角面->像素拆解每个对象,缺少全局信息,无法精确实现一些效果
光线追踪:一种渲染框架
采用路径追踪的光线追踪方法步骤为:从相机出发,对每个像素点,向场景投射光线,直到光线与场景中第一个物体相交,在交点处根据物体性质、光源属性和光照模型等计算这个交点的颜色。然后,在交点处,该光线发生反射或折射,继续遍历追踪反射光线和折射光线,直到光线与下一个表面相交,计算该交点的颜色。直到光线到达光源或逸出场景。
I = I a + k d ∑ j = 1 j = l s ( N ⋅ L j ) + k s S + k t T I = I_a + k_d\sum_{j=1}^{j=ls}(N \cdot L_j)+k_sS+k_tT I=Ia+kdj=1∑j=ls(N⋅Lj)+ksS+ktT
计算交点的方法:
- 曲面方程和射线方程方程组求解
- 计算射线与物体三角形面的交点
- 优化:包围盒,空隙使用空间划分优化(八叉树、KD树、BSP树)
2. 光线投射 Ray Casting
3. 路径追踪 Path Tracing
一种光线追踪方法
L o ( p , ω o ) = L e ( p , ω o ) + ∫ S + f r ( p , ω i → ω o ) L i ( p , ω i ) cos θ i d ω i L_o(p,\omega_o)=L_e(p,\omega_o)+\int_{S+}^{}f_r(p,\omega_i \to \omega_o)L_i(p,\omega_i)\cos \theta_i d \omega_i Lo(p,ωo)=Le(p,ωo)+∫S+fr(p,ωi→ωo)Li(p,ωi)cosθidωi
一些常见问题的处理办法:
积分的求解:蒙特卡洛积分
光线数量:一个像素块多条光线,反射时只产生一条光线,最终混合这些结果
迭代终止:随机数法,每次迭代生成一个随机数决定是否继续
光源面积小:不在半球上采样,通过变化直接在光源上采样
完整步骤:从相机出发,对每个像素点,向场景投射光线,直到光线与场景中第一个物体相交,在交点处根据物体性质、光源属性和光照模型等计算这个交点的颜色。然后,在交点处,该光线发生反射或折射,继续遍历追踪反射光线和折射光线,直到光线与下一个表面相交,计算该交点的颜色。直到光线到达光源或逸出场景。
4. 体积光线投射 Volume Ray Casting
体绘式技术(Volume Rendering)
5. 光线步进 Ray Marching
光线从起点步步前进,一步一计算直到终点
应用场景 | 起点 | 终点 | 方向 |
---|---|---|---|
屏幕空间反射(SSR) | 反射面上的被计算的点 | 反射光线与被反射对象表面的交点 | 根据反射面法线和视线方向计算的反射方向 |
时差贴图 | 视线和模型表面的交点 | 视线和偏移表面的交点 | 视线方向 |
体绘制 | 视点 | 视线和模型表面的交点 | 视线方向 |
6. 一些区别
递归式光线追踪(Whitted Style Ray Tracing):每个像素一条光线
路径追踪:每个像素多条光线
作业
分析光线追踪、路径追踪、光线投射、光线步进在游戏中有哪些技术应用,paper
游戏中的应用 以下截屏来自来自Xbox Series X和3060显卡(Mincraft)