【笔记】unity渲染类名词术语概念总结(30个点)

1.线性追踪
亮度值是一个空间函数,而光线追踪做的事情其实是求这个函数在视线线段上的线积分
结果为:光线在视线方向上作用值之和
视线上的所有采样点的亮度之和能用来表示光线在介质中散射的效果

2.光线的衰减
简单的公式:i = l/d^2  [采样点的亮度值 = 光强度/(采样点-光源点)^2]

3.等式
d^2 = dot(d,d);

4.散射
公式:HG公式。就是输入指定方向和光线入射方向夹角的cos值,求出指定方向散射光线的亮度。
我们要计算的是朝着眼睛方向的散射光线亮度。
g:介质散射性质(值越大散射越明显),cosThreata:输入指定方向和光线入射方向夹角的cos值
代码如下:
    float cosTheta = dot(lightDr,-rd);
    float result = 1/(4*3.14)* (1 - g^2)/ pow(1 + g^2 -2*g* cosTheta, 1.5);

5.透光比
透光现象就是说光在介质内内传播,会被吸收一部分,剩下的部分才能透过介质达到观察者眼中。
这里要用一个物理法则Beer–Lambert法则。这个法则描述的是入射光强度和透光强度的比值
公式可以简单的写成,Out = In*exp(-c*d)。
c是物质密度,d是距离。
透光强度随着介质的密度光传播的距离的增加成指数下降。

6.阴影
理论原理:连接采样点和光源点作一条线段,然后检测场景中这条线段有没有和别的可见物体相交。如果有交点就判定该采样点被阴影遮挡,不记入采样数据,反之正常计算
在shader中实现原理:实时渲染中的阴影是通过将像素点的世界坐标(在fragment shader中获得或由像素深度反推获得)乘灯光的viewProjectionMatrix获得该像素点在shadowmap下的uv,
并与shadowmap记录的像素点深度进行比较,若shadowmap记录的深度大于等于该点,则表示该点并没有在阴影下,应该受到光照,反之则表示该点受到遮挡,不应该受到光照。

7.体积光阴影
线段和几何形状的求交公式

5.体积光:光照亮度散射+透光比+阴影
光源的光照亮度L,采样点到眼睛的透光率T,光线在视线方向上的散射值P,阴影值V。
没有阴影的体积光就是雾
非均匀介质,比如有噪音的雾,还要计算采样点位置的介质密度D(一般不考虑这个情况,假设为均匀介质)
散射最终公式:散射S= L*T*V*P*D 【代码参考链接:https://www.shadertoy.com/view/XlBSRz】
体积光优化:
一、使用3d纹理保存光照和阴影信息
因为游戏渲染的时候同样需要计算阴影和光照,没必要为了渲染体积光重新计算一遍。论文[1]提出的算法是在游戏渲染的同时将光照和阴影保存在一个3d纹理中,之后计算体积光只要对3d纹理中的信息采样就行了。3d纹理的保存方式也有很多种,UE4使用了一种层级式样的3d纹理,因为同时保存了空间层级数据,在3d索引时更快。
二、使用随即采样减少采样次数
今年的独立游戏公司DeadPlay使用了随即采样的方法,很大程度上减少了光线追踪采样的次数,每个象素只采样了3次,使得高端的游戏特效在手机端也可以顺畅运行。
三、添加噪点和抗锯齿算法柔滑画面
随机采样可以结合TemporalAA算法平滑画面,每一帧的随机采样生成的随机场和TemporalAA每帧的ID关联,这样把采样分散到时间维度上,平滑后同样能达到较高的精度。
参考文献
[1]Volumetric Fog SIGGRAPH 2014 - Advances in Real-Time Rendering
[2]Fast, Flexible, Physically-Based Volumetric Light Scattering - NVIDIA Developer
[3]Physically-based & Unified Volumetric Rendering in Frostbite
[4]Low Complexity, High Fidelity - INSIDE Rendering - GDC 
[5]Fogshop: Real-Time Design and Rendering of. Inhomogeneous, Single-Scattering Media.

6.体积光优化
降采样和高斯模糊(基于深度的正态模糊)。我们将目标贴图的分辨率设置为摄像机Render Target的分辨率的一半,也就是直接将计算量缩小到了之前的1/4,但是降采样后的图像马赛克化严重,我们可以使用高斯模糊,将其通过正态分布的模糊采样放回到原分辨率的贴图中,会给体积光带来一种朦胧感与意境

双向反射分布函数(Bidirectional Reflectance Distribution Function,BRDF)
用来定义给定入射方向上的辐射照度(irradiance)如何影响给定出射方向上的辐射率(radiance)。
更笼统地说,它描述了入射光线经过某个表面反射后如何在各个出射方向上分布——这可以是从理想镜面反射到漫反射、各向同性(isotropic)或者各向异性(anisotropic)的各种反射。

各向同性:果各个方向的测量结果是相同的,说明其物理性质与取向无关,就称为各向同性。
各向异性:如果物理性质和取向密切相关,不同取向的测量结果迥异,就称为各向异性


7.BSDF(双向反射分布函数) = BRDF(双向散射分布函数) + BTDF(双向透射分布函数)
一部分光线在介质交界处发生了反射, 并未进入另外一种介质,另外一部分光线则进入了另一种介质。
双向反射分布函数(BRDF)
    反射部分的光照的辐射亮度(radiance)和入射光照的辐射照度(irradiance)的比例是一个和入射角度、出射角度相关的函数,
    这个函数就被称之为BRDF。
双向透射分布函数(BTDF)
    相应的,穿越介质的那部分光照的辐射亮度和辐射照度的比例就被称之为BTDF
这两部分出射光的辐射亮度总和和入射光的辐射照度的比例就被叫做双向散射分布函数(BSDF)

8.次表面散射效果
  次表面散射效果
    如果光线出射点的位置和入射点相距不足一个像素,我们就认为入射点和出射点位置相同,这时候当前像素的光照只受其自身影响;
    如果入射点和出射点相距超过一个像素,则表示某个像素的光照结果不仅仅受当前像素影响,
    同时还受附近其他像素的光照影响,这就是我们常说的次表面散射效果了
    密度分布函数
  次表面散射的光线密度分布函数(diffusion profile),可以理解为是权重查找表
    是一个各向同性的函数  
    一个像素受周边像素的光照影响的比例只和两个像素间的距离有关。这个密度分布函数在有些地方称为diffusion profile,用R(r)来表示
    如果该函数的绝大部分能量都集中在入射点附近(r=0),就表示附近像素对当前像素的光照贡献不明显,可以忽略,则在渲染时我们就用【漫反射代替】
    如果该函数分布比较均匀,附近像素对当前像素的光照贡献明显,则需要【单独计算次表面散射】
  次表面散射的计算可以分为两个部分:
    (1)对每个像素进行一般的漫反射计算。
    (2)根据diffusion profile和(1)中的漫反射结果,加权计算周围若干个像素对当前像素的次表面散射贡献。
    可以简单地理解为diffusion profile就是一张权重查找表,不同的皮肤渲染方法,通常就是对diffusion profile的不同近似。
    我们根据加权计算所在的空间,将皮肤的渲染方法分为图像空间的方法和屏幕空间的方法两类。
    屏幕空间的计算复杂度和模型个数无关,随意采用屏幕空间的次表面散射

9.GPU Instancing
https://zhuanlan.zhihu.com/p/34499251
instance的意义在于,相同材质 相同shader 相同mesh 使用不同的属性 但仍然可以合批
GPU Instancing需要相同VBO

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值