您的位置:首页 > 运维架构

Cg projector shader for drop shadows

2015-10-29 18:45 232 查看
Shader "Custom/Cg projector shader for drop shadows" {
Properties {
_ShadowTex ("Projected Image", 2D) = "white" {}
}
SubShader {
Pass {
Blend Zero OneMinusSrcAlpha // attenuate color in framebuffer
// by 1 minus alpha of _ShadowTex
ZWrite Off // don't change depths
Offset -1, -1 // avoid depth fighting

CGPROGRAM

#pragma vertex vert
#pragma fragment frag

// User-specified properties
uniform sampler2D _ShadowTex;

// Projector-specific uniforms
uniform float4x4 _Projector; // transformation matrix
// from object space to projector space

struct vertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float4 posProj : TEXCOORD0;
// position in projector space
};

vertexOutput vert(vertexInput input)
{
vertexOutput output;

output.posProj = mul(_Projector, input.vertex);
output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
return output;
}

float4 frag(vertexOutput input) : COLOR
{
if (input.posProj.w > 0.0) // in front of projector?
{
return tex2D(_ShadowTex ,
input.posProj.xy / input.posProj.w);
// alternatively: return tex2Dproj(
//    _ShadowTex, input.posProj);
}
else // behind projector
{
return float4(0.0, 0.0, 0.0, 0.0);
}
}

ENDCG
}
}
Fallback "Projector/Light"
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息