【Notes_9】现代图形学入门——光线追踪(基本原理)
跟着闫令琪老师的课程学习,总结自己学习到的知识点
光线追踪
为什么要光线追踪
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
数学原理我们已经知道了,但是具体应用时,如果只是简单的计算模型的每个三角形面与光线是否相交,这样计算的次数有:
\]
太费时,所以通常情况下,我们通常将所有的三角形用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】现代图形学入门——光线追踪(基本原理)的更多相关文章
- 【Notes_1】现代图形学入门——计算机图形学概述
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...
- 【Notes】现代图形学入门_02
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 光栅化 着色(Shading) 在图形学中,着色的定义可 ...
- 【Notes】现代图形学入门_01
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...
- mybatis入门_mybatis基本原理以及入门程序
一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...
- 图形学入门(3)——区域填充算法(region filling)
继续图形学之旅,我们已经解决了如何画线和画圆的问题,接下来要解决的是,如何往一个区域内填充颜色?对一个像素填充颜色只需调用SetPixel之类的函数就行了,所以这个问题其实就是:如何找到一个区域内的所 ...
- 图形学入门(1)——直线生成算法(DDA和Bresenham)
开一个新坑,记录从零开始学习图形学的过程,现在还是个正在学习的萌新,写的不好请见谅. 首先从最基础的直线生成算法开始,当我们要在屏幕上画一条直线时,由于屏幕由一个个像素组成,所以实际上计算机显示的直线 ...
- 64 计算机图形学入门(1)——OpenGL环境配置与图形流水线(图像管线)
0 引言 最近想学一下计算机图形学方面的知识,原因如下.目前本人接触了数字图像处理(opencv)以及点云处理(PCL)方面的知识,对从图像和点云中提取特征信息,并将特征转化为底层/中层语义信息有了一 ...
- 【Notes_2】现代图形学入门——向量与线性代数
向量与线性代数 点乘和叉乘 Dot Multiplication 点乘在图形学的应用 (1) 求两个向量之间的夹角: $$\cos(\theta) = \frac{(\vec{a} \cdot \ve ...
- 【Notes_8】现代图形学入门——几何(基本表示方法、曲线与曲面)
几何 几何表示 隐式表示 不给出点的坐标,给数学表达式 优点 可以很容易找到点与几何之间的关系 缺点 找某特定的点很难 更多的隐式表示方法 Constructive Solid Geometry .D ...
随机推荐
- Inceptor查询语句
-- MySQL中的语句都能用,不再一一描述,只记录一些不同 详情见Inceptor 6.0文档 3.4.4查询语句这节 -- 查询语句 SELECT开头,可以通过添加多种从句从Inceptor中的表 ...
- mybatis Sql语句配置详解
sql语句配置 id sqlSession执行的唯一标识 resultMap 结果集封装映射,可用于内部对象一对多封装 resultType 返回的结果类型,直接就是一个po对象 resultSets ...
- CentOS环境下搭建青岛大学OJ
1.安装必要的依赖sudo yum updatesudo yum -y install epel-releasesudo yum -y install python-pipsudo yum clean ...
- ACDream手速赛2
地址:http://acdream.info/onecontest/1014 都是来自Codeforce上简单题. A. Boy or Girl 简单字符串处理 B. Walking in ...
- Codeforces Round #666 (Div. 2)
比赛链接:https://codeforces.com/contest/1397 A. Juggling Letters 题意 给出 $n$ 个字符串,可在字符串间任意移动字母,问最终能否使这 $n$ ...
- 阅读笔记:Very Deep Convolutional Networks for Large-Scale Image Recognition
摘要: 在这篇论文我们主要研究卷积神级网络的深度对大范围图像识别效果的影响,我们发现增加神经网络层数增加到16-19层时我们的实验结果有很大的提高.这使得我们在2014年的ImageNet Chall ...
- HDOJ 1028 母函数分析
#include<iostream>#include<cstring>using namespace std;int main(){ int c1[10000],c2[1 ...
- A. Little Pony and Expected Maximum
Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter Shy. But she ...
- python+selenium+bs4爬取百度文库内文字 && selenium 元素可以定位到,但是无法点击问题 && pycharm多行缩进、左移
先说一下可能用到的一些python知识 一.python中使用的是unicode编码, 而日常文本使用各类编码如:gbk utf-8 等等所以使用python进行文字读写操作时候经常会出现各种错误, ...
- Codeforces Round #540 (Div. 3) D2. Coffee and Coursework (Hard Version) (二分,贪心)
题意:有\(n\)个数,每次可以选\(k(1\le k\le n)\)个数,并且得到\(a_1+max(0,a_2-1)+max(0,a_3-2)+...+max(0,a_k-k+1)\)的贡献,问最 ...