Friday, November 13, 2015

unity - How can I fade player character when he goes inside or outside of the area?


I want to fade the player when he goes out of the area.


For example, suppose a person enters a building. When a person is outside of the building, he shouldn't be seen, but when he enters he gradually becomes visible (using fading effect).


when elephant is inside green area his alpha should be 1


photo_2019-04-15_07-21-39


when elephant is outside of green area his alpha should be 0


photo_2019-04-15_07-21-35



Answer



You can use world space to fade your character.




The object space (or object coordinate system) is specific to each game object; however, all game objects are transformed into one common coordinate system — the world space.


If a game object is put directly into the world space, the object-to-world transformation is specified by the Transform component of the game object.


https://en.wikibooks.org/wiki/Cg_Programming/Unity/Shading_in_World_Space




Record_2019_04_15_07_13_25_154


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
}
}
}



After understanding world space we can use it in our surface shader:


Record_2019_04_15_07_14_24_876


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"
}

No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...