반응형
Landscape에만 그려지는 Decal에 대해 포럼에 질문을 올렸는데 한달 정도 답이 없다. 앞에서 얘기했듯이 Mesh마다 Receive Decal을 끄는 것은 원하는 바가 아니다. 그렇다면 대안은...
- Landscape를 따라다니는 Line Segment를 만든다.
- Landscape의 Material에 Grid 격자를 포함한다.
- 이 경우 Grid 크기가 변경될 때 Material에 그려진 Grid 크기도 변경되어야 함
- 그렇다면 Material의 Texture를 프로그램으로 만들어주는 것이 가장 편할듯
- Landscape를 그릴 때 Stencil을 써주고 Landscape Stencil 위에만 그려지는 Decal을 만든다.
우선은 1번을 구현해봤다. 구현 목적을 간단히 그림으로 설명하면 아래 그림에서 시작점~목표점까지 Landscape의 요철이 있는 Vertex를 모두 계산하는 것이다.
- TopView에서 봤을 때 선의 시작점과 목표점을 각각 s, e라고 한다.
- Landscape의 전체 크기를 얻어온다. (ex: 1km * 1km)
- Landscape의 Vertex 개수를 얻어온다. (ex: 505개 * 505개)
- '크기 / 개수'를 계산하여 단위 크기를 얻어낸다.
- s에서 e까지의 벡터를 만들고, 이 경로상에 단위 크기로 떨어지는 부분을 좌표 v로 만든다.
- [s, v1~vn, e]를 이어서 선분을 만든다.
짜잔!
그런데 뭔가 이상한데?
노란색으로 표시한 부분처럼 파뭍히는 부분이 있다. 계산은 잘 한 것 같은데 왜 그럴까 하고 와이어프레임으로 보니 이유를 알았다. 월드는 삼각형 폴리곤으로 이뤄지기 때문에 사각형이 아닌 삼각형과 만나는 모든 점을 만들어야 한다.
<파란색 : s, e, 그리고 계산된 정점 v>
<노란색으로 표시한 부분에 점들이 추가되어야 함>
일단 계산이 많아서 이 구현은 쓰지 않더라도 Landscape와 만나는 모든 점의 리스트를 구하는 함수 자체는 구현해놔야겠다. 그치만 오늘은 항마력이 다해서 그만!
반응형
'Game Dev > WarSimulation' 카테고리의 다른 글
UE4 ACharacter의 RootComponent 변경 (0) | 2017.06.15 |
---|---|
Landscape에 맞닿는 Line 만들기 (N/N) (0) | 2017.04.19 |
GridLine을 UDecalComponent로 변경 (0) | 2017.03.10 |
Terrain Elevation 얻어오기 (0) | 2017.02.28 |