![](/knowledge/abroad/indu/__icsFiles/artimage/2010/08/09/Gamasutra.jpg)
알란 웨이크(Alan Wake)에서 본 클로스 시뮬레이션(cloth simulation)의 비밀 The Secrets Of Cloth Simulation In Alan Wake
헨리크 엥퀴비스트(Henrik Enqvist) 가마수트라 등록일(2010년 8월 29일)
http://www.gamasutra.com/view/feature/4383/the_secrets_of_cloth_simulation_in_.php
[애니메이션 프로그래머인 헨리크 엥퀴비스트는 마이크로소프트사가 출시한 엑스박스 360의 호러 스릴러물 알란 웨이크(Alan Wake)에서 주요 캐릭터의 재킷에서 보여지는 실감나는 트위드(tweed) 클로스 시뮬레이션(cloth simulation)을 그의 팀이 어떻게 생성했는지 보고자 한다.] 액션 스릴러의 주요 캐릭터는 ‘알란 웨이크’로 행방불명 된 그의 아내에 대한 미스터리를 풀려고 하는 동시에 어둠의 세력과 싸워야 하는 악몽 같은 시나리오에 사로잡혀 있는 작가이다. 그는 잘 훈련된 액션 히어로라기 보다는 일상적으로 볼 수 있는 평범한 사람이다. 그의 캐릭터를 설정하기 위해 아트 디렉터는 그가 무장을 한 채 낡은 트위드 재킷을 입었으면 했다. 이 게임은 실제 세상을 설정해 놓은 곳에서 벌어지며, 판타지 게임이나 스페이스 슈터와 비교해 보면 캐릭터의 개성을 만들어 주는 툴은 한정적이다. 그렇기 때문에 캐릭터가 입고 있는 의상이 훨씬 더 중요해진다. 알란 웨이크의 재킷은 게임 플레이어에게 스릴러의 분위기가 나도록 최대한 현실성이 있어야 한다. 재킷은 바람에 날려야 하고 캐릭터가 숲으로 돌진할 때는 캐릭터에 따라 추가적인 움직임이 있어야 한다. 프로그래머로서 당신은 클로스 시뮬레이션에 대해 즉시 생각해 보게 된다. 수 많은 게임에 이미 클로스 시뮬레이션이 적용되어 있다. 하지만, 이러한 방법들은 종종 실크나 고무의 느낌은 준다. 어떤 것은 마음에 들지 않았다. 최근에서야 클로스 시뮬레이션에 대해 훌륭한 타사 솔루션이 일부 적용되고 있지만, 안정적인 솔루션을 필요로 할 때면 그러한 툴은 존재하지 않았거나 우리의 필요를 충족시키지 못했다. 이 글은 우리가 마주치는 문제점을 진단해 보고 자체적인 클로스 시뮬레이션을 구동하기 위한 솔루션을 제시한다. 여기에 기술한 방법을 잘 안다고 하더라도 여러 요소를 모으는 방법은 본 기사를 읽는데 흥미로움을 가져다 줄 것이다.
재킷 복장 재킷은 일반적인 스킨드 메쉬(skinned mesh)로서 캐릭터의 나머지 부분과 함께 설계된다. 재킷 메쉬를 구동하는 골격은 일반적인 골격의 위에 있는 개별적인 한 층이다. 재킷의 소매는 일반적으로 윗팔과 아래팔로 구성된다. 이러한 윗팔과 아래팔은 하나의 주요 골격과 하나의 구부러진 골격으로 나누어 진다. 상부 재킷은 룩엣 콘스트레인트(look-at constraints)로 구동되고 Verlet 시뮬레이션은 하부 재킷을 구동한다.
상부 재킷 상부 재킷 골격은 탑-다운 방식으로 상부의 뼈가 움직이면 하부의 뼈도 따라서 움직인다. 하부 뼈가 흉부로 곧장 움직일 수 있도록 했다. 그랬더니 캐릭터의 움직임이 둔해졌다. 특히, 캐릭터가 그의 어깨를 올릴 때 재킷이 수직으로 잘 움직여지지 않았다. 상부 재킷에서 윗팔의 부분들 쪽으로 어깨뼈를 룩엣 콘스트레인트로 구동해 실제 어깨 패드의 움직임을 재현했다. 어깨 패드가 윗팔의 움직임을 따르고, 팔을 올릴 때 어깨 패드가 나머지 뼈들을 들어 올린다. 이는 마치 실제 재킷과 같다. 이러한 일련의 상황에서 다음과 같은 골격은 상부 재킷 및 시뮬레이션된 하부 재킷 간의 한 층이다. 이러한 골격은 룩엣 콘스트레인트를 통해 바로 아래로 구동되기 때문에 어깨로 인한 회전을 보상한다. 또한, 좌측 뼈와 우측 뼈간 포지션 콘스트레인트(position constraints)를 추가해서 어깨 패드가 움직일 때 발생하는 스트레칭을 보상한다.
애니메이션 익스포터(animation exporter)에서 콘스트레인트을 구현하고 이 결과를 애니메이션 데이터에 제공하는 훌륭한 솔루션일 수 있었다. 하지만, 게임 엔진 내에서 실시간 골격을 구동할 수 있기를 원했다. 이 방법은 애니메이션 데이터에서 바이트 일부를 줄일 수 있고 캐릭터가 재킷을 입었는지의 여부와 상관없이 캐릭터간 애니메이션을 쉽게 공유할 수 있었다. 또한, 인게임 IK로 인해 발생하는 어깨의 움직임은 콘스트레인트를 실시간으로 해결할 때 정확하게 적용하게 된다.
하부 재킷 상부 재킷을 해결한 후 재킷의 하부를 시뮬레이션 하는 것을 보자. 게임에서 대부분의 클로스 시뮬레이션은 클로스 시뮬레이션에서의 정점(vertex)들과 렌더링된 메쉬의 정점들간 1대1 매핑을 가진다. 우리의 경우, 재킷 메쉬의 정확성을 보존하고 코더 딕테이티드 콘스트레인트(coder-dictated constraint)에 의한 방해를 받지 않기를 원했다. 예를 들여, 렌더링 측면에서 시뮬레이션을 위해 동일한 메쉬를 받아들였어야 했으면 재킷의 주머니와 전면의 실루엣은 손상되었을 것이다. 일반적인 맵은 재킷의 형상을 표현하는데 유용했지만 충분하지 않은 것 같다. 대신, 우리는 아티스트들이 자유롭게 원하는 모습으로 재킷의 형상을 만들기 원하여 일반적인 맵을 사용해서 입체 형상을 줄이기 보다는 주름이나 다른 상세 사항을 추가하려고 했다. 이에 대한 우리의 솔루션은 재킷을 시뮬레이션하는데 사용한 저해상도의 클로스 메쉬를 가진 다음, 스킨드 메쉬를 구동하는데 사용했던 골격에서 이 클로스 메쉬를 매핑하는 것이었다.....(중략)
※ 자세한 내용은 첨부(PDF)파일을 참고하시기 바랍니다.
![인쇄](/images/common/btn/btn_print.gif)
|