在编写着色器时,我应该避免创建多个变量吗?

Hod*_*dor 6 shader glsl hlsl glsles

我现在开始学习着色器(HLSL,GLSL),我看到了许多教程,其中创建的变量不多,这使得阅读变得更加困难.我想知道新变量的创建是否会影响着色器的性能.

所以,例如(在CG中):

这是

    inline float alphaForPos(float4 pos, float4 nearVertex){
            return (1.0/_FogMaxRadius)*clamp(_FogRadius - max(length(pos.z - nearVertex.z),length(pos.x - nearVertex.x)), 0.0, _FogRadius)/_FogRadius;
    }
Run Code Online (Sandbox Code Playgroud)

比这更快?

    inline float alphaForPos(float4 pos, float4 nearVertex){
        float distX = length(pos.x - nearVertex.x);
        float distZ = length(pos.z - nearVertex.z);
        float alpha = 0.0;
        alpha = _FogRadius - max(distZ,distX);
        alpha = clamp(alpha, 0.0, _FogRadius);
            return (1.0/_FogMaxRadius)*alpha/_FogRadius;
    }
Run Code Online (Sandbox Code Playgroud)

Ada*_*les 7

这不会影响性能.

在一天结束时,所有内容都会被内联,编译器的优化部分将不会在优化完成时关注单独的变量.

我编译了两个简单的像素着色器,它们调用这两个函数,并在HLSL中编译为9条指令.

寻求可读性并相信编译器会做正确的事情(至少在此:)).