BITFALL/Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain .../Runtime/Shaders/Internal/LivePreview/GeometryLivePreview.shader

99 lines
2.8 KiB
Plaintext

Shader "Hidden/Griffin/GeometryLivePreview"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_OldHeightMap ("Old Height Map", 2D) = "black" {}
_NewHeightMap ("New Height Map", 2D) = "black" {}
_Height ("Height", Float) = 1
_Transparency ("Transparency", Range(0,1)) = 0.5
_BoundMin ("Bound Min", Vector) = (0,0,0,1)
_BoundMax ("Bound Max", Vector) = (1,1,1,1)
_FadeDistance ("Fade Distance", Float) = 2
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType"="Transparent"}
Blend SrcAlpha OneMinusSrcAlpha
ZTest Off
Offset -1, -1
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"
#include "LivePreviewCommon.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
float4 worldPos : TEXCOORD2;
float4 vertexColor : TEXCOORD3;
};
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _OldHeightMap;
sampler2D _NewHeightMap;
float _Height;
float _Transparency;
float4 _BoundMin;
float4 _BoundMax;
float _FadeDistance;
v2f vert (appdata v)
{
v2f o;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
float4 heightMapUv = float4(
(worldPos.x-_BoundMin.x)/(_BoundMax.x-_BoundMin.x),
(worldPos.z-_BoundMin.z)/(_BoundMax.z-_BoundMin.z),
0, 0
);
float oldHeight = GriffinDecodeFloatRG(tex2Dlod(_OldHeightMap, heightMapUv).rg)*_Height;
float newHeight = GriffinDecodeFloatRG(tex2Dlod(_NewHeightMap, heightMapUv).rg)*_Height;
v.vertex.y = newHeight;
o.vertex = UnityObjectToClipPos(v.vertex);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
o.vertexColor = float4(
1,1,1,
clamp(abs(newHeight-oldHeight)/_FadeDistance,0,1)
);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float3 dpdx = ddx(i.worldPos);
float3 dpdy = ddy(i.worldPos);
float3 normal = normalize(cross(dpdy, dpdx));
float4 col = float4(
(normal.x + 1)*0.5,
(normal.z + 1)*0.5,
(normal.y + 1)*0.5,
_Transparency*i.vertexColor.a);
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}