이번 학기 프로젝트 중 하나였던 "MIMOSA"가 끝이 났다. MIMOSA는 "Maya Integrated Manufacturing Objective Shrub Architecture"의 약자로서 기존 L-system에서 한걸음 나아간 Open L-system을 이용한 크리쳐(주로 식물) 개발 도구이다. (건들이면 움직이는 신경초이기도 하고, 그리스 신화에 나오는 공주이기도 하다. 하지만 발표를 들은 대부분의 사람들은 칵테일을 연상했다;;) Open L-system의 특징은 고유의 룰 외에 E(x)라는 외부연동 함수가 추가되어 각 파트의 Variables에 영향을 미치게 되는 것인데, 쉽게 말하면 벽이나 구멍 등에 나무의 성장이 영향을 받게 되는 것이다. 그저 Collision Detection정도로 해결될 걸 뭐 대단하다고 할 수도 있지만 일단 L-system의 룰은 recursive하고 단지 충돌의 체크를 떠나 햇빛과 중력의 영향을 받아 새로운 성장벡터를 산출해야 하기 때문에 조금은 생각해볼 필요가 있었다. 더우기 마야에서 작업하는 폴리곤 또는 Nurbs Surface들에게 가상의 필드가 존재하여 해당 필드를 넘어가기 시작하면 필드포스의 영향력에 따라 그 방향에 대한 weight가 달라지기 때문에 결국 Open L-system의 E(x)는 Ray Hit Test 알고리즘 + Quaternion Space + A* Algorithm의 조합이 되고 이를 우리는 Q* Algorithm이라고 부른다.
Q*에서 공간면을 만들고 weight을 구하는 개요
3D Space상에서 경로산출을 최적화 하기 위해 Quaternion space를 생성한후 이를 Grid화하여 각 지점의 weight를 환산 이를 토대로 새로운 성장방향을 산출하는 식이다. Grid대신 Octree를 이용하고, pre-computed weight의 개념을 만들면 훨씬 빨라질 수 있지만 시간관계상 이론적으로 된다는 것만 정리하고 끝내버렸다. (학생식의 대충대충)