투명한 테두리 효과 투각 테두리 공심 테두리
코드:
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Unlit/outline"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Factor(" ", float) = 0
_Color(" ", Color) = (0,0,0,1)
}
SubShader
{
LOD 100
tags {"Queue" = "Transparent"}
Pass
{
ZWrite On
ColorMask 0
}
Pass
{
Tags{ "LightMode" = "ForwardBase" }
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Cull Back //
CGPROGRAM
//ZWrite Off
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
o.vertex.z;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
//discard;
return float4(col.xyz, 0.2);
}
ENDCG
}
Pass
{
Tags{ "Queue" = "Geometry" "LightMode" = "ForwardBase" }
Cull Front //
ZWrite On
//Offset -300, -5
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 vetex : POSITION;
};
float _Factor;
half4 _Color;
v2f vert(appdata_full data)
{
v2f o;
float4 view_vetex = UnityObjectToClipPos(data.vertex);
float3 view_normal = mul(UNITY_MATRIX_IT_MV, data.normal);
float2 offset = mul(UNITY_MATRIX_P, view_normal.xy);
o.vetex = view_vetex;
o.vetex.xy += offset * _Factor;
//o.vetex = UnityObjectToClipPos(data.vertex);
//o.vetex.z += 0.01;
return o;
}
half4 frag(v2f o) :COLOR
{
return _Color;
}
ENDCG
}
}
}
방법: 주로 세 개의 패스를 사용했는데 첫 번째 패스는 쓰기 깊이를 담당하고 두 번째 정상적인 렌더링 세 번째는 법선 연장을 해서 묘사 효과를 낸다. 첫 번째 패스는 쓰기 깊이 버퍼링이 있기 때문에 이 패스 렌더링 시 일부분은 제거된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Unity 최적화1. 프레임마다 처리하는 것을 최대한 피한다. 예를 들면: 5프레임당 한 번 처리로 변경할 수 있습니다. 2. 정시 반복 처리는 InvokeRepeating 함수로 이루어집니다. 예를 들어 0.5초 동안 시작한 후 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.