Unity Shader关于uv动画和定点动画的个人浅见

uv动画是根据图片纹理的移动来达成效果的,uv动画一般(基本了吧)是先对图片进行采样,接着对uv进行增减来达成移动效果,而乘可以让其放大,除可以在做帧动画的时候可以用到。除法会获取到纹理涂的某一块区间。
这是uv移动动画对uv进行的操作

    v2f vert (a2v v)
    {
        v2f o;
        o.pos = UnityObjectToClipPos(v.vertex);
		//根据时间来偏移uv的x分量,从而让x分量达到移动效果
		o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex) + frac(float2(_ScrollX, 0.0)*_Time.y);
		o.uv.zw = TRANSFORM_TEX(v.texcoord, _DetailTex) + frac(float2(_Scroll2X, 0.0)*_Time.y);
        return o;
    }

    fixed4 frag (v2f i) : SV_Target
    {
        // sample the texture
        fixed4 col = tex2D(_MainTex, i.uv.xy);
        // apply fog
	fixed4 col2 = tex2D(_DetailTex, i.uv.zw);
	fixed4 cc = lerp(col, col2, col2.a);
        return cc;
    }

其中对uv的操作等价于

fixed4 frag(v2f i) : SV_Target
{
	// sample the texture
	 i.uv.xy += frac(float2(_ScrollX, 0.0)*_Time.y);//纹理采样后对uv进行增减
	fixed4 col = tex2D(_MainTex, i.uv.xy);
// apply fog
    fixed4 col2 = tex2D(_DetailTex, i.uv.zw);
    fixed4 cc = lerp(col, col2, col2.a);
    return cc;

}

这是帧动画对uv进行的操作



 fixed4 frag (v2f i) : SV_Target
            {
				float time = floor(_Time.y*_Speed);//floor函数取整
			    float row = floor(time / _HorizontalAmount);//time除以_HorizontalAmount的结果商来做诶当前的对应的行索引
				 //float row = fmod(time, _HorizontalAmount);
			    float column = time - row * _HorizontalAmount; //使用他们的余数作为列索引
			    _Test = _Test2;
				//half2 uv = i.uv + half2(column, -row);//对uv纹理进行偏移,xy的改变会让图片位置改变
				//uv.x /= _HorizontalAmount;//UV.x把图片分成HorizontalAmount份
				//uv.y /= _VerticalAmount;//uv。y把图片分成HorizontalAmount份

				fixed2 seqUV = float2((i.uv.x) / _HorizontalAmount, (i.uv.y) / _VerticalAmount);
				seqUV.x += row / _HorizontalAmount;
				seqUV.y -= column / _VerticalAmount;
				fixed2 uv = i.uv + fixed2(column, -row);
				uv.x /= _HorizontalAmount;
				uv.y /= _VerticalAmount;


				fixed4 c = tex2D(_MainTex, uv);
				c.rgb *= _Color;
			    return c;
            }

顶点动画是对顶点动态改变而形成动画在这里插入图片描述
对顶点改变主要是在顶点着色器中对顶点进行的改变,来造成图片向各个地方进行延伸或缩减
而上图的计算纹理就是对于上面的纹理动画,利用_Speed变量来控制纹理动画的快慢

### 回答1: 我会尝试编写一个Unity Shader,它包括UV动画和发光特效。它将会是一个复杂的shader,因为UV动画和发光特效都需要大量的程序代码和数据处理。但是,我将尝试使用Unity Shader语言(GLSL)编写出一个高性能的shader,它可以实现UV动画和发光特效。 ### 回答2: Unity中的Shader是一种用于控制渲染对象外观的程序,它可以通过编程来实现各种特效。要编写带有UV动画和发光特效的Unity Shader,可以按照以下步骤进行操作: 第一步,创建一个新的Shader文件。打开Unity并进入项目,然后在项目窗口中右键点击创建->Shader->Standard Surface Shader。这会在项目中创建一个新的Shader文件。 第二步,打开创建的Shader文件,并添加一些代码。在Shader文件中,我们需要添加一些代码块来实现UV动画和发光特效。首先,我们可以添加一个分支来处理UV动画。可以使用sin函数来在时间和UV坐标之间创建一个偏移量,以产生一个动画效果。 第三步,在Shader文件中添加发光特效。我们可以使用光照模型和添加自发光颜色来实现发光特效。可以使用自发光颜色来改变物体的亮度,并与其他材质一起呈现。 第四步,将编写好的Shader应用到对象上。可以在场景中选择一个对象,然后在对象的渲染组件上选择刚刚创建的Shader文件。可以通过调整Shader属性的值来改变对象的外观。 这只是一个简单的示例,实际编写复杂的Shader需要更多的代码和技术。可以在Unity官方文档和习资源中找到更多关于编写Shader的教程和示例代码,以帮助您更深入地理解和使用Unity Shader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值