Games101-现代计算机图形学入门-Ray Tracing
Ray Tracing
Whitted-Style Ray Tracing
- 问题:
Ray-Surface Intersection
Ray Intersection with Implicit Surface
数值求解
Ray Intersection with Explicit Surface
点如果在封闭形状内,向外打一条光线,得到的交点数量一定是奇数;如果在封闭形状外,则交点数一定是偶 数
那么对于显示表面求交,最简单的做法就是遍历物体的所有三角形面,求交点数量,那么问题就简化为如何判断光线 与三角形面求交(这种方法很慢,之后会提到包围盒的加速算法)
Ray Intersection with Triangle Mesh/Plane
先求光线和三角形所在平面的交点p,再判断p是否在三角形内部
Moller Trumbore Algorithm
Accelerating Ray-Surface Intersection
如果对每个三角形都算交点计算量太大。
Bounding Volumes
用包围盒把图形围起来
若碰不到包围盒,则必碰不到图形
如果t(exit)<0则表明box在光后方,没有交点
如果t(exit)>=0且t(enter)<0则表明光源在box内,必有交点
有交点情况:t(enter)<t(exit) && t(exit)>=0
Uniform Spatial Partitions (Grids)
对于格子的划分一般选取C*num_of_obj
C在3D情况下一般取27
在物体比较密集的场景效果不错,但空旷场景下不好
Spatial Partition
Oct-Tree、BSP-Tree在高维下过于复杂
每次取一个方向划分,二维平面下划分为二叉树
对光线经过的区域内的图形判断是否相交
但是盒子和三角形是否相交很难判断
Object Partitions (Bounding Volume Hierarchy - BVH)
对每个区域,通常选择最长的轴划分,向正方形靠近
选取中位数物体划分
1 | Intersect(Ray ray,BVH node) |
Radiometry - Motivation
概述
将光精确的定义出来
物理量 | 符号 | 简单定义 | 单位 | 公式 |
---|---|---|---|---|
Energy | Q | 电磁波形式的能量 | 焦耳(J) | |
Flux | P | 单位时间内的辐射量 | 瓦特(w) | $P=dQ/dt$ |
Intensity | I | 点源向某单位立体角发射的辐射功率 | $w/sr$ | $I=dP/dω$ |
Irradiance | E | 受照面单位面积上的辐射功率 | $w/m^2$ | $E=dP/dA$ |
Radiance | L | 单位投影面积单位立体角上的辐射功率 | $w/m^2*sr$ | $L=d^2P/dAdωcos(θ)$ |
Radient Energy and Flux
Radient Energy 单位焦耳
光源辐射出来的能量
Radient Flux (Power) 单位瓦或者lumen
单位时间的能量
Intensity
光源在某个方向上的强度
Irradiance
单位面积的Power
Radiance
单位面积单位方向上辐射的能量
Bidirectional Reflectance Distribution Function (BRDF)
定义一个比例来描述反射后的光,比例由材质决定
The Reflection Equation
由于BRDF即材质的不同,每一个Li所生成的Lr是不同的因此需要如下操作
上述分析中,dL(ωoutput)是某单位面积在ωinput方向上吸收了dE(ωinput)后向ωoutput辐射的能量
而这仅仅是ωoutput方向上吸收得到的dL(ωoutput),我们的研究需要的是这个单位面积从各个方向上吸收了能量而在ωoutput上总共辐射的能量
因此需要对整个半球积分累加dL(ωoutput)
存在递归问题,某个点的入射是别的点的出射
The Rendering Equation
自己发的光+反射从所有入射方向来的光
Path Tracing
Monte Carlo Integration
A simple Monte Carlo Solution
从一个点往各个方向(合起来是一个半圆)采样
得出直接光照的结果
Global illumination
递归实现,但是一条光线经过一点扩散成100条光线,每条光线继续扩散,因此光线在每个着色点只追踪一条路径
即对于蒙特卡洛积分只用一个采样点,会有误差,但可以在每个像素追踪多条路径进行平均减小误差
但每条路径会无限递归,设定终止条件,每经过一个着色点有p概率不再进行追踪
在每个像素点追踪多条路径未必能准确追踪到某个光源,因此需要追踪更多的路径,效率不高
可以直接在光源处采样,如果光源和x间没有遮挡,就转换成对x采样,并对x积分