2009년 05월 25일
ModeNode와 ModelNodeInstance
Nebula2에는 없었는데 Nebula3에서 새롭게 추가된 개념으로 ModelNodeInstance가 있다.
같은 이름으로 ___Node와 ___NodeIntance의 쌍이 존재한다. ___Node는 TransformNode, ShapeNode, SkinShapeNode 등의 이름으로 짐작컨데 쉬이 파악이 되지만 이들 클래스 이름에 Instance가 붙은 클래스는 생소하다. 이 Instance가 붙은 클래스들은 모두 Nebula3에서 새롭게 추가된 클래스들이다.
Nebula3에서는 리소스를 위한 Node와 렌더링을 위한 Node를 분리했다. 그냥 Node는 리소스를 위한 노드, 뒤에 Instance가 붙은 노드는 렌더링을 위한 노드이다. 그래서 ShapeNode는 정적 메쉬를 위한 노드이고 ShapeNodeInstance는 읽어 들인 ShapeNode를 렌더링할 때 사용하는 노드이다.
그렇다면 왜 이렇게 두 개의 노드로 분리했을까.
이전에 nRenderContext가 Nebula3에서는 더이상 보이지 않는다. 렌더링 컨텍스트는 같은 리소스더라도 변환 정보나 머티리얼 정보 등이 다를 때 이들 정보를 저장하는 역할을 하는 클래스로 렌더링시 사용하는 클래스이다. 무슨 말이냐 하면 같은 모양의 몬스터가 세 마리가 있다고 하자. 그런데 이들 몬스터 중 두 마리는 동일하지만 나머지 한마리는 색상이 붉다. 이 경우 두 종류의 Node를 만들게 되면 노드가 필요로하는 만큼의 메모리 낭비가 발생한다. 가장 쉬우면서도 효율적인 방법은 나머지 하나의 Diffuse 색상 값을 변경하는 일이다. 렌더링 컨텍스는 이러한 처리를 위한 클래스이다. 렌더링 클래스는 이 Diffuse 색상값을 저장하고 있다가 붉은색의 몬스터를 렌더링할 때는 이 값을 설정함으로써 해당 몬스터가 붉은색으로 렌더링되도록 한다. 그래서 Nebula2에서는 nSceneSever에 노드를 추가(attach)하는 것이 아니라 렌더링 컨텍스트를 추가한다.
Nebula3에서는 이 렌더링 컨텍스트를 대신 ___NodeInstance를 사용한다. 원본 리소스의 로딩은 ___Node, 이 노드의 렌더링에는 ___NodeInstance로 구분되어 있다.
이것은 명명법에서 유추할 수 있듯이 하드웨어 인스턴싱(Hardware Instancing) 고려하여 분리한 것으로 보여진다.
# by | 2009/05/25 23:52 | Nebula3 | 트랙백 | 덧글(0)






































☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]