Advertisement

unity 创建等高线的方法

阅读量:

unity 等高线创建方法

工程文件下载

完整shader

复制代码
    Shader "SongShaderDemo/ContourLineOne"
    {
    	Properties
    	{
    		_MainTex("Texture", 2D) = "white" {}
    		_Linewide("Linewide",Int) = 1
    		_ContourLine("ContourLine",Int) = 10
    		[HDR]_Color("color",Color) = (1,1,1,1)   //颜色,一般用fixed4
    	}
    		SubShader
    		{
    			Tags { "RenderType" = "Transparent"  "Queue" = "Transparent"}
    			LOD 100
    			Pass
    			{
    				Blend SrcAlpha OneMinusSrcAlpha
    				CGPROGRAM
    				#pragma vertex vert
    				#pragma fragment frag
    				#include "UnityCG.cginc"
    				struct appdata
    				{
    					float4 vertex : POSITION;
    					float2 uv : TEXCOORD0;
    					float3 normal : NORMAL;
    				};
    
    				struct v2f
    				{
    					float2 uv : TEXCOORD0;
    					float4 vertex : SV_POSITION;
    					float3 worldPos : TEXCOORD1;
    					float slope : TEXCOORD2;
    				};
    				CBUFFER_START(UnityPerMaterial)
    				sampler2D _MainTex;
    				float4 _MainTex_ST;
    				fixed _Linewide;
    				fixed _ContourLine;
    				fixed4 _Color;
    				CBUFFER_END
    				v2f vert(appdata v)
    				{
    					v2f o;
    					o.vertex = UnityObjectToClipPos(v.vertex);
    					o.uv = TRANSFORM_TEX(v.uv, _MainTex);
    					o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
    					return o;
    				}
    
    				fixed4 frag(v2f i) : SV_Target
    				{
    					fixed4 col = tex2D(_MainTex, i.uv);
    					float smooth = step( -_Linewide, lerp(1, 0, i.worldPos.y % _ContourLine));
    					return smooth* _Color + col;
    				}
    				ENDCG
    			}
    		}
    }

全部评论 (0)

还没有任何评论哟~