编写shader时的一些建议

来源:互联网 发布:淘宝客能赚钱吗 编辑:程序博客网 时间:2024/05/23 01:12

转载至博客园(斯芬克斯

编写shader时的一些建议:

1、只计算需要计算的东西;

2、通常,需要渲染的像素比顶点数多,而顶点数又比物体数多很多。所以如果可以,尽量将运算从PSVS,或直接通过script来设置某些固定值;


3、在使用Surface Shader时,可以通过一些指令让shader优化很多。

  通常情况下,Surface shader的很多默认选项都是开启的,以适应大多数情况,但是很多时候,你可以关闭其中的一些选项,从而让你的shader

运行的更快:

(1) approxview 对于使用了view directionshader,该选项会让view dirnormalize操作per-vertex进行,而不是per-pixel。这个优化通常效果明显。

(2) halfasview 可以让Specular shader变得快一些,使用一个介于光照方向和观察方向之间的half vector来代替真正的观察方向viewDir来计算光照函数。

(3) noforwardadd Forward Render时,完全只支持一盏方向光的per-pixel渲染,其余的光照全部按照per-vertexSH渲染。这样可以确保shader在一个pass里渲染完成。

(4) noambient 禁掉ambient lightingSH lighting,可以让shader快一点儿。

 

4、浮点数精度相关:

    float:最高精度,通常32

half:中等精度,通常16位,-6000060000

fixed:最低精度,通常11位,-2.02.01/256的精度。

  尽量使用低精度。对于colorunit length vectors,使用fixed,其他情况,根据取值范围尽量使用half,实在不够则使用float

  在移动平台,关键是在fragment shader中尽可能多的使用低精度数据。另外,对于多数移动GPU,在低精度和高精度之间转换是非常耗的,在fixed上做swizzle操作也是很费事的。

 

5Alpha Test

Alpha testclip()函数,在不同平台有不同的性能开销。

  通常使用它来cull那些完全透明的像素。

  但是,在iOS和一些Android上使用的PowerVR GPUs上面,alpha test非常的昂贵。


 6Color Mask

  在移动设备上,Color Mask也是非常昂贵的,所以尽量别使用它,除非真的是需要。

 


1 0
原创粉丝点击