본문 바로가기

레퍼런스/고도엔진

고도엔진 튜토리얼 #2 인스턴스화(Instancing)

합리성


씬과 노드를 던져넣는 것은 소규모 프로젝트에서는 효과가 있을 수 있지만, 프로젝트가 커지면서, 점점 더 많은 노드가 사용되고 순식간에 관리할 수 없는 지경에 이를 것입니다. 이를 해결하기 위해 고도엔진은 한 프로젝트가 몇 개의 씬으로 분리되는 것을 허락합니다. 하지만 이 방식이 다른 게임 엔진들과는 다른 식으로 사용됩니다. 사실 정말 다르니까 이 튜토리얼을 놓치지 마세요!!


재점검 : 씬은 트리 형태로 구성된 노드 모음으로, 한개의 루트 노드를 가질 수 있습니다.


../../_images/tree.png

고도에서는, 씬을 만들어 디스크에 저장할 수 있습니다. 원하는 만큼의 씬을 만들고 저장할 수 있습니다.


../../_images/instancingpre.png

그런 다음 기존 장면이나 새 씬을 편집하는 동안 다음과 같이 다른 장면을 인스턴스화할 수 있습니다.


../../_images/instancing.png

위의 그림에서 씬 B가 씬 A에 인스턴스로 추가되었습니다. 처음에는 이상하게 보이시겠지만, 이 튜토리얼을 끝내면 완전히 이해가 될 거에요.



인스턴스화, 한 걸음씩


인스턴스화를 수행하는 방법을 알아보려면 먼저 샘플 프로젝트를 다운로드하세요 :


instancing.zip


원하는 곳에 이 프로젝트의 압축을 푸세요. 그런 다음 'Import' 옵션을 사용하여 이 프로젝트를 프로젝트 관리자에 추가하세요.


../../_images/importproject.png

간단하게 프로젝트 내부로 이동하여 "engine.cfg" 파일을 여세요. 새 프로젝트가 프로젝트 목록에 나타납니다. 'Edit' 옵션을 사용하여 프로젝트를 편집하세요.


이 프로젝트는 "ball.scn"과 "container.scn" 두 씬을 포함합니다. 공은 물리학적으로 공처럼 보이는 반면, 컨테이너 씬은 멋진 모양의 충돌이 있어서 공을 그 안으로 던질 수 있습니다.


../../_images/ballscene.png

../../_images/contscene.png

컨테이너 씬을 열고, 루트 노드를 선택하세요.


../../_images/controot.png

그다음, 링크 모양의 버튼을 누르세요. 이게 인스턴스화 버튼입니다!


../../_images/continst.png

공 씬을 선택해 주세요(ball.scn), 공은 원점인 (0, 0)에서 나타납니다. 씬의 중앙으로 공을 옮겨주세요, 이렇게요 :


../../_images/continstanced.png

재생 버튼을 누르면 짠!


../../_images/playinst.png

인스턴스화된 공이 구덩이의 제일 아래로 떨어집니다.



조금만 더

한 씬에서 공 인스턴스를 더욱 더 많이 원할 수도 있습니다. 더 많은 공을 인스턴스화 하거나 복제하세요(Ctrl-D or 복제 버튼).


../../_images/instmany.png

그런 다음 씬을 다시 실행해보세요 :


../../_images/instmanyrun.png

멋지지 않나요? 이게 인스턴스가 실행되는 방식입니다.



인스턴스의 편집


공의 많은 복사본 중 하나를 선택하고 속성 편집기로 이동합니다. 공을 통통튀게 만들어보죠. Bounce 매개 변수를 찾아 1.0으로 설정합니다.


../../_images/instedit.png

회색 "revert" 버튼이 나타납니다. 이 버튼이 있으면 이 경우에 특정 값을 재정의(override)하기 위해 인스턴스화 된 씬에서 속성을 수정했다는 의미입니다. 해당 속성을 원래 씬에서 수정하더라도 사용자 지정 값은 항상 해당 속성을 덮어씁니다(overwrite). Revert(되돌리기) 버튼을 누르면 해당 속성이 씬(scene)에서 나온 원래 값으로 복원됩니다.



결론


인스턴스화는 편리해 보이지만, 눈으로 보이는 것 보다 더 많은 것이 있습니다. 다음 튜토리얼에서는 인스턴스화의 다루지 않은 나머지를 다룰 겁니다.