Shader "Custom/Cg silhouette enhancement"
{
Properties
{
_Color("Color",Color) = (1,1,1,0.5)
_Pow("Power",Range(0,10)) = 1
}
SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
ZWrite Off
Blend SrcALpha OneMinusSrcALpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform float4 _Color;
uniform float _Pow;
struct vertexInput
{
float4 vertex:POSITION;
float3 normal:NORMAL;
};
struct vertexOutput
{
float4 pos:SV_POSITION;
float3 normal:TEXCOORD0;
float3 viewDir:TEXCOORD1;
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
float4x4 modelMatrix = _Object2World ;
float4x4 modelMatrixInverse = _World2Object;
output.normal = normalize(mul(float4(input.normal,0.0),modelMatrixInverse).xyz);
output.viewDir = normalize(_WorldSpaceCameraPos - mul(modelMatrix,input.vertex).xyz);
output.pos = mul(UNITY_MATRIX_MVP,input.vertex);
return output;
}
float4 frag(vertexOutput input):COLOR
{
float3 normalDirection = normalize(input.normal);
float3 viewDirection = normalize(input.viewDir );
float newOpacity = pow(min(1.0,_Color.a / abs(dot(viewDirection,normalDirection))),_Pow);
float4 finalColor = float4(_Color.rgb,newOpacity);
return finalColor;
}
ENDCG
}
}
}
Cg silhouette enhancement
最新推荐文章于 2021-04-07 16:55:27 发布
