Cg silhouette enhancement

本文介绍了一个Unity中的自定义Shader——Cgsilhouetteenhancement,该Shader通过调整对象轮廓的透明度来实现轮廓增强效果。主要参数包括颜色(Color)和幂次(Power),通过计算视角方向与表面法线之间的夹角来确定轮廓的不透明度。
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 
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值