U3D uv动画巧妙用法
2016-01-12 15:25
281 查看
本教程系本人原创,欢迎转载,但务必请注明出处。U3D 开发交流群: 321301070
本篇博文是介绍一个利用uv动画来制作岩浆流动效果的例子,也可以利用到比如水流等其他类似效果。
uv是渲染中的只是,指的是贴图的坐标,在给3D模型渲染时候,需要根据指定的uv坐标去拿贴图中对应的点,获取到像素后
渲染出来。当然,我这里只是简单介绍下,专业的概念参见OpenGL编程书籍或者百度百科。
那么显然,如果根据时间点动态改变UV坐标,那么模型上的点颜色就会产生变化,从而造成一种纹理动画效果,这就是uv动画原理了。
最最基本应用可以渲染序列帧动画。
U3D自带的动画系统可以对uv进行K帧,所以我们可以利用它做一些比如滚动的背景这样的效果。
好了,回到今天要介绍的例子。
我们这里的岩浆是一个模型。实现的关键是材质指定的渲染器。
直接上代码:
整个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 ; (这个比较有意思)
本篇博文是介绍一个利用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 ; (这个比较有意思)
相关文章推荐
- 反编译ARB program to GLSL shader日记
- 虚幻3引擎
- 基于顶点纹理的无限大海水仿真
- 图形加速卡技术 [专业的基础技术文章]
- 关于VR(主要是虚拟城市场景)的一些想法及实现(可能会连载)
- 编译ics
- 项目中的简单shader
- Simulating Ocean Water
- 在c++中模以”委托“
- 关于NGUI中UITexture贴图自定义的shader文件在UISrollView中不报错的解决方案
- OpenGL&D3D State Machine
- 得到一个 a4e9 bitmap的倒影
- 为什么DirectX 11 在把矩阵(例如View矩阵)传给shader之前要进行转置
- DirectX 8 开发者常见问题集
- error X3025:global variebles are implicitly constant,enable compatibility mode to allow modificatiom
- dx编译shader报错:global variables are implicitly constant, enable compatibility mode to...
- 2016年的游戏引擎设计
- 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering
- Bump Mapping综述
- 一个简单例子表示fixed functional VS/Assemble VS/HLSI VS的例子