Ray-Sphere Intersection
- 显式:“谁等于谁的函数”。
- 隐式:“变量们满足某个共同等式”
球公式用向量形式表达为:
$$ (\mathbf{C} - \mathbf{P}) \cdot (\mathbf{C} - \mathbf{P}) = (C_x - x)^2 + (C_y - y)^2 + (C_z - z)^2 $$也就是
$$ (\mathbf{C} - \mathbf{P}) \cdot (\mathbf{C} - \mathbf{P}) = r^2 $$给一个点P(t),如果与圆相加,说明这个公式有解
$$ (\mathbf{C} - \mathbf{P}(t)) \cdot (\mathbf{C} - \mathbf{P}(t)) = r^2 $$P(t)可以用Ray来表示,Ray = Q + td

经过一系列变换,最后用求根公式可以直接算出t的取值,或者用判别式直接获取解的个数
|
|
|
|

|
|
Simplifying Code
求根公式中,把原始b带入发现可以化简

抗锯齿
像素中心击中物体就是一种颜色,没有击中就是另一种颜色,没有过度,锯齿就会出现。(对一个像素进行着色,一条光线只取一个点的颜色,但是一个像素对应世界位置的一片颜色不一定是一样的,而是连续的)
![]()
初始采样点为像素中心,每个像素多次调用git_ray(),他会在一个像素中随机进行采样
|
|
漫反射材质
hit后,不是直接返回颜色,而是继续发射一根随机半球方向的光线继续进行光线追踪,击中物体后累加,另外需要设置递归深度防止无限递归
|
|
Fixing Shadow Acne
如果光线起点恰好位于表面正下方(浮点数的舍入误差),它可能会再次与该表面相交。
镜面反射
v+2B就是静面反射向量,B可以通过dot(v,n)*n来求

|
|
RT实现这种间接光照太容易了

电介质材质(折射)
当从折射率高的一边看向折射率低的一边,如果入射角度过大,用反射定律计算出来的折射光线角度超过了90°,这时候就应该只进行反射,而不进行折射。(教程有折射相关的内容,本质就是把反射替换成折射来进行二次弹射)
Defocus Blur 景深/散焦模糊
成像平面的距离改用焦距来定义,所以在成像平面位置的渲染才是清晰的
|
|
|
|

|
|
每个像素采样500次,并且深度为50的结果
