GAMES101-现代计算机图形学学习笔记(13)

本文是GAMES101现代计算机图形学的学习笔记,重点讲解了光线追踪的基本原理和实现方法。相较于光栅化,光线追踪能够处理全局光照效果,例如软阴影和间接照明。文中介绍了光线的概念,包括光线的直线传播、不可碰撞和可逆性假设。接着阐述了光线投射、递归光线追踪(Whitted风格)的细节,以及光线与表面相交的算法,如光线与球体、三角形的求交,并提到了AABB包围盒作为加速相交检测的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GAMES101-现代计算机图形学学习笔记(12)


原课程视频链接以及官网
b站视频链接: link.
课程官网链接: link.

光线追踪

为什么需要光线追踪?

这里常用之对比的是光栅化。光栅化是把场景中的物体独立出来,并且再将物体独立成一个个的三角形面片进行渲染,通常 GPU 绘制三角形面片是并行的,所以对于物体来说,它是不知道自己周围的物体,同样的,对于三角形面片来说,它也是不知道自己周围的三角形。所以光栅化无法处理一类需要全局信息进行渲染的效果,如:软阴影、Glossy 反射以及间接照明
在这里插入图片描述
相比较光栅化,光线追踪是从相机出发,计算相机发出的光线(视线)与场景产生的结果,这里的光线可能会与场景中的物体碰撞后生成另外一些光线,然后生成的光线也需要继续做计算。所以对于光线追踪来说,相机产生的光线是知道整个场景信息的。

光栅化与光线追踪的对比:

  1. 光栅化快,实时,是一种近似算法
  2. 光纤追踪慢,离线,是一种准确的算法

光线

光线追踪需要光线的概念,课程以三个假设引入了光线的概念:

  1. 光线沿着直线传播
  2. 光线之间不会碰撞
  3. 光线的可逆性。光线在场景中传播,产生反弹,假设反弹至相机,那么从相机视角来看,一定可以沿着传播的路径找到光源位置

光线投射(Ray Casting)

光线投射的过程如下:

  1. 从相机位置,向物体投射一条光线用于成像
  2. 从像素中对应物体的每个位置投射回光线,检查是否在阴影中
    (类似 Shadow Mapping)
    在这里插入图片描述

常规的着色过程

从视点发射一条光线,通过成像平面(某个像素)投射至物体,然后从物体发出光线至光源检查其是否在阴影中,如果不在阴影中,就可以通过某些着色方案对这个像素进行着色,如 Blinn Phong 等。
在这里插入图片描述
不同于常规的着色过程,课程介绍了一种递归的光线追踪方法( R e c u r s i v e ( W h i t t e d − S t y l e ) R a y T r a c i n g Recursive (Whitted-Style) Ray Tracing Recursive(WhittedStyle)RayTracing ),下面详细介绍一下这种方法。

Recursive (Whitted-Style) Ray Tracing

该方法有几点不同于常规的着色方案:

  1. 光源:光线不同,这里假设光线在碰撞到物体后还会产生折射反射
  2. 着色过程:每发生一次折射或者反射(弹射点)都计算一次着色,前提是该点不在阴影内。

如图所示,该算法的过程如下:

  1. 从视点从成像平面发出光线,检测是否与物体碰撞
  2. 碰撞后生成折射和反射部分
  3. 递归计算生成的光线
  4. 所有弹射点都与光源计算一次着色,前提是该弹射点能被光源看见
  5. 将所有着色通过某种加权叠加起来,得到最终成像平面上的像素的颜色
    在这里插入图片描述

为了后续说明方便,课程定义了一些概念:

从视角出发第一次打到物体的光线叫做:primary ray
一次弹射之后的光线叫做:secondary rays
判断可见性的光线叫做:shadow rays

光线-表面相交

既然 R e c u r s i v e ( W h i t t e d − S t y l e ) R a y T r a c i n g Recursive (Whitted-Style) Ray Tracing Recursive(WhittedStyle)RayT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值