- Home /
One-sided texture projection
I'm trying to make a shader where an invisible object is made visible by a beam of light (with a projector):
However, this projects onto both sides of the object. The shader code as it stands is the default light projector from the standard assets:
 // Upgrade NOTE: replaced '_Projector' with 'unity_Projector'
 // Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip'
 Shader "Projector/Light" {
     Properties {
         _Color ("Main Color", Color) = (1,1,1,1)
         _ShadowTex ("Cookie", 2D) = "" {}
         _FalloffTex ("FallOff", 2D) = "" {}
     }
     
     Subshader {
         Tags {"Queue"="Transparent"}
         Pass {
             ZWrite Off
             ColorMask RGB
             Blend DstColor One
             Offset -1, -1
     
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #pragma multi_compile_fog
             #include "UnityCG.cginc"
             
             struct v2f {
                 float4 uvShadow : TEXCOORD0;
                 float4 uvFalloff : TEXCOORD1;
                 UNITY_FOG_COORDS(2)
                 float4 pos : SV_POSITION;
             };
             
             float4x4 unity_Projector;
             float4x4 unity_ProjectorClip;
             
             v2f vert (float4 vertex : POSITION)
             {
                 v2f o;
                 o.pos = UnityObjectToClipPos(vertex);
                 o.uvShadow = mul (unity_Projector, vertex);
                 o.uvFalloff = mul (unity_ProjectorClip, vertex);
                 UNITY_TRANSFER_FOG(o,o.pos);
                 return o;
             }
             
             fixed4 _Color;
             sampler2D _ShadowTex;
             sampler2D _FalloffTex;
             
             fixed4 frag (v2f i) : SV_Target
             {
                 fixed4 texS = tex2Dproj (_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
                 texS.rgb *= _Color.rgb;
                 texS.a = 1.0-texS.a;
     
                 fixed4 texF = tex2Dproj (_FalloffTex, UNITY_PROJ_COORD(i.uvFalloff));
                 fixed4 res = texS * texF.a;
                 UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(0,0,0,0));
                 return res;
             }
             ENDCG
         }
     }
 }
If I new the normal of the projection coordinates, I believe I could use the camera vector to clip pixels facing away from the camera, but stuff like clothing would still be see-through because the body would be facing the same direction as the clothing. How would you approach making a character visible only within the cone of a spotlight/projector?
Your answer
 
 
             Follow this Question
Related Questions
Blob shadow changes transparency 2 Answers
Sprite animation on quad with UV-coordinates 1 Answer
Shadows in projector shader 1 Answer
Projector - How to project texture with no transparency. 2 Answers
Receiving shadows by transparent floor 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
               
 
			 
                