图形学笔记 - 5. 光线追踪 - RayTracing

Whitted-Style Ray tracing

为什么要光线追踪

  • 光栅化不能很好地处理全局效果

    • 软阴影
    • 尤其是当光线反射不止一次的时候
      ![[Pasted image 20241213175934.png]]
  • 栅格化速度很快,但质量相对较低

  • 光线追踪是准确的,但速度很慢

    • 光栅化:实时,光线追踪:离线
    • ~10K CPU核心小时来渲染一帧

基本光线追踪算法

光线

关于光线的三个观点:

  • 光沿直线传播(虽然这是错误的)
  • 光线交叉时不会相互“碰撞” (尽管这仍然是错误的)
  • 光线从光源传播到眼睛(但物理在路径反转-互易下是不变的)。
    “And if you gaze long into an abyss, the abyss also gazes into you.” — Friedrich Wilhelm Nietzsche (translated)

视觉发射理论

光线追踪

Appel 1968 -光线追踪

  • 通过每个像素投射一条光线来生成图像
  • 通过向光源发送光线来检查阴影
    在这里插入图片描述
产生眼睛射线

针孔相机模型
在这里插入图片描述

阴影像素(仅限局部)

在这里插入图片描述

从观察点往成像平面的每个像素位置投射光线,再从投射光线与场景物体的交点向光源位置投射光线判断交点是否在阴影里。

递归(Whitted-Style)光线追踪

“An improved Illumination model for shaded display” T. Whitted, CACM 1980
Time:

  • VAX 11/780 (1979) 74m
  • PC (2006) 6s
  • GPU (2012) 1/30s
    在这里插入图片描述
    一个递归的Ray Casting 方法,在Ray Casting假设的基础上考虑光线进一步的反射与折射。在每一个交点出都考虑光源的阴影着色,最后将这些点的着色累加作为该像素位置的成像结果。
    在这里插入图片描述

光线-表面交点

光线方程
光线由它的原点和方向向量定义
在这里插入图片描述
r(t)=o+td,t≥0 r(t)=o+td,t\ge0 r(t)=o+td,t0

射线与球面相交

光线:r(t)=o+td,t≥0\mathbf{r}(t)=\mathbf{o}+t\mathbf{d},t\ge0r(t)=o+td,t0
球:p:(p−c)2−R2=0\mathbf{p}:(\mathbf{p}-\mathbf{c})^2-R^2=0p:(pc)2R2=0
![[Pasted image 20241213200501.png]]

什么是交点?
交点p必须同时满足射线方程和球方程
求交点:
(o+td−c)2−R2=0 (\mathbf{o}+t\mathbf{d}-\mathbf{c})^2-R^2=0 (o+tdc)2R2=0
at2+bt+c=0 at^2+bt+c=0 at2+bt+c=0
a=d⋅d a=\mathbf{d}\cdot\mathbf{d} a=dd
b=2(o−c)⋅d b=2(\mathbf{o}-\mathbf{c})\cdot \mathbf{d} b=2(oc)d
c=(o−c)⋅(o−c)−R2 c=(\mathbf{o}-\mathbf{c})\cdot(\mathbf{o}-\mathbf{c})-R^2 c=(oc)(oc)R2
t=−b±b2−4ac2a t = \frac{-b\pm \sqrt{b^2-4ac}}{2a} t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知不道abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值