예지의 테크 로그포스 (Yeji's Tech Log Force)

[Unity][HandiLab] 오브젝트가 깜빡깜빡하는 효과 주기 본문

[Unity] Projects & Study/HandiLab - AR 과학 실험

[Unity][HandiLab] 오브젝트가 깜빡깜빡하는 효과 주기

Yeji Heo 2022. 7. 6. 18:09

사용자가 배양기 문을 열지 않았는데 배지를 넣으려고 시도한다거나, 

여기를 터치하세요~하는 느낌 등을 줄 때 오브젝트를 깜빡깜빡거리는 강조효과를 줬다.

 

fadeIn/out효과를 줬던 것 처럼 material의 투명도를 조절해주는 방식으로 구현하고자 했다.

투명도를 조절하려면 material의 redering mode가 opaque가 아니어야 한다.

그런데 fade나 trasparent 등 투명도 조절이 가능한 렌더링 모드를 설정해주면 천장쪽이 그려지지 않는 문제가 발생했다. 

좌: Opaque / 우: Fade

반투명 오브젝트의 핵심: 뒤의 오브젝트와 섞여야 함.(블렌딩)

엔진에서는 블렌딩을 위해 "Alpha Sorting"을 제공하고 있다.

Alpha Sorting: Z-buffer(카메라 기준 깊이버퍼)를 기준으로 뒤에서부터 출력함으로써, 앞에 반투명 물체가 있더라도 뒤의 물체를 가리지않고 섞이도록 하는 것. 

 

그럼에도 불구하고, 알파 블렌딩이 안 되고있다.

이렇게 각도에 따라 천장부분이 그려졌다가, 안 그려졌다가하는 이유를 고민해봤다.
-> Pivot순서가 엇갈렸기 때문인 거 같다.

Alpha Sorting은 물체Pivot을 기준으로 출력 순서를 판단한다고 한다.

하지만 시점에 따라 카메라로부터 물체 피벗의 순서는 달라지므로, 앞 뒤 순서가 엇갈리게 된다.

결과적으로 뒤에서부터 출력하는 알파 소팅의 알고리즘이 적용되지 않기 때문에 물체가 서로 가려지는 것이 아닐까 생각한다.

 

단순한 해결 방법으로는 오브젝트를 잘게 쪼개, 각각의 Pivot순서가 엇갈리지 않도록 하는 것이 있다.

혹은 애초에 Z-Buffer를 사용하지 않음으로써 앞 뒤 순서를 고려하지 않고 덮어 그리도록 하면 될 것이다. 

->하지만 이 방법은 한 픽셀에 두번 이상 그려주는 OverDraw의 이슈가 우려된다.


도움 받은 블로그

https://darkcatgame.tistory.com/31

 

Unity Shader - Alpha 이론 & 문제 해결

게임을 만드는데 있어서 반투명 그래픽은 필수적이며 여러가지 활용하는 곳이 많습니다, 반투명이라는 것은 뒤의 픽셀과 블렌딩(Blending)된다는 의미입니다. 이번 포스팅에서는 알파에 관한 이

darkcatgame.tistory.com

 

 

한편, 이러한 고민을 하기 전 우선적으로 문제해결을 위해 사용했던 방법은 다음과 같다.

투명도 조절을 위한 Material을 하나 더 입혀서 스크립트에서 제어해주었다.

이렇게 두번째 Material요소를 추가해주고 

깜빡여야 하는 부분에서 이 코루틴을 호출해주었다.

2번정도 깜빡거리도록 count로 세어주며,

이번에는 FadeIn/Out에서 사용한 Mathf.Lerp 메소드 대신

fadeCnt변수로 투명도를 0에서1까지 0.1f씩 더하고 0.01f초씩 기다리도록 했다.

요런 방식으로 첫번째 while에서 진해졌다가, 두번째 while에서 흐려졌다가를 반복하도록 했다.

Comments