着色器和纹理滚动取决于方向

时间:2015-10-29 13:24:46

标签: unity3d glsl shader hlsl cg

我正在尝试使用Unity中的uv滚动纹理,但是我没有得到我需要的结果。

目标是有两个组成部分,速度和方向。我想在标准化值中定义方向,速度应该根据方向影响滚动的速度。

如果我在运行时改变速度,我不想有一些打嗝,但也许这不应该处理,而是GPU。

我怎样才能以更好的方式做到这一点,也许使用矩阵?

这是一个例子,但结果不如预期的好。

uv.xy = uv.xy + frac(_Time.y * float2(_Direction.x, _Direction.y));

1 个答案:

答案 0 :(得分:1)

我希望我能正确理解你的问题。如何在属性中定义三个变量:

fixed _ScrollXSpeed;
fixed _ScrollYSpeed;
sampler2D _Texture

然后在surf()你sholud这样做:

void surf(Input IN, inout SurfaceOutput o)
{
    fixed2 scrolledUV = IN._Texture;

    fixed xScrollValue = _ScrollXSpeed * _Time;
    fixed yScrollValue = _ScrollYSpeed * _Time;

    //Apply offset
    scrolledUV += fixed2(xScrollValue, yScrollValue);

    half4 c = tex2D(_Texture, scrolledUV);
    o.Albedo = c.rgb;
    o.Alpha = c.a;
}