제작/영혼들
[영혼들] 아이템 표시
Krapboss
2024. 8. 2. 17:54
아이템 표시
주요 아이템 사용을 위해 플레이어에게 해당 아이템을 식별 할 수 있어야 됩니다.
그렇기에 아이템에 눈에 띌 수 있도록 RimShader를 적용합니다.
Rim Shader?
오브젝트 바깥쪽에서 안쪽으로 색의 농도를 약하게 면서 Alpha값을 0~1값으로 일정 시간마다 깜빡거리도록 만든 것입니다.
쉐이더 코드
오브젝트에서 카메라를 바라보는 Normal을 기준으로 Dot을 구해서 적용합니다.
half face = saturate(dot(i.WorldSpaceViewDirection, i.normal));
face 값으로 각 frag에서 카메라를 바라보는 각과 같은 경우 1이 나온다.
half rim = 1.0 - ( pow(face, _RimPower));
루트 곡선 형태의 증가률
VertexOutput vert(VertexInput v)
{
VertexOutput o;
o.vertex = TransformObjectToHClip(v.vertex.xyz);
o.normal = TransformObjectToWorldNormal(v.normal);
//각 Vertex에서 카메라를 바라보는 방향
o.WorldSpaceViewDirection = normalize(_WorldSpaceCameraPos.xyz - TransformObjectToWorld(v.vertex.xyz));
return o;
}
half4 frag(VertexOutput i) : SV_Target
{
float3 light = _MainLightPosition.xyz;
//임의로 지정한 색
float4 color = float4(0.5, 0.5, 0.5, 1);
half3 ambient = SampleSH(i.normal);
//카메라방향과 오브젝트 노말값을 내적한 크기
half face = saturate(dot(i.WorldSpaceViewDirection, i.normal));
//0~1까지의 루트 형태의 곡선
half rim = 1.0 - ( pow(face, _RimPower));
//빛에 영향을 받도록 합니다.
color.rgb *= saturate(dot(i.normal, light)) * _MainLightColor.rgb + ambient ;
//최종적으로 Rim을 적용합니다.
color.rgb += rim * _RimInten * _RimColor;
return color;
}
쉐이더 그래프로 옮기기
쉐이더 그래프로 일정 주기마다 깜빡거리도록 변경하였습니다.