집게사장의 꿈

[영혼들] 아이템 표시 본문

제작/영혼들

[영혼들] 아이템 표시

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

쉐이더 그래프로 옮기기

쉐이더 그래프로 일정 주기마다 깜빡거리도록 변경하였습니다.

 


인게임