난 이 영상 보고 아래 나온 내용대로 ai를 짜봤어.

먼저 context_dir 이라고 하는 배열을 둬서 그 안에 각 방향에 맞는 길이가 1인 벡터를 넣었어.

그 다음에 '플레이어로 향하는 벡터'랑 context_dir 안 벡터의 도트곱을 구해서 영상과 같이 context map을 만들었는데,

결과적으로 영상에서 나오는 결과랑 비슷하게 나왔어.

초록색 점이 쫓을 대상, 빨간색 점이 피할 대상이야.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8efa11d02831ed3c848cabfee483347b0fb095af03c5daeba79a35ac66a6fef7ca94e838b38c0c329b46ef4db622f897be4779c982aa4933a510




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8efa11d02831ed3c848cabfee483347b0fb095af03c5daeba79a35ac66a6fef7ca94e838b38c0c329b46ef4db622af99b8117dc9d7f9c8fd9a77





영상에서는 제작자가 '피할 대상'이랑 '쫓을 대상'에 해당하는 도트곱 값을 어떤 식으로 context map에 더했는지 잘 모르겠어서

그냥 거리를 나누고 둘이 더했어.


other.context_map[i] += (1.0 - abs(dot - 0.65)) / dist;    // 피할 대상
other.context_map[i] += (1.0 - (dot)) / dist;               // 쫓을 대상

이런식으로 모든 고려할 오브젝트 도트곱 값을 더한 뒤에 방향에 따른 context_map 값중 가장 큰 값을 나눴어.


for(var i = 0; i < ray_count; i++){
context_map[i] /= maxval;
}

이렇게 구해서 몬스터 ai에 적용해봤는데, 구체적으로 두 개 정도 큰 문제가 생기더라고.

1. 피할 대상 or 쫓을 대상이 너무 많아서 메모리 소모가 너무 커.

2. 피할 대상이 너무 많아지면 쫓을 대상을 제대로 못 쫓아.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8efa11d02831ed3c848cabfee483347b0fb095af03c5daeba79a35ac66a6fef7caf9843eb38c2b387470f43c0c0bbcfe5c8946c1f0b55bdcda



위 사진처럼 방향을 정하는 데 문제가 있더라고.


혹시 Context map으로 몬스터 알고리즘 만들어본 사람 중에 나랑 똑같은 문제에 빠진 사람 없는지 궁금해서 찾아왔어.

영상 제작자가 참고했다는 논문도 한 번 읽어 봤는데

메모리를 너무 많이 소모하는 건 각 Context_map에 해당하는 방향으로 레이캐스팅해서 피할 대상이 있는지 확인해서

그쪽 방향을 차단하는 방식이 있더라고. 그 방법 그대로 해봤을 때 장애물을 피해서 쫓을 대상을 잘 쫓긴 하는데

몬스터   피할대상     쫓을대상

이렇게 일직선 상에 피할대상, 쫓을대상 둘 모두 있을 때에는 제대로 작동을 안하더라고.

혹시 충고해줄 내용이나 찾아봐야 될 정보들 힌트라도 줄 수 있을까?