석류 작업노트
언리얼노드_Unreal에서 Normal보다 사실적인 패럴렉스 오클루전 기능 알아보기 본문
현재 글은 언리얼 5.1 에서 작성
https://kj134679.tistory.com/16
https://kj134679.tistory.com/6
이때에도 패럴렉스 오클루전 기능을 다뤄봤었다.
다만 이때는 기능들이 정확히 어떤 역할을 하는지도 잘 몰랐고
언리얼4에서 쓰던 노드를 언리얼 5로 넘어가게 되면서
제대로 작동하지 않아 배운거 다시 기억도 할 겸 일케 다시 정리한다
패럴랙스 오클루전 맵핑이란 하이트맵을 이용하여 인접픽셀과 높이차를 구한 뒤 그에 따라 그림자를 입히는 기법이다.
디스플레이스먼트와 같이 하이트 맵을 사용하지만 패럴랙스는 노말과 디스플의 그 사이로
디스플처럼 버텍스를 직접 움직여 입체감을 표현하는것과는 달리
실제로 버텍스를 움직이거나 하지 않아 단순한 플랜에서도 사용할 수 있어 버텍스를 늘리지 않아도 되고
빛의 방향만을 계산하는 노말에서 더 나아가 좀더 사실적인 입체감을 표현해 줄 수 있다.
디스플레이스먼트와 같이 하이트 맵을 사용하지만 패럴랙스는 노말과 디스플의 그 사이로
디스플처럼 버텍스를 직접 움직여 입체감을 표현하는것과는 달리
실제로 버텍스를 움직이거나 하지 않아 단순한 플랜에서도 사용할 수 있어 버텍스를 늘리지 않아도 되고
빛의 방향만을 계산하는 노말에서 더 나아가 좀더 사실적인 입체감을 표현해 줄 수 있다.
이렇듯 실제론 버텍스를 늘릴 필요도 없고 노말보다 더 높은 입체감을 줄 수 있는 대신
다음과 같이 거의 눕혀본 각도에선 계단형 현상이 발생한다.
또한 이전부터 존재했지만 무거웠기 때문에 과거에 사용되지 못한 기술 중 하나였다.
아무리 좋아져도 노말보다 많이 무거운건 마찬가지 이기에 실무에선 상당히 제한적인 기법... 이 였지만
이러한 문제점도 해결
이와 같은 역할을 하는 기능으로 Bump Offset 이 있다.
https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Materials/HowTo/BumpOffset/
패럴랙스 오클루전 맵핑은 높이차를 구한 뒤 그림자를 입히는 방식이라면
범프 오클루전은 오브젝트 표면에서 텍셀의 위치를 멀리 보이게끔 하기 위해 UV좌표를 이용해 깊이감을 표현하는 방식이다.
실제로 사용된 예시 ( 열심히만들었다,,,! )
이처럼 깊이감있게 효과적으로 사용할 수 있다.
패럴랙스와 차이점으론 범프 오프셋이 훨씬 싸게 먹힌다는점.
게임에서도 패럴랙스보다 훨씬 많이 사용되며 비슷한 효과를 지닌다.
머테리얼은 다음과 같이 사용된다.
먼저 높이값을 표현해 줄 하이트맵을 연결해준다
다음 타일링 등을 위해 사용할 텍스쳐코드를 넣어준다 ( input은 머테리얼 펑션을 위한 기능 )
다음으로 하이트맵 채널과
높이값의 기준점이 되어주는 값을 ( HeiRef ) 연결해준다.
다음으로 주로 사용할 값들을 다음과 같이 연결해준다.
Height Ratio는 하이트의 인텐시티값을 의미한다
MinStep/MaxStep 은 층마다의 최소 레이어를 몇번 랜더할것인가 를 의미한다.
이 수치값은 2제곱값으로 사용되며 수치가 높아질 수록 점점 무거워진다.
DitherAA의 역할은 뭉개지는 현상을 깔끔하게 만들어 Step 값을 낮게 사용하여
적은 코스트로도 더 높은 효과를 느낄 수 있도록 한다.
여기서 지금 사용하고 있는 쉐이더가 얼마나 무거운지를 확인하기 위해선 이 값을 베이스컬러, 이미시브 등에 연결하여
시각적으로 확인할 수 있다
쉐이더컴파일 화면이 아닌 이 뷰를 통해 확인해야 한다.
좌 Min8 Max32 / 우 Min16 Max64
값을 사용한 것으로
점점 수치를 높게 사용할 수록 쉐이더 컴파일에서 볼 수 있던 코스트를 시각적으로 확인할 수 있다
이처럼 이 기능은 노말보다는 적은 코스트로 더 좋은 퀄리티로 사용할 수 있지만
그렇다고 마음놓고 무작정 사용해선 좋은 퍼포먼스를 보이진 못할 것이다
원신에서도 거의 전역에서 사용하는 만큼 실무에서도 사용되는 기술인 만큼
실제로도 쓰이는 기술이기도 하니 잘 써먹으면 좋지 않을까
다만 이러한기능을 두고도 노말을 사용하는데에는 다 이유가 있는법
무작정 더 좋겠지? 하면서 사용하지 말고
과연 이것만을 사용해서 더 좋은 결과를 뽑을 수 있는지, 최적화나 코스트를 생각해서 더 좋은 퍼포먼스를 뽑을 수 있을것인지 를 무조건적으로 먼저 생각하고 사용을 고려해보자
'스터디 > Unreal Engine' 카테고리의 다른 글
언리얼엔진_라이팅이 깜빡거릴때 해결할 수 있는 방법들 lighting Flickering Issue (0) | 2024.08.01 |
---|---|
언리얼엔진 PCG에 대한 연구_01 기초 에셋 배치와 랜덤위치값 (0) | 2024.04.13 |
언리얼엔진_나나이트에 대한 공부 / 첫 연구 (2) | 2023.02.24 |
언리얼노드_마스터머테리얼 정리 (0) | 2023.02.04 |
언리얼라이팅_라이팅빌드 GPU방식 (1) | 2023.01.16 |