我在一个名为half H的变量上写了20个片段数学运算。然后我为半个 4 XYZH 运行了 5 个类似的数学指令...... 第二个着色器的速度要慢得多!!我完全惊讶,似乎慢了4倍以上!!我使用的是GTX 470。H 是程序纹理高度贴图,XYZ 将是纹理每个点的法线,用于照亮纹理超级详细。
一堆数学在一半4上比在一半上慢4倍吗?
这段代码的运行速度比我预期的要慢得多,我错过了什么吗?
half4 sel ( half s, float x){
if(s<=0) {half sins=tri(x*2.2); return half4(1-abs(sins),abs(sins),0,sins);} //XYZH
//else if(s==1){return tri(x);}
}
half4 frag (v2f i) : COLOR
{
float3 pos = mul (_Object2World, i.uv).xyz;
float3 posb = mul (_Object2World, i.uv).xyz;
half4 ht = (sel(0,pos.x));
half4 g1 =(HSVtoRGB(float3(.2+ht.w,.43*c3/2,.476322+ht.w*c1)))*(2*i.color);
return g1;
}
是的。你的算术完成了四次。
此外,混合一半和浮点运算可能会删除您从使用一半中获得的任何性能优势。