CSDN视频网址：http://edu.csdn.net/lecturer/144

实现方式如下所示：

void surf(Input IN, inout SurfaceOutputStandard o)
{
//Albedo 来自带颜色的纹理
fixed4 c=tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = 0;  //只添加此行
}

CGPROGRAM
#pragma surface surf Standard fullforwardshadows keepalphs

Shader "Projector/ProjectAlpha"
{
Properties
{
}
Tags{"Queue" = "Transparent"}
Pass
{
ZWrite Off
Blend Zero One,One One
Offset -1, -1
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"

struct Input
{
float4 vertex : LagPosition;
float3 normal : NORMAL;
};

struct v2f
{
UNITY_FOG_COORDS(2)
float4 pos : SV_POSITION;
fixed nv : COLOR0;
};

float4x4 unity_Projector;
float4x4 unity_ProjectorClip;

v2f vert(Input v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
UNITY_TRANSFER_FOG(o, o.pos);
float3 normView = normalize(float3(unity_Projector[2][0], unity_Projector[2][1], unity_Projector[2][2]));
float nv = dot(v.normal, normView);
o.nv = nv < 0 ? 1: 0;
return o;
}

sampler2D _FalloffTex;

fixed4 frag(v2f i) : COLOR
{
fixed4 res = fixed4(1,1,1,texS.a);

res.a = i.nv;
UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(1,1,1,1));
return res;
}
EDNCG
}
}
}



Src指向着色器用于计算的颜色。Dst指向屏幕上已有的像素颜色。着色器用于计算的颜色会与第一个因子相乘，而屏幕上已有颜色会与第二个因子相乘。将两个结果相加，就是最终写到屏幕的颜色。

fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
fixed3 bnw = dot(col.rgb, float3(0.3,0.59,0.11));
col.rgb = lerp(bnw, col.rgb, col.a);

return col;
}

using System.Collections;
using System.Collections.Generic;
using UnityStandardAssets.ImageEffectBase;

[ExecuteInEditMode]
[ImageEffectAllowedInSceneView]
public class ALphaColorSwitch : ImageEffectBase{
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
Graphics.Blit (source, destination, material);
}
}


• 本文已收录于以下专栏：

## 汽车喷漆效果的实现

• pizi0475
• 2013年10月20日 12:44
• 2337

## unity projector相关探讨和使用

projector用到的组件Projector组件可以实现0 角色选择光圈 1 普通圆点阴影 2 伪动态阴影 http://qiankanglai.me/2016/11/14/unity-pro...
• qq_18229381
• 2017年10月19日 17:13
• 182

## Unity3D游戏制作（三）——移动平台上的角色阴影制作

• Amazonzx
• 2012年09月13日 10:21
• 30492

## Unity Shader Example 22 (Simulate Projector)

• aa20274270
• 2016年11月22日 14:43
• 244

## Unity教程之-RenderTexture实现实时阴影绘制

• andyhebear
• 2016年01月08日 09:08
• 3179

## Unity 5 使用Projector实现纹理投射

Unity 5 使用Projector实现纹理投射游戏中，我们经常需要实现将纹理投射到场景中其他物体上的效果，如地上的光环、石块上的logo等。很多情况下我们可以通过灯光或者其他方式达到我们想要的效果...
• winchyy
• 2016年06月02日 10:35
• 7913

## Unity3D流体插件FluidSim使用总结

• a117653909
• 2013年12月24日 16:59
• 9800

• zhangxiao13627093203
• 2016年11月28日 21:44
• 1448

## Unity3D-实现水墨渲染效果

• zhangming19901120
• 2016年12月23日 17:00
• 1714