Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Cg Programming/Edge Outline Cutout

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Edge Outline Cutout Version. Shader "Outlined/Cutout" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _Cutout ("Alpha Cutout", Range (0,1)) = .5 _MainTex ("Base (RGB)", 2D) = "white" { } _OutlineColor ("Outline Color", Color) = (0,0,0,1) //改变这个能改变轮廓边的颜色 _OutlineWidth ("Outline width", Range (0.0, 0.03)) = 0.008 //改变这个能改变轮廓边的粗细 _OutlineAlpha ("Outline Alpha", Range (0.0, 1)) = 1 //改变这个能改变轮廓边的透明度 } CGINCLUDE #include "UnityCG.cginc" uniform float _OutlineWidth; uniform float4 _OutlineColor; uniform sampler2D _MainTex; uniform float4 _MainTex_ST; uniform float _OutlineAlpha; float _Cutout; float4 _Color; struct v2f { float4 pos : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD1; }; ENDCG SubShader { Pass { Name "CUTOUT" Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout" } ZWrite On ZTest LEqual Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag v2f vert(appdata_base v) { // just make a copy of incoming vertex data but scaled according to normal direction v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal); o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } half4 frag(v2f i) :COLOR { half4 col= tex2D(_MainTex,i.texcoord)*_Color; clip(col.a - _Cutout); return col; } ENDCG } Pass { Name "OUTLINE" Tags { "LightMode" = "Always" "RenderType"="Transparent"} Cull Front ZWrite On ColorMask RGB Blend SrcAlpha OneMinusSrcAlpha //Offset 50,50 CGPROGRAM #pragma vertex vert #pragma fragment frag v2f vert(appdata_base v) { // just make a copy of incoming vertex data but scaled according to normal direction v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal); float2 offset = normalize(TransformViewToProjection(norm.xy)); o.pos.xy += offset * o.pos.z * _OutlineWidth; o.color = _OutlineColor; return o; } half4 frag(v2f i) :COLOR { half4 col = i.color; col.a *=_OutlineAlpha; return col; } ENDCG } } Fallback "Unlit/Transparent Cutout" }