Board logo

标题: 不懂就问,着色器是什么玩意儿,怎么那么多游戏都需要加载? [打印本页]

作者: GBA    时间: 2023-4-1 23:14     标题: 不懂就问,着色器是什么玩意儿,怎么那么多游戏都需要加载?

posted by wap, platform: iPhone
以前的游戏最多只要读取完就能玩,现在的游戏好像从dx12开始,都需要加载着色器
为什么以前不需要,现在变成了必需品?而且很费时间的样子,有的游戏还没次都得加载,真的很影响游戏体验的。
作者: ginaamix    时间: 2023-4-1 23:26

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 通过手机版编辑
作者: 卖哥    时间: 2023-4-1 23:26

posted by wap, platform: Firefox
以前一般是不预编译的。
当然现在确实量更大了,还实时编译会间歇性的卡顿。
作者: sz2434    时间: 2023-4-1 23:27

posted by wap, platform: Samsung
Compile shader 用于游戏材质表现
主机游戏硬件稳定都编译好的,PC游戏显卡种类多,就现编译了。
作者: jiejieup    时间: 2023-4-2 01:01

以前固定管线,GPU无法运行自定义的代码,只能通过配置选项实现简单的效果,为了实现更复杂的视觉效果后来开放了编程能力,所谓的GPU代码就是shader。
作者: 鱼丸    时间: 2023-4-2 21:46

posted by wap, platform: Android
那为啥ps5等游戏机上不用什么着色器?
作者: 黑天鹅    时间: 2023-4-2 21:54

引用:
原帖由 鱼丸 于 2023-4-2 21:46 发表
posted by wap, platform: Android
那为啥ps5等游戏机上不用什么着色器?
这话问的,都是完全一样的硬件配置,预先都把着色器内置在游戏里了啊
作者: goddest    时间: 2023-4-2 22:02

posted by wap, platform: Samsung
模拟器好像都要编译,但也没美末pc版这么慢啊
作者: zichuanle    时间: 2023-4-2 22:21

为什么蜘蛛侠不需要着色器,美末又需要呢?
作者: naughtyben    时间: 2023-4-2 22:23

posted by wap, platform: iPhone
发现顽皮狗画面那么好的黑科技
原来是着色器

233
作者: 红叶    时间: 2023-4-2 22:24

posted by wap, platform: Chrome
现在连模拟器都玩这东西 滤镜一加 四代酷睿连个SFC模拟都跑不动
作者: 囧rz--    时间: 2023-4-2 22:51

posted by wap, platform: iPhone
就是渲染画面的,显卡上运行的程序,也就是通常说的shader,以前不用是因为画面相对没那么复杂。
现在shader效果越来越复杂,3d管线也越来越偏底层,其实还有个重要的原因,就是以前shader是不支持代码的分支逻辑的,现在几乎都支持了,但是显卡的硬件架构决定了本身是不可能实现分支,那解决办法就是两个,一个是双倍的算力,把分支都计算一遍最后取正确的结果,另外一种就是在渲染前,把一些预定义的分支判断下条件,实时编译(也就是通常说的变体),就是你看到的编译着色器
作者: hourousha    时间: 2023-4-2 23:29

shader变体不是为解决shader内分支问题的,那个粒度太粗了(预编译期发生的)。
解决shader内分支的性能,还是要从降低branch divergence方面入手,尽量让一个wave同一个分支,其实在有了compute shader后这个还是比之前容易解决。
PC上的shader需要现编译是因为这样可以由驱动针对硬件提供优化,这个打从将近20年前DX9时期,HLSL渐成主流时就是这样了。编译时间太长,那就是数量太多太复杂,或许还有bug了呗。

[ 本帖最后由 hourousha 于 2023-4-2 23:30 编辑 ]
作者: EVA1    时间: 2023-4-2 23:53

posted by wap, platform: Android
引用:
原帖由 @红叶  于 2023-4-2 22:24 发表
现在连模拟器都玩这东西 滤镜一加 四代酷睿连个SFC模拟都跑不动
深有体会,开个3d shader跑ps模拟器不到5帧
作者: shinsuke    时间: 2023-4-3 00:37

posted by wap, platform: iPhone
喷了 感觉就是完全可以后台弄好的东西放前台恶心用户
作者: Kuzuryuusen    时间: 2023-4-3 00:37

posted by wap, platform: iPhone
电子阳痿只能越来越多
作者: 黑天鹅    时间: 2023-4-3 04:35

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

引用:
原帖由 shinsuke 于 2023-4-3 00:37 发表
posted by wap, platform: iPhone
喷了 感觉就是完全可以后台弄好的东西放前台恶心用户
PC配置是五花八门的。

厂商不给你搞这个,那对硬件配置要求还要更高。
作者: 级替四    时间: 2023-4-3 08:47

引用:
原帖由 zichuanle 于 2023-4-2 22:21 发表
为什么蜘蛛侠不需要着色器,美末又需要呢?
蜘蛛侠本质是PS4游戏的底子,直接暴力运行就行了。
作者: ginaamix    时间: 2023-4-3 22:36

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




欢迎光临 TGFC Lifestyle (http://club.tgfcer.com/) Powered by Discuz! 6.0.0