1- Shader "Post Processing/Custom Motion Vector Texture"
1+ Shader "Post Processing/Custom Motion Vector Texture"
22{
33 Properties
44 {
2525 float4 _MotionTex_ST;
2626 float _MotionAmount;
2727
28- struct appdata
29- {
30- float4 vertex : POSITION ;
31- float2 uv : TEXCOORD0 ;
32- float3 normal : NORMAL ;
33- float4 tangent : TANGENT ;
28+ struct appdata
29+ {
30+ float4 vertex : POSITION ;
31+ float2 uv : TEXCOORD0 ;
32+ float3 normal : NORMAL ;
33+ float4 tangent : TANGENT ;
34+ };
3435
35- };
36+ struct v2f
37+ {
38+ float2 uv : TEXCOORD0 ;
39+ float4 vertex : SV_POSITION ;
40+ float3 normal : NORMAL ;
41+ float4 tangent : TANGENT ;
42+ float4 transposedTangent : TEXCOORD1 ;
43+ };
3644
37- struct v2f
38- {
39- float2 uv : TEXCOORD0 ;
40- float4 vertex : SV_POSITION ;
41- float3 normal : NORMAL ;
42- float4 tangent : TANGENT ;
43- float4 transposedTangent : TEXCOORD1 ;
44- };
45-
46- v2f vert (appdata v)
47- {
48- v2f o;
49- o.vertex = UnityObjectToClipPos (v.vertex);
50- o.uv = TRANSFORM_TEX (v.uv, _MotionTex);
51- o.normal = mul ((float3x3 )UNITY_MATRIX_MVP , v.normal);
52- o.normal = o.normal*0.5 +0.5 ;
53- o.tangent = mul (UNITY_MATRIX_MV , v.tangent);
54- o.transposedTangent = (mul (UNITY_MATRIX_IT_MV , v.tangent))*0.5 +0.5 ;
55- return o;
56- }
45+ v2f vert (appdata v)
46+ {
47+ v2f o;
48+ o.vertex = UnityObjectToClipPos (v.vertex);
49+ o.uv = TRANSFORM_TEX (v.uv, _MotionTex);
50+ o.normal = mul ((float3x3 )UNITY_MATRIX_MVP , v.normal);
51+ o.normal = o.normal * 0.5 + 0.5 ;
52+ o.tangent = mul (UNITY_MATRIX_MV , v.tangent);
53+ o.transposedTangent = (mul (UNITY_MATRIX_IT_MV , v.tangent)) * 0.5 + 0.5 ;
54+ return o;
55+ }
5756
5857 float4 FragMotionVectors (v2f i) : SV_Target
5958 {
60- half4 c = tex2D (_MotionTex, i.uv);
61- c.rg = (c.rg * 2 - 1 ) * _MotionAmount; //Using color texture so need to make 0.5 neutral
62- half4 t1 = i.tangent * 0.005 ; //sides of tire
63- half4 t2 = c * float4 (i.transposedTangent.r* 2 , i.transposedTangent.g* 2 , 0 , 1 ); //front of tire
64- half4 t3 = lerp (t2, t1, c.b); //Lerp between front and side of tire
59+ half4 c = tex2D (_MotionTex, i.uv);
60+ c.rg = (c.rg * 2.0 - 1.0 ) * _MotionAmount; // Using color texture so need to make 0.5 neutral
61+ half4 t1 = i.tangent * 0.005 ; // Sides of tire
62+ half4 t2 = c * float4 (i.transposedTangent.r * 2.0 , i.transposedTangent.g * 2.0 , 0.0 , 1.0 ); // Front of tire
63+ half4 t3 = lerp (t2, t1, c.b); // Lerp between front and side of tire
6564 return t3 * _MotionAmount;
6665 }
6766
6867 ENDCG
6968 }
7069 }
71- }
70+ }
0 commit comments