Games101 Ray Tracing(Whitted-Style Ray Tracing)笔记

英文课件看着有点慢,复习时帮助回忆

为什么需要光线追踪?

光栅化不能很好的处理全局效果的光照,especially when the light bounce more than once
光栅化很快,质量相对差,适合实时
光线追踪很精确,但是很慢,经常离线处理

关于光线的假设

直线传播,无碰撞,可逆性

光线追踪

eye ray:starts at eye and goes through pixel
reflected ray:specular reflection
refracted ray:
shading ray:弹射的点到光源的连线
primary ray:
secondary rays:reflected ray + refracted ray

Recursive(Whitted-Style) Ray Tracing

弹射的点将点的颜色加回到像素上(有能量损失)
在这里插入图片描述

光线和物体表面的交点

光线的表达

在这里插入图片描述

光线和隐函数表示的表面的求交

在这里插入图片描述

光线和三角形的求交

基本方法:首先光线和三角形所在平面求交,再判断交点是否在三角形内
三角形所在平面:在这里插入图片描述
改进算法:MT算法
在这里插入图片描述

加速光线和物体(三角形面表示)的求交

包围盒

长方体包围盒:3个对面形成的交集
AABB:轴对齐包围盒
可以利用光线和包围盒求交加速光线与场景求交

光线和AABB求交

对于每个对面,光线与对面求交,可以求出一个tmin 和tmax,求取不同对面求出的线段的交集
只有当光线进入了所有的对面,光线才进入了包围盒,tenter=max{tmin}
光线离开了任意一个对面,光线就离开了包围盒,texit=min{tmax}
光线和AABB有交集,当且仅当 tenter < texit && texit>=0

时间的简化算法

在这里插入图片描述

利用光线和包围盒AABB求交加速光线与场景求交

均匀网格Uniform grids

基本思路:

1、找出包围盒
2、创建网格
3、在物体覆盖的网格存储物体
4、按照光线前进方向(画线,Bresenham算法)遍历网格,对于每个网格判断求交情况
 网格过大:加速效果差
 网格过小:网格与光线求交次数变多,效率下降
均匀网格方法适用于有很多大小和分布很均匀的物体的场景

空间划分Spatial partitions

KD-Tree:每次只切一次(水平与竖直交替),形成二叉树结构,知道每个部分中的物体数目小于某个值,物体只存储在叶子节点中

基本思路:

 如果光线和这个部分没有交集,continue;
 如果光线和这个部分有交集,判断光线和两个子节点是否有交集
直到光线和叶子节点判断
 光线和叶子节点没有交集,continue;
 光线和叶子节点有交集,光线和叶子节点中存储的物体都要求交

缺点:

1、包围盒和物体是否相交不好判断,也就是建立KD-Tree不简单
2、同一个物体可能被存储与多个叶子节点中

物体划分Object Partitions & Bounding Volume Hierarchy(BVH)

基本思想:

1、创建包围盒
2、将这些物体分成两部分,每一部分各自重新求包围盒
 划分方法1:选择一个最长的维度,分成两部分
 划分方法2:选择一个维度,将这些物体分成两个部分,每个部分中的物体数目差不多(在某一个轴向上,用三角形的重心代替三角形,找中间的那个三角形,可以使树尽可能平衡,快速选择算法)
3、物体数目足够小时,停止划分,物体存储在叶子节点中

具体算法

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值