그가 그 지역을 벗어날 때 플레이어를 페이드하고 싶습니다.
예를 들어, 사람이 건물에 들어갔다고 가정합니다. 건물 밖에있는 사람은 보이지 않아야하지만 들어가면 점차 사라집니다 (페이딩 효과 사용).
코끼리가 녹지 안에있을 때 알파는 1이어야합니다
코끼리가 녹지 바깥에있을 때 알파는 0이어야합니다
그가 그 지역을 벗어날 때 플레이어를 페이드하고 싶습니다.
예를 들어, 사람이 건물에 들어갔다고 가정합니다. 건물 밖에있는 사람은 보이지 않아야하지만 들어가면 점차 사라집니다 (페이딩 효과 사용).
코끼리가 녹지 안에있을 때 알파는 1이어야합니다
코끼리가 녹지 바깥에있을 때 알파는 0이어야합니다
답변:
월드 공간을 사용하여 캐릭터를 희미하게 할 수 있습니다.
오브젝트 공간 (또는 오브젝트 좌표계)은 각 게임 오브젝트에 따라 다릅니다. 그러나 모든 게임 오브젝트는 하나의 공통 좌표계 인 월드 공간으로 변환됩니다.
게임 오브젝트를 월드 스페이스에 직접 넣는 경우 오브젝트 간 변환은 게임 오브젝트의 Transform 구성 요소에 의해 지정됩니다.
https://ko.wikibooks.org/wiki/Cg_Programming/Unity/Shading_in_World_Space
Shader "Smkgames/worldSpaceFade" {
Properties{
_Size("Size",Vector) = (2,2,0,0)
}
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct vertexInput {
float4 vertex : POSITION;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float4 position_in_world_space : TEXCOORD0;
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
output.pos = UnityObjectToClipPos(input.vertex);
output.position_in_world_space =
mul(unity_ObjectToWorld, input.vertex);
return output;
}
float2 _Size;
float4 frag(vertexOutput input) : COLOR
{
float3 world = input.position_in_world_space;
float4 equation = pow(world.x/_Size.x,8) + pow(world.z/_Size.y,8);
return smoothstep(1,0,equation);
}
ENDCG
}
}
}
월드 스페이스를 이해 한 후에는 서피스 셰이더에서 사용할 수 있습니다.
Shader "Smkgames/worldSpaceFade" {
Properties {
_Size("Size",Vector) = (2,2,0,0)
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
Pass {
ZWrite On
ColorMask 0
}
LOD 200
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha:fade
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
float3 worldPos: TEXCOORD2;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
float2 _Size;
void vert (inout appdata_full v, out Input o){
UNITY_INITIALIZE_OUTPUT(Input,o);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
}
UNITY_INSTANCING_BUFFER_START(Props)
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
float4 equation = pow(IN.worldPos.x/_Size.x,8) + pow(IN.worldPos.z/_Size.y,8);
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = smoothstep(1,0,equation);
}
ENDCG
}
FallBack "Diffuse"
}