21. 비행 방식에 따라 모션이 달라집니다
• 이륙, 착륙, 수직 상승, 활강, 뱅크턴, 급정지…
Dragon silhouette images from kisspng.com
22. 지형 지물 혹은 상황에 따라
독특한 모션들을 보이기도 합니다
• 수직 강하
• 정지 비행
• 절벽을 따라 활강
• 독특한 착륙
• 스파이럴
23. 공중에서의 방향 전환은
일정한 선회 반경 및 선회율을 유지합니다
• 공중 정지와 후진 비행이 가능합니다
• 하지만 속도를 무시한 채 급선회 할 수 없습니다
24. DH에서 요구하는 공중 내비게이션 시스템 정리
• 3차원 패스 파인딩 기능이 되어야 함
• 용의 움직임에 맞는 부드러운 경로를 생성함
• 비행중인 경로의 유형에 맞게 애니메이션이 반응함
• 생성되는 경로에 기획자의 의도가 반영될 수 있었으면 좋겠음
• 내비게이션을 위한 데이터가 크지 않아야 함
26. Recast Navigation
• UE4에서 사용하는 내비게이션 시스템
• 지상 전용 내비게이션
• 내비게이션 메시를 기반으로 길을 찾음
• NDC2017 자료 참고
• <구형맵에서는 어떻게 길을 찾아야 하나요?
기초부터 이해하는 Recast 내비게이션 메시> 하지훈
http://masagroup.github.io/recastdetour/
27. Path Follow UE4 Plugin
스플라인 패스 팔로잉
• 매우 심플한 디자인
• 만들어진 스플라인 패스를 따라가게 해 줌
• 패스 파인딩 기능은 없음
https://www.unrealengine.com/marketplace/path-follow?sessionInvalidated=true
28. DoN AI Navigation
복셀 기반 3D 내비게이션
• 오픈소스 (MIT License)
• 일반적으로 생각하는 복셀 기반
내비게이션의 UE4 구현체
• 부드러운 곡선 경로 생성 불가
• 기획자의 의도를 반영하기 어려움
• 맵이 넓을 수록 복셀 데이터량 급증
http://www.drunkonnectar.com/3d-pathfinding-ue4/
29. Mike Roberts and Pat Hanrahan. 2016.
Generating Dynamically Feasible Trajectories
for Quadrotor Cameras. ACM Trans. Graph. 35, 4, (SIGGRAPH 2016)
드론 비행 경로 최적화 기법
• 드론의 물리적 비행 능력과 환경 요소를 고려한
경로 생성 어시스트
• 스플라인 기반의 경로 생성
• 실시간 경로 생성 기법은 아님
30. 리뷰
• 기존의 지상 내비게이션을 공중 전용으로 확장하기는 어렵다
• 복셀 기반의 내비게이션은 생명체의 움직임을 표현하기엔 부적절하다
• 복셀 기반의 내비게이션 방식으로 어찌 표현한다 해도,
맵의 크기 때문에 복셀 데이터량 감당하기 어렵겠다
• 물리적 타당성에 너무 몰두하지는 말자
• 스플라인이 부드러운 경로를 표현하는 데 딱인데 다루기 까다롭다
37. 구성요소: 하늘 길 도로
• 스플라인으로 제작
• 일정 간격마다 안전 반경을 기록
• 웨이포인트에 연결
38. 구성요소: 프로브
• 최종 경로를 따라 가는 객체
• 전체 경로에 대한 분석 결과를 기록해 둬
용이 언제 어떻게 날아야 할 지를 결정함
• 용의 비행을 직접적으로 제어
39. 이어서
• 하늘 길 시스템의 핵심 요소인 스플라인
• 하늘 길 시스템의 패스 파인딩 절차
• 하늘 길 시스템의 프로브 패스 팔로잉 절차
• UE4 내비게이션 시스템 확장
40. 하늘 길 시스템의 핵심 요소: 스플라인 커브
• 복잡한 것 없이 핵심만 설명합니다!
41. Cubic Bézier Curve
• 부드러운 곡선을 표현하는 수단
• 연쇄적인 보간을 통해 시간 t에서의 위치를 결정
• Parametric curve
시간 t에서의 위치는 언제나 동일
42. Cubic Hermite Spline
• 2개의 점과 기울기로 곡선 조각을 표현
곡선 조각 = cubic hermite curve
• 점과 탄젠트의 시퀀스로 스플라인 곡선을 표현
• 각 점 𝑷에서 C1 연속
• 각 세그먼트를 cubic bézier curve로 변환 가능
𝑷 𝒏, 𝑷 𝒏 +
𝟏
𝟑
𝑻 𝒏, 𝑷 𝒏+𝟏 −
𝟏
𝟑
𝑻 𝒏+𝟏, 𝑷 𝒏+𝟏
43. 연속성(continuity)
• 해석학에서 함수의 부드러운 정도(smoothness)를 설명하는 방법
• Parametric continuity / Geometric continuity
• 커브(곡선 혹은 곡면)의 부드러운 정도를 설명하는 방법
• 연속성의 수준(order)에 따라 매개변수적 혹은 기하학적 특징이 달라짐
44. 연속성(continuity)
• Parametric continuity
• 𝑪−𝟏
: 커브가 끊어져 있음
• 𝑪 𝟎
: 커브가 연결되어 있음
• 𝑪 𝟏
: 1차 미분 가능, 보간 속도가 동일
• 𝑪 𝟐
: 2차 미분 가능, 보간 가속도가 동일
• 𝑪 𝒌
: k차 미분 가능
• Geometric continuity
• 𝑮 𝟎
: 커브가 점에서 만남
• 𝑮 𝟏
: 동일한 탄젠트를 공유함
• 𝑮 𝟐
: 동일한 곡률의 중점을 공유함
𝐶1
연속, 𝐺1
연속
𝐶1
연속 아님, 𝐺1
연속
느림
빠름
45. UE4 USplineComponent
• Cubic hermite curve 세그먼트로 이루어짐
• Arriving / Leaving Tangent
• 커브 연결점에서 전 후 탄젠트가 다를 수 있음
• C1 연속이 아닐 수 있음
• 보간 속도의 일관성을 보장하기 위해
reparameterization table을 만들어 둠
• 하늘 길은 USplineComponent의 코어인 FInterpCurve<> 템플릿 자료구조로 제작함
46. 하늘 길 시스템 – 패스 파인딩
하늘 길 시스템 – 패스 팔로잉
언리얼 엔진 AI 시스템과 융합
47. 패스 파인딩 절차
1. 출발/도착 지점에서 하늘 길로 임시 경로 연결
2. 그래프 최단 경로 탐색 수행
3. 들어오고 나가는 경로를 생성
4. 스무딩 및 최종 경로 스플라인 생성
49. 출발 도착
출발/도착 지점에서 하늘 길 연결
• 출발/도착 지점은 하늘 길 밖에 있음
• 이 위치에서 ‘보이는’ 하늘 길로의
임시 링크를 생성
50.
51. 출발 도착
하늘 길 그래프 최단 경로 탐색
• 임시 링크를 포함하여 그래프 탐색: A* search
52. 출발 도착
하늘 길 그래프 최단 경로 탐색
• 임시 링크를 포함하여 그래프 탐색: A* search
• 하늘 길의 가중치를 달리 할 수 있음
53. 들어오는 길, 나가는 길 생성
• 출발/도착 지점에서 하늘 길로의 연결은 ‘길’로써의 사용하기엔 미흡함
• 출발/도착 지점 속도와 진입/탈출 지점 속도를 고려한 길 생성 절차가 필요함
• 어떻게? 다시 길 찾기 문제?!
• 짧은 거리의 두 지점을 부드럽게 잇는 간단한 방법을 고안
54. 두 지점 사이를 잇는 ‘합리적인’ 경로 생성
• 각 지점의 탄젠트 위치를 이은 선분을 후보 공간 축으로 사용
55. 두 지점 사이를 잇는 ‘합리적인’ 경로 생성
• 각 지점의 탄젠트 위치를 이은 선분을 후보 공간 축으로 사용
• 후보 공간 축의 가운데 지점을 지나는 평면이 후보 공간 평면
56. 두 지점 사이를 잇는 ‘합리적인’ 경로 생성
• 각 지점의 탄젠트 위치를 이은 선분을 후보 공간 축으로 사용
• 후보 공간 축의 가운데 지점을 지나는 평면이 후보 공간 평면
• 극좌표상 일정 위치를 후보 지점으로 하고
57. 두 지점 사이를 잇는 ‘합리적인’ 경로 생성
• 각 지점의 탄젠트 위치를 이은 선분을 후보 공간 축으로 사용
• 후보 공간 축의 가운데 지점을 지나는 평면이 후보 공간 평면
• 극좌표상 일정 위치를 후보 지점으로 하고
• 각 후보 지점의 선호도를 계산
58. 두 지점 사이를 잇는 ‘합리적인’ 경로 생성
• 각 지점의 탄젠트 위치를 이은 선분을 후보 공간 축으로 사용
• 후보 공간 축의 가운데 지점을 지나는 평면이 후보 공간 평면
• 극좌표상 일정 위치를 후보 지점으로 하고
• 각 후보 지점의 선호도를 계산
• 높은 우선순위의 후보 지점부터 경로 유효성 검증
• 두 지점과 선택된 후보 지점을 거치는 스플라인 생성
59. 들어오는 길, 나가는 길 생성
• 출발 지점 속도(용의 초기 속도), 진입점 탄젠트,
탈출점 탄젠트, 도착 지점 속도(목표 방향)
출발 도착
60. 들어오는 길, 나가는 길 생성
• 출발 지점 속도(용의 초기 속도), 진입점 탄젠트,
탈출점 탄젠트, 도착 지점 속도(목표 방향)
• 임시로 연결한 직선 경로를 부드러운 경로로 대체
출발 도착
66. 패스 스무딩 과정
• 웨이포인트 였던 위치가 꺾이는 지점
• 꺾인 지점의 인접 세그먼트 위의
일정 거리상 위치를 샘플링
67. 패스 스무딩 과정
• 웨이포인트 였던 위치가 꺾이는 지점
• 꺾인 지점의 인접 세그먼트 위의
일정 거리상 위치를 샘플링
• 각 지점 사이가 이어져도 안전반경 내에서
안전한지를 검사
68. 패스 스무딩 과정
• 웨이포인트 였던 위치가 꺾이는 지점
• 꺾인 지점의 인접 세그먼트 위의
일정 거리상 위치를 샘플링
• 각 지점 사이가 이어져도 안전반경 내에서
안전한지를 검사
• 용의 크기를 고려할 때 이어도 안전한
가장 바깥쪽 두 샘플 포인트를 선정
69. 패스 스무딩 과정
• 웨이포인트 였던 위치가 꺾이는 지점
• 꺾인 지점의 인접 세그먼트 위의
일정 거리상 위치를 샘플링
• 각 지점 사이가 이어져도 안전반경 내에서
안전한지를 검사
• 용의 크기를 고려할 때 이어도 안전한
가장 바깥쪽 두 샘플 포인트를 선정
70. 패스 스무딩 과정
• 웨이포인트 였던 위치가 꺾이는 지점
• 꺾인 지점의 인접 세그먼트 위의
일정 거리상 위치를 샘플링
• 각 지점 사이가 이어져도 안전반경 내에서
안전한지를 검사
• 용의 크기를 고려할 때 이어도 안전한
가장 바깥쪽 두 샘플 포인트를 선정
• 두 지점 사이에 부드러운 곡선을 생성하여 연결
71. 패스 스무딩: 두 지점의 탄젠트 조정
• 두 지점의 탄젠트를 그대로 쓰면 스플라인이 꼬일 수 있음
72. 패스 스무딩: 두 지점의 탄젠트 조정
• 두 지점의 탄젠트를 그대로 쓰면 스플라인이 꼬일 수 있음
• 탄젠트 세그먼트들의 Closest point를 구하고
73. 패스 스무딩: 두 지점의 탄젠트 조정
• 두 지점의 탄젠트를 그대로 쓰면 스플라인이 꼬일 수 있음
• 탄젠트 세그먼트들의 Closest point를 구하고
• 해당 지점 까지 탄젠트를 클램프
74. 패스 스무딩: 두 지점의 탄젠트 조정
• 두 지점의 탄젠트를 그대로 쓰면 스플라인이 꼬일 수 있음
• 탄젠트 세그먼트들의 Closest point를 구하고
• 해당 지점 까지 탄젠트를 클램프
• 물론.. 단순 클램핑으로 해결되지 않는 케이스들도 많음
75.
76.
77. 하늘 길 시스템 – 패스 파인딩
하늘 길 시스템 – 패스 팔로잉
언리얼 엔진 AI 시스템과 융합
78. 스플라인 시간 t의 위치로 용 위치 갱신…?
• 스플라인을 단순히 따라가게 하면 용의 움직임이 단조로움
• Reparameterization 정밀도가 낮으면 일정한 속력으로 이동하지 못함
• 외력에 의한 경로 이탈을 제어하기 힘듦
• 공격받았을 때, 장애물(다이내믹 오브젝트)에 부딪쳤을 때…
79. 용보다 앞서 움직이는 프로브,
프로브를 따라가는 용
• 프로브는 스플라인 위를 정직하게 이동
• 용은 프로브를 향해서 날아감
• 프로브는 용이 뒤쳐지거나 앞서지 않도록
속도를 제어함
• 프로브는 용의 패스 팔로잉 로직의 완충 장치
http://www.damentrading.com/en/buy-a-ship/06920-tugboat
80. 프로브를 따라 나는 용… 어떻게?
• ‘어떻게’ 비행하는가에 대한 의문은 여전히 남음
• 용의 비행 유형은 선형 속도와 회전 속도의 변화로 결정됨
81. 프로브를 따라 나는 용… 어떻게?
• ‘어떻게’ 비행하는가에 대한 의문은 여전히 남음
• 용의 비행 유형은 선형 속도와 회전 속도의 변화로 결정됨
• 전체 패스를 분석하여 일정한 기준으로 구간을 나눔
82. 프로브를 따라 나는 용… 어떻게?
• ‘어떻게’ 비행하는가에 대한 의문은 여전히 남음
• 용의 비행 유형은 선형 속도와 회전 속도의 변화로 결정됨
• 전체 패스를 분석하여 일정한 기준으로 구간을 나눔
• 각 구간의 최대/최소 속력, 선회 속력, 롤링 등을 분석
83. 프로브를 따라 나는 용… 어떻게?
• ‘어떻게’ 비행하는가에 대한 의문은 여전히 남음
• 용의 비행 유형은 선형 속도와 회전 속도의 변화로 결정됨
• 전체 패스를 분석하여 일정한 기준으로 구간을 나눔
• 각 구간의 최대/최소 속력, 선회 속력, 롤링 등을 분석
• 구간 별 모션 유형을 결정
84. 패스 분석: 선형 속도 변화
• 경로의 Z성분 극점을 기준으로
선형 속도에 유의미한 변화가 발생함
• 1차 도함수 극점: 기울기 - → + 혹은 + → -
• 2차 도함수 극점: 기울기 변화량,
즉 변곡점(inflection point)
85. A
B
C
A
B
C
A
B
C
패스 분석: 선형 속도 변화
• 하강하다 다시 상승하는 구간으로 예를 들면,
• A → B 구간 점진적으로 속력 줄어듦
• B → C 구간은 속력이 더 이상 줄 수 없어
고도 상승을 위한 날갯짓 시작
• 물리적으로 타당한 것은 아니지만
결과가 나쁘지는 않다
87. 잠깐! 2차 미분이라뇨,
Hermite Spline은 C2 연속이 아닌걸요?!
• 연결 지점의 Arrive/Leave 탄젠트를 맞췄다 해도
C2 연속을 보장할 수 없음
• 심지어 패스 스무딩 등의 과정을 거치며 C1 연속이 아닐 수도 있음
• 그래서 커브의 연결 지점은 패스 구분을 위한 포인트로 강제함
• CAD 툴을 만드는 게 아니니 적당히 넘어가도 괜찮습니다 ㅎㅎ..
C1 연속인 연결점
C2 연속인 연결점
88. 패스 분석: 선회 속도 변화
• 선회란 항공기가 곡선을 그리듯 진로를 바꾸는 것
• 빠른 선회를 위해 양력이 선회 반경의 중심 쪽을
향할 수 있도록 몸을 틀어줘야 함
• 뱅크 턴(bank turn)이라고 부르는 공중 기동 기법
• 속력이 일정할 때 선회 반경이 작아지면 선회율 상승
• 선회 반경은 수평 곡률에 반비례
• 즉, 수평 곡률 상승 → Bank Angle 상승
https://www.quora.com/What-is-the-relationship-between-turn-rate-and-g-force-when-an-aircraft-turns
89. 패스 분석: 수평 곡률(curvature) 계산
• 곡률은 굽은 정도를 표현하는 수치:
𝑪 𝒕 = (𝒙 𝒕 , 𝒚 𝒕 ), 𝜿 =
𝟏
𝒓
=
𝒙′ 𝒚′′−𝒚′ 𝒙′′
𝒙′𝟐+𝒚′𝟐 𝟑/𝟐
• 수직 성분인 XY 컴포넌트에 대해 계산
• 패스의 곡률이 큰 지점일 수록 선회 반경이 작음
• 수평 곡률에 따라 bank angle에 해당되는
롤(roll) 회전 요소 계산
𝒓
90.
91. 패스 팔로잉: 프로브 제어
• 프로브는 용과 적정 거리를 유지하며 스플라인 위를 움직여야 함
• 일정 속력을 유지하되 용과의 거리가 가까워지면 속력을 높이고,
거리가 멀어지면 속력을 늦춤
92. 패스 팔로잉: 용 움직임 제어
• 프로브의 현재 구간 유형을 확인
• 현재 위치의 기울기로 가속력, 속력 계산
• 프로브로의 방향으로 속력 만큼 이동 거리 𝚫𝐩 계산
93. 패스 팔로잉: 용 움직임 제어
• 프로브의 현재 구간 유형을 확인
• 현재 위치의 기울기로 가속력, 속력 계산
• 프로브로의 방향으로 속력 만큼 이동 거리 𝚫𝐩 계산
• 용을 프로브로의 방향으로 정렬하기 위한 회전 속력 계산
• 현재 위치의 롤(roll) 회전 요소를 누적
• 최종 회전 속력 만큼 회전 값 𝚫𝐑 계산
94. 패스 팔로잉: 용 움직임 제어
• 프로브의 현재 구간 유형을 확인
• 현재 위치의 기울기로 가속력, 속력 계산
• 프로브로의 방향으로 속력 만큼 이동 거리 𝚫𝐩 계산
• 용을 프로브로의 방향으로 정렬하기 위한 회전 속력 계산
• 현재 위치의 롤(roll) 회전 요소를 누적
• 최종 회전 속력 만큼 회전 값 𝚫𝐑 계산
• 용 객체의 위치 / 회전 갱신
95. 패스 팔로잉: 용 움직임 제어
• 패스 유형이 바뀌는 시점을 용 객체에게 통지
• 용 객체는 실버바인 모션 엔진을 통해 적절한 로코모션 재생
• 비행 로코모션 연구는 WIP!!
96. 경로 재탐색 전략: Pruning & Grafting
• AI 내비게이션 대상은 움직이는 물체인 경우가 많음
• 타겟이 이동한 경우 패스의 갱신이 필요함
97. 경로 재탐색 전략: Pruning & Grafting
• AI 내비게이션 대상은 움직이는 물체인 경우가 많음
• 타겟이 이동한 경우 패스의 갱신이 필요함
• 패스의 적당한 지점을 찾아 잘라 냄 (pruning)
98. 경로 재탐색 전략: Pruning & Grafting
• AI 내비게이션 대상은 움직이는 물체인 경우가 많음
• 타겟이 이동한 경우 패스의 갱신이 필요함
• 패스의 적당한 지점을 찾아 잘라 냄 (pruning)
• 해당 지점의 위치와 탄젠트를 유지한 채 타겟 위치로 패스 파인딩
• 새 경로를 기존 경로에 접붙이기 (grafting)
99. 요약
• 패스 파인딩
• 출발/도착 지점에서 하늘길로 임시 경로 연결
• 그래프 탐색
• 부드럽게 들어오는 길, 나가는 길을 생성
• 전체 경로 스무딩
• 패스 팔로잉
• 비행 유형별로 구간을 나눔
• 프로브의 위치를 갱신
• 용의 위치 및 회전, 그리고 모션을 갱신
• 필요한 경우 경로 재탐색
100. 하늘 길 시스템 – 패스 파인딩
하늘 길 시스템 – 패스 팔로잉
언리얼 엔진 AI 시스템과 융합