前言这些文章是我在学习games101的过程中的一些心得和笔记,有些是课程的,有一些则是我在其他博客等处总结的相关点和扩展资料。 对应的作业是HW 5-7,下面是我做的作业详解,仅供参考。 阴影映射(shadow mapping)点光源的阴影 -> 只能生成硬阴影shadow mapping
注1:这里所有物体包括摄像机都在世界空间内,光源和眼睛的“看”意味着做投影,类似于v矩阵。例子:对于eye“看”到的一个(,)点,这个点实际上是在eye的投影平面上,对这个点做eye投影的逆变换,就可以得到原本世界坐标上的点(x,y,z),再对它做光源投影,就能得到光源投影平面上的对应的点坐标(,),从而获得存储在这个点上的深度值。 为什么需要光线追踪?
光线追踪与光栅化的对比光线追踪与光栅化的对比 Whitted-Style原理从眼睛发射一条光线穿过显示屏投射到物体上,得到交点shader point,既发生折射又发生反射,从折/反射点发射一条指向光源的shadow ray,判断它是否被物体遮挡,没有遮挡就对这个shader point着色(比如使用phong模型着色,当然,得利用物体的法线),最后把这些着色点的着色结果加权到得到一个颜色,把颜色设置进显示屏对应的像素上。 Whitted-Style 技术细节光线定义 -> 一个向量,有起点,有方向 光线定义 求光线和物体表面的交点 a)显式表面 -> 场景中多是这种难以用方程描述的显式表面 从光源直接投射一个光线,求它与三角形所在平面的交点,再用叉乘判断交点是否在三角形内 显式表面求交 或者一步到位,使用Mller Trumbore Algorithm:将交点用重心坐标表示,得到一个有三个变量 t , b_1 , b_2 的3阶线性方程组,解方程。 b)隐式表面 -> 令曲面上的点P等于光线上的点r即可求解。 隐式表面求交 c)加速求交 -> 三角形太多,不可能一个一个去求交 1)AABB包围盒 将物体用包围盒包围,如果光线没与包围盒相交,就不可能与物体相交。将包围盒作为三个“对面”的交集,如下 AABB包围盒 如何判定是否相交:将光线延长为直线,分别求出与三个“对面”的交点 t_{min} 和 t_{max} , 并且t_{enter} = max\left\{ t_{min} \right\} , t_{exit} = ma\left\{ t_{max} \right\} ,当 t_{enter} < t_{exit} && t_{exit} > 0 时,光线与包围盒相交 判定是否相交 2)场景预处理 -> 画格子 场景预处理 首先,场景栅格化,把物体表面涉及的格子标记,之后发射光线,沿着光线取格子,取到有标记的格子就判断是否与物体相交,否则继续取格子。 注1:这里默认一个事实 -> 判断光线与格子相交比判断与物体相交简单 3)空间划分(预处理)-> 为了解决“Teapot in the stadium”问题 空间划分
分完以后记录一个盒子里包含哪些物体。 查找过程:类似于二分查找。以KD树为例,投射一条光线,当光线碰到父节点的盒子时,需要递归的判断是否碰到子节点的盒子,直到判断进行到叶子节点时(叶子节点就是分的最小的盒子),意味着需要对叶子节点的这个盒子中包含的物体判断是否相交。 KD树 4)物体划分(预处理)-> 为了解决KD树一个物体存储在多个盒子里、难以判断物体是否被包围盒完整包围的问题 查找的过程与KD树类似,递归就行 物体划分 辐射度量学符号定义
重点理解下面这个图就可以了,首先,irradiance是单位面积dA接收的总辐射能量,记作E,这个E是多个方向的能量叠加的,dE单指一个方向来的打到dA上的能量,即w方向来的能量。 irradiance与radiance的关系 Bidirectional Reflectance Distribution Function(BRDF)BRDF做了什么? -> 假设已知入射光和受光点,BRDF函数可以求出反射光分布,反之亦然,所以叫双向分布函数 为什么需要BRDF? -> 已知入射光能量和角度,射到物体表面物体先吸收能量,然后再向各个方向辐射(即反射),BRDF能求出给定方向的辐射的能量是多少,比如辐射到摄像机那里会有多少能量 BRDF怎么做的? 反射方程反射方程 dL(w_r)指沿着 w_r 方向上传播的一部分能量,dE(w_i )指w_i方向来的打到dA上的能量。那么一个w_i 方向的光对这个反射方向w_r的贡献比例是f_r,对所有光方向积分,就能得到沿着w_r方向的总的反射光能量。如下面的积分公式,L_r代表沿着出射方向w_r上的由dA反射的总能量,L_i是沿着入射方向w_i 射入dA的能量,f_r是换算比例,沿着方向积分即可将所有方向的“贡献”加和。 总的反射光能量 渲染方程物体表面发出的光由L_e->自发光和L_r->反射光组成 渲染方程 简化方程得下图,可以看到直接光照和间接光照的关系,直接光照就是光线只弹射一次,间接光照是光线弹射两次以上,因此光栅化只能完成直接光照部分,光线追踪可以完成间接光照的部分。 简化方程 怎么渲染 -> 怎么解方程?Whitted-Style方法做了一个假设,光线遇到反射\折射材质就继续追踪,遇到漫反射材质就停下来做着色。这个假设并不符合物理,漫反射也会反射。因此引入路径追踪就是为了解决这个问题。 注意:路径追踪不太好处理点光源,因此假设的光源都是面光源
蒙特卡洛积分
直接光照 假设物体不发光并且只考虑直接光照,渲染方程只剩下反射项,同时均匀采样,因此半球的总立体角为2π,概率密度函数=1/2π,得到下面的反射方程 反射方程 其中,p是着色点,wi是入射方向,wo是出射方向,这种情况就要遍历所有入射方向
间接光照
N=1
发射多次光线 对于一个屏幕上的像素,从相机处发射多次穿过这个像素的光线,一次一条,对这条光线做只采样一个方向的路径追踪,得到多次光线的平均颜色。
对于一次追踪就可以到达光源的情况(直接光照),利用换元积分法,将在着色点上的积分以及对入射角的采样,转换到对光源(面光源)采样以及在光源上积分。这样可以在光源面积较小时,避免射出“浪费”的光线。 采样方式优化 以dw为半球原点,对dA求一次立体角,立体角等于面积/距离平方。这样即可获得dw和dA的关系。 注:对光源采样只能处理直接光照,间接光照是没办法简化的,还是会“浪费”很多光线,(例子:wi取了100个方向,但是只有2个方向的光线可以打到光源附近的,因此其他光线就“浪费”了。)解决这种问题可以使用BDFT。 BDFT
处理遮挡 BRDF的一些性质
材质与渲染方程 -> 材质 = BRDF颜色的准确定义颜色 不同的材质,不同的方程
处理漫反射就是用之前学过的Path Tracing去采样间接光照的光线方向
镜面反射
菲涅尔折射定律 -> Microfacet Material 微表面材质 -> 一种基于物理的材质(state-of-Art)定义物体的表面是凹凸不平的,宏观的表面由许多微小的平面构成,光线在每个微平面上发生理想镜面反射或折射。 作用通过改变微表面的法线分布,可以改变其对光的反射和折射效果。 法线分布 应用参考链接 -> 高级光线追踪简介 -> 学术界前沿这一部分就不详细介绍了,感兴趣可以根据我我给出的参考链接学习 无偏光线追踪
有偏光线追踪
实时辐射度算法(Instant Radiosity) ->高级材质表面参与介质 ->毛发材质 ->次表面散射 ->布料材质 ->颗粒状材质 -> 用的不多 |
Games101 课程笔记(四) 阴影与光线追踪与材质
前言这些文章是我在学习games101的过程中的一些心得和笔记,有些是课程的内容,有一些则是我在其他博客等处总结的相关知识点和扩展资料。请注意:这篇文章对应的课程内容是Lecture 13-18 ,课程链接见下对应的作业是 ......
这篇内容能帮你快速理解什么
通过更完整的主题说明和结构表达,帮助用户更快抓住重点,也让搜索系统更容易识别页面主题。
让访问者快速理解当前问题、可行方法以及下一步应该继续看案例、看服务还是直接沟通。
文章页不只是获取流量,也承担继续阅读、查看服务和发起咨询的承接作用。
继续了解这个主题前,你可能还关心这些问题
为什么这类主题适合写成文章?
因为很多用户会通过问题词、对比词和方案词进入网站,文章页越清楚,越容易覆盖更具体的需求。
为什么文章页不能只有正文?
仅有正文不利于继续浏览和转化,文章页还需要总结、问答、相关推荐与咨询入口来承接用户。
看完之后下一步可以做什么?
可以继续看同类文章、服务页与案例页,也可以直接沟通官网升级与搜索优化需求。
这篇文章能帮助我解决什么具体问题?
这篇文章围绕当前主题提供了详细的解决方案、操作步骤和注意事项,帮助你快速理解核心要点并应用到实际场景中。
如何判断这篇文章的内容是否权威可靠?
内容基于实际项目经验和技术实践编写,结合行业标准和最佳实践,同时提供案例数据和方法论支撑,确保专业性和可操作性。
这类内容对SEO和网站排名有什么帮助?
优质的长文内容和FAQ结构能够提升页面主题相关性、增加用户停留时间、降低跳出率,这些都有助于搜索引擎评估页面质量并提升排名表现。
AI搜索引擎会如何理解和引用这类内容?
AI搜索系统会提取文章的实体信息、观点结论和结构化问答,当用户提出相关问题时,可能会引用本文作为答案来源或参考依据。
如果我有更多相关问题可以咨询谁?
可以通过页面底部的联系方式直接咨询我们的专业团队,包括电话、QQ或在线表单,我们会根据你的具体情况提供针对性的建议和方案。
这篇文章和同类内容有什么不同之处?
本文不仅提供理论知识,还包含实战经验、避坑指南和可执行的行动建议,同时兼顾传统SEO和新兴的GEO生成式搜索优化视角。
多久需要更新一次这类内容以保持时效性?
建议每季度审查并更新一次关键数据和案例,如果涉及技术工具或算法变化则需要更频繁地维护,确保内容持续为用户提供准确价值。