百人计划(程序)4

第五章 

一、PBR

        概述:PBR(Physically Based Rendering)基于物理的渲染。

        基于物理:基于物理的材质(Material)、基于物理的光照(Lighting)、基于物理适配的摄像机(Camera)。

  • 基于物理的材质(光照模型)概述

        基于物理的渲染依然是对现实世界的近似。并且需要满足三个条件:基于微平面(Microfacet)的表面模型能量守恒应用基于物理的BRDF

        1.微平面理论:将物体表面建模成做无数微观尺度上有随机朝向的理想镜面反射的小平面(microfacet)的理论。

        可以很好的去描述粗糙表面和光滑表面的区别。

         2.能量守恒:出射光线的能量 永远不能大于 入射光线的能量。

                ①表现:随着粗糙度的上升镜面反射区域的面积会增加,作为平衡,镜面反射区域的平均亮度则会下降。

                ②如何能量守恒:

扫描二维码关注公众号,回复: 15855316 查看本文章

                        使用反射率方程:

                        简单理解就是:

                                反射光的强度 = 入射光的强度 * 反射比例 * 入射光的衰减

                                反射光的强度 + 自发光强度 = 最终出射光的强度

                                入射光的衰减:半角向量和法线的点积

                        难点在于反射比例大小

        3.BRDF(Bidirectional Reflectance Distribution Function) 

                双向 反射 分布 函数

                *BSDF = BRDF + BTDF        BRDF:

                 ②BRDF具体是怎么计算的:

                        (1)漫反射:基本采用Lambert光照模型(经验模型)

         Kd是漫反射系数,与高光反射系数相加为1;(I/r^2)→ r 指受到光源方向到平面距离,光强与距离的平方成反比,距离越大,光强越小;光强还与角度有关,角度越垂直,光强越大。

                        (2)高光反射(经验模型):

        Blinn-Phong模型在性能上更好,也更接近真实的情况。

                       (3)基于物理的高光反射

         Kd+Ks=1

        Ⅰ 法线分布函数:描述法线对光衰减起作用的函数。

         Ⅱ 几何(遮蔽)函数

         Ⅲ 菲涅尔方程

         4.总结:

         蓝色部分是BRDF的核心算法,BRDF前面是漫反射部分,采用Lambert模型进行计算。

        5. 迪士尼原则的BRDF

  1. 应使用直观的参数,而不是物理类的晦涩参数
  2. 参数应尽可能少
  3. 参数在其合理范围内应该为0到1
  4. 允许参数在有意义时超出正常的合理范围
  5. 所有参数组合应尽可能健壮和合理
用了11个参数即可非常真实地模拟出金属、非金属以及不同粗糙度的材质光照结果

         6.参考:

        https://learnopengl-cn.github.io/07%20PBR/01%20Theory/#pbr

        https://aras-p.info/texts/files/201403-GDC_UnityPhysicallyBasedShading_notes.pdf

        https://zhuanlan.zhihu.com/p/33464301

        https://www.zhihu.com/column/c_1249465121615204352

        https://www.zhihu.com/column/game-programming

        https://blog.uwa4d.com/archives/1582.html

  • 基于物理的相机概述

        1.曝光三角形

                ①曝光主要由三个参数控制:

                        快门速度(Shutter Speed)→ 运动模糊(Motion)

                        光圈(Aperture) → 景深(Depth of Field)

                        感光度(ISO) → 噪点( Grain )

         ②具体步骤:

        这三个参数协同工作,调节进入传感器(Sensor)的光量(由光圈和快门速度控制)和该表面的感光度(传统的胶片或现代的数字 ISO)。我们可以看到光先通过光圈(Aperture)控制后,再通过快门(Shutter),最后再到达传感器( Sensor )上。

相机镜头到传感器

         ③相机流水线:

         场景亮度(Scene Luminance)→ 镜头的光圈(Lens)→ 传感器亮度(Sensor illuminance)→ 快门 (Shutter)→ 传感器曝光(Sensor Exposure) → 电耦合元件(CCD)→ 模拟电压(Analog Voltages)→ 模拟数字转换器(ADC)→数字值(Digital Values)→重映射(Remapping)→ 像素值(Pixel Values)

        摄影师则可以控制相对光圈快门时间传感器灵敏度/增益三个主要参数来设置曝光。

        举个例子,用人眼来对比:

        光圈(Aperture) 的功能就像眼睛的虹膜一样,可以张开并收缩其开口的直径来限制允许进入眼睛的光量。

        快门速度(Shutter Speed) 类似于眨眼,只是在我们清醒时眼睑通常是打开的。想象一下,你的眼皮在闭上之前瞬间张开以捕捉单个图像,那就像是相机的快门。

        感光度(ISO) 类似于眼睛后部视杆和视锥细胞的灵敏度。

        ④曝光补偿

        曝光补偿是一种曝光控制方式,一般常见在±2~3EV。以前胶片时代只能调1个EV,而现在数码能调动1~3个EV。EV值每增加1.0,相当于进光量增加一倍。EV值每减小1.0,相当于进光量减小一倍。如果环境光源偏暗调节上述三个参数达不到效果或者手动挡调参失败,即可增加曝光值(如调整为+1EV、+2EV)以突显画面的清晰度。曝光补偿就是有意识地变更相机自动演算出的“合适”曝光参数,让照片更明亮或者更昏暗的拍摄手法。拍摄者可以根据自己的想法调节照片的明暗程度,创造出独特的视觉效果等。一般会使用变更光圈值或者快门速度来进行曝光值的调节。曝光补偿则放在最后。

        ⑤直方图

        直方图是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布。

        这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图中的数据多集中于左侧和中间部分;而整体明亮、只有少量阴影的图像则相反。

         直方图是用来观察照片是否曝光的重要利器,现代数码相机内应该都会内置直方图。直方图主要是为了帮助我们在拍摄的过程中有一个参考,以确保我们所拍摄的照片不会丢失高光或者阴影中的任何细节。

        因为我们知道在相机的屏幕中看照片和在电脑上看照片的感觉是完全不同的,而且在相机屏幕中看可能还会受到现场光等一些干扰元素的影响。因此相机中内置的直方图为我们提供了一种参考,帮助我们在拍摄照片的时候就能够分析这张照片有没有丢失细节。或者是否过曝。

        2.快门速度

                ①定义:快门速度是衡量相机快门打开的时间——允许光线照射到感光传感器的时间。

                ②运动模糊:焦平面快门和滚动电子快门,由于它们的设计和功能,当图像平面上有快速运动时,都会导致图像产生有趣的失真。

        所以当我们拍摄高度运动的物体,如汽车,奔跑的人时,快门速度应该调快,才可以弥补这种视觉残影的效果。但是这意味着感光器收到的光线不足,如何解决这种问题也是我们下面需要讲的内容。当我们在游戏内快速旋转摄像机时暂停,就能获得这种效果。这种效果更多的是为了突出对象的运动感和速度感。 如左图 ,是在UnityHDRP管线下基于物理相机产生的运动模糊。

        3.光圈

        ①光圈是一个用来控制光线透过镜头,进入机身内传感器光量的装置,通常是在镜头内。

        已经制造好的镜头,我们不可能随意改变镜头的直径,但是我们可以通过在镜头内部加入多边形或者圆形,且面积可变的孔状光栅片来达到控制镜头通光量,这个装置就叫做光圈。

        ②表达光圈大小我们是用F数表示通常称为f-number(N),记作F/。透镜的焦距(F)与孔径(D)的比,我们记为N= F/D ,孔径(D)越大,进入相机的光线就越多。光圈不等同于F数,恰恰相反,光圈大小与F数大小成反比,F数又称光圈数。如大光圈的镜头,F数小,光圈数小;小光圈的镜头,F数大。

        所以:光圈数值和光圈大小是相反的,小的“光圈数值”代表了大光圈,大的“光圈数值”代表了小光圈。比如F/1.2、F/1.8、F/2.8这三组数值都表示大光圈(一般F/+一个数值特指光圈数值),其中F/1.2的光圈最大,而F/18、F/22、F/32则表示小光圈,其中F/32最小。

        ③光圈可以理解为一个圆形,圆的面积公式是:面积 = π 乘以半径的平方。

        所以如果将相机光圈设置为 F/8,拍摄一张图,然后将光圈调整到 F/5.6,那么通过镜头的光量则增加了一倍。从 F/8 改为F/4 会使光量增加四倍。从 F/11 到 F/16 则减少了一半的光量。遵循反平方定律。

        ④光圈大小会影响景深(焦点)。光圈大,背景虚化强;光圈小,背景虚化小。

         ⑤衍射现象:光圈不仅控制通过镜头的光量,还影响光线穿过镜头时的角度。光线经过孔径光栅时被轻微弯曲,光的这种弯曲称为“衍射”,是光的波动特性。

        缩小镜头的孔径光栅时,会使衍射更接近图像的中心。很多摄影师在刚开始了解光圈的时候,因为光圈对景深的影响,认为最大化锐度的关键是小光圈。然而这是不正确的。由于存在衍射,尽管通过缩小光圈来去除景深,但图像中的衍射量也在增加,这就会导致图像失去清晰度。

        光圈的中间地带,即景深且衍射可控的区域,被称为镜头的“最佳位置” 一般是在 f/4 和 f/11 之间的区域,具体数值取决于镜头的设计。

侧面观看雨后的蜘蛛网和光盘,也会出现衍射现象。因为这些物体的微表面表面并不均匀(类似各向异性)

        4.感光度(ISO)
       
①ISO 与快门速度一样是线性的。ISO 为 200 对光的敏感度是 ISO 等级为 400 的一半。ISO 加倍,感光度加倍。一半的 ISO,一半的感光度。如下图,不同的ISO会使画面亮度不一样。

        因此,假设所有其他条件都不变,如果将相机的 ISO 从 400 更改为 200,则得到-1的EV (曝光)偏移,ISO 800 更改为 ISO 1600 ,感光度加倍,则+1 EV偏移。

         ②胶片颗粒Grain:

                提升数码相机的ISO是通过两种方式实现的:

                1、强行提高每个像素点的亮度和对比度;

                2、使用多个像素点共同完成原来只要一个像素点来完成的任务。

        这也导致了一个效果——数字噪点(Grain),ISO 越高,图像中引入的数字噪点就越多。相机厂商虽然不断的在新相机中增加大数量的像素,但他们也一直在努力减少在高 ISO 下的噪点数量。少量的胶片颗粒感可以改善照片的感觉和质感,但是这并不是可以为之的。

        5.相机和引擎

        ①HDRP下基于物理的摄像机环境:

        HDRP渲染管线环境,我们在Camera组件下找到Camera Body和 Lens 以及Aperture,勾选上Physical Camera。同时将Volume组件挂上Exposure和Depth of field并且设置Mode为Camera。即可启用基于物理的相机。这里的基于物理是根据相机和摄影知识理论构建的,但是目前阶段不算是很完善,比如Grain并不会因为ISO过高而产生效果,需要自己额外再Volume组件设置。也不会因为光圈越小产生衍射。目前支持的是景深与通过不同的值设置获得不同的曝光效果。   

        ②基于物理的摄像机快门速度 (Shutter Speed):其他属性都不变的情况下,快门速度越快,曝光就越低,呈线性下降。

         ③基于物理的摄像机光圈 (Aperture):其他属性都不变的情况下,光圈数越大,曝光就越小,呈指数下降 ,景深效果越弱。

         ④基于物理的摄像机感光度(ISO):其他属性都不变的情况下,感光度越小,曝光值越小

因为没有Grain效果 ,所以高感光度所产生的Grain效果并没有增加上。

         ⑤基于物理的摄像机曝光补偿(Exposure Compensation):。运用曝光补偿可以弥补参数设置的不足导致的过曝或者过暗。

         ⑥基于物理的摄像机焦距(Focus Distance)焦长(Focal Length):焦距主要用来对焦,单反相机一般会自动对焦,也可以手动对焦,这里就是模拟了手动对焦;焦长则模拟了不同类型的镜头,从拍摄花草鱼虫的微距镜头一直到打鸟射月的长焦镜头的模拟。

         ⑦自发光和Bloom特效:

                造成Bloom的原因:1. 高亮的值使得数码相机的传感器饱和,并且泄漏到临近的传感器单元。2. 光线在摄像机镜头内反射。3.相机镜头内或者表面有灰尘。

        像素的最终亮度取决于相机的设置,EV值决定了是否产生Bloom的效果。当入射的亮度超过了传感器本身最大的亮度值,就会产生Bloom。

        难题:特效设计师想要白天和夜晚效果一致的Bloom。对于自发光表面:可以给设计师提供工具控制Bloom。

  1. 给自发光表面定义“曝光补偿”,用于调整它的强度,确保该强度超过饱和点。
  2. 该项是场景全局值,额外的曝光被注入场景内,使得自发光表面变量或者变暗。

        HDRP对于自发光的强度控制:_EmissiveIntensity不是一个独立的属性。 着色器仅使用 _EmissiveIntensity来序列化 UI 中的属性,并将最终结果存储在 _EmissiveColor属性中。

 

         ⑧Sunny-16 法则:摄影术中不借助电子测光表来估计照相机的光圈大小和快门长短的方式。

        在室外阳光下,如果光圈是 f/16,则快门速度应是所用胶片的国际感光度指数的倒数。

        例如,在室外阳光下,如用光圈是 f/16,而ISO为100,则快门应为 1/100s(或者1/125)。“16”,并不是光圈非f/16不可,如选用f/11,则快门速度当提高一倍成为 1/200秒,以此类推。其次,要根据天气状况作调整,如并非阳光普照,而是多云,ISO为100,如果快门速度仍旧取 1/100s,则光圈应从1/16开大一倍到1/11;依此类推。

  • 基于物理的灯光

        1.辐射度量学基本理论

                ①定义:辐射度学是一门以整个电磁波段的电磁辐射能测量为研究的科学。而计算机图形学中涉及的辐射度学,则集中于整个电磁波普中光学谱段中的可见光谱段的辐射能的计算

                 ②立体角:单位球体上的一块区域对应的球面部分的面积。

        球面任意一块区域的面积等于球半径的平方,当从球心观察时,该区域的面积就是1SR。

         单位立体角:一个立体弧度为半径1 米的球面上1 平方米面积所张的立体角。

                ③辐射通量:为了研究单位时间内,通过某表面的各个光子所携带的能量之和是多少,物理学中引入了辐射通量(Radiation Flux)的概念。辐射通量定义为以辐射的形式发射,传输或者接受的功率,即单位时间内的辐射能,单位为W,记为ɸ

                 ④辐射强度:在给定的传输方向上,单位立体角内光源发出的辐射通量。

                 ⑤辐射亮度:辐射表面在其单位投影面积的单位立体角内发出的辐射通量。

        辐射亮度描述的是光源的表面面积微元在垂直传输方向上的辐射强度特性。好比单去描述一个白炽灯的某一块区域的发射特性是没有实际意义的,应该将它视作一个点光源整体,来描述在某个给定的观察方向上的辐射强度。

                ⑥辐射照度:辐射照度被用来测量光进入一个单位面积的强度,也可以表示光离开一个表面的强度,我们称为入射度与出射度。

         2.光度学基本理论

         3.灯光类型

                ①精确光:

        Frostbite和Unity3D 只支持两种类型的精确光:点光源和聚光灯。为了使精确光在物理上正确,它必须遵循反平方定律,如下图。从恒定亮度的光源观察到的光强与物体距离的平方成正比下降。平方反比定律只对点光源有效。

不适用于:

  1. 窄分布的泛光灯和探照灯,因为光束是高度聚光的。
  2. 区域灯或像菲涅尔透镜这样的特殊灯

非基于物理的 hack 以限制光线对衰减半径的影响。平方结果用以平滑函数

         ②IES:使用光度轮廓来描述其强度分布,这些分布文件被存储在一个光度测量文件中。存在两种常见的格式:IES(.ies)和eulumdat(.ldt) 。在计算机图形学中,大多数都只支持IES格式,Unity和寒霜也不例外。

         为什么要使用IES配置文件?IES配置文件在室内设计中比在游戏中更有用。能够使用光配置文件作为Mask带来了有趣的效果,IES配置文件可以使用对应的工具创建,并可用于模拟复杂的光影效果,类似于cookie。

         ③Sun

        太阳是非常重要的光源,特别是对于户外环境。太阳对方向和照度变化非常敏感。将这样的光源作为材质漫射部分的精确光是可接受的近似,但对镜面材质这样做会有问题。在寒霜引擎中,为了部分缓解这些问题,将太阳视为一个总是垂直于外半球的圆盘区域光。艺术家为垂直于太阳方向的表面指定太阳照度(以勒克斯为单位)。下图为他们直接使用的光表。

         4.灯光参数

自然光/人造光室内光推荐参数表
Unity光照和曝光图

  • PBR工作流程

        PBR两个最常用的工作流:金属/粗糙度工作流(Metallic/Roughness)和镜面反射/光泽度工作流(Specular/Glossiness)。

        1.金属/粗糙度工作流(Metallic/Roughness):

        这个工作流对应的贴图包括 Base Color(基础色贴图)、 Metallic(金属贴图)、 Roughness(粗糙度贴图) 、Ambient Occlusion(环境光遮蔽/环境吸收/AO贴图,下文统称环境光遮蔽贴图)、 Normal(法线贴图)、Height(高度贴图)。

       F0就是控制物体反射率的值。 非金属物体 = 反射值都被设为 0.04(线性空间) 在一些M/R工作流是可以改变的范围控制(0.0-0.08)。

        ①Base Color | 基础色贴图(RGB贴图-sRGB)

        Base Color 贴图是一个 RGB 贴图 ,它包含了俩种类型的数据 (漫反射/反射率的颜色),颜色代表着它本身反射的光的波长,比如白色反光强,黑色白色弱。如果这个区域在金属贴图中被指示为金属(金属贴图中为白色),那么这个反射值就会被显示出来。

        Base Color 贴图的色调一般看起来会比较平,它的对比度会低于传统的 Diffuse 贴图(传统的 Diffuse 贴图带有光影信息)。注意:如果数值太亮或太暗可能都会影响后续的光影渲染效果。

         ②Metallic | 金属贴图(灰度贴图-Linear)

        金属贴图的功能可以理解为一个遮罩,它告诉着色器应该如何去解读 Base Color 贴图中的 RGB 数据。金属贴图中  0.0(纯黑-0sRGB)代表了非金属,而 1.0(纯白-255sRGB)代表了原始金属(没有被腐蚀的金属状态)。

        原始金属在金属贴图中的灰阶范围大概是 235-255 sRGB 之间。 腐蚀金属就是有大量锈迹,或者油漆。这部分锈迹或者油漆部分还是按照非金属处理。

        ③ Roughness | 粗糙度贴图(灰度贴图-Linear)

         粗糙度贴图是描述物体表面是否粗糙,如果粗糙会导致光的漫射。石头的表面越粗糙反射的高光越散。玻璃的表面光滑镜面反射越集中,让高光看上去越强。纯黑(0.0)代表了平滑表面,而纯白(1.0)代表了粗糙表面。

         ④总结:

        优势:在 M/R 工作流中,由于非导体(电介质)的 F0 都是规定好的,所以设计师在对非导体 F0 赋值时不易出错;纹理的缓存压力更小,因为金属贴图和粗糙度贴图都是灰度贴图;目前来说是兼容性最广的工作流。

        劣势:非导体(电介质)F0 的值固定为 4%,无法调整。然而,在大多是实现流程中都有控制器可以直接复写这个值,所以也不能算硬伤;白色边缘问题较明显,尤其在低分辨率的情况下问题突出。

        2.镜面反射/光泽度工作流(Specular/Glossiness):

         S/G 工作流独有的贴图分别是 Diffuse(漫反射贴图)、Specular(镜面反射贴图)、Glossiness(光泽度贴图)。 在这个工作流里,金属的反射值和非金属的 F0 值被放置在镜面反射贴图(Specular)中镜面反射贴图中,你可以对非导体材质的 F0 值进行控制(反射贴图很可能被赋予错误的值)。 

        ①Diffuse | 漫反射贴图(RGB贴图-sRGB)

        漫反射贴图中只包含反照率颜色(Albedo),所以那些指示原始金属的区域会被标记为黑色(0.0),因为金属不会有任何漫反射色彩。

       ②Specular | 镜面反射贴图(RGB贴图-sRGB)

        镜面反射贴图是用于定义金属反射值和非导体(电介质)F0 值的贴图,镜面反射贴图是 RGB 贴图,所以非导体材质可以赋予不同的 F0 值,在镜面反射贴图中,金属和非导体的 F0 值都被写在了 RGB 通道当中。

        原始金属的 F0 值应该是基于真实世界测量的数据来设定。如果金属产生了氧化或者有些覆盖层被定义为非金属时,这个金属区域的反射值就要降低。而在 S/G 工作流中,污垢和氧化层在漫反射贴图中的色值会变亮,而在镜面反射贴图中的色值会变低。

         ③Glossiness | 光泽度贴图(灰度贴图-Linear)

        光泽度贴图适用于描述表面不平整度的贴图,表面不平整会造成光的散射(如图 41)。在这个贴图中,纯黑(0.0)代表的是粗糙表面,而纯白(1.0)代表了平滑表面。这和 M/R 工作流里的粗糙度贴图是完全相反的,但是在设计侧却有着类似的制图原则。

         ④总结:

        优势:边缘效应不会那么明显;可以在镜面反射贴图中对非导体(电介质)材质的 F0 值自由调整。 

        劣势:由于在 S/G 工作流的镜面反射贴图中,非导体(电介质)材质的 F0 值是可以自由调整的,所以也会导致设计师容易输入错误的值。而这些错误的值被着色器误读后可能会打破能量守恒定律,从而造成不正确的渲染效果;

        由于新增了一张 RGB 通道的镜面反射贴图,所以对性能消耗会更大;

        S/G 工作流有些名词和传统的工作流太相似,但是实质所对应的数据可能是不一样的,因此会导致设计师容易误解或误操作。这种情况下就要求设计师有更好的 PBR 理论知识,例如了解非导体(电介质)的正确 F0 值,金属在漫反射色下表现为纯黑,以及在着色器没有自动校正情况下,能量守恒相关的基础知识。

        3.通用贴图

        ①Ambient Occlusion | 环境光遮蔽/环境光吸收贴图(AO) 

        AO 贴图用于定义一个表面上的每个点在环境光下的暴露程度,它通常被用在后制效果中(加重夹角、交界面的阴影细节等)。

        ②Height | 高度贴图

        高度贴图通常被用作渲染置换(Displacement)效果,它可以用作视差映射,来给纹理增加更明显的深度,而且比起法线和凹凸贴图更加真实。

        ③Normal | 法线贴图

        法线贴图可用于模拟表面的细节。贴图中的 RGB 通道分别对应的是表面上不同部位法线的 X、Y、Z 坐标。它可以用作保存高模的细节,并且映射到低模中去。 

 F0:M/R 工作流 中F0是固定的,非导体(电介质)材质的 F0 值范围与次世代 PBR 着色器之间的关系。比起金属材质,非导体材质会反射更少量的光。普遍非导体材质的 F0 值会在 2-5% 之间,对应的是 RGB 范围为 40-75,与 0.02-0.05 线性范围重合。S/G工作流程适合制作宝石,塑料反射强但是非金属的物体。

来源:URP | PBR材质(一)-2种工作流介绍 - 哔哩哔哩 (bilibili.com)

二、光线追踪、路径追踪、光线投射

  • 光线追踪 Ray Tracing

        1.概念:一种渲染框架,与光栅化渲染并列。

        2.光栅化渲染:将场景的渲染按照物体→三角面→像素的层次拆解每个对象,导致全局信息丢失,在全局效果的精确实现(比如软阴影、间接光照等)上存在瓶颈。

        光线追踪:从相机出发,对每个像素点向场景投射光线,直到光线与场景中第一个物体相交,在交点处根据物体性质光源属性光照模型等计算这个交点的颜色,然后再根据该交点的折射或者反射,追踪反射光线或折射光线,直到与下一个物体表面相交并计算该点的颜色,直到光线到达光源或逸出场景。光线追踪将场景的渲染按光线拆解,这些光线之间是并行的,并且光线追踪可以获得一个场景的全局信息。

         3.计算光线与物体的交点(递归式光线追踪):

                ①射线方程和曲面方程联立,解方程组;

                ②计算射线与组成物体的三角面的交点:先计算射线与三角面所在平面的交点,再判断交点是否在三角形内;或者用Moller Trumbore算法直接计算射线与三角形的交点。

                ③快速光线求交:用一个包围盒(通常是长方体)把物体包围起来,保证物体完全在包围盒内。如果光线没有和包围盒相交,那么肯定不会与物体相交。通常使用一种轴对齐包围盒(AABB),即包围盒的棱与坐标轴平行的。

                空间划分:构造起包围盒后,虽然把物体围住了,但里面还是有一些空隙,可以把这个包围盒分成一个个格子,判断哪些里面有物体。(数据结构:八叉树、KD数、BSP数等)

        4.递归式光线追踪缺点:物理上不够严谨,构造的反射折射都是理想情况下的;适合模拟反射者,适合直接光照的漫反射结果,但没有考虑到来自其它物体的反射。

  • 光线投射 Ray Casting

        1.概念:从相机出发,对于每个像素点,向场景投射光线,直到光线与场景中第一个物体相交,在交点处根据物体性质、光源属性和光照模型等计算这个交点的颜色。

        2.缺点:只考虑投射光线,不会继续跟踪光线(不考虑后续的反射、折射等现象)。

         3.体积光线投射——体绘制(Volume Rendering)技术

        光线投射技术时用来对体绘制的三维纹理进行采样:

  • 路径追踪 Path Tracing

        1.概念:在光线遇到表面需要反射的,以表面法线为中心做一个半球,向半球上的若干方向引出一束射线,再递归计算这束光线中的每条光线对该表面点的光照贡献值。

         2.kajiya渲染方程:

         翻译:在p点沿着\omega _{0}方向最终观察到的颜色,由两个部分组成:自发光部分和来自其它反射的光线的颜色之和

        3.问题:

                ①定积分的求解  →  蒙特卡洛积分法求解曲面积分

                ②需要采样的光线太多 → 朝一个像素块发射多条光线,每条光线只反射一次

                 ③光线迭代终中止条件 (假如有条光线反射了上万次都没有打到光源,继续迭代就不现实)→  每次迭代时生成一个随机数,根据随机数决定是否继续迭代

                ④当光源面积较小时,从相机发射的光线到达光源的概率变小。很多光线无法到达光源被浪费,形成大量噪点。  →  直接在光源上采样(采样对象变了,从半球变成了光源)

  • 光线步进 Ray Marching

  • 总结

五、体渲染

  • 介质与光传输

  • 相函数

  • 体积渲染方程

  • 体积路径追踪

  • 体积辐射缓存

  • 体积光子映射

  • 双向路径追踪

  • 体积双向路径追踪

六、水体渲染

  • 控制方程与无散流场(基础)

        1.流体的描述方法

                ①拉格朗日方法:

                ②欧拉方法:

  • 卷积(工具)
  • 傅里叶变换与拉式变换(工具)
  • z变换与DFT(工具)
  • FFT/IFFT(工具)
  • FFT水模拟(应用)
  • 拉格朗日/欧拉方法

  • 渲染

        1.基本思路:

                ①着色:漫反射、镜面反射、法线贴图、折射、白沫

                ②效果提升:通透感(基于深度的查找表方法、次表面散射)、流动表现、水下雾效

        2.LOD:

        ①GeometryClipmaps

        ②. 渲染性能优化

        第一部分LOD 0:用完整的shader渲染折射,仅用于浅水部分;第二部分LOD 1:没有反射和透明等处理。

        3.高光:

                ①Minimalist Cook-Torrance

        原始的Cook-Torrance(基于微平面理论的一种着色模型),有D,F,G项;简化的则有D(·法线分布函数),F(菲涅尔),V(visibility项V: 是UE中的一个做法,将G项(几何函数)和原始的分母部分进行合并),kd(漫反射比例kd),ks(镜面反射比例ks)。

                 ②urp

         在URP中想要只输出高光,就可以手动修改InitializeBRDFData各个属性,让其只输出高光和光滑度,这样在之后的DirectBRDF函数中就能保证只输出高光。

         4.渲染流程

                 ①泡沫控制

        通过wave height,离水平面比较远的时候就标记为白沫,然后用白沫贴图混上去,实现浪尖的效果。同时也要根据水面与水底距离产生岸边白沫。

                ②次表面效果

        首先有一个根据深度的颜色(线性或指数都行)查找,得到一个水的基本颜色,在此的基础上再添加一个扰动颜色,并且根据waveHeight进行混合mix,达到一种体积效果。

        当泡沫移动时候,颜色会随着波浪和泡沫滚动而发生变化,所以可以取泡沫纹理的一个通道在深度着色和扰动着色之间混合。

                ③法线

        除了水体本身的GeometricNormal之外 还需要一个BumpedNormal去扰动表面,增加细节。

                ④折射和反射

        通过fresnel term去混合折射refraction和反射reflection,可以在0-1均等采样一个值,当他大于frenelterm时候就让他参与反射,其余就折射。同时水体的折射也取决于水的深度。

                ⑤流动

        可以通过向量场(flowmap)来实现滚动法线贴图uv。

        5.反射reflection

                ①菲涅尔

                ②扰动

        6.折射refraction和焦散caustic

        GPUGens焦散的模拟方案:其中的一个假设为太阳在正上方,这样我们通过n向量通过折射定理计算入射光线v,再计算v和n向量的的夹角,也就是与太阳夹角得到发射自太阳的密度。

        7.白沫

                ①浪尖

                 ②岸边

 

 

 

         8.次表面散射

                 ①BSSRDF

                 ②基于深度的查找表

        根据水体的深度来改变水体的颜色达到伪次表面,同时可以在其基础上加上一个扰动。

                 ③快速次表面

猜你喜欢

转载自blog.csdn.net/weixin_56784984/article/details/128585895