IT/대학 강의 실습 및 기말 프로젝트

[Unity Shader] 홀로그래픽 카드 구현

rinix_x 2021. 12. 30. 03:35
반응형

Unity Shader을 통해 Quad객체를 홀로그래픽 카드로 구현

기획 의도

Unity 쉐이더를 이용하여, 홀로그래픽 카드를 제작했습니다.

구현 방법

1. 나비

 Quad와 Plane에 텍스쳐를 먼저 입혀 줍니다.

그리고 날개짓을 위해 단순히 2차 방정식을 응용한 식을 사용해도 되고, 

혹은 절대값x +t에 sin을 씌워 이런 날개짓 모양을 만들 수 도 있습니다.

여기서 아쉬웠던 점이, 나비의 몸통에서 날개로 갈수록 팔랑 거리게 하고 싶어 절댓값 x를 추가로 곱해 1이런 모양을 만들어 해결하였습니다. (왼쪽에서 오른쪽) 아래는 해당 코드를 적용하여 나비가 날개짓하는 gif입니다.

나비가 날때, 바람의 영향을 받아 날개가 흔들리는 것도 생각하여 그것도 적용 시켜 줘서 x축과 y축에 대한 진폭 프로퍼티를 구분하여 y축에 대해서도 추가적으로 연산해 줍니다. 그렇게 되면 오른쪽에 보이는 것처럼 값을 늘렸을때 나비의 날개가 바람의 영향을 받아 움직이는 것처럼 보이게 됩니다.

해서 완성 된 나비의 모습입니다.

2. 스탠실

내부적으로 보이는 각도에 따라 다르게 보이고 싶어 스텐실을 써보았습니다. 

스텐실이란 위 박스를 보면 알 수 있듯이 보는 각도에 따라 보여지는 객체가 달라지는 것인데 저는 이것을 아래와 같이 사용해 보았습니다.

뒤에 입체적으로 그려지는 것이 아닌것 같아 보이지만 실제로 입체적으로 볼 수 있도록 했습니다.

추가적으로 프레임 뒤에 배경과 나비를 넣고 앞에는 행성과 달 별들을 넣어 줍니다. 이 모든것을 window뒤에 배치합니다. 

배경,나비,행성,달,별,들을 window와 같은 마스크 값을 주어 평면같아 보이지만 입체적인 느낌을 주도록 합니다.

 

 

3. Noize를 이용한 반짝거림

다음은 홀로그램입니다! 빠질 수 없는 반짝거림을 표현한 방법입니다.
스파클 효과인데요, 반짝임은 3D공간에서 무작위로 특징점을 퍼뜨리고 공간의 각점이 특징점에 얼마나 가까운지를 반환하여 생성되는 역 3D월리노이즈를 통해 이루어집니다. 

알파 채널에 일반 월리노이즈 값을입력하는 동안 각 특징점에 임의의 색상을 할당하고 공간의 각 점에 대해 가장 가까운 특징점의 색상을 rgb채널에 넣습니다. 

그리고 나서 쉐이더에서 알파를 사용하여 반짝임 크기를 결정하고 색상을 가져와서 rgb값을 xyz값으로 바꿔서 각 스파클에 대한 방향과 뷰방향의 내적을 얻어내어 뷰방향에 따라 표시 할 반찍임을 결정하는데 사용합니다. 서로 마주보는 두방향의 내적은 -1이고 서로 마주보지 않을 수록 내적은 -1에서 멀어집니다. 이를 이용하여 각 개별 반짝임의 강도를 변경하는데 사용할 수 있습니다..

간단하게 설명하면 텍스쳐에 노이즈 값을 추가하여 보는 방향에 따라 다른 노이즈 값을 보여주는 것입니다.


위 사진은 해당 노이즈를 적용시킨 것이고 노이즈에따라 1반짝이는 모양 1또한 바꿀수 있고, 1크기 조절도 가능합니다.
위 세가지를 다 합치면 아래와 같이 나오게 됩니다 :)

실행 결과

추가적인 영상입니다

 

https://www.youtube.com/watch?v=kaacX2gyulM 

GitHub

https://github.com/dPfls1211/holographicCardUnityShader

 

 

2020학년도 2학기에 제작한 프로젝트 입니다.

반응형