发布网友 发布时间:2022-04-23 01:18
共2个回答
热心网友 时间:2022-04-22 11:43
three.js的源码尝试看过,
1.可能是着色器预置了一定数目的光源信息,使用时只要数目在预置数目之下,都没问题
2.可能是每增加一个光源,就多加一个该光源类型的着色器
实际渲染的时候分别对应每个光源逐个执行各自的着色器,把结果放帧缓冲区内,最后再合成
热心网友 时间:2022-04-22 13:01
1.Uber Shader,这是比较常见的做法,就是把所有的光照计算合并成一个大的shader,最后点光源,平行光源,聚光灯全部在这个shader里处理,缺点是一个pass里要处理的内容非常多,而且一旦光照条件发生变化(比如添加了新的光源或者某个光源被剔除),则需要重新编译该shader,当然一般而言游戏引擎里shader都会预编译缓存的,这是three.js和babylonJS等引擎的常见做法,鉴于Uniform数量有硬件*等,Uber Shader一般也会潜在地*最大光源数量