前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【GAMES101】Lecture 13 光线追踪 Whitted-Style

【GAMES101】Lecture 13 光线追踪 Whitted-Style

作者头像
叶茂林
发布于 2024-02-01 00:48:20
发布于 2024-02-01 00:48:20
1840
举报

光线追踪

这里讲一下为什么我们需要光线追踪,主要是因为光栅化没有办法很好的处理全局的光照效果,就像上节课我们说的到软阴影,还有这个毛玻璃一样的反射光,以及这种间接的光照效果,光栅化无法很好处理,虽然光栅化很快,光线追踪很慢,但是光线追踪的效果很好

基本的光线追踪算法

我们首先来定义一下光线

第一,虽然光是波粒二象性的,但是这里我们简单的认为光是沿直线传播的

第二,我们简单的认为两束光相遇的时候不会发生碰撞

第三,光路具有可逆性,就像我能从镜子里面看到你,那么你也能从镜子里面看到我,而且这个过程光的路线是一样的,当你在凝视深渊的时候,深渊也在凝视着你

我们并不知道会有哪些光线会进入我们的视线,但是根据光路的可逆性,从我们人眼发射出的光线所经过的光路同样也是进入我们人眼的光线的光路,那光线追踪具体怎么做呢

第一步,从人眼向投影平面每个像素投射出去一条光线,找到与场景物体的交点,这里考虑遮挡,只找到最近的交点

然后将交点和光源连线,根据连线上是否有物体存在判断是否存在阴影,然后用Blinn Phong着色模型计算这个像素的颜色

那这个不是和上次shadow mapping一样吗,所以有第二步,叫Whitted-Style光线追踪

Whitted-Style光线追踪

找到第一个交点之后并不停止,根据这个物体的材质继续做反射光线

同时也继续做光线的折射

然后计算所有交点的光能量并加权累积,当然这个过程会有光的衰减,然后就可以得到这个像素的全局光照效果了

那具体怎么求这些交点呢?

求曲面交点

我们首先来定义一下这个光线的方程,有一个光源点O,然后有这个光线发射的方向d,那么在光线上任意一点就可以通过r(t)=o+td来表示了,其中这个t非负,其实就是射线的表示方程

那怎么求交点呢,比如要找光线和一个球面的交点,是不是直接把光线方程代入球面方程就行了,没错,就是这么简单

然后会有相离、相切和相交这几种结果,但是要记得t得非负

实际也是如此,对于这些隐式表示的曲面就直接将光线方程代入求解

求三角形交点

那三角形怎么求光线的交点呢,那这个事情比较复杂,我拆开来做,三角形不是能表示一个平面吗,那我先求光线和平面的交点,再去判断这个交点在不在三角形内,哎判断点在不在三角形内这个我们学过,那问题就是如何求和平面的交点

我们先来定义这个平面的方程,对于平面上已知的某个点,还有这个平面的法线,那平面上任意一点和这个点的连线是不是都和法线垂直,那这样就可以写出这个平面的方程(p-p')·N=0

然后我再把光线方程代入平面方程解出t不就行了吗

但是这个是不是算出来之后还得判断这个交点是不是在三角形内部,有没有一算出来就知道和三角形有没有交点的,答案是有

Möller Trumbore Algorithm(MT算法)

我们之前讲插值的时候不是讲过三角形的重心坐标系吗,那如果光线和三角形有交点,那这个交点是不是也会有一个重心坐标,于是就会有下面这个方程

那这里面不是有三个未知数吗,但是我们的O和D实际上是三维的向量,所以这里面其实是三个方程,三个方程三个未知数,可算唯一解

当然如果大家学过这个线性代数的话,这个线性方程组也可以用克莱姆法则算出来

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【GAMES101-现代计算机图形学课程笔记】Lecture 09 Shading 3 (纹理映射)
这里补充一下上一节遗漏的一丢丢知识点,见下图。左边是渲染后的平面图,右边是对应的纹理。另外无论纹理平面原始有多大,最后都会被映射在$U-V$坐标,又称纹理坐标,并且规定坐标范围是0~1。
marsggbo
2020/06/10
1K0
光线追踪介绍
摘要 图像渲染就是一个这样的过程,输入一组物体,输出一个像素矩阵。把这个像素矩阵输送给显卡,显示器上就可以显示出来图像。本篇介绍下这个过程用到的算法,就是光线追踪。
一只小虾米
2022/10/25
1.1K0
光线追踪介绍
【GAMES101】Lecture 15 全局光照
本节继承上一节的难度并继续加深,讲这个BRDF,然后理解反射方程和渲染方程,最终实现全局光照,以下内容很抽象……如果想要深入理解建议到隔壁基于物理着色:BRDF - 知乎 (zhihu.com)或者多看几遍视频,我也是回头看了第二次才透彻,比较重要的是上一节的物理概念要搞明白
叶茂林
2024/02/05
1790
【GAMES101】Lecture 15 全局光照
【GAMES101】Lecture 16 路径追踪
为什么我们需要这个路径追踪呢,之前学的Whitted-style光线追踪它只执行镜面反射,遇到了漫反射面就会停止弹射光线
叶茂林
2024/02/05
1650
【GAMES101】Lecture 16 路径追踪
【GAMES101】Lecture 13 14 加速光线追踪 AABB
对于下面这个壶,我可以用一个框把它框起来,如果光线和这个框没有交点,那是不是就不会和这个壶有任何的交点,那是不是这一块我都不用算了,基本思想就是这个Bounding Volumes,叫包围盒
叶茂林
2024/02/03
1710
【GAMES101】Lecture 13 14 加速光线追踪 AABB
【GAMES101】Lecture 10 纹理应用
我们之前在着色里面讲到这个纹理映射,就是给我们在三维空间中的物体表面贴图对吧,实际上纹理还有很多的用处
叶茂林
2024/01/29
1540
【GAMES101】Lecture 10 纹理应用
【GAMES101】Lecture 07 深度缓冲 Z-Buffer
对于一个三角形的光栅化我们之前已经解决了,也就是说现在我们可以将一个三角形给绘制在屏幕上了,但是对于多个三角形,也就是多个图形来说应该如何来决定这个绘制的顺序问题
叶茂林
2024/01/19
2100
【GAMES101】Lecture 07 深度缓冲 Z-Buffer
【GAMES101】Lecture 19 透镜
所以方便研究提出了一种理想化的棱镜,这个棱镜没有厚度,非常薄,它可以成功的将平行光线聚焦到一个点上,并且我们认为这个薄棱镜的焦距可以改变,实际上可以通过现实中的一组棱镜来达到这个效果
叶茂林
2024/02/09
1430
【GAMES101】Lecture 19 透镜
【GAMES101】光栅化
这个像素pixel,是picture element的简称,抽象的来说,一个像素就是一个带有统一颜色的方块
叶茂林
2023/12/10
1850
【GAMES101】光栅化
【GAMES101-现代计算机图形学课程笔记】Lecture 08 Shading 2 (着色管线)
上一节主要介绍了漫反射,由下图我们知道着色点(shading point)的明暗程度与相机(观测)角度无关。具体的光线强度计算公式:
marsggbo
2020/06/12
1.5K0
【GAMES101】Lecture 09 重心坐标
我们之前说着色过程中以及这个计算法线的时候需要用到这个插值(Interpolation),然后插值是通过这个重心坐标(Barycentric Coordinates)来实现的
叶茂林
2024/01/25
3190
【GAMES101】Lecture 09 重心坐标
【GAMES101】Lecture 19 相机
成像可以通过我们之前学过的光栅化成像和光线追踪成像来渲染合成,也可以用相机拍摄成像
叶茂林
2024/02/09
1410
【GAMES101】Lecture 19 相机
【笔记】《计算机图形学》(13)——更多光线追踪
本章是前面第四章光线追踪内容的扩展内容,内容比较少,字数4.4k,补充了一些实现光线追踪中常用的更进一步的技术,包括对透明物体的渲染,实例化技术在光线追踪中的应用,如何在光线追踪中渲染构造实体几何(CSG)和利用分布式光线追踪可以达到的很多华丽的效果。
ZifengHuang
2021/02/04
2.1K0
【GAMES101】Lecture 18 高级光线传播
其他情况都是有偏估计,有偏估计中有一种特殊情况,就是当这个估计使用无穷多样本让期望收敛到正确值时,这个时候叫做一致性
叶茂林
2024/02/08
1590
【GAMES101】Lecture 18 高级光线传播
【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射
给我一个三维模型,给我一个光照条件,我就能够得出渲染的结果,这些东西合起来就是Graphics Pipeline,图形管线,闫神愿称之为实时渲染管线,那下面这个流程图就是这个渲染流水线
叶茂林
2024/01/20
2790
【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射
【GAMES101-现代计算机图形学课程笔记】Lecture 09 Shading 3 (纹理映射)
这里补充一下上一节遗漏的一丢丢知识点,见下图。左边是渲染后的平面图,右边是对应的纹理。另外无论纹理平面原始有多大,最后都会被映射在
marsggbo
2020/06/12
2.3K0
图形学入门(三):基础着色
在掌握了上一篇文章的知识之后,我们现在可以通过逐个绘制三角形面组合出一个模型了。但是我们现在绘制出来的结果看起来是一个色块,效果不太自然。在现实中,我们看到物体是因为这个物体反射了光线,而在这个过程中,根据物体形状以及与光线的相对位置关系,物体的表面总会呈现不同的明暗效果。这种明暗的变化使我们感觉这个物体是「立体的」。也就是说,我们更希望看到下图1中右侧的渲染效果而非左侧的渲染效果:
zhiruili
2021/08/10
1.6K0
图形学入门(三):基础着色
什么是真实感渲染(一):渲染历史
最近这两年,时不时会听到“(高)真实感渲染”这个词,什么效果才能称其为高真实感,其定义又是什么,本系列就和大家聊一聊我对真实感的一些浅薄理解。该系列包括三个方面:
Peter Lu
2022/03/31
2.5K0
什么是真实感渲染(一):渲染历史
【GAMES101-现代计算机图形学课程笔记】Lecture 05 Rasterization 1 (Triangles)
的立方体内,那么下一步所要做的事情(把立方体画在屏幕上,即光栅化)就是这一节所要介绍的。
marsggbo
2020/06/12
1.1K0
【笔记】《计算机图形学》(10)——表面着色
这系列的笔记来自著名的图形学虎书《Fundamentals of Computer Graphics》,这里我为了保证与最新的技术接轨看的是英文第五版,而没有选择第二版的中文翻译版本。不过在记笔记时多少也会参考一下中文版本
ZifengHuang
2020/09/28
1.5K0
推荐阅读
相关推荐
【GAMES101-现代计算机图形学课程笔记】Lecture 09 Shading 3 (纹理映射)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档