고도 정밀도 향상

기본적으로 NavData는 제한된 정확도를 가진 지세 메시의 수직 고도를 따르는 것만 보장됩니다. NavMesh는 지세의 이동 가능성 및 토폴로지를 추상적으로 표현하기 위한 것이기 때문에 이동 가능한 영역과 가능하지 않은 영역을 제대로 구분하기만 하면, Gameware Navigation 런타임 컴포넌트는 이들로 하여금 지세의 정확한 고도를 아주 가깝게 따르도록 할 필요가 없습니다.

그러나 어떤 경우에는 NavMesh에 좀더 정확한 고도 정보를 직접 포함시키는 것이 좀더 편리할 수 있습니다. 예를 들어 걸어다닐 때 캐릭터가 지면에 계속 클램프되는 것으로 보이도록 캐릭터의 고도를 조정하려면, 일반적으로 결과가 다소 덜 정확한 경우에도 물리적 레이캐스트를 사용하지 않고 NavMesh의 고도를 사용하는 것이 CPU 사용 시간 면에서 훨씬 덜 소요된다는 것을 알 수 있습니다.

정밀도를 더 높여야 하는 경우 NavData 생성 시스템은 NavMesh의 고도를 제한하는 기능을 제공하여 지정한 허용 오차에서 원래 지세 메시의 고도를 따르도록 합니다. 이로 인해 일반적으로 더 작고, 더 많은 삼각형을 가진 NavMesh가 생성됩니다.

수직 정확도를 보장하는 방법

NavData 생성 시스템은 지세에 대해 NavData를 만든 후 NavMesh의 고도를 조정하는 사후 처리 단계를 수행하여 원래 지세 메시의 고도에 좀더 가깝게 일치시킬 수 있습니다.

시스템이 먼저 구성 가능한 간격을 사용하여 수평 샘플링 그리드를 만듭니다. 이 그리드가 원래 래스터화에 일치하도록 간격이 지세 메시의 래스터화에 원래 설정된 여러 픽셀 크기로 내부에서 조정됩니다. 이러한 각 샘플링 점에서 지세 메시와 NavMesh 사이의 고도 차이를 검사합니다.

기본 NavMesh와 수직으로 정확한 NavMesh 사이의 차이를 시각화하려면 다음 샘플 지세를 사용합니다.

NavData 생성 시스템에 대해 구성된 이동 모델에서 캐릭터가 이러한 피라미드를 자유롭게 가로지를 수 있다고 가정하면 기본적으로 다음 NavMesh가 생성됩니다.

위에 표시된 NavMesh는 영역의 이동 가능성을 정확하게 나타내기 때문에 런타임 시 정상적으로 봇에 의해 사용될 수 있습니다. 그러나 지세의 일반 모양을 NavMesh에서 볼 수 있지만, 원래 지세 메시의 고도를 아주 가깝게 반영하는 것은 아닙니다. 실제 지면 고도로 발을 클램프하기 위해 충돌 시스템을 사용하지 않고 이 NavMesh의 고도를 사용하여 캐릭터의 고도를 결정한 경우 캐릭터의 발이 지면의 약간 위나 피라미드의 약간 아래를 번갈아 맴돌게 됩니다. (Z 파이팅(Z-fighting)을 방지하기 위해 Navigation Lab은 표시용으로 지세의 고도에서 NavMesh의 고도를 약간 오프셋합니다. NavMesh의 실제 고도는 곳곳에서 지세 메시 아래를 교차합니다.)

따라서 NavMesh가 지세를 따르는 정밀도를 높이기 위해 수직 허용 오차(및 수평 샘플링 단계)를 줄일 수 있습니다. 필요한 경우 다음 이미지와 같이 매우 높은 정확성을 얻을 수 있습니다.

허용 오차를 줄일 때 다음에 유의하십시오.

고도 허용 오차 설정

NavData 생성 시스템의 Gameware Navigation Lab 및 API 모두에서 고도 허용 오차를 설정할 수 있습니다.

Navigation Lab 사용

Navigation Lab에서 고도 허용 오차를 설정하려면

  • Generation 창을 엽니다.
  • 원하는 대로 Altitude tolerance (m) 컨트롤 값을 설정합니다.
  • 아주 높은 정확성이 필요한 경우 Advanced parameters 섹션을 확장하고 Altitude tolerance sampling step 컨트롤을 사용하여 샘플링 단계를 설정할 수도 있습니다.

C++에서 Generator 사용

Generator에서 고도 허용 오차를 설정하려면

기본 고도 정밀도 감소

Altitude tolerance(m) 컨트롤에서 원하는 값을 설정하여 기본 고도 정밀도를 감소시킬 수 있습니다.

이렇게 하면 어느 정도 생성 시간이 줄어들지만 NavData의 최종 크기도 감소될 수 있어 대부분의 경우 추천하지 않습니다. NavMesh의 고도가 지세의 고도에서 두드러지게 갈라지는 영역에서는 봇 및 장애물을 공간화하기 위해 런타임 컴포넌트가 지면 레벨이나 위에서 지정된 3D 위치에 해당하는 NavMesh를 제대로 검색하지 못할 수도 있습니다. 이로 인해 장애물 관리 시스템 사용에 문제가 발생하고 이동 가능 쿼리가 실패할 수 있습니다.