본문 바로가기
Unreal DevHistory/Personal Project

04 식생 상호 작용 및 바람(2) - PPJB

by pp336 2025. 9. 3.

 

 

 

 

 



식생 상호작용(Foliage Interaction)






 

 

 

 

  지난 번에 다루었던 주제에서 언급했듯이 이번 주제는 식생 상호 작용과 관련된 마스터 매터리얼에 관하여 설명드리려 합니다. 접목된 주요 기술적인 개념은 MeshDistanceField와 WorldPositionOffset의 원리를 사용하여 제작 되었으며, 상세한 내용은 공식 문서에서 보다 상세하게 다루고 있음으로 관련 링크를 연결해 두겠습니다.

 

 

 

 

 

 

MeshDistanceField

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/mesh-distance-fields-in-unreal-engine

 

 

WorldPostionOffset

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/world-position-offset-material-functions-in-unreal-engine

 

 

 

 

 

 

 

 


 

 

MeshDistanceField

 

 

 

 

 

 

 메시 디스턴스 필드는 볼륨 텍스쳐에서 가장 가까운 표면까지의 거리를 기준으로 작동합니다. 메시의 외부에 가까운 점들은 흰색으로 저장되고, 내부에 가까운 점들은 검은색으로 간주되어 저장되는 형식입니다. 또한 Shader의 노드를 통해서 값을 불러내어 특정한 목적으로 사용할 수 있습니다.

 

 

 

- DistanceToNearestSuface : 가장 가까운 표면과의 거리를 탐색하는데 쓰입니다.

 

 

 

 

 

 

 해당 섀이더를 사용하고 있는 오브젝트가 표면적으로 닿은 물체들의 영향을 받게 됨을 다음과 같이 시각적으로 검증할 수 있게 됩니다.

 

 

 

 

 

 

 

 

 

 


 

 

WorldPositionOffset

 

 

 

 

 

 

 월드 포지션은 월드 3D 공간의 원점(0, 0, 0)을 기준으로 해당 오브젝트의 절대적인 위치를 나타내는 값을 의미합니다. 3D 공간상에서 오브젝트의 위치를 찾는 것이기 때문에 같은 오브젝트를 사용하더라고 하더래도 별도의 객체의 Transform의 값을 얻을 수 있게 됩니다. 조금 더 확장하면 언리얼 엔진의 섀이더에서는 '월드 포지션 오프셋'의 항목이 별도로 분류되어 있는데, 같은 섀이더를 사용하는 Vertex에 월드 공간을 기준으로 특정 방향이나 거리 만큼 이동시키는 방식으로 사용할 수 있습니다. 

 

 

Z축으로만 관여하는 WPO Sphere Material를 생성

 

 

 

WPO를 사용하어 오브젝트 포지션의 Z축의 변동이 일어남을 확인

 

 

 

 

 

 

 


 

 

Conclusion

 

 

 

 

 

 엔진에서 객체의 디스턴스 필드의 값을 섀이더로 받아오는 개념과 해당 값을 기준으로 식생이 월드 포지션 오프셋의 값만큼을 버텍스를 이동시키는 원리가 더해졌습니다. 레벨에서 객체 위치의 오브젝트의 표면에서 값을 얻어와 주변 식생이 해당 객체에 접해있으면 움직이게 되고,  지나치게 되는 경우 처음 형태로 돌아가는 결과를 얻어낼 수 있게 됩니다. 식생의 상호작용이라고 하면 일반적으로 사람들이 떠올리는 개념이 되겠습니다. 

 

 

 

 

 

 

디스턴스 필드 관련 참고 영상

 

https://www.youtube.com/watch?v=fYjDnANQCgs&t=455s

 

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

 

https://www.youtube.com/watch?v=za6ffTin5GQ&t=1s