跟着闫令琪老师的课程学习,总结自己学习到的知识点

课程网址GAMES101

B站课程地址GAMES101

课程资料百度网盘【提取码:0000】

光线追踪

为什么要光线追踪

soft shadow

soft shadow相较于hard shadow,其边缘较为模糊。但是我们并不能通过模糊(blur)阴影边界来模拟soft shadow。如下图所示,正确的soft shadow,或者说,符合常理的soft shadow应该表现为,距离投影物体更近的区域,阴影会表现的更清晰。

原因

1. 前面已经学习过光栅化,针对全局光照,我们可以了解到光栅化无法实现或者实现的方法较困难,尤其是有很多的光线共同作用时.

2. 光栅化成像速度很快,但是画质效果不好.光线追踪成像速度慢,但是画质很好

下图1是光栅化,图二是光线追踪


基本的光线追踪算法(The Basic Ray-Tracing Algorithm)

算法前提:

1. 光线是直线传播

2. 不考虑光的波动性

3. 光路互逆性:当你凝视深渊时,深渊也在凝视你.

算法概述

1.Ray Casting

这种算法第一步的简述流程:

1. 视点与每个像素都发射一条光线(射线),射线照射到最近的交点.

2. 连接交点与光源,判断是否有物体在中间可以知道该交点是否时在阴影中,进行光照模型的计算

2.Recursive (Whitted-Style) Ray Tracing

第一步仅仅实现了光栅化的过程,想要考虑全局光照,就要对全局进行分析.那么第一个交点就会发生光的反射和折射.反射光线与其他物体再相交,也会发生反射和折射现象.交点与光源的连线可以用来检测阴影.

所以每一个交点的颜色来自于直接光照,反射方向间接光照,折现方向的间接光照.

最终实现的效果 :

线与面的交点

线与面的隐式表示

线的隐式表示

面的隐式表示

光线与面相交

1. 方法一: 等式相等求交点

1. 方法二: Möller Trumbore Algorithm

Möller Trumbore Algorithm算法主要是利用重心坐标求解, 具体的实现原理可以算法专栏Möller Trumbore Algorithm

数学原理我们已经知道了,但是具体应用时,如果只是简单的计算模型的每个三角形面与光线是否相交,这样计算的次数有:

\[pixels\times triangles (\times bounces)
\]

太费时,所以通常情况下,我们通常将所有的三角形用box包围其来,这样,我们可以用计算光线与box是否相交,如果光线与box没有交点,那么光线肯定也不会与box内的三角形面相交。如果光线与box有交点,那么再计算光线与box内的三角形是否相交,这样可以节省很多计算量。

基于上面表述,有两个主要的问题:

1. 怎样判断盒子与光线相交

2. 怎么划分盒子,计算量最小(加速结构)

光线与盒子相交

Axis-Aligned Bounding Box(AABB) 轴对齐包围盒

我们可以这样理解光线:光线是一条射线。也可以这样理解一个盒子:盒子是三对平面相交形成的。基于此,AABB盒子就很容易理解了。AABB盒子是平行于\(x,y,z\)轴的平面形成的。

为什么要用AABB盒

计算光线与平面相交的时候更简单

判断AABB盒与光线相交

再看光线与三维box相交之前,我们先从简单二维box的看:光线分别于\(x,y\)平面相交,分别记录照射的时间\(t_{min},t_{max}\)。

同样的对三维box,也分别对应有三组\(t_{min},t_{max}\)。接下来判断光线与box相交。关键点:

1. 只有当光线进入三组与轴平行的平面才可以判断处光线进入box。

2. 如果光线出任意一个平面,那么光线已经出box了。所以,$$t_{enter} = max(t_{min}) , \quad

t_{exit} = min(t_{max})$$

当\(t_{enter}<t_{exit}\),我们知道光线再box中停留了一段时间。基于此,总结:

1. 当 \(t_{exit}<0\)时,说明光线与box没有交点

2. 当 \(t_{exit}>=0 \quad and \quad t_{enter}<0\)时,说明光线在box内部,与box有交点

3. 当 \(t_{exit}>t_{enter} \quad and \quad t_{exit}>=0\)时,说明光线在box内部,与box有交点

加速结构

通过之前的学习,我们基本上已经实现了Whitted-Style Ray Tracing,但是我们还可以改进算法,来加速光线追踪的速度。

Uniform grids

Spatial partitions

Object Partitions & Bounding Volume Hierarchy (BVH)

【Notes_9】现代图形学入门——光线追踪(基本原理)的更多相关文章

  1. 【Notes_1】现代图形学入门——计算机图形学概述

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  2. 【Notes】现代图形学入门_02

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 光栅化 着色(Shading) 在图形学中,着色的定义可 ...

  3. 【Notes】现代图形学入门_01

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  4. mybatis入门_mybatis基本原理以及入门程序

    一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...

  5. 图形学入门(3)——区域填充算法(region filling)

    继续图形学之旅,我们已经解决了如何画线和画圆的问题,接下来要解决的是,如何往一个区域内填充颜色?对一个像素填充颜色只需调用SetPixel之类的函数就行了,所以这个问题其实就是:如何找到一个区域内的所 ...

  6. 图形学入门(1)——直线生成算法(DDA和Bresenham)

    开一个新坑,记录从零开始学习图形学的过程,现在还是个正在学习的萌新,写的不好请见谅. 首先从最基础的直线生成算法开始,当我们要在屏幕上画一条直线时,由于屏幕由一个个像素组成,所以实际上计算机显示的直线 ...

  7. 64 计算机图形学入门(1)——OpenGL环境配置与图形流水线(图像管线)

    0 引言 最近想学一下计算机图形学方面的知识,原因如下.目前本人接触了数字图像处理(opencv)以及点云处理(PCL)方面的知识,对从图像和点云中提取特征信息,并将特征转化为底层/中层语义信息有了一 ...

  8. 【Notes_2】现代图形学入门——向量与线性代数

    向量与线性代数 点乘和叉乘 Dot Multiplication 点乘在图形学的应用 (1) 求两个向量之间的夹角: $$\cos(\theta) = \frac{(\vec{a} \cdot \ve ...

  9. 【Notes_8】现代图形学入门——几何(基本表示方法、曲线与曲面)

    几何 几何表示 隐式表示 不给出点的坐标,给数学表达式 优点 可以很容易找到点与几何之间的关系 缺点 找某特定的点很难 更多的隐式表示方法 Constructive Solid Geometry .D ...

随机推荐

  1. docker --- (入门必读)

    容器 容器就是一个视图隔离.资源可限制.独立文件系统的进程集合.所谓"视图隔离"就是能够看到部分进程以及具有独立的主机名等:控制资源使用率则是可以对于内存大小以及 CPU 使用个数 ...

  2. LInux-Lamp搭建

    LInux-Lamp搭建 一 yum安装(自动会下载依赖包) (一)mysql安装 检测是否安装: yum list installed mysql* rpm -qa | grep mysql* 安装 ...

  3. Python开发桌面微型计算器

    开发Windows窗口需要用到tkinter库 所以上来的第一件事就是: import tkinter as t window = t.Tk()#创建了一个窗口 window.title('微型计算器 ...

  4. CF-559C Gerald and Giant Chess(计数DP)

    给定一个 \(H*W\)的棋盘,棋盘上只有\(N\) 个格子是黑色的,其他格子都是白色的. 在棋盘左上角有一个卒,每一步可以向右或者向下移动一格,并且不能移动到黑色格子中.求这个卒从左上角移动到右下角 ...

  5. AtCoder Beginner Contest 188 C - ABC Tournament (模拟)

    题意:有\(2^n\)个人站成一排比赛,刚开始每个人都和自己右边的人进行比赛,赢得人晋级下一轮(下标的小的在前面),不断重复这个过程,问最后拿到第二名的人的编号. 题解:根据题意,可以用vector直 ...

  6. fiddler抓包+安卓机 完成手机app抓包的配置 遇到的一些问题

    fiddler抓包+安卓模拟器完成手机app抓包的配置:fiddler抓包+雷电模拟器 完成手机app抓包的配置 其实在安卓真机上弄比在虚拟机上弄更麻烦一点,它们的步骤都差不多一样,就是在安卓真机上弄 ...

  7. poj3083 Children of the Candy Cor

    Description The cornfield maze is a popular Halloween treat. Visitors are shown the entrance and mus ...

  8. Educational Codeforces Round 94 (Rated for Div. 2) C. Binary String Reconstruction (构造)

    题意:给你一个字符串\(s\),原字符串为\(w\),如果\(i>x\)且\(w_{i-x}=1\),那么\(s_{i}=1\),如果\(i+x\le n\)且\(w_{i+x}=1\),那么\ ...

  9. LInux 终端命令

    删除目录: 绝对路径开头以"/"开始之后跟着根目录或家目录 删除后不会在垃圾站中 树的顶部那个'.'代表当前目录 用mv命令对一个存在文件重命名 这个more关键字一次性显示不完的 ...

  10. 安装jdk并配置环境变量

    安装jdk并配置环境变量 安装jdk 点击访问官网 https://www.oracle.com/downloads/或直接下载 https://www.jdkdownload.com/ 推荐使用后面 ...