ROOF OF THE POSTS

- For whom he or she is not a native or does not use Korean for their primary language, translation button(coarse though) for Japanes and English are provided below the visitor location viewer right side of the page. And any comments except spam are welcome. =)

If you want to contact with me, drop an email on the following:

by kimsama | 2009/12/31 23:59 | General | 트랙백 | 덧글(5)

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 kimsama | 2009/05/25 23:52 | Nebula3 | 트랙백 | 덧글(0)

The Engine Survey:Technology Results와 Nebula3

이번에는 Nebula와 월드 에디터에 관한 이야기입니다. 아마도 Nebula 엔진에 관심 있는 분들이 가장 관심을 가지시는 내용이 아닐까라는 생각도 듭니다.

GamasutraThe Engine Survey: Technology Result을 읽다가 이 내용을 한번 언급해야겠다는 생각이 들었습니다.

일전에 Novodex와 관련한 3dsmax 플러그인 소스 코드를 찾을 수가 없다고 한 것은 바로 위의 링크에 나온 게임 월드 에디터 이야기 때문입니다. (이 이야기는 나중에 다시~)

The Engine Survey: Technology Result의 아래 부분에 보면 엔진 선택의 중요한 이유로 월드 에디터의 유무에 대해서 언급하고 있는데 글에서 이야기하고 있는 내용은 DCC 툴을 에디터로 사용할 수도 있지만 월드 에디터가 있는 것이 좋다라고 말하고 있습니다.

두 가지 방법의 비교에 흥미가 있는 분들은 Tom Forsyth의 블로그에서 "Game Editor vs DCC Ediotr"를 (꼮!) 읽어 보시길 권합니다.
(Tom Forsyth의 블로그는 위키 베이스라서 바로 링크를 걸 수가 없습니다. 부득이 해당 블로그로 이동하셔서 포스트 제목으로 찾거나 아니면  'Toolchain'의 태그를 검색해 보기 바랍니다)

자, 그럼 이제 원래 하려고 했던 Nebula 이야기로 돌아갑니다.

관심 있으신 분들은 잘 아시다시피 Nebula가 코드 레벨에서의 아키텍쳐 등 여러 가지 관점에서 상당히 훌륭한 엔진임에도 불구하고 상업적인 게임 개발의 예를 (국내에서) 찾아 보기 힘든 이유중 하나가 바로 이 월드 에디터의 부재가 아닌가 생각합니다.

RadonLabs에서 애초에 자사의 월드 에디터를 DCC 툴(마야입니다)을 사용하다 보니 인하우스 게임 에디터는 전혀 고려하지 않은거죠.(지금도 그런 이야기는 없습니다)

물론 커뮤니티에서는 이러한 필요성 때문에 다양한 시도가 있긴 했습니다...만 상당히 급진적이었다고 할까요, 결과는 안좋았습니다. 몇 가지 툴들이 시도되긴 했습니다만 상업적인 용도의 전문적인 게임 개발에 사용할 만큼 안정적이고 기능면에서도 부족함이 없는 Nebula 월드 에디터는 아직까지는 전무한 실정입니다.

그러면 RadonLabs처럼 DCC 툴을 에디터로 이용하는 것은 어떨까요. 이 경우 국내 개발사에서는 거의 3dsmax를 사용하니까 맥스를 에디터로 이용할 수 있는 방법이 필요합니다. 그래서 이번 포스팅에서는 3dsmax의 맥스 스크립트를 이용해서 맥스를 에디터로 이용할 때 유용한 한 가지를 이야기해 볼까 합니다.

월드 에디터라는 것이 사실 게임 엔티티의 배치가 가장 큰 기능이라고 할 때 맥스는 이미 이 기능이 잘 구현(^^)이 되어 있습니다. 그래서 이것을 적당히 엔진에서 읽을 수 있는 정보로 익스포트하기만 하면 되는데 이 때 가장 손쉬운 방법으로 XML이 있습니다. 게임 엔티티들의 정보를 XML로 익스포트하는 것이지요. 물론 맥스 스크립트를 사용합니다.

우선은 게임 엔티티의들 속성과 관련한 내용들을 맥스 스크립트의 custom attribute 기능을 이용해서 맥스 오브젝트들이 게임 엔티티의 속성을 가지도록 하는 작업이 필요합니다.

다음으로는 scene에서 이들의 정보를 XML로 저장하기만 하면 됩니다. 즉, 맥스 스크립트로 scene의 오브젝트들의 정보를 XML로 저장하는 유틸리티 플러그인을 하나 작성해야 하는데 이 방법이 바로 이전 포스트에서 이야기했던 http://www.melax.com/3dsmax/nxmax 의 플러그인 코드에 포함된  px_xmlutil.ms 스크립트 파일입니다.

제가  링크가 없어졌다고 이야기한 이유가 여기에 있었습니다. 그런데 링크를 찾아 주신 neojzs님 덕분에 소스 코드는 아래 링크에서 구할 수가 있답니다. ^^

http://www.feelingsoftware.com/content/view/72/109/lang,en/ (source code를 다운로드)

맥스 스크립트와 맥스의 Custom Attribute에 대한 이해가 있으면 px_xmlutil.ms의 코드를 보고 쉽고 빠르게 구현할 수 있는 내용입니다.

이 방법은 (당연하지만) Nebula에만 유효한 방법이 아니라 DCC 툴을 에디터로 이용하는 경우라면 모두 해당되는 내용입니다. MMO라면 무리가 따르는 방법이지만 캐쥬얼 게임이라면 고려해 볼만한 방법이죠. 특히 에디터 만들 시간 없을 때라면 더욱.


by kimsama | 2009/05/20 21:29 | Nebula3 | 트랙백 | 덧글(0)

AnimatorNode

code/render/models/nodes/animatornode.h, cc 파일 참조

Nebula2
에서는 애니메이션의 종류에 따라 다양한 animaotrnode 들이 존재했는데 N3에서는 이것들이 모두 AnimatorNode 하나로 통합이 되었습니다.
 

또 다른 차이점은 예전에는 이들 애니메이터 정보가 shapdenode 들과 함께 scene에 위치했는데 이제는 scene attach되지 않고 필요할 때(애니메이션하는 shapenode겠죠) 참조하도록 변경이 되었습니다.

SceneServer에 들어가면 재귀적으로 호출해야 하니 노드의 개수가 많을수록 부담스러워지죠. 그래서 아마 애니메이터노드들을 필요할 때만 호출하도록 변경한 모양입니다.



2009년 4월 버전 기준입니다.

by kimsama | 2009/05/15 18:29 | Nebula3 | 트랙백 | 덧글(0)

렌더링 노드 정렬

이전 포스트에서 버츠님의 질문에 대한 답변(?)입니다.

아래는 질문 내용입니다.

Commented by 버츠 at 2009/05/08 18:16 [삭제] [답글]
그런데 Nebula 3 에 아직 렌더링 소팅관련 내용이 아직 업데이트 안된건가요?
framebatch 쪽이랑 visResolver 쪽을 봐도 관련된 SortingMode 열거체는 있는데 딱히 적용하는 코드가 안보이네요.. 제가 못 찾는건지 ^^;; ㅎㅎ
Commented by 버츠 at 2009/05/08 18:17 [삭제] [답글]
아, Model 별로 묶어서 렌더링 하도록 되어있긴 하더라구요. 그런데 framebatch 에서 정렬 관련 정보들은 갖고 있는데 따로 적용하는 부분이 없는 거 같아서 혹시 아시면 알려주세요 ^^;;


먼저 Frame의 구성 요소들에 대해서 간단하게 이야기하면 이전의 RenderPath가 Frame으로 바뀌었는데 FrameShader, FramePass, FrameBatch, FramePostEffect로 구성되어 있습니다.

FrameShader - 전체 프레임의 렌더링을 제어. XML 파일에 제어 방법이 설명.
FramePass - 하나의 RenderTarget에 대한 처리를 위한 것으로 FrameBatch 에 대한 처리를 포함하는 모든 렌더링 처리를 포함.
FrameBatch - ModelNodeInstance들의 배치 렌더링에 대한 처리를 포함.
FramePostEffect - full screen quad에 post effect의 렌더링 처리를 포함.

이렇게 구성이 되어 있습니다.

그런데 정렬에 대한 처리가 빠져 있는 이유는 Forward Shading을 할지 아니면 Deferred Shading을 할지 결정해야지 정렬 방법도 정할텐데요, Deferred Shading으로 갈 것 같긴 한데 아직 이 부분에 대한 작업이 완료되지 않은 것 같습니다.  아래는The Brain Dump 블로그의 참고용 포스트.

Shadow Fixes


코드에 보면 광원에 대한 정렬을 위한 인터페이스도 보이는데 실제 구현은 아직이죠. 이 부분도 이슈들이 많으니 좀 더 지켜봐야 할 듯 합니다.

이전에 관련된 포스트를 한번 올렸으니 참고하시는 것도 좋을 것 같네요.

http://kimsama.egloos.com/1746231

그럼~


2009년 4월 버전 기준입니다.



by kimsama | 2009/05/13 22:41 | Nebula3 | 트랙백 | 덧글(0)

Novodex 3dsmax plugin

예전에 http://www.melax.com/3dsmax/nxmax 에 있던 melax씨의 플러그인은 어디론가 사라졌군요.

melax씨 홈페이지에 봐도 보이질 않습니다. nVidia로 physx가 인수합병 되면서 모종의 조치가 있었던 것일까요...

nVidia에서도 플러그인을 제공하니까 physx를 사용하는데에는 문제가 없습니다만 그 소스 코드 안에 physX의 익스포트 용도 말고 다른 용도로 응용하기에 괜찮은 몇몇 모듈들이 있는데 말입니다...

by kimsama | 2009/05/06 00:54 | Development | 트랙백 | 핑백(1) | 덧글(2)

◀ 이전 페이지다음 페이지 ▶