网站单页推广,怎么根据别人的网站做自己的网站,做网站个人怎么签合同,玉环建设局网站原文链接
渲染方程及挑战 挑战
对于任一给定方向如何获得radiance–阴影 对于光源和表面shading的积分运算#xff08;蒙特卡洛积分#xff09; 对于反射光多Bounce的无限递归计算
基础光照解决方案
Blinn-Phong模型#xff1a;
简化阴影 最常见的处理方式就是Shadow M…原文链接
渲染方程及挑战 挑战
对于任一给定方向如何获得radiance–阴影 对于光源和表面shading的积分运算蒙特卡洛积分 对于反射光多Bounce的无限递归计算
基础光照解决方案
Blinn-Phong模型
简化阴影 最常见的处理方式就是Shadow Map先在光源处放置相机以z-buffer的方式储存一张深度缓冲第二次将相机放置在view位置并将视锥内的点的深度和深度缓冲中的对应点矩阵变换的深度进行对比若前者大于后者则认为视锥中的点处于阴影中
缺点 光源处的采样率和观察处的采样率不一样有分辨率限制同时光源角度大时会出现自阴影锯齿的问题
简化光源
用平行光、聚光灯、点光源作为MainLight 来简化各种光源用Ambient Light替代光源外的环境光 用可采样的环境贴图代替反射光线环境贴图的mipmap代替粗糙度表现 最终结果 MainLight Ambient LightEnvironment Map
简化材质Blinn-Phong模型
基于光可叠加原理渲染方程中用体现Blinn-Phong模型通过Ambient Diffuse Specular来简单粗暴的着色。 布林冯模型存在的问题
能量不保守使用Blinn-Phong模型的出射光照能量可能大于入射光照的能量这在计算光线追踪时会带来很大的问题这一过程在光线追踪中经过无限次反弹后会使得本该暗的地方变得过于明亮。
难以表现真实的质感Blinn-Phong模型虽然比较经典但它却很难表现出物体在真实世界中的模样总是有一种”塑料“感。
简化阴影 阴影当光线被不透明物体阻挡时形成的空间 最常见的处理方式就是Shadow Map先在光源处放置相机以z-buffer的方式储存一张深度缓冲第二次将相机放置在view位置并将视锥内的点的深度和深度缓冲中的对应点矩阵变换的深度进行对比若前者大于后者则认为视锥中的点处于阴影中
缺点 光源处的采样率和观察处的采样率不一样有分辨率限制同时光源角度大时会出现自阴影锯齿的问题
基于预计算的全局光照
挑战和计算思路
空间换时间
挑战 indirect Light 要想去采样整个球面数据量非常大需要有合适的方式压缩 并且还得便于在渲染方程中进行积分
傅里叶变换
可以把空间域信号转变为频域信号截取频域的一小段就可以实现对频率整体的一个粗糙的表达还可以反傅里叶计算还原会空间域。高效压缩 卷积定理是傅立叶变换满足的一个重要性质。卷积定理指出函数 卷积的 傅立叶变换是函数傅立叶变换的乘积。具体分为时域卷积定理和频域卷积定理时域卷积定理即时域内的卷积对应频域内的乘积频域卷积定理即频域内的卷积对应时域内的乘积两者具有对偶关系。 球谐函数Spherical Harmonics
SH是拉普拉斯方程的一组限制在球上的解可以理解为一组sin\cos组成的正交基数量越多可以表达的精度越高并且相互之间正交卷积为0–简化计算的核心且二阶导数为0拟合表面光滑 一般实时渲染只取前3阶就够了9个因为一般只需要低频信息因此也无法表达更高频有时只需要知道光从哪里来就只需0和1阶就够了4个如下图。「在这种情况下压缩后只用32bits4Bytes就可以存储一个像素的颜色。卷积时先投影到SH正交基上再系数相乘即可」
SH Lightmap预计算 GI
有了SH我们就可以将场景参数化到一张巨大的lightmap贴图上通常被称为地图集atlas对所有表面点的irradiance进行离线计算并压缩为SH系数、保存进atlas
计算过程 对世界物体进行几何简化因为要把三维空间复杂集合投影到二维空间如下图并且参数分配时需要尽可能在同样的面积或体积内分配的texel精度近似 lighting将lightmap映射到各级LOD上应用模型细节用HBAO(水平基准环境光遮蔽Horizon based ambient occlusion升级版SSAO)加上短程short-range增加高频的灯光细节再加上直接光照和材质的效果
lightmap的光照效果可以看到已经有很多细节和软阴影效果了下图是最终应用效果 Lightmap优缺点和可借鉴思想
优点 1.实时运行效率很高 2.可以表现出环境中全局光照的许多细节 缺点 1.预计算时间非常长因此老师自己的引擎宁死不用 2.只能处理静态场景物体和静态光照动态物体会有类似人物走到一小块阴影里整个人变黑的bug 3.空间换时间占用内存较大几十到几百MB 可借鉴优秀思想 空间换时间 把整个场景参数化到二维的tex上或三维vol上也一样方便计算
探针 ProbeLight Probe Refection Probe
优点运行效率高静动态物体都可用可以处理漫反射和镜面反射 缺点大量的光探测SH需要预计算没办法做到像lightmap那样那么好的细节采样太稀疏
Light Probe 在空间中放置很多采样点每个采样点采集对应光场信息物体经过时寻找附近的采样点并插值计算
自动探测点生成空间内均匀的产生采样点再根据玩家的可到达区域和建筑物的几何结构进行延拓相对均匀的分布采样点
Refection Probe
类似的反射probe数量少但采样精度很高应用在镜面等场景
基于物理的材质
微平面理论
BRDFMaterial BRDF广义最常用在实时渲染管线中的是Cook-Torrance 模型其中兼顾了漫反射和镜面反射2个部分 Lambertian漫反射部分 我们知道理想漫反射的反射光线是均匀散布在各个方向的半球因此漫反射的BRDF值一定是个常数。假设入射光均匀且布满整个半球可以得到如下推导「半球对cos积分结果为π」 cook-torrance镜面反射部分 微表面模型细看有很多凹凸细节这些细节可看作微小的镜面远看就像是完全的平面只能感受到微小平面对整体的作用。现实生活中就算是纯金属表面也有划痕、磨砂等因此微表面模型能表示非常多实际物体。 菲涅尔方程(Fresnel Rquation) 现实中在不同的角度看物体明显看到反射率不同看玻璃也是
微平面理论
基于图像的光照Image-Based LightingIBL) 主要思路还是预计算把复杂的积分都先预计算过以减少光照中的计算时间。我们会分别预计算漫反射项和镜面项最终在实时渲染中只需通过简单的纹理采样即可得到结果
diffuse:提前将cubemap与反射光卷积的结果计算并储存在Irradiance Map中使用时只需要取位置上的结果就可以了见下图左specular:近似为Lighting Term和BRDF Term的乘积
Lighting Term由于不同粗糙度造成的高光结果不一样用cubemap的minmap存储多个粗糙度的结果用minmap的精度刚好对应不同粗糙度下的不同精度图右BRDF Term直接预计算保存到了一张LUT图里使用F和粗糙度加载即可
阴影Shadow
Cascade Shadow级联阴影
对视锥体进行分层远处的精度降低近处提高。
需要优化点blend between Cascade Laters在层级之间边界的地方做插值以避免出现视觉断层。
优点解决透视混叠perspective aliasing问题快速生成深度图深度写入时可提升3倍效果不错 缺点存储空间大空间换时间绘制时成本昂贵几乎不可能生成高质量的区域阴影没有彩色阴影半透明投射出不透明阴影
软阴影
PCF
「该技术起初是用于抗锯齿\反走样后来发现软阴影也可以用。」 「为什么不对shadow map做滤波因为把shadow map模糊后在深度判定完还是硬阴影相当于二值化。」
原理是在阴影判定时做一个filtering----不仅计算当前着色点对应shadow map上的深度还计算该点在shadow map上周围一圈比如7x7的深度判定结果(非0即1)并取平均将平均值作为Visibility项。「如果滤波核比较大可以在范围内随机采样固定个数」
PCSS
很多引擎的标配 投影平面上的阴影到物体的距离越远阴影越软、滤波核越大。 投影平面离物体越近阴影越硬、滤波核越小。「即下图W越大阴影越软」
VSSM 技术展望
GPU显卡快速升级
real-time Ray-Tracing on GPU Real-Time Global IlluminationSSGI、SDF based GI、Voxel-based GI(SVOG/VXGI)、RSM/RTX GI
更复杂的材质模型BSSRDF、BSDF(Strand-based hair)
过量shader
艺术家搞出大量shadergraph 程序员给shader的各种变化都写了单独的shader不就是我们公司 不同平台编译语言不同 Uber Shader每一种变化组合都写入同一个shader通过宏定义控制分支会产生大量变体 优点某个算法改进时需要更新所有相关shader容易出错用Uber shader就不会有这个问题
Virtual Shadow Maps
原理类似Tiled Virtual Texture 现代引擎可以关注这个方向 UE5中VirtualShadowMap的简易实现原理一
总结
5-10年前流行的3A配置 LightmapLightProbe PBRIBL Cascade shadow VSSM