본문 바로가기
Computer Graphics/ShaderLab, HLSL

[ShadeLab] Triplanar

by 진현개발일기 2024. 3. 11.

■ 이슈

다이내믹하게 지형을 생성하면 아래와 같은 문제가 발생할 수 있다.

 

옆면이 찌그러진 상태로 늘어나는 현상인데 하나의 uv를 갖고 모든 면이 사용하고 있기 때문이다. 각각의 앞면, 뒷면, 옆면, 윗면 uv를 갖고 있으면 위와 같이 지형이 생성된다해도 찌그러지는 현상은 없어질 것이다.

 

텍스처의 UV를 그대로 가져다 쓰는 것이 아니라 World Position에 따른 xz축을 uv로 활용한다.

 

 

왜 xz냐면 위에서 봤을 때 아래와 같이 U(가로)V(세로)에 대응되는 것이 xz이기 때문이다.

 

[World Position을 uv로 활용했을때 GIF]

월드포지션 xz에 대응되는 텍스처의 uv좌표를 가져다 사용하기 때문에 월드포지션에 따라 텍스처의 모습이 바뀌는 것

 

이를 윗면 뿐만이 아니라 앞면, 옆면에 모두 사용해야한다.

Front
Side

 

위 Front와 Side면을 본다면 각각 uv에다가 월드좌표의 xy, zy를 대입해야함을 알 수 있다.

 

Front 면에 xy 월드좌표를 uv로 활용했을 때

 

Side면에 zy월드좌표를 uv로 활용했을 때

 

이제 윗면, 앞면, 옆면을 한번에 활용해봤다.

 

[코드]

여기서 작은 문제가 발생한다. Cylinder같은 경우 옆면 앞면 경계가 모호하다. 이를 조절하기 위해 각 UV의 타일링과 오프셋을 설정할 수 있도록 따로 뒀고 텍스처의 프로퍼티 앞에 [NoScaleOffset] 키워드를 붙여 텍스처의 UV를 컨트롤하는 인터페이스를 제거했다.

 

 

[코드 및 구현]

풀이 너무 풍성해서 0.5 0.5만큼의 타일링을 줌

 

 

728x90

'Computer Graphics > ShaderLab, HLSL' 카테고리의 다른 글

[ShaderLab] Water  (0) 2024.03.11
[ShaderLab] Refraction  (0) 2024.03.10
[ShaderLab] Matcap  (0) 2024.03.10
[ShaderLab] Dissolve  (0) 2024.03.06
[ShaderLab] 2Pass AlphaBlending  (1) 2024.03.06