请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 5288|回复: 9

为什么在树林中(AlphaTest)开启PSSM阴影会导致性能急剧下降 [复制链接]

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2012-1-14 23:01:53 |显示全部楼层
在一片树林中,树叶是AlphaTest,开启PSSM阴影, 性能从50帧下降到18帧,..

树叶的产生阴影shader为:

float4 kTexColor = tex2D(BaseSampler, pi.uv);
// 进行AlphaTest处理
clip(kTexColor.a - g_fAlphaTestRef);

当把Clip函数去掉后, 树叶没有alphaTest功能后,仍然是开启PSSM阴影,但是性能恢复到40帧.

这句Clip威力也实在太大了一些, Why?或者有没有其他的方法能做到树叶的正确阴影. 谢谢.

Rank: 12Rank: 12Rank: 12

注册时间
2010-8-4
积分
676
发表于 2012-1-15 11:59:44 |显示全部楼层
你把clip去掉之后,上面的那个texture sample就不用执行了啊
Engine Nine

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2012-1-15 14:10:16 |显示全部楼层
但是如果关闭Clip的话,tex2D的确不用执行,但是问题就是这样的话,树叶的阴影就出错了. 有没有更好的方法去做?

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2010-7-23
积分
261
发表于 2012-1-16 09:52:05 |显示全部楼层
pssm本身就很慢
引擎制作中!

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2011-2-21
积分
309
发表于 2012-1-16 11:59:19 |显示全部楼层
按贴图排序了么?

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

注册时间
2010-4-10
积分
2594
发表于 2012-1-16 13:27:43 |显示全部楼层
就是sample的关系,剔除上入手吧,shader的话就这样,没什么办法
(PS:你再试试Blend,AntiAlas,再回来就感觉好了~~
生无所息!

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2009-10-18
积分
10171

会员荣誉勋章

发表于 2012-1-16 13:46:31 |显示全部楼层
原因不是clip开销大,而是clip/discard会导致硬件关闭early-z优化。

在pixel shader会修改z或丢弃像素的情况下,z test必须在pixel shader之后,而early-z优化是在pixel shader前做z test。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2010-5-19
积分
1316
发表于 2012-1-16 16:29:32 |显示全部楼层
问题又回到了early-z上,

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-8-29
积分
178
发表于 2012-1-27 15:47:07 |显示全部楼层
clip不会导致early-z失效,但会导致double speed z-write失效。
楼主的问题最主要原因还是因为多了一次texture sample。

不需要做pixel clip的物件,渲染时放到队列最前面,并且使用没有texture sample的shader。

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2012-1-31 12:46:23 |显示全部楼层
已经做了AlphaTest的物件分类,即树叶等需要做AlphaTest(Clip)的物件放到最后渲染.我也估计是由于与tex2D的关系,多了一次贴图采样,因为我的PSSM采用的是4张2048的Depthbuffer来做的,所以如果大面积的树林的话,会造成采样像素点过多,形成瓶颈,造成这样的问题.所以已经在逐渐控制树林的密度,采用取巧的方式来做.比如减少树叶的层级,采用阴影分级,在低等级的阴影方式下采用1024的depthbuffer,减少阴影产生距离等.

不知道大家的树林的做法是怎样的呢?

使用道具 举报

最近看过此主题的会员

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

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-3-30 10:37 , Processed in 0.071619 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部