UDN
Search public documentation:

NavigationMeshPathDebuggingKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > AI와 내비게이션 > 내비게이션 메시 패쓰 디버깅

내비게이션 메시 패쓰 디버깅


문서 변경내역: Matt Tonks 작성

개요


길찾기 문제 디버깅은 일반적인 데이터세트의 크기가 크고 길찾기 자체가 복잡하기 때문에 어려운 작업이 될 수 있습니다. 본 문서는 이 과정을 쉽도록 하기 위해 제공되는 몇 가지 도구에 대한 개요를 설명합니다.

패쓰 디버그 렌더링


패쓰 렌더링을 사용하려면 콘솔 명령인 show paths 를 실행해야할 수 있습니다. 이것은 현재 로드되어 있는 navmesh(navmesh 장벽의 동적 업데이트를 포함)를 그립니다. 다음이 이에 대한 스크린샷입니다.

showpathsscreenshot.jpg

  • 붉은색 면들은 장벽 메쉬의 면들입니다(AI가 통과할 수 없는 면).
  • 녹색의 면들은 도보 가능한 면들입니다(navmesh 자체의 일부).
  • 다각형 사이의 경계선에 따라 있는 보라색 선은 다각형간의 연결을 나타냅니다. 인접한 2 개의 다각형 사이에 보라색 선이 없으면, AI들이 한쪽 다각형에서 다른 쪽 다각형으로 이동할 수 없다는 것을 의미합니다.
  • 다른 선들은(예: 노란색 점선) 다른 가장자리 유형을 나타냅니다. 이 경우, 노란색 점선은 커버슬립(coverslip) 가장자리를 나타냅니다.

파이론(Pylon)에서도 또한 몇 가지 유용한 옵션들이 있습니다.

  • bDrawEdgePolys - TRUE인 경우, 해당 가장자리의 중심에서 그 가장자리에 의해 연결된 2개의 다각형의 중심으로 선이 그려집니다. 이것은 어떤 다각형이 실제로 어떤 가장자리에 의해 연결되는지 디버깅하는 경우 유용합니다. 다음은 이 옵션을 선택했을 경우의 스크린샷입니다.
    showpathsscreenshot_edgepolys.jpg
  • bDrawPolyBounds - TRUE인 경우, 각 다각형의 계산된 경계를 나타내는 노란색 와이어 상자가 그려집니다. 다음은 이에 대한 스크린샷입니다.
    showpathsscreenshot_showbounds.jpg

디버깅 렌더링에 대한 좀 더 자세한 내용은 UsingNavigationMeshesKR 를 참조해 주십시오.

bDebugConstraintsAndGoalEvals


네비게이션핸들(navigationhandle)에는 bool이 존재합니다. 이것이 TRUE로 설정되면 해당 네비게이션핸들에 대한 패쓰찾기가 길찾기에 대한 통계를 출력하게 됩니다.

다음은 bDebugConstraintsAndGoalEvals를 TRUE로 설정한 간단한 최단 길찾기를 실시했을 경우의 일부 예제 출력입니다.

[0515.02]Log: ------- PATH CONSTRAINT STATS --------
[0515.02]Log: Processed: 43 ThrownOut: 0 (0.00% thrown out) AddedPathCost: 0.00 (0.00% total) AddedHeuristic: 0.00 (0.00% total) - (NavMeshPath_MinDistBetweenSpecsOfType_0)
[0515.02]Log: Processed: 43 ThrownOut: 0 (0.00% thrown out) AddedPathCost: 0.00 (0.00% total) AddedHeuristic: 175.00 (100.00% total) - (NavMeshPath_Toward_0)
[0515.02]Log: --------------------------------------
[0515.02]Log: TotalThrownOut: 0 TotalAddedDirectCost: 0.00 TotalAddedHeuristicCost: 175.00
[0515.02]Log: ------- GOAL EVALUATOR STATS --------
[0515.02]Log: Threw Out 10 (out of 11 processed (90.91%)) (Responsible for 100.00% of all nodes thrown out) - NavMeshGoal_At_0
[0515.02]Log: ---------------------------------------

이 출력 결과에서 많은 정보를 얻을 수 있습니다. 예를 들어, 모든 노드를 throw 시키는 올바르게 작동하지 않는 제약조건이 패쓰 제약조건 목록에 포함되어 있는 경우, 통계를 확인하여 그것이 잘못되게 반응하고 있다는 것을 확인할 수 있습니다. 이것은 또한 어떤 제약조건이 성능적 부담을 추가시키고 있는지에 대한 정보도 출력할 수 있어서 어떤 제약조건이 길찾기 등에 가장 큰 영향을 미치고 있는지 확인할 수 있습니다.

bUltraVerbosePathDebugging


주의: 이 코드는 QA_APPROVED_BUILD_DEC_2009(2009년 12월 QA 승인 빌드)에 포함되어 있으며 CL 408369와 함께 체크인되었습니다.

아직 무슨 일이 일어나고 있는지 또는 왜 어떤 장소를 통과할 수 없는지 알 수 없는 경우, bUltraVerbosePathDebugging을 사용합니다. 이것을 사용하면, AI 패쓰검색을 활성화할 때 코드는 디버그 정보를 화면에 표시할 뿐만 아니라 로그 키로의 정보를 화면상의 정보에 덤프합니다.

화면상의 디버그 정보는 가로지름(traversal)의 전체적인 모양을 파악하고, 패쓰검색이 어디로 이동했고, 어떤 노드를 검사했는지를 확인하는 데 도움이 됩니다. 또한, 화면상의 태그를 사용하여 특정 이벤트에 대한 보다 자세한 정보를 얻을 수 있습니다.

아래의 스크린샷을 살펴보십시오:
UltraVerbosePathDebuggingScreenshot.jpg

  • 빨간색 선 - 패쓰단계를 시도하였지만 거부된 것을 나타냅니다.
  • 빨간색 텍스트 - 실패된 해당 가로지름(traversal)에 해당하는 로그 출력 행으로의 키입니다. 예를 들어 왜 AI가 통과할 수 없었는지 알고 싶은 가장자리에 C:21라는 텍스트를 볼 경우, 로그 창에서 C:21을 검색해 보면 그 이유를 알 수 있습니다. 로그 행에 대한 예제는 다음과 같습니다. [0061.15]Log: PATH_DEBUG_MESSAGE[C:21]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshEdgeBase (Len:30.00 EffecLen:30.00)
  • 녹색 선 - 한 다각형에서 다른 다각형으로의 성공적인 가로지름(traversal)을 나타냅니다.
  • 흰색 텍스트 - EvaluateGoal로의 실패된(종료되지 않은) 호출에 해당하는 로그 출력 행으로의 키입니다. 로그 행에 대한 예제는 다음과 같습니다. [0061.15]Log: Poly (P:16) (polyctr:X=13905.000 Y=-13110.000 Z=129.000) was just given status [EvaluateGoal returned 0] by NavMeshGoal_At_0
  • DebugCoordinateSystem – SearchStart 시에 그려집니다.
예를 들어, 이 스크린샷에서 AI가 C:22로 표시된 가장자리를 가로질러 갈 수 없는 이유를 알고 싶으면 디버그 출력에서 C:22를 검색하면 다음과 같은 결과를 얻게 됩니다.
[0132.83]Log: PATH_DEBUG_MESSAGE[C:22]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshCoverSlipEdge (Actor: CoverLink_8 RelItem: 0 MoveDir: -1)

다음의 또 다른 스크린샷은 실행 중인 디버그 모드의 보다 넓은 뷰를 보여주고 있습니다.

ultraverbose_wide.jpg

이 모드에서는 보다 많은 다른 관련 정보도 또한 로그에 출력됩니다. 예를 들면, 각 패쓰 단계에서의 작업 집합의 크기 및 길찾기가 종료된 이유가 이에 해당합니다. 다음은 예제 출력의 일부입니다.

[0132.82]Log: Poly (P:108) (polyctr:X=12828.750 Y=-15367.500 Z=-127.000) was just given status [EvaluateGoal returned 0] by NavMeshGoal_SquadFormation_0
[0132.82]Log: PATH_DEBUG_MESSAGE[C:221]: Path constraint NavMeshPath_WithinTraversalDist_0 EvaluatePath rejected this edge! Edge: FNavMeshEdgeBase (Len:60.00 EffecLen:90.00)
[0132.82]Log: PATH_DEBUG_MESSAGE[C:222]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshEdgeBase (Len:15.00 EffecLen:30.00)
[0132.82]Log: PATH_DEBUG_MESSAGE[C:223]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshEdgeBase (Len:15.00 EffecLen:30.00)
[0132.82]Log: +++Finished path step 108!, Openlist now has 2 nodes in it.
[0132.82]Log: Poly (P:109) (polyctr:X=12105.000 Y=-13860.000 Z=127.750) was just given status [EvaluateGoal returned 0] by NavMeshGoal_SquadFormation_0
[0132.82]Log: PATH_DEBUG_MESSAGE[C:224]: Path constraint NavMeshPath_WithinTraversalDist_0 EvaluatePath rejected this edge! Edge: FNavMeshEdgeBase (Len:60.00 EffecLen:90.00)
[0132.82]Log: PATH_DEBUG_MESSAGE[C:225]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshEdgeBase (Len:15.00 EffecLen:30.00)
[0132.82]Log: +++Finished path step 109!, Openlist now has 1 nodes in it.
[0132.82]Log: Poly (P:110) (polyctr:X=13800.000 Y=-14482.500 Z=-127.000) was just given status [EvaluateGoal returned 0] by NavMeshGoal_SquadFormation_0
[0132.82]Log: PATH_DEBUG_MESSAGE[C:226]: Path constraint NavMeshPath_WithinTraversalDist_0 EvaluatePath rejected this edge! Edge: FNavMeshEdgeBase (Len:60.00 EffecLen:120.00)
[0132.83]Log: PATH_DEBUG_MESSAGE[C:227]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshEdgeBase (Len:15.00 EffecLen:30.00)
[0132.83]Log: PATH_DEBUG_MESSAGE[C:228]: Path constraint NavMeshPath_WithinTraversalDist_0 EvaluatePath rejected this edge! Edge: FNavMeshEdgeBase (Len:60.00 EffecLen:120.00)
[0132.83]Log: PATH_DEBUG_MESSAGE[C:229]: Path constraint NavMeshPath_WithinTraversalDist_0 EvaluatePath rejected this edge! Edge: FNavMeshEdgeBase (Len:75.00 EffecLen:105.00)
[0132.83]Log: PATH_DEBUG_MESSAGE[C:230]: Edge does not support this entity (supports returned FALSE) Edge: FNavMeshCoverSlipEdge (Actor: CoverLink_48 RelItem: 0 MoveDir: -1)
[0132.83]Log: +++Finished path step 110!, Openlist now has 0 nodes in it.
[0132.83]Log: +++++++++ STOPPING PATH SEARCH -- Nodes on openlist: 0 Reason: Path finished, and DetermineFinalGoal returned TRUE.. search was a success!

또한, 런타임 시 게임의 특정 AI에 이 디버그 모드를 손쉽게 활성화시킬 수 있는 빠른 도구가 제작되었습니다. __VerbosePathDebug__는 실행할 수 있는 콘솔 명령으로써 해당 플레이어가 쳐다보고 있는 곳에서부터 추적을 수행하고, 해당 패쓰에서의 모든 폰들에 대해 bUltraVerbosePathDebugging을 True로 설정합니다.

이 bool이 어떤 AI에 대해 선택되었을 경우, 해당 AI는 패쓰검색을 완료하고, 새로운 정보에 대한 방법을 만들기 위해 이전의 ultraverbose 디버그 정보는 지워지고, 해당 게임은 여러분께서 이러한 정보를 검토할 수 있도록 playersonly 모드로 전환됩니다. 한 개의 프레임에서 다중 패쓰검색이 발생하는 경우, 마지막에 발생한 것을 화면에서 보게된다는 것에 주의하십시오.