mirror of
https://github.com/maxartz15/SceneDebugViewer.git
synced 2024-10-18 13:35:47 +02:00
46 lines
1.1 KiB
Plaintext
46 lines
1.1 KiB
Plaintext
// https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
|
|
|
|
Shader "Hidden/RS/WorldSpaceNormals"
|
|
{
|
|
SubShader
|
|
{
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
// include file that contains UnityObjectToWorldNormal helper function
|
|
#include "UnityCG.cginc"
|
|
|
|
struct v2f
|
|
{
|
|
// we'll output world space normal as one of regular ("texcoord") interpolators
|
|
half3 worldNormal : TEXCOORD0;
|
|
float4 pos : SV_POSITION;
|
|
};
|
|
|
|
// vertex shader: takes object space normal as input too
|
|
v2f vert(float4 vertex : POSITION, float3 normal : NORMAL)
|
|
{
|
|
v2f o;
|
|
o.pos = UnityObjectToClipPos(vertex);
|
|
// UnityCG.cginc file contains function to transform
|
|
// normal from object to world space, use that
|
|
o.worldNormal = UnityObjectToWorldNormal(normal);
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(v2f i) : SV_Target
|
|
{
|
|
fixed4 c = 0;
|
|
c.a = 1;
|
|
// normal is a 3D vector with xyz components; in -1..1
|
|
// range. To display it as color, bring the range into 0..1
|
|
// and put into red, green, blue components
|
|
c.rgb = i.worldNormal * 0.5 + 0.5;
|
|
return c;
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
} |