当前位置:主页 > 科技 >

例如 在cad光源中的平行光源怎么设置和应用

发布时间:2023-06-26源自:未知 作者:admin阅读( )

例如 在cad光源中的平行光源怎么设置和应用

例如 在cad光源中的平行光源怎么设置和应用

多光源有几个思路:

1.Uber Shader,这是比较常见的做法,就是把所有的光照计算合并成一个大的shader,最后点光源,平行光源,聚光灯全部在这个shader里处理,缺点是一个pass里要处理的内容非常多,而且一旦光照条件发生变化(比如添加了新的光源或者某个光源被剔除),则需要重新编译该shader,当然一般而言游戏引擎里shader都会预编译缓存的,这是three.js和babylonJS等引擎的常见做法,鉴于Uniform数量有硬件限制等,Uber Shader一般也会潜在地限制最大光源数量

2.Z-Prepass加多次遍历,这个方法的好处是比较灵活,早期在idSoftware的引擎里有应用,简单地说就是先关闭color attachment的写入(单纯写depth attachment要快2-4倍),只写一个简单的深度pass,然后有了深度,再关闭深度写入进行正常的光源遍历,找出每个物体的光源列表,然后每盏光源以模型为几何体执行一次光照计算(blend mode设置成add,one,one),最终把结果叠加起来,缺点是随着物体的增加draw call会大幅增加(尽快很多会被early z culling)

3.Deferred Rendering,这是近年来PC游戏引擎的主流做法,先绘制一个GBuffer,把光照计算需要的所有信息先写进texture,然后用光源的包围盒进行光照计算,一盏灯一个pass,但是不再区分物体,优点是光照计算量和场景复杂度无关(只和光源数量相关),缺点是GBuffer的绘制比较慢,需要消耗大量的带宽(早期也有很多引擎在努力减小这个部分的开销,这两年对GBuffer的压缩倒是比较少了,毕竟显卡越来越好了,但在移动平台上仍然会有性能问题),初次外延迟渲染一般来说需要multiple render target的支持(虽然没有也能做,但是效率会很差)

近年来也有很多针对z-prepass和deferred rendering绘制管线的变种,包括了deferred lighting(把光照和最终着色进一步拆分开),forward+, tile-based deferred rending, clustered shading(把GBuffer/ShadingBuffer分块,每块单独和灯光列表求交,进一步提高灯光的剔除效率并且省掉灯光包围盒的draw call)

    右侧广告A一340*250
    右侧广告B一340*300

    Copyright ©2008-2022 石柱百科网 版权所有

    声明:本站部分内容来源于网络,如涉及侵权,请与我们联系,本站为非赢利性网站 不接受任何赞助和广告渝ICP备2023005114号-2