Unity ShaderLab: 2D/3D Wave Flag Shader(飘动旗帜)的实现
2017-04-25 19:23
1596 查看
个人实现的第一个在实际项目中使用的shader。
2D Wave Flag Shader
效果图:
3D Wave Flag Shader
效果图:
2D Wave Flag Shader
效果图:
Shader "Custom/WaveFlag2D" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Texture", 2D) = "white" { } _WaveX ("Wave x", Range(0, 1)) = 0.1 _WaveZ ("Wave z", Range(0, 1)) = 0.1 _WindSpeed("Wind Speed", Range(50,200)) = 100 } SubShader { Pass { CULL Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "AutoLight.cginc" float4 _Color; sampler2D _MainTex; fixed _WaveX; fixed _WaveZ; float _WindSpeed; struct a2v { float4 vertex : POSITION; float4 texcoord : TEXCOORD0; }; struct v2f { float4 pos : POSITION; float2 uv: TEXCOORD0; }; v2f vert (a2v v) { v2f o; float angle= _Time * _WindSpeed; if(v.vertex.x < 5) { v.vertex.z = v.vertex.z + sin(v.vertex.x + angle) * _WaveX ; v.vertex.x = v.vertex.x + sin(v.vertex.z + angle) * _WaveZ; } v.vertex.z -= (v.vertex.x) * 0.4; o.pos = mul( UNITY_MATRIX_MVP, v.vertex ); o.uv = v.texcoord; return o; } float4 frag (v2f i) : COLOR { half4 color = saturate(tex2D(_MainTex, i.uv)) * 0.8; return color; } ENDCG } } Fallback "VertexLit" }
3D Wave Flag Shader
效果图:
Shader "Custom/WaveFlag3D" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Texture", 2D) = "white" { } _WaveY ("Wave y", Range(0, 1)) = 0.1 _WindSpeed("Wind Speed", Range(50,200)) = 100 } SubShader { Pass { CULL Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "AutoLight.cginc" float4 _Color; sampler2D _MainTex; fixed _WaveY; float _WindSpeed; struct a2v { float4 vertex : POSITION; float4 texcoord : TEXCOORD0; }; struct v2f { float4 pos : POSITION; float2 uv: TEXCOORD0; }; v2f vert (a2v v) { v2f o; float angle= _Time * _WindSpeed; if(v.vertex.z < 5) v.vertex.y = v.vertex.y + sin(v.vertex.z + v.vertex.x + angle) * _WaveY; v.vertex.x = v.vertex.x + v.vertex.z * 0.4; o.pos = mul( UNITY_MATRIX_MVP, v.vertex ); o.uv = v.texcoord; return o; } float4 frag (v2f i) : COLOR { half4 color = saturate(tex2D(_MainTex, i.uv.xy)); return color; } ENDCG } } Fallback "VertexLit" }
相关文章推荐
- Unity3D翻译——Advanced ShaderLab topics
- Unity中使用Shader实现3D打印机效果
- 用unity shaderlab 实现「影之诗」中的闪卡特效(一)
- [Unity插件][Shader资源]Outline2D3D物体描边插件2D图片模糊灰度变色水滴特效插件
- 前端实现旗帜飘动效果系列 (Ⅲ):canvas2D实现(2)
- 提供一套Unity3D双面材质Shader
- 【视频】unity 5.10.0(2D和3D)发布-新功能
- 计算机 3D图形基础在Unity中的实现(Vector3,Maxtrix4*4,Transform)
- 从零实现3D图像引擎:(2)画2D直线不简单
- JavaScript用canvas元素实现 2D 和 3D
- 3D图形学一:模仿草的运动 – GPU(Pixel Shader & Vertex Shader)实现
- 从零实现3D图像引擎:(2)画2D直线不简单
- JavaScript用canvas元素实现 2D 和 3D [转]
- 计算机 3D图形基础在Unity中的实现(Vector3,Maxtrix4*4,Transform) [转]
- Unity ShaderLab 笔记1 shader 结构
- Unity ShaderLab 笔记2 Properties
- 3D方法实现2D斜视角地图
- JavaScript用canvas元素实现 2D 和 3D (转)
- (转)从零实现3D图像引擎:(2)画2D直线不简单