您的位置:首页 > 其它

U3D uv动画巧妙用法

2016-01-12 15:25 281 查看
本教程系本人原创,欢迎转载,但务必请注明出处。U3D 开发交流群: 321301070

本篇博文是介绍一个利用uv动画来制作岩浆流动效果的例子,也可以利用到比如水流等其他类似效果。
uv是渲染中的只是,指的是贴图的坐标,在给3D模型渲染时候,需要根据指定的uv坐标去拿贴图中对应的点,获取到像素后
渲染出来。当然,我这里只是简单介绍下,专业的概念参见OpenGL编程书籍或者百度百科。
那么显然,如果根据时间点动态改变UV坐标,那么模型上的点颜色就会产生变化,从而造成一种纹理动画效果,这就是uv动画原理了。
最最基本应用可以渲染序列帧动画。

U3D自带的动画系统可以对uv进行K帧,所以我们可以利用它做一些比如滚动的背景这样的效果。
好了,回到今天要介绍的例子。

我们这里的岩浆是一个模型。实现的关键是材质指定的渲染器。

直接上代码:
Shader "DP/Unlit/TransparentUVAnim" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_DirectionU("horizontal scroll speed (1 sample)", float) = 0.0
_DirectionV("vertical scroll speed (1 sample)", float) = 0.0
_SelfIllumStrength ("_SelfIllumStrength", Range(0.0, 1.5)) = 1.0
_TintColor ("TintColor", Color) = (1.0, 1.0, 1.0, 1.0)
}
SubShader {
Tags { "RenderType"="Transparent" "IgnoreProjector" = "True" "Queue"="Transparent"}

Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
LOD 200
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest

#include "UnityCG.cginc"

uniform half _DirectionU;
uniform half _DirectionV;
uniform half4 _MainTex_ST;
uniform sampler2D _MainTex;
uniform fixed _SelfIllumStrength;
uniform fixed4  _TintColor;

struct v2f_full
{
half4 pos : POSITION;
half4 color : TEXCOORD0;
half2 uv : TEXCOORD1;
};

v2f_full vert(appdata_full v)
{
v2f_full o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.color = v.color;
fixed2 uvTex = TRANSFORM_TEX(v.texcoord, _MainTex);
uvTex.x = uvTex.x + _Time.x * _DirectionU;
uvTex.y = uvTex.y + _Time.x * _DirectionV;
o.uv.xy = uvTex;
return o;
}

fixed4 frag(v2f_full i) : COLOR
{
fixed4 c = tex2D(_MainTex, i.uv.xy);
c.rgb *= i.color.rgb + c.a * _SelfIllumStrength;
c.a = i.color.a * c.a;
c = c * _TintColor;
return c;
}
ENDCG
}
}
}


整个Shader代码很简单,往外面暴露了三个接口,分别实现水平方向流动速度,垂直方向流动速度,以及实现高光效果
uvTex.x = uvTex.x + _Time.x * _DirectionU;

用于修改水平方向的贴图坐标

uvTex.y = uvTex.y + _Time.x * _DirectionV;

用于修改垂直方向的贴图坐标
c.rgb *= i.color.rgb + c.a * _SelfIllumStrength

通过修改_SelfIllumStrength,会提高整体rgb颜色通道的值,从而达到增亮效果。
通过这样一个shader,就可以帮助我们做出很不错的流水,流动岩浆的效果了。

工程截图



延伸阅读:

   1. http://baike.baidu.com/link?url=u4dHON1MlVDsIrAIvcIY5mD-F6MQfPWv5J6i6AIjCzPAUrk33zGMkuM1uiMUO00AhsU2DfiuUk_OoMpaSMD4Ta
   2. https://www.zhihu.com/question/31829674 ; (这个比较有意思)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  u3d uv动画 Shader 巧用