» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

不懂就问,着色器是什么玩意儿,怎么那么多游戏都需要加载?

posted by wap, platform: GOOGLE Nexus 4
shader,就是所有运行在GPU上进行图形计算的程序

需要预编译着色器是因为现代游戏图形部分复杂,很多游戏shader变体数量众多,没有办法运行时需要使用时再编译

具体数量取决于游戏引擎shader系统设计,而DX12/VK这类的现代API因为有PSO这个设计,会进一步放大这个问题,尤其是vulkan,pso涵盖范围很广,改一点图形api状态信息就要重新生成pso,shader变体多的游戏pso cache体级会非常大

本帖最后由 ginaamix 于 2023-4-2 00:22 通过手机版编辑


TOP

posted by wap, platform: GOOGLE Nexus 4
引用:
原帖由 @囧rz--  于 2023-4-2 22:51 发表
就是渲染画面的,显卡上运行的程序,也就是通常说的shader,以前不用是因为画面相对没那么复杂。
现在shader效果越来越复杂,3d管线也越来越偏底层,其实还有个重要的原因,就是以前shader是不支持代码的分支逻辑的,现在几乎都支持了,但是显卡的硬件架构决定了本身是不可能实现分支,那解决办法就是两个,一个是双倍的算力,把分支都计算一遍最后取正确的结果,另外一种就是在渲染前,把一些预定义的分支判断下条件,实时编译(也就是通常说的变体),就是你看到的编译着色器
需要计算两遍的是动态分支,shader变体对应的是常量静态分支,那个是不需要每个分支都跑一遍的,即便是动态分支现代GPU的调度能力也比以前强得多,很多时候都能把不同的分支的线程调度到不同的wave里去



TOP

发新话题
     
官方公众号及微博