Lec13 Ray Tracing (Whitted-Style Ray Tracing)光线追踪

Lec13 Ray Tracing (Whitted-Style Ray Tracing)光线追踪

  • 为什么需要光线追踪
    • 光栅化的问题(不是很好去表示全局的效果)

      • soft shadows
      • Glossy reflection (物体表面反射)
      • indirect illumination (间接光照(光线在到达人眼前弹射不止一次))
      • 在这里插入图片描述
    • 光线追踪很精确,但是非常慢(通常用来制作电影)

      • 1帧 需要 10k CPU 一核小时
基础光线追踪算法
  • 什么是光线(图形学里的假设)
    • 光线是沿直线传播的
    • 光线与光线间不会发生碰撞
    • 一定是从光源被发出来,经过一系列的反射折射达到人眼(摄像机)reciprocity (光线是可逆的)
      • “当你凝视深渊的时候,深渊也在凝视你”
  • 利用光线的可逆性
    • 从相机出发,穿过每一个像素,发出一条光线,打到场景里的一个点
    • 如果这个点不在阴影里,就是一条有用的通路
  • Pinhole Camera Model
    • 每一个像素,投出一根线
    • 与场景相交,找最近交点
    • 连线光源,形成第二条光线,看点对光源是否可见
    • 算着色,写回像素值
    • 在这里插入图片描述
Whitted-Style Ray Tracing
  • 与之前的不同的是,光线打到(类似玻璃的)物体,一部分能量反射一另部分折射

    • 在这里插入图片描述
  • 着色也有变化,每一个点都和光源连线做着色,如果能连线都都加起来给这个像素

    • 在这里插入图片描述
技术问题
  • 求交点

    • 隐式

      • 光线被定义成,一个起点,一个方向向量

      • 对于光线上的任意一个点,都能用 o + td 表示(t是时间)

      • 在这里插入图片描述

      • r ( t ) = o + t d r(t) = o + td r(t)=o+td

      • 球的定义

        • P : ( p − c ) 2 − R 2 = 0 P: (p-c)^2-R^2 = 0 P:(pc)2R2=0
        • 到球心距离为半径的每一点
      • 与球的交点

        • ( o + t d − c ) 2 − R 2 = 0 (o + td - c)^2-R^2 = 0 (o+tdc)2R2=0

        • 联立方程,通过求根公式求根

        • 在这里插入图片描述

        • 在这里插入图片描述

      • 推广,光线与一般隐式表面的求交,都用方程求解

        • 不过根需要是实数,需要是正数(因为光是射线)
        • 在这里插入图片描述
    • 和显式表面求交

      • 如果点在任意多边形内,从这个点向外做射线,交点个数必为奇数
      • 和三角形面
        • 光线和平面求交

        • 点是否在三角形内

        • 定义平面

          • 法线 N 和一个在平面内的点 p’
          • $P:(p-p’) ·N = 0 $​
          • 在这里插入图片描述
        • 又是既在平面上又在光线上

        • 在这里插入图片描述

        • 是否在三角形内

          • Moller Trumbore Algorithm(MT算法)

          • 利用做重心坐标必在三角形内

          • 在这里插入图片描述

          • 求出来 ( 1 − b 1 − b 2 ) , b 1 , b 2 (1-b_1-b_2),b_1,b_2 (1b1b2),b1,b2​都得是非负的

      • 加速光线与表面求交
        • 缺陷:太慢了 像素数 * 三角形数
        • Bouding Volumes(包围盒)
        • 用长方体
          • 是三个相对的对面形成的空间交集
          • Axis-Aligned Bounding Box (AABB) 轴对齐包围盒
        • 是不是和盒子有交点
          • 在这里插入图片描述

          • 光线需要进入了三对面才是进入了包围盒

          • 光线只要出了一对面就是除了包围盒

          • t e n t e r = m a x { t m i n } , t e x i t = { t m a x } t_{enter} = max\{t_{min}\}, t_{exit} = \{t_{max}\} tenter=max{tmin},texit={tmax}

          • 如果进入时间小于离开时间就是有交点

          • fl如果 t e x i t < 0 t_{exit} < 0 texit<0,那么盒子在光线背后

          • 如果 t e x i t > = 0 a n d t e n t e r < 0 t_{exit} >=0 and t_{enter} < 0 texit>=0andtenter<0,那么光源在盒子里,肯定有交点

          • 总结

          • t e n t e r < t e x i t a n d t e x i t > = 0 t_{enter}< t_{exit} and t_{exit} >= 0 tenter<texitandtexit>=0​​,光线与AABB有交点

          • 要用Axis-Aligned的包围盒,能够简便计算

            • 对比:
            • 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值