【游戏技术群】959392658  【游戏出海群】12067810
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2396

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 2103|回复: 13

[士郎] 粗略判断Shader每条代码的成本

[复制链接]  [移动端链接]
排名
1
昨日变化

7211

主题

7741

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
11801
威望
30
注册时间
2013-7-29
在线时间
3693 小时
最后登录
2019-1-21

社区QQ达人活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

发表于 2018-11-2 10:44:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
1.jpg

Unity对Shader文件进行编译的时候,DX9和DX11的版本会直接生成汇编码。


[AppleScript] 纯文本查看 复制代码
length(i.worldPos)


DX9


[AppleScript] 纯文本查看 复制代码
dp4 r0.x, v0, v0
rsq r0.x, r0.x
rcp_pp oC0, r0.x


DX11

[AppleScript] 纯文本查看 复制代码
dp4 r0.x, v1.xyzw, v1.xyzw
sqrt o0.xyzw, r0.xxxx

由于这些代码是最终的指令,大部分指令执行时间是“差不多”的,可以用来预估计算量。但移动平台则是各厂商驱动各自进行的编译,各家都不一样,不好判断。


但DX9毕竟针对的是非常古老的硬件,很难想象现代GPU还会和它保持一样。实际的指令应该会更接近于DX11。



以下为列表(用|隔开的数据,前面的部分是计算单分量时的指令数,后面的部分是计算float4时的指令数)


2.jpg


总结一下便是:
  • 反三角函数非常费
  • abs和saturate是免费的
  • 除了反三角函数外,fmod和smoothstep比预期更费
  • log,exp,sqrt(单分量)的成本实际上很低,所以由他们组合成的pow也不高
  • sin,cos在DX11使用了专门一条单指令,成为了低成本函数
另外还有个基本常识:绝大部分GPU是一次性计算4个分量,计算一个float4和只计算单个float耗时是一样的。当计算float时,剩下三个分量的时长会被浪费。





然而,每条指令的时间成本确实可能是不一样的。这个和具体硬件有关。
很难找到移动平台具体GPU的数据,可以参考下文看看一些主流GPU的情况,相信他们总是有一些共性的。



结果是,1/x, sin(x), cos(x), log2(x), exp2(x), 1/sqrt(x)这些指令的时间成本是一样的,而且和普通的四则运算很接近(个人猜测是通过查表实现的)。
但是sin,cos毕竟在旧硬件上成本较高,由于不清楚硬件的具体情况,还是要尽可能少用。




预估成本还有一个办法,是根据公开的GPU的GFLOPS(Floating-point Operations Per Second每秒执行浮点运算次数)来评估每个着色器理论极限算力,便能知道一个着色器里可以允许多少条基本指令。


这当然很不精确,因为纹理采样,顶点,光栅化等等众多成本都没有考虑在内,但是有一定的参考价值。
iPhone 4s使用的芯片是Apple A5,它的FLOPS是12.8G,屏幕分辨率是960x640,分到一帧的一个像素后,结果是
12.8*1024^3/960/640/60 = 372。


根据FLOPS的定义,时间最短的基本指令“乘加(MAD)”需要花掉2FLOPS,那么单个屏幕像素能执行186条指令。
假设Overdraw是5,那么一个像素着色器能执行37指令。





虽然37指令这个结果显然比实际多多了,但起码是在合适的数量级范围内。可以通过帧率测试来计算“损耗比例”到底是多少。
而且,这样做我们其实得到了一个上限值。如果你在像素单元的指令数超过了37(比如用了两次atan2),那从物理角度是绝对不可能达到满帧的。
知乎@flashyiyi




点评

hao  发表于 2018-11-4 12:51

跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
回复

使用道具 举报

5熟悉之中
960/1000
排名
3191
昨日变化
17

0

主题

226

帖子

960

积分

Rank: 5Rank: 5

UID
2623
好友
0
蛮牛币
1694
威望
0
注册时间
2013-8-26
在线时间
280 小时
最后登录
2019-1-21
发表于 2018-11-2 12:25:55 | 显示全部楼层

回复

使用道具 举报

7日久生情
1515/5000
排名
1614
昨日变化
4

7

主题

223

帖子

1515

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
220815
好友
7
蛮牛币
1736
威望
0
注册时间
2017-5-5
在线时间
467 小时
最后登录
2019-1-21
QQ
发表于 2018-11-2 16:27:36 | 显示全部楼层
底层有毒

回复

使用道具 举报

7日久生情
1774/5000
排名
2065
昨日变化
5

22

主题

669

帖子

1774

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
214924
好友
3
蛮牛币
6377
威望
0
注册时间
2017-3-28
在线时间
427 小时
最后登录
2019-1-21

锦衣玉食

发表于 2018-11-2 17:52:07 | 显示全部楼层
这个666啊

你以为你以为得就是你以为的
回复

使用道具 举报

2初来乍到
145/150
排名
11072
昨日变化
4

0

主题

13

帖子

145

积分

Rank: 2Rank: 2

UID
297755
好友
0
蛮牛币
81
威望
0
注册时间
2018-9-20
在线时间
42 小时
最后登录
2019-1-1
发表于 2018-11-3 10:07:04 | 显示全部楼层
谢谢分享,请问shader里使用if else耗时吗,dx11是怎样计算的?

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1156/1500
排名
2299
昨日变化
4

0

主题

249

帖子

1156

积分

Rank: 6Rank: 6Rank: 6

UID
68040
好友
0
蛮牛币
1574
威望
0
注册时间
2015-1-13
在线时间
307 小时
最后登录
2019-1-21
发表于 2018-11-3 20:24:23 | 显示全部楼层
哇,可以放心的使用三角函数了

回复 支持 反对

使用道具 举报

7日久生情
2400/5000
排名
816
昨日变化
1

1

主题

684

帖子

2400

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
56496
好友
0
蛮牛币
7323
威望
0
注册时间
2014-11-19
在线时间
539 小时
最后登录
2019-1-21
发表于 2018-11-6 09:05:59 | 显示全部楼层
好毒啊~

回复

使用道具 举报

6蛮牛粉丝
1419/1500
排名
3712
昨日变化
2

0

主题

835

帖子

1419

积分

Rank: 6Rank: 6Rank: 6

UID
210390
好友
0
蛮牛币
1703
威望
0
注册时间
2017-3-7
在线时间
190 小时
最后登录
2019-1-21
发表于 2018-11-6 09:41:48 | 显示全部楼层

回复

使用道具 举报

7日久生情
2156/5000
排名
1641
昨日变化
2

0

主题

745

帖子

2156

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
148286
好友
0
蛮牛币
3743
威望
0
注册时间
2016-5-11
在线时间
637 小时
最后登录
2019-1-19
发表于 2018-11-6 20:23:41 | 显示全部楼层

回复

使用道具 举报

排名
13303
昨日变化
8

0

主题

14

帖子

99

积分

Rank: 2Rank: 2

UID
297033
好友
0
蛮牛币
192
威望
0
注册时间
2018-9-14
在线时间
21 小时
最后登录
2018-12-21
发表于 2018-11-7 09:15:32 | 显示全部楼层
真心不错

回复

使用道具 举报

排名
13303
昨日变化
8

0

主题

14

帖子

99

积分

Rank: 2Rank: 2

UID
297033
好友
0
蛮牛币
192
威望
0
注册时间
2018-9-14
在线时间
21 小时
最后登录
2018-12-21
发表于 2018-11-9 10:59:20 | 显示全部楼层

回复

使用道具 举报

排名
31085
昨日变化
24

1

主题

24

帖子

46

积分

Rank: 1

UID
26506
好友
1
蛮牛币
27
威望
0
注册时间
2014-5-24
在线时间
11 小时
最后登录
2018-11-11
发表于 2018-11-11 11:38:46 | 显示全部楼层
专业 这个厉害了

回复

使用道具 举报

7日久生情
1787/5000
排名
3026
昨日变化
11

2

主题

940

帖子

1787

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
209046
好友
0
蛮牛币
2486
威望
0
注册时间
2017-3-30
在线时间
367 小时
最后登录
2019-1-21
发表于 2018-11-12 08:46:38 | 显示全部楼层
很棒

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表