Games101-光线追踪(基本原理)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在这里插入图片描述
光线追踪和光栅化是两个不同的成像方式。
光栅化最大的问题是无法很好的表示全局的效果。
全局效果包括 软阴影(shadow mapping后来被改进成能够支持软阴影,阴影随着离物体越远越来越模糊),glossy反射(类似镜子,但没有镜子那么光滑,打磨的比较光滑的金属),间接光照(光线在到达人眼前会弹射很多次)
在这里插入图片描述
光栅化是一种很快的,但是质量较低,近似的渲染方法
在这里插入图片描述
光学追踪是种准确的渲染方法,但是非常慢。1帧就需要1万个cpu小时
光栅化通常用来做实时的应用,光学追踪通常被用来离线的应用(电影)

Basic Ray-Tracing Algorithm

在这里插入图片描述
光线;

  1. 光线沿直线传播(现实物理是错的,但计算机图形学离这样假设)
  2. 光线和光线不会碰撞(现实物理是错的,但计算机图形学离这样假设)
  3. 光线肯定从光源发出来,打到场景中,在场景中不断反射折射最终进入到人眼(光线的可逆性,可以理解为从人眼发出感知的光线,打到物体上,最终打到光源。即如果光源可以通过某种办法看到相机,则相机也能看到光源,可以形成一条反过来的光路)

在这里插入图片描述
光线追踪实际是从眼睛/相机出发,往世界中投射光线,把这些光线在世界中弹来弹去,最终到达光源。
在这里插入图片描述
首先做光线的投射:假设往一个虚拟的世界中看,眼前放了一个成像的平面,平面被画成了不同的像素格子。对每个像素可以从摄像机连一条线穿过像素,可以打出一根光线,这跟光线一定会打到场景中的某个位置或者和场景中什么都不相交,如果光线和场景中某一物体相交,说明沿着这个方向看到了某点,然后把这个点与光源做连线(判断点是否对光源也可见,即是否在阴影里),如果不在阴影里,则形成一条有效的光路。可以计算光路上光的能量,进行着色。
在这里插入图片描述
光线追踪认为眼睛永远是一个针孔摄像机,即一个点。光源也假设是个点光源。对于光线中的物体,认为光线打上去,会发生完美的反射或折射。
eye ray/camera ray:打出的光线找到场景中最近的物体相交的点
在这里插入图片描述
shadow ray:从交点到光源的连线。
通过法线,入射方向,出射方向可以算该点的着色,写入像素

Whitted-Style Ray Tracing

在这里插入图片描述
在这里插入图片描述
依然是找到最近的相交点,当光打到点上时,有一部分能量会被反射,另一部分能量会被折射进去
在这里插入图片描述
从眼睛投射出来的光线打到一个点时,如果是个玻璃材质,这个点应该做一个完美的镜面反射
在这里插入图片描述
同时对于玻璃球,可以折射进去,在内部继续传播,打到另外一个点,在折射出来

即在任何一个点,可以继续传播光线,只要正确的算出反射方向,折射方向
在这里插入图片描述
由于光线弹射的次数多了,在每一个弹射的点,都会计算着色的值,如上图每一个和光线的交点,都与光源做一条连线。看在这个点上,能否被光源照亮
如果光源可以照亮任何一个弹射的点,就把弹射的点内部算出着色的值,都加到最后着色的像素
在这里插入图片描述
eye ray/camera ray又称作primary ray
之后弹射的光线都称为secondary ray
往光源连线为了判定可见性的称为shadow ray
在这里插入图片描述

Ray-Surface Intersection

在这里插入图片描述
数学上的光线就是一个射线。一个起点,一个方向
点光源o,传播方向d。光线上的任意点r: o + t d o+td o+td,由于只往一个方向,所以 0 ≤ t ≤ ∞ 0{\leq}t{\leq}∞ 0t
图形学很少考虑边界,所以是否等于0影响不大

Ray Intersection With Sphere

在这里插入图片描述
球上任一点p到球心c的距离,都等于R
在这里插入图片描述
t需要为正,并且为实数,即 b 2 ≥ 4 a c b^2{\geq}4ac b24ac

Ray Intersection With Implicit Surface

在这里插入图片描述
光线与隐式表面求交与球求交同理,求t,t需大于0,并且为实数

Ray Intersection With Triangle Mesh

在这里插入图片描述
光线与显式表面三角形求交:一个一个三角形判断
对于无洞物体
点在物体内,交点数一定是奇数
点在物体外,交点数一定是偶数

Ray Intersection With Triangle

在这里插入图片描述
光线和三角形求交:先求光线和三角形所在平面交点,再判断交点是否在三角形内

Ray Intersection With Plane

在这里插入图片描述
平面:可以定义成一个方向(法线)和一个点
平面上任一点p,满足 p − p 、 p-p^、 pp的向量和法线垂直
在这里插入图片描述

Möller Trumbore Algorithm

在这里插入图片描述
MT算法:3维向量可以得出3个方程组,解3个未知量
克拉默法则求解线性方程组

Accelerating Ray-Surface Intersection

加速求交(和三角形)
在这里插入图片描述
原始方法每次弹射都要和场景里所有三角形求交,找出最近点,非常慢
在这里插入图片描述
一千多万个三角形
在这里插入图片描述
两千万个三角形

作业

主要注意求人眼所看实际屏幕的大小。
需要先将输出点x,y转换为正交投影的[-1,1],此时打出来的图片是上下颠倒的,说明图片着色输出顺序是反的,所以需要y取反输出,正交投影是按宽高比缩放为[-1,1],所以逆推还原屏幕比 x要乘以imageAspectRatio
人眼为光的方向是 normalize(Vector3f(x, y, -1) - Vector3f(0)),所以近平面z值在-1,此时y是被压缩成[-1,1]的范围,根据fov还原实际屏幕的y值, 实际y/z = tan(fov), z绝对值为1,所以实际屏幕y最大值为tan(fov),1要转化为tan(fov)即乘以scale。
MT算法直接抄公式,注意判定时间t大于0,以及三角形重心坐标符号点在内部的性质
在这里插入图片描述
github作业地址

GAMES101: 现代计算机图形学入门(2)几何、光线追踪 注意:规定光线沿直线传播,不考虑其波动性,光线光线之间不会碰撞,所有的光线可理解为光源射向我们的眼睛。我们将光线理解为从一个点出发,向某一方向发出的射线。注意:光线定义中的r(t)一定是一个点。 阅读详情

相关推荐

GAMES101-图形学笔记(9)光线追踪(上)

八叉树在不同维度划分不一致,KD树每次把空间划分为两个,相当于二叉树,都是沿着物体边缘划分的,以下图二维划分为例,是水平和竖直划分交替进行,以保证划分是比较均匀的;把三角形划分两个部分,重新求两个部分的包围盒,按照一定顺序排序,取中间的三角形进行划分,最后保证二叉树是平衡二叉树,最后能保证每个物体只在二叉树的一个叶子节点里;以二维盒子为例,先算一个对面进出时间,再算另一个对面的进出时间,最好进入时间取最大的,出去时间选最小的,即可得到这个长方形面的进出时间;把包围盒划分为多个网格,判断哪些网格存在物体;

qq_55334162的博客 684

GAMES101复习:光线追踪(Ray Tracing)

图形学复习

最不正经的计算机专业学生 2048

GAMES101作业5-从头到尾理解代码&Whitted光线追踪

作业本身不难,但是想要学习更多所以从头到尾理解代码并梳理知识点,巩固基础。主要梳理了Whitted光线追踪从头到尾的步骤,但远远不详尽,会继续学习,之后进行补充。

qq_41835314的博客 7943

什么是光线追踪?它与其他渲染技术想不有什么优缺点?

作为一种 3D 渲染技术,光线追踪是创建逼真且视觉上令人惊叹的图形的绝佳工具。与其他渲染技术不同,光线追踪可以准确地模拟光传输,这意味着它可以提供比其他技术更准确的结果。根据我的经验,光线追踪还使艺术家能够对阴影、反射和折射等事物进行更具创造性的控制。在这篇博客中,我将探讨光线追踪的优点和局限性,以及光线追踪和光传输算法之间的区别。随着我们的前进,我们还将了解光线追踪在现代电影中的重要性,以及如何使用它来创建更快、更高效的渲染技术。

专注于3D渲染行业,分享3D渲染的经验和技巧 4866

计算机图形学GAMES-101】7、光线追踪原理(线面求交、预处理空间划分)

为什么要使用光线追踪? 3 光线追踪的做法4 递归光线追踪(Whitted-Style Ray Tracing) 1 为什么要使用光线追踪? 光栅化局限性 处理不好全局效果 基本只考虑光线弹射一次,即从光源打到物体表面弹射到相机 是一种近似的效果,不准确、不真实 光线追踪的优势 更方便地处理间接光照(光线到达相机之前弹射多次) 更好实现软阴影、毛玻璃效果 准确、真实、符合物理规律、质量非常高 光线追踪唯一的缺点:特别慢 2 光线(Light R...

记录值得记录的东西 5381

计算机图形学GAMES101(十二)光线追踪基本原理

为什么要使用光线追踪? 当对物体着色的时候,只考虑了像素点自己,没有考虑物体遮挡。所以着色不能解决阴影。那么怎么解决阴影问题呢? 阴影映射(Shadow mapping) 可以使用阴影映射来渲染阴影。阴影映射的实质还是光栅化。 阴影映射的思想: 如果一个点不在阴影里,则我们可以看到这个点,而且相对于光源来说也可以看到这个点。如果一个点在阴影里,则我们可以看到这个点,但是相对于光源来说也看不到这个点。即一个点不在阴影里面则两者都可以看到。(这种阴影叫做硬阴影) 实现阴影映射的步骤: 1、从光源看向场景记录看到

weixin_45712636的博客 2413

计算机图形学:【Games101】学习笔记07——光线追踪基本原理、加速结构)

本文介绍了光线追踪基本原理与加速结构。首先分析了光栅化的局限性(如难以处理软阴影、间接光照等全局效果),并对比了光栅化(实时渲染)与光线追踪(离线渲染)在速度与质量上的差异。接着阐述了光线追踪的核心概念,包括光线投射(Ray Casting)和Whitted风格递归光线追踪(Recursive Ray Tracing),后者通过光线多次弹射实现镜面反射、折射等效果。文章详细讲解了光线与隐式表面、球体及三角形网格的求交方法,重点介绍了高效的Möller-Trumbore算法。最后指出朴素算法的性能瓶颈(需测

做cv的小昊的博客 382

GAMES101 梳理 / 个人向图形学笔记

矩阵变换 Lecture2 线性代数 Lecture3-4 坐标变换 1、二维的坐标变化 2、三维的坐标变化 矩阵相乘的顺序是从右往左,矩阵变换的顺序应该是——旋转、缩放、平移。 为什么引入齐次坐标 不引入齐次坐标,类似斜切等 为什么引入齐次坐标? 为了用一个矩阵就可以表示矩阵的变换 ...

qq_39006214的博客 8270

Games101-光线追踪(蒙特卡洛积分与路径追踪

Games101学习笔记

Mhypnos的博客 1549

games101 作业5 光线追踪 RayTracing 记录

关于光线追踪的练习

llxllx6969的博客 1280

Games101:作业5解析

目录 作业要求 Render() rayTriangleIntersect() 参考链接 作业要求 在这部分的课程中,我们将专注于使用光线追踪渲染图像。在光线追踪中最重要的操作之一就是找到光线与物体的交点。一旦找到光线与物体的交点,就可以执行着色并返回像素颜色。在这次作业中,我们需要实现两个部分:光线的生成和光线与三角的相交。 本次代码框架的工作流程为: 1. 从 main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景中,并设置其材...

Q_pril的博客 6172

GAMES101光线追踪

文章目录前言lecture 13为什么引入光线追踪?定义光线Ray Casting(光线投射)Recursive (Whitted-Style) Ray Tracing 基本原理技术细节Ray-Surface Intersection 求光线与场景的交点 前言 课程视频: https://www.bilibili.com/video/BV1X7411F744?p=13 他人笔记: https://zhuanlan.zhihu.com/p/144403005 https://zhuanlan.zhihu.co

weixin_47652005的博客 1558

GAMES101 蒙特卡洛光线追踪

本篇博客作为Games101关于Ray Tracing部分的复习总结。

Carrot_Swordsman的博客 1490

GAMES101】作业5 简单光线追踪与代码流程理解

作业描述 在这部分的课程中,我们将专注于使用光线追踪渲染图像。在光线追踪中最重要的操作之一就是找到光线与物体的交点。一旦找到光线与物体的交点,就可以执行着色并返回像素颜色。在这次作业中,我们需要实现两个部分:光线的生成和光线与三角的相交。本次代码框架的工作流程为: 从 main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景中,并设置其材质,然后将光源添加到场景中。 调用 Render(scene) 函数。在遍历所有像素的循环里,生成对应的光线并将返回的颜色保存在帧缓冲区(framebu

ycrsw的博客 3646

计算机图形学Games101笔记--光线追踪。RTX ON!!!(--删除线)

本博文仅作为复习笔记或者快速浏览。不适用于从零开始了解光线追踪

顾若茵的博客 1004

games101作业7光线追踪 含多线程和微表面提高

对于光线追踪进行综合运用。

m0_57958061的博客 1701

[Games101 作业6] 光线追踪 BVH

总是沿某个轴进行切分,每次划分总会在原来的区域上生成两块新的区域,划分轴的次序是交替进行的,二维中是xyxy·······,三维则是xyzxyz······场景划分成一个个规整的格子,此时判定光线与物体相交就转换成光线与格子相交问题,当光线与格子相交后,再去考虑光线与格子内物体是否相交。如图所示:光线与红色方框格子相交,然后进一步与格子中存储的物体求交,得到第一个交点就是最近的交点,之后的计算可以不用进行下去了。如此一来,完美的避免了三角形与盒子不好求交的问题,并且使得一个物体只会在一个包围盒里。

m0_69107096的博客 1053

GAMES101蒙特卡洛光线追踪及Assignment7

本篇博客作为Games101关于Ray Tracing部分以及Assignment7路径追踪的复习总结。

Carrot_Swordsman的博客 1160

13 Games101 - 笔记 - 光线追踪(Whitted-Style光线追踪原理详解及实现细节)

光栅化的缺点:不能很好的处理全局光照。(因为Blinn-Phong这种局部模型无法处理全局效果!

zgynbnbnb的博客 2796
上一篇: Games101-几何(网格处理)、阴影图
下一篇: Games101-光线追踪(加速结构)
Mhypnos
博客等级 码龄11年 731粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值