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

课程网址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. 小白搭建WAMP详细教程---php安装与设置

    一.php官网下载php压缩包 到php官网http://www.php.net 下载,有很多版本,我们这里选择7.2.25,具体步骤如下: 二.php的安装 下载后得到如下的压缩包,将压缩包解压到您 ...

  2. 从零开始教你安装Oracle数据库

    1.数据库安装 1.1下载 根据自己的操作系统位数,到oracle官网下载(以oracle 11g 为例) 之后把两个压缩包解压到同一个文件夹内(需要注意的是,这个文件夹路径名称中最好不要出现中文.空 ...

  3. Codeforces Round #655 (Div. 2) C. Omkar and Baseball

    题目链接:https://codeforces.com/contest/1372/problem/C 题意 给出一个大小为 $n$ 的排列,每次操作可以选取一个连续子数组任意排列其中的元素,要求每个元 ...

  4. Codeforces Round #655 (Div. 2) A. Omkar and Completion

    题目链接:https://codeforces.com/contest/1372/problem/A 题意 构造一个大小为 $n$ 的数组 $a$,要求满足 $1 \le a_i \le n$,且不存 ...

  5. Luogu T14448 区间开方

    题面版权来自Shlw.题目链接 题目背景 无 题目描述 给定一个数列,元素均为正整数,对其以下两种操作: 1.将某区间每一个数变为其算术平方根(取整) 2.求出某区间内所有数的最大值 输入输出格式 输 ...

  6. Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water(数学/二分)

    题目链接:https://codeforces.com/contest/1359/problem/C 题意 热水温度为 $h$,冷水温度为 $c\ (c < h)$,依次轮流取等杯的热冷水,问二 ...

  7. poj2923 Relocation

    Description Emma and Eric are moving to their new house they bought after returning from their honey ...

  8. centos 7下安装配置Supervisor

    1.安装Supervisor centos下安装yum install supervisor 2. systemctl enable supervisord 开机自启 systemctl start ...

  9. 如何创建一个GETH节点(单节点,windows环境)

    所有命令都是在powershell上执行的 1.创建"创世块" 初始化配置 创建一个 hdgenesis.json文件,拷贝到geth根目录 {    "config&q ...

  10. 流水线cpu —Verilog HDL

    一.准备工作 先看看书(<计算机原理与设计 Verilog HDL版>),搞懂一点原理.然后照着书上的代码写一写(用8.4的就可以了,不用8.6的). 注意mux2x32,mux4,cla ...