Feed View | East Agent's Blog

East Agent's Blog

All about productivity - since 2003

Subscribe | Retrun to feeds | Users subscribed: 1 | Last Updated: Apr 24 2009, 10:18:16

Nebula3 2009년 4월 버전

24 Apr 2009 09:02:50 | kimsama | Nebula3,nebula3 | Comments
공개되었습니다.

http://flohofwoe.blogspot.com/2009/04/n3-sdk-apr-2009-download.html


변경 사항 및 Anatomy는 이후 차차...


tag :

티스토리

23 Apr 2009 12:59:30 | kimsama | General | Comments
티스토리는 초대장인지 초대권인지가 있어야지 블로그 개설이 가능하군요.

하나 적선해주실 분 계시면 고맙겠습니다. (굽신)

^^;;



경기 불황

23 Apr 2009 12:57:42 | kimsama | General,롱팬티 | Comments
최근의 경기 불황을 실감케하는 사건 하나.

며칠 전 점심 시간에 일어난 일이다.

팀원들과 점심 먹으러 가는데 앞에서 걸어 오는 두 청춘 남녀가 있었다.

앗, 그런데 이 여자분 치마가 짧다 못해 숫제 팬티 아래 부분이 그냥 보이는게 아닌가. -_-

아니, 치마가 짧다는 표현보다는 팬티가 좀 내려왔다는 표현이 더 적합할 듯.

경기 불황에는 미니 스커트가 유행이라더만...

작금의 불황이 어느 정도인지 적나라하게 보여주는 사건이었다. ㅋ

(인증샷은 없음 -_-)



ps.
같이 목격한 두 총각 팀원들.
식사하면서 검정색이다 흰색이다 왈가왈부 하던데, 치마가 검정색이고 팬티는 베이색에 빨간색 꽃무늬였잖니
그리고, 레이스는 없었다. ㅡ,.ㅡ




tag :

Nebula2 3DS Max Toolkit Update

15 Apr 2009 13:13:20 | kimsama | Nebula Device,nebula2,3dsmax | Comments
Nebula2 3dsmax Toolkit의 새롭게 업데이트된 내용입니다. 또 새로운 N3 업데이트도 곧 있다고 합니다.(오늘밤!) 이번에는 n2converter도 포함된다고 하니 n3 파일 포맷의 내용이 드러나면 Nebula3 3dsmax Toolkit의 작업도 시작할 수 있을 듯 합니다.

아래는 새로 업데이트된 내용입니다. 이제 ncharacter3skinanimator를 익스포트할 수 있어 개별 애니메이션 데이터들을 읽어 들여서 전체 애니메이션을 구성할 수가 있습니다. 작업할 때에는 이쪽이 훨씬 편리하죠.
  • Now, it can solely export animation data file(.nax2 or .nanim2) without .n2 or mesh files.
  • Changed to export nskinanimator first so it locates before any ntransformnode or its derived node in .n2 file.
  • It now supports ncharacter3skinanimator (but now ncharacter3skinshapenode yet)
  • Fixed a few minor bugs around here and there.
문서는 곧 업데이트할 예정입니다.


tag : ,

Nebula Device2 게임엔진 교육 과정

12 Apr 2009 07:07:48 | kimsama | Nebula Device,nebula2,교육 | Comments
작년에 이어 올해에도 단기간의 Nebula Device2 직무교육이 있습니다. 게임 진흥원 산하 게임 아카데미에서 진행하는 것이라 예산 자체가 국고로 지원하기 때문에 교육비는 교재, 간식비 등의 실비 정도만 받는 것으로 알고 있습니다. (그래서 수강 인원도 20명 이하로 제한을 두고 있다고 합니다)

올해가 아마 Nebula2의 직무 교육이 마지막이 될 듯 합니다. 이런 저런 이유로 게임아카데미가 목동으로 이전하게 됨에 따라(그러기에 선거들 좀 하시지~) 이후의 직무교육 자체가 불투명하기 때문입니다. 이런 이유로 작년에는 굳이 이야기하지 않았습니다만 올해에는 블로그에 올려 봅니다. 작년에 몰라서 못오셨다고 아쉬움을 이야기하신 분들도 몇 분 계셨고 마지막이니 만큼 관심 있으신 분들은 한분이라도 더 오시면 좋겠다는 의미에서 낯뜨거운(?) 광고 문구마저 x팔림을 무릅쓰고 올립니다.

평소에 Nebula Device2에 대해서 관심이 많으셨던 분들 중 이것저것 궁금하신 내용이 많으셨던 분들은 이번 기회를 이용하면 좋겠습니다. ㅡㅡ;

ps. 그런 분은 없으시겠지만 교육에 대한 문의는 이 블로그에 올려지 마시길~ -_-;

국내 최고의 게임분야 직무교육과정을 개발, 운영하고 있는 게임아카데미는

게임업계 경쟁력 강화를 위해 다음과 같이 직무교육과정 교육생을 모집하고 있습니다.

많은 신청 부탁드립니다.

'08년도 최고의 인기과정, 최고의 교육만족도,
국내 최고의 엔진전문가 저자 직강!!!

1. 과정명 : 오픈소스게임엔진교육과정 - Nebula Device2
(온오프라인 혼합과정)

2. 교육기간
- 오프라인 : 2009. 4. 17~4. 29 (월, 수, 금)
- 온라인 : 2009. 4. 17~5. 17 (1개월)

3. 교육비 : 20만원

4. 결재방법 : 카드 결재 및 현금 계좌이체
(카드결제는 직무과정 홈페이지에서 결재)

5. 할인 : 1사 2인이상 지원시 교육비 10% 할인

6. 특전 : 교재 제공, 저녁간식(샌드위치+음료), 다과제공,
게임아카데미 발간도서 최대 80%할인 제공
온라인과정 무료제공 (오픈소스게임엔진 온라인과정)

7. 자세한 사항은 게임아카데미 홈페이지(직무과정) 안내를 참고하시고 신청해주시기 바랍니다.

8. 문의 : 02-540-8194 (장광진 대리) / kjjang@kogia.or.kr


http://www.gameacademy.or.kr/






tag : ,

Finder에서 SVN을 이용하는 방법

07 Apr 2009 15:17:59 | kimsama | iPhone | Comments
이제껏 OS X에서의 svn은 SmartSVN을 사용하고 있었는데 외부 repository에서 check-out할 때에는 별반 불편함을 느끼지 못하다 로컬에 새로운 repository를 만들고 import, check-in 하려고 보니 숫제 로컬에서는 import 조차 되는지 의심스럽다.

임시 방편으로 터미널로 땜방은 했는데 여간 불편한게 아니다. TortoiseSVN에 길들여진 탓이리라.

Finder가 Explore보다 못한 것이 하나 없는데 어디 그만한 쉘이 없을까나.

결국 구글님이 알려 준 쉘이 바로 SCPlugin

윈도우즈 환경의 TortoiseSVN보다는 약간 떨어지긴 하지만 거의 비슷한 사용자 환경을 제공한다.



Objective-C에서 C함수의 함출

28 Mar 2009 23:17:38 | kimsama | iPhone,Objective-C | Comments
Objective-C는 C를 완전히 포함하는 슈퍼셋이다. 그러므로 Objective-C 컴파일러를 사용하면 언어상의 차이나 다른 조건 없이 C에서 Objective-C의 함수를 호출할 수 있다. 반대로 Objective-C에서 C함수를 호출하는 것도 마찬가지로 가능하다.


void c_function(TestObject* anObject)
{
[anObject objec_method];
}

[]은 objective-c에서의 함수 호출 구문. (objective-c에서는 이를 메시지의 전달이라고 이야기한다.)

이는 C++에도 해당된다. 즉, C++에서도 Objective-C++을 컴파일러로 사용하면 두 언어간의 호출을 자연스럽게 처리할 수 있다.

C++을 Objective-C와 함께 사용하는 방법에 대해서는 이 레퍼런스'Using C++ with Objective-C'에 잘 나와 있다.

비슷한 이슈로 C/C++의 포인터가 아니라 객체의 인스턴스를 Objective-C에서 사용하는 방법에 대한 문제가 있는데 이것은 OS X 10.4 이상에서 Objective-C 4.0 이상의 버전을 사용하고 컴파일러에 GCC_OBJC_CALL_CXX_CDTORS 플래그를 설정하면 가능하다.


@interface MyCppStringWrapper : NSMutableString {
std::string s;
}
@end

자세한 내용은 여기 링크를 참조


tag :

Anatomy of Nebula3 - Loading Custom Model

28 Mar 2009 00:37:42 | kimsama | Nebula3,nebula3 | Comments

개요


Nebula3에서는 현재 .n2의 Nebula2 리소스 파일 형태만을 지원하고 있는데, 이 글에서는 Nebula3를 확장하기 위해서 새로운사용자 정의 리소스 파일(메쉬, 애니메이션, 등을 위한 모델 파일)을 추가하는 방법에 대해서 간단하게 살펴 본다.

StreamModelLoader


StreamReader는 ResourceLoader 클래스의 서브 클래스이며 리소스 파일을 스트리밍을 통해서 읽어 들이는 처리를 한다. 읽어 들일때에는 비동기적인 방법으로 읽어 들인다. 아래 소스에서 보듯이StreamModelLoader::SetupModelFromStream 함수에서 리소스 파일의 확장자에 따라 적절한ModelReader를 생성하고 생성한 ModelReader에서는 리소스 파일을 파싱해서 실제로 읽어 들이는 처리를 한다.


bool
StreamModelLoader::SetupModelFromStream(const Ptr& stream)
{
n_assert(stream.isvalid());
n_assert(stream->CanBeMapped());

// first decide what ModelReader to use
bool isLegacyFile = false;
String fileExt = this->resource->GetResourceId().Value().GetFileExtension();
Ptr modelReader;
if (fileExt == 'n3')
{
// Nebula3 binary format
modelReader = (ModelReader*) BinaryModelReader::Create();
}
else if (fileExt == 'xml')
{
// Nebula3 XML format
modelReader = (ModelReader*) XmlModelReader::Create();
}
else if (fileExt == 'n2')
{
// legacy Nebula2 binary format
modelReader = (ModelReader*) N2ModelReader::Create();
modelReader->SetModelResId(this->resource->GetResourceId());
isLegacyFile = true;
}
else
{
n_error('StreamModelLoader: unrecognized file extension '%s' in '%s'!',
fileExt.AsCharPtr(), this->resource->GetResourceId().Value().AsCharPtr());
return false;
}


메쉬 데이터


Direct3D9::D3D9StreamMeshLoader를 상속하는 CoreGraphics::StreamMeshLoader 클래스에서는 메쉬 데이터 메쉬 데이터를 읽어 들여 정점버퍼와 인덱스 버퍼를 생성하는 일을 담당한다.D3D9StreamMeshLoader::SetupResourceFromStream() 에서는 리소스의 리소스 아이디의 파일확장자를 검사해서 해당하는 메쉬 데이터 포맷을 읽어 들이는 함수를 호출한다. 리소스 파일의 확장자가 '.nvx2'인 경우에SetupMeshFromNvx2() 함수를 호출한다.

bool
D3D9StreamMeshLoader::SetupResourceFromStream(const Ptr& stream)
{
n_assert(stream.isvalid());
n_assert(this->resource.isvalid());
#if NEBULA3_LEGACY_SUPPORT
if (this->resource->GetResourceId().Value().GetFileExtension() == 'nvx2')
{
return this->SetupMeshFromNvx2(stream);
}
else
#endif
if (this->resource->GetResourceId().Value().GetFileExtension() == 'nvx3')
{
return this->SetupMeshFromNvx3(stream);
}
else if (this->resource->GetResourceId().Value().GetFileExtension() == 'n3d3')
{
return this->SetupMeshFromN3d3(stream);
}
else
{
n_error('D3D9StreamMeshLoader::SetupMeshFromStream(): unrecognized fileextension in '%s'\n',this->resource->GetResourceId().Value().AsCharPtr());
return false;
}
}


SetupMeshFromNvx2에서는 Legacy::Nvx2StreamReader를 통해서 .nvx2 파일을 읽어 들이고 이것을 정점 버퍼와 인덱스 버퍼에 연결한다.


bool
D3D9StreamMeshLoader::SetupMeshFromNvx2(const Ptr& stream)
{
n_assert(stream.isvalid());
Ptr nvx2Reader = Legacy::Nvx2StreamReader::Create();
nvx2Reader->SetStream(stream);
if (nvx2Reader->Open())
{
const Ptr& res = this->resource.downcast();
n_assert(!res->IsLoaded());
res->SetVertexBuffer(nvx2Reader->GetVertexBuffer().downcast());
res->SetIndexBuffer(nvx2Reader->GetIndexBuffer().downcast());
res->SetPrimitiveGroups(nvx2Reader->GetPrimitiveGroups());
nvx2Reader->Close();
return true;
}
return false;
}


애니메이션 데이터


애니메이션 데이터도 메쉬 데이터와 크게 다르지 않다. 차이점이라고 하면 메쉬 데이터는 하드웨어쪽의 그래픽 디바이스드라이버(win32에서는 D3D)와 연결되어야 하지만 애니메이션 데이터는 그렇지 않다는 것과 최근의 애니메이션 처리와 관련한가장 중요한 이슈는 스트리밍이라는 점이다. 다시 말하면 애니메이션 데이터의 처리는 스트리밍에 훨씬 더 민감하다는 것이다.

현재(2009.03) 이 글을 쓰는 시점에서 Nebula3의 최신 버전은 2008년. Sep. 버전(9월 버전)인데 이 버전에서는이전 Nebula2의 애니메이션 데이터 파일인 .nax2 파일 포맷 지원이 생략되어 있다. 이는 이 후 버전에서CoreAnimation 모듈에서 기능이 강화된 애니메이션 모듈을 지원하기 위해서라고 한다. 대신에 2008. Feb. (2월)버전에서는 .nax2를 지원하는 코드를 살펴 볼 수 있다. 애니메이션 데이터의 처리 부분이 궁금하면 2008. Feb. 버전을보기 바란다.

결론


이상에서 살펴 본 클래스와 이들의 멤버 함수를 이해하면 원하는 사용자 정의 파일 포맷을 Nebula3에 쉽게 포팅해서 확장할 수 있다.

tag :

nebula2 3dsmax toolkit - 0.9

27 Mar 2009 12:25:50 | kimsama | Nebula Device,nebula2 | Comments
nmaxtoolbox version 0.9

- Modified to find 'nmaxtoolbox.ini' file in the '$3dsmax/scripts/nebula2' if it fails to read the file in the '$3dsmax/scripts/plugcfg' directory. Under Vista, the 'plugcfg' directory is located under different directory.

- Now it does not use custom attribute's vertex option. If an artist specify any unknown custom attribute which does not contain vertex option, the plug-in only exports vertex position.


ps. 한참만에 업데이트해 봅니다. ^^


tag :

Anatomy of Nebula3 - Terms

24 Mar 2009 07:24:55 | kimsama | Nebula3,nebula3 | Comments

Anatomy of Nebula3 - Terms


Nebula3는 Nebula2에 비해서 훨씬 더 많은 클래스들로 구성이 되어 있다. (하지만 실제 코드의 라인수는 훨씬 적다.) 또 새로운 클래스들이 많기 때문에 다소 생소한 부분도 많다. 이들 클래스들 간의 관계를 잘 살펴서 이해하면 전체적인 구조를 쉽게 파악할 수있다. 이 글에서는 이들 클래스들 중에서 비슷한 이름으로 헷갈리기 쉽거나 파악이 모호한 것들의 관계에 대해서 설명한다.


1. Render Layer

여기에서는 Nebula3의 세가지 레이어 중에서 Render Layer에 속하는 클래스들에 대해서 설명한다.

DisplayDevice와 RenderDevice의 구분


디스플레이 디바이스는 윈도우의 창, 렌더 디바이스는 렌더링 드라이버와 관련한 것으로 win32에서는 Direct3D 디바이스를 캡슐화한 것이다. 렌더 디바이스는 자신의 백버퍼의 내요을 디스플레이 디바이스에 출력하는 처리를 한다.

Stage와 View의 구분


stage는 전체 장면을 구성하는 모든 엔티티들을 포함하는 것으로 무대의 의미로 이해할 수 있다. view는 현재 카메라로 컬링된 장면을포함한다. 즉, view는 stage에서 컬링을 통해서 현재 카메라를 통해서 보이는 엔티티들, 다시 이야기하면 렌더링해야 하는객체들을 포함한다.

Model과 Resource의 구분

Model은 Resouce 클래스를 상속하는 클래스로 Resoucre의 하위 개념이다. 즉, 리소스의 하나로 생각할 수 있는데 리소스중에서도 렌더링과 관련한 리소스가 바로 Model이다. Model은 렌더링할 객체를 위한 템플릿으로 사용된다.

namespace Models
{
class Model : public Resources::Resource
{
...
};
}


Model과 ModelNode의 구분


Model은 렌더링할 객체를 위한 템플릿으로 파일 등으로 리소스를 읽으면 하나 이상의 ModelNode를 가진다. 파일로부터 리소스를읽어 들였다고 바로 렌더링하는 것이 아니라 Model은 ModelInstance를 생성하고 생성한 ModelInstance를 렌더링에 사용한다.

ModelNode와 같이 -Node의 이름을 가지는 클래스들은 장면 구성을 위한 변환(Transform) 정보를 가지며, 장면 처리를 위해서 계층(Hierarchy)을 구성할 수 있다.

ModelNode과 ModelNodeIntance의 구분


Nebula에서의 Node는 장면(Scene) 트리를 구성하는 트리의 노드를 의미한다. 즉, 렌더링과 관련되는 것이다.

ModelNode - 리소스의 관점, 직접 렌더링하지 않는다. 읽어 들인 Node를 렌더링하기 위해서는 Instance를 생성해야 한다.

읽어 들인 Model을 렌더링하기 위해서는 적어도 하나 이상의 ModelInstance가 필요한데 이 ModelInstance는 Model 클래스 객체가 생성한다.


Ptr modelInstance = model->CreateInstance();


ModelNodeInstance는 렌더링 인스턴스로 매 프레임마다 갱신해야 하는 처리는 멤버 함수 Update() 함수 내에서 처리한다.

namespace Model
{
class ModelNodeInstance : : public Core::RefCounted
{
...
// 매 프레임마다 호출된다.
virtual void Update();
...
};
}



(계속...)


tag :

iPhone and Bone Character Animation

22 Mar 2009 00:54:52 | kimsama | iPhone,iphone | Comments
아이폰 디바이스에서의 본(bone)을 이용한 캐릭터 사용에 대한 내용입니다.

해당 이슈는 일전에 Unity 포럼에서 제일 처음 발견했습니다만 이것이 디바이스의 태생적 한계에 기인하는 문제인지 아니면 Unity라는 소프트웨어적 문제인지를 명확하게 구분하기 힘들어서 관망하던 차에 보다 자세한 언급이 있어 포스팅합니다.


Not one butmultiple bone skeletons running with physic are really heavy for thedevice, every vertices have to be recalculated every frame based onquaternion & its conversion + physic and weight on every bone... Itis definitely possible run bone animation on the device, but if youstart having multiple characters it will slow things down, its a bitlike soft body, it work but it takes too much juice as soon as youstart using them within a game scenario.

For MD2, I test a sceneof 15k with a ground as triangles mesh and 12 MD2 models running and Iget 40+ fps on the device, the hybrid approach that Im using is basedon the same interpolation mechanism that I implement in the MD2 loader,but it is using VBO so it is even faster.

Hope this answer your question,

Cheers,
원문: http://sio2interactive.forumotion.net/sio2-engine-f3/max-md2-vs-max-baked-bone-animation-per-scene-t373.htm

15000여개의 (삼각형) 폴리곤으로 이루어진 바닥과 12개의 MD2 모델을 사용해서 40 프레임 이상의 결과를 얻었다고 나와 있습니다. MD2는 Quake2의 포맷인데 제 기억이 맞다면 대강 캐릭터들이 700~800개의 폴리곤을 사용했던 것으로 생각됩니다. 이 정도면 iPhone의 대강의 스펙이 보이시죠?

Hero of Sparta의 캐릭터도 본 애니메이션으로는 보이지 않았는데 아마도 위와 같은 이유가 아닐까 생각됩니다.

그렇다면 MD2 포맷뿐만 아니라 MD3도 고려 대상이 됩니다. 캐릭터가 세 부분으로 구성된 것만 제외하면 MD2와 MD3가 프레임당 정점 위치의 변경으로 애니메이션을 구현한다는 기본 원리는 동일하니까요.

MD2, MD3의 포맷 자체는 공개도 되어 있지만 상업적으로 사용해도 전혀 문제가 없으며, 또 이 포맷의 로딩과 렌더링, 모델, 툴(익스포터, 임포터 등)은 도처에 널려 있으니 어렵지 않게 구글링하실 수가 있을 것입니다.

엔진에서는 본 애니메이션과 정점 애니메이션의 어느쪽이던 크게 문제는 없을지도 모들지만 아트 파이프라인에서는 두 방법의 차이로 인해 다소 문제가 있을 소지도 있겠군요.


tag :

Unity3D Windows

19 Mar 2009 02:17:24 | kimsama | Development | Comments
Unity3D 2.5 윈도우즈 버전이 나왔습니다. 그 동안 관심은 있었는데 Mac이 없어서 그림의 떡이었던 분들은 한번 트라이해 보시길~

저도 지금 막 설치했습니다. ^^

Unity3D 2.5 다운로드 (이메일 주소를 기입하고 windows 버전을 다운 받으면 됩니다)

ShaderX 인세

18 Mar 2009 02:20:17 | kimsama | General | Comments
이 맘때면 ShaderX의 인세가 도착합니다. 올 해에도 어김없이 우편이 왔습니다만... $19.45 군요. ㅡㅡ;

$25 미만의 금액은 수표가 발행 되지 않기 때문에 올해 인세는 그냥 떡 사먹은 셈 쳐야 겠습니다. 쩝.

내년에도 그냥 우편물만 받을 가능성이 거의 100%일듯 한데 말입니다....

그렇게 보면 딱 두 해 정도 약발이 있다고 생각해야 겠군요. ㅎ


아키텍트

18 Mar 2009 02:11:51 | kimsama | Development,Nebula | Comments
류한석 소장님의 블로그에 좋은 글이 올라 왔네요.


아키텍트의 자질을 얘기하면서는 “지혜가 없는 탁월함은 의미가 없다, 1)복잡성을 단순성으로 만드는 것이 핵심이다, 2)‘어떻게’가아니라 ‘왜’라는 질문이 중요하다, 감동이 액션을 만들고 이성이 결과를 만든다, 팀원들과 MBTI 검사를 해보자(저는 애니어그램검사를 추천했음)” 등의 얘기도 했고요. 어쨌든 기술, 철학, 커뮤니케이션 스킬 등 다양한 내용을 얘기하고 있습니다.


1)과 2)에 대해서는 오픈 소스 프로젝트 때문에 많이 공감하는 부분입니다.

Nebula Device는 1)에 대한 내용은 엔진 자체가 보여주는 것이라서 쉽게 알 수 있는 부분이지만 2)의 경우에는 겉으로 드러나지 않아 쉬이 알 수 있는 부분은 아닌 것 같습니다. 어려움을 토로하시는 분들은 아마도 2)에 대한 부분이겠지요.

이 블로그도 2)에 대한 나침반 역할이 목적인데 아직도 부족함을 많이 느낍니다.

tag :

Nebula2 - 캐릭터 애니메이션 워크 플로우

15 Mar 2009 06:11:02 | kimsama | Nebula Device,nebula | Comments
이전 포스팅에서 엔진 및 미들웨어 별 캐릭터 워크 플로우에 대해서 이야기한 적이 있습니다.

Nebula2에서는 하나의 애니메이션 파일에 캐릭터의 모든 애니메이션들이 포함되어 있어야 하므로 개발시 새로운 애니메이션 등이 추가될 때 번거로운 점이 있다고 언급했는데 최근에 소스 코드를 보다고 이미 그러한 부분에 대한 코드가 있다는 것을 발견했습니다. 코드는 업데이트 되었지만 부실한(?) 문서와 관련 샘플이 없는 관계로 눈치채지 못했던 것이지요.

Nebula2에서는 nSkinAnimator 대신 nCharacter3Animator 를 이용하면 애니메이션 파일들을 순차적으로 로딩하면서 병합하여 사용할 수 있습니다. 즉, 작업은 개별 애니메이션 파일이 수정되거나 추가될 때마다 지정된 폴더 내로 애니메이션 파일만 추가하면 되며, 엔진에서는 실제로 nCharacter3Animator의 애니메이션을 읽어 들일 때, 해당 폴더의 모든 애니메이션들을 차례로 읽어 들이면서 병합해서 새로운 애니메이션 데이터를 생성합니다. 나머지는 기존의 nSkinAnimator 와 동일하며 차이가 없습니다.

실제로 nCharacter3SkinAnimator::LoadResources() 함수를 살펴 보면 nCombinedAnimation 클래스로 메모리의 애니메이션 파일 객체들을 병합하는 코드를 볼 수 있습니다.

그런데 애니메이션 데이터의 용량이 큰 경우에는 아무래도 이런 방법으로는 처리가 힘듭니다. 이 경우에는 좀 더 지능적인 스트리밍이 필요한데, Nebula2에서의 리소스 관리는 스트리밍 부분은 지원이 약하죠. (Nebula3에서는 모든 리소스에 대한 스트리밍 지원이 기본적으로 지원됩니다)

nCharacter2SkinAnimator 의 경우 현재 3dsmax 플러그인에서는 지원하고 있지 않습니다만 회사 일도 있고 하니 조만간 업데이트가 이루어지리라 생각합니다. ^^




tag :

Best Fit

15 Mar 2009 05:20:16 | kimsama | Development | Comments

John Ratcliff's Best Fit code

John Ratcliff씨가 자신의 블로그에 충돌 볼륨 계산에 유용하게 사용할 수 있는 볼륨 계산 코드를 올려 놓았습니다.

Best Fit이라는 제목에 걸맞는 멋진 사진과 함께 말입니다. ^^


월드 에디터 등에서 게임 asset들을 임포팅할 때 그래픽 데이터를 임포팅한 다후에 충돌 볼륨을 위한 다른 설정이 필요한 경우가 많은데 Best Fit 루틴 등으로 기본적인 충돌 볼륨을 자동으로 계산해서 바로 시뮬레이션할 수 있도록 하면 편리하겠죠.

망갈로도 두 asset들의 설정이 따로 분리가 되어 있는데 사실 프로그래머 입장에서는 꽤나 번거로운 일입니다. 게임의 polishing 단계에서는 최적화된 충돌 볼륨을 따로 사용해야 하겠지만 일반적인 게임 플레이 코드를 작성하는데에는 러프한 충돌 볼륨으로도 충분합니다. 그런데도 이런 장치가 없으면 충돌 볼륨의 설정 등에 시간을 뺏기게 되는데 의외로 많은 그 시간이 만만치 않습니다. 게다가 이런류의 작업은 짜증을 동반한 스트레스도 함께 유발하죠.

ps. 이 분은 포스팅시 반드시 이미지를 하나씩 첨부하는데요, 간간히 포스팅의 이미지를 보면 굉장한 센스쟁이십니다. ㅋ


Unity vs Shiva

14 Mar 2009 23:49:02 | kimsama | iPhone,iphone,unity3d | Comments

일전에 iPhone 개발 툴과 관련한 포스팅에서 Unity3D를 치켜 세운 적이 있었는데, 최근에 unity 포럼에도 Shiva와 Unity의 비교에 대한 글이 올라왔습니다. 마지막에 Unity의 CTO인 Joachim Ante씨의 답변은 개인적인 견해와도 비슷한데다 참고할만한 중요한 내용도 보입니다.


Going beyond the surface I think there are some fairly obvious and big glaring issues with shiva.

1. No previewing like the iPhone Remote, combined with a complicated publishing process that involves moving files manually and doing several manual steps to upload to the iPhone doesn't seem like a workflow usable in a real production environment

2. Performance wise using an interpreted language like lua is quite frankly suicide on a device like the iPhone. Unity's AOT compiled scripting is around 10-20x faster than an interpreted language like LUA.

3. I doubt that they have the resources to optimize the graphics rendering as much as we did with Unity iPhone. We have 2 engineers working fulltime on optimizing Unity iPhone. Down to writing ASM code for the ARM vector unit to accelerate graphics rendering. Looking at how they are staffed they have zero people who are purely dedicated to optimizing for the iPhone.

4. I think it's easily reflected in that no one has published iPhone games with complex game code using shiva. Or really any kind of high quality content.

There is more than that, but those seem to be the big ticket show stopper items.
_________________
Joachim Ante

이전 포스팅에서 unity에 가장 후한 점수를 준 것은 위의 답변 중에서 1번 항목이 주된 이유였습니다. 저도 unity의 샘플 몇 개를 빌드해서 제 아이팟에 넣어 봤는데 아주 쉽더군요. 제가 Xcode에서 'Hello, Wolrd' 만들어서 넣을 때와 거의 비슷한 수준입니다.

2번의 경우 unity는 커스터마이징한 Mono를 사용하는 것으로 보이는데요, 이 쪽이 루아같은 스크립트 언어와 비교하면 확실히 빠르다는 것은 알고 있었지만 어느 정도 차이가 나는지, 또 그 차이가 핸드헬드 기기에서는 어떤 영향을 미치는지에 대해서는 잘 몰랐습니다만 Ante씨의 이야기는 자살할만한 수준이라는 거군요. ^^
iphone에서의 루아 사용에 대한 이야기는 oolong 엔진 메일링 리스트에도 올라 온 내용인데요, 생각나는 내용은 루아 같은 스크립트 언어를 사용하되 패킹 등을 통해서 내부에 감추어라는 이야기가 나와서 은연 중에 큰 무리 없이 사용할 수 있다로 인식된 것 같습니다만 위의 내용이 사실이라면 고려 대상이 아니겠군요.

3,4번도 사실 상업용 개발에는 매우 중요한 내용입니다. 3번의 경우에는 서포트 측면에서, 4번은 레퍼런스 게임의 측면에서 미들웨어나 툴을 평가할 때 중요한 항목들이죠. 그런데 3번은 어떻게 알았을까요? ^^



tag : ,

Reflection: from Script side to Tool's UI

15 Feb 2009 13:58:48 | kimsama | Development,unity3d,reflection | Comments
이번에는 리플렉션과 관련해서 스크립트 코드를 리플렉션을 이용하여 툴의 UI에 반영시키는 예에 관한 이야기입니다.

http://unity3d.com/support/documentation/Manual/Scripting.html


// 스크립트의 변수들은 자동으로 UI에 반영된다.
var speed = 5.0;

function Update () {
transform.Rotate(0, speed*Time.deltaTime, 0);
}

스크립트에서 변수를 발견하면 아래와 같이 툴의 UI에도 자동으로 반영이 됩니다.



위의 스크립트는 JavaScript이지만 단순히 자바스크립트를 엔진과 바인딩해서는 이러한 기능을 얻을 수는 없습니다. JavaScript의 인터프리터쪽을 손을 봤다는 이야기겠지요.

스크립트와 관련한 다른 이야기를 하자면 스크립트쪽은 간단하게 사용해 보니 컴파일 오류의 경우 해당 오류 라인 번호가 어느 객체인지를 매칭시켜서 보여 주므로 오류난 객체를 찾는 것은 어렵지 않습니다만 디버깅 기능이 없는 것은 좀 아쉽군요. (사실 이런 기능이 있는 엔진도 드물긴 합니다. 언리얼 스크립트가 외부 스크립트 IDE를 사용하면 Visual Studio와 유사한 디버깅 툴을 사용할 수 있다고 들었고, 또 Torque 엔진의 경우에도 브레이크 포인트 기능 등을 제공하는 몇 가지 스크립트 에디터가 유료, 무료 버전으로 있습니다. In-house 툴로는 N사의 팀장님-지금은 이사님-이 만든 엔진이 Lua를 엔진 툴에서 콜스택을 볼 수 있도록 만든 것이 기억납니다. 그게 몇년 전이었으니 대단하죠. 아, 선릉에 있는 N사가 아니라 분당에 있는 N사입니다. ㅋ)

아키텍처 관점에서 본 다면 Nebula2의 망갈로 게임 프레임워크가 C++이라면 Unity의 경우 스크립트 기반이라는 것이 차이점인데 기본적인 개념은 이란성 쌍둥이 처럼 서로 닮았습니다. 그래서 개인적으로는 이해가 쉬운 것도 마음에 듭니다.



tag : ,

GameTech 2009

12 Feb 2009 01:05:47 | kimsama | General,GameTech2009 | Comments
게임테크 2009 후기

2월 10일 화요일, 학동 건설회관에서 있었던 게임 엔진 및 미들웨어 관련한 컨퍼런스였습니다. 이미 몇 분이 올린 것과 마찬가지로 행사 진행이 상당히 저질스러웠기 때문에 많이들 실망스러운 말씀들을 하셨죠.

우선 광고야 짐작했던 바라서 크게 놀라지(^^;)는 않았습니다.

첫 번째는 QA 시간의 질문 내용입니다. 오신 분들이 또 개인적으로 관심이 많아서 질문들도 많이들 준비해 오셨던 듯 한데, 그런데 강연 직후 개별 기술적인 이슈에 대한 다소 테크니컬한 질문들은 삼가했으면 하는 바램입니다. 특히 크라이엔진 강연 직후 이 부류의 질문들이 많았는데요, 참석자들이 모두 엔지니어들만 오시는 것은 아니기 때문에 가능한 이런 질문들은 휴식 시간이나 개인적으로 질문하시는 것이 좋지요. 즉, 질문의 내용에 따라 질문자도 다른 참석자들과 쉽게 공감하고 어필할 수 있는 질문들을 하는 것이 좋다고 생각합니다. (이 부분은 사실 이어지는 내용에 비하면 애교 수준입니다.) 그런데 말입니다. 이렇게 하려면 적어도 행사 준비 관계자분들이 이런 식의 미팅이 가능하도록 행사를 준비하셔야 하는데 이 점에서는 낙제 수준이었습니다. 중간에 그것도 오후에 고작 티타임이라고 해서 캔 음료 몇개랑 과자 몇개 두고 좁은 장소에서 북적거리며 스탠딩해서 몇분 안되는 시간 동안 (쳐)드시라고 하시면 어디서 어떻게 교류가 이루어지겠습니까.

두 번째는 행사 진행의 미숙함입니다. Umbra 발표때 강연자의 맥북(아마 프로일겁니다. 바로 옆자리라서 ㅋ)이 제대로 작동하지 않아서 중간에 행사가 끊긴 적이 있었는데 이때 행사 요원이 무대에 올라갔지만 중간에 끊질 못해서 서성였던 적이 있습니다. 보기에 좋지 않죠. 앞쪽 요원이 손짓을 해서 잠시 말을 멈춘다던가 사회자가 양해를 구하고 살짝 끼어드는 방법도 있습니다. 아쉬움이 많는 부분이었습니다. 또 행사장은 어떻게 된 일인지 강연 도중에 마이크가 다른 방과 혼선이 되었는지 하나, 둘, 셋이라는 마이크 테스트음이 믹싱(?)되는 웃지 못할 사건도 있었죠. 강연자분의 그 당황스러운 모습, 물론 윤정님의 위치에서는 보기 힘들지 모르겠지만 VIP석 바로 옆에 앉은 저는 낯이 뜨거워서 찜질방이었습니다. 쩝.

그리고 오후에 겜브리오 강연할 때 쯤에는 일부 강연자들은 자리에 없었죠. 뜬거죠. 오후에 다른 행사가 없으니 일어서는게 당연합니다. 행사에 아예 강연자와 참석자들간의 교류를 위한 시간은 고려가 안되어 있다는 사실이 여기서도 드러납니다.

사실 돈 내고 가신 분들은 속 좀 많이 쓰리시겠구나라는 생각이 절로 들게 하는 행사이긴 했습니다. (윤정님 블로그에서 밝힌 바와 같이 점심과 기념품면에서도 빵점입니다)

그냥 괄호처리만 하고 넘어가려고 했는데 기념품 이야기 나왔으니 한번 읊어 보겠습니다. 이런 류의 컨퍼런스에서는 기념품 및 경품 내용을 보면 참가자들을 어떻게 생각하는지 단박에 알 수가 있습니다. 예전 96년의 마이크로 소프트의 컨퍼런스의 경우 그 당시 가격으로 무려 20여만원이나 하는 엄청난 고가의 컨퍼런스가 있었습니다. 장소는 롯데호텔이었습니다. 이제는 없어졌지만 WinHEC이라는 행사였는데요, DirectX가 공식적으로 국내에 소개되는 행사이기도 해서 참석을 했더랍니다. 아침부터 저녁까지 이어지는 장시간의 컨퍼런스였는데요, 롯데 호텔 소공동에서 빛을 차단하고 발 소리라도 들릴까 카펫이 깔린 장소에서 진행이 되었습니다. 점심 시간은 행사장 바로 앞에 스테이크가 준비되었습니다. 이 때 주최측의 행사 진행이 돋보였는데요, 마이크로 소프트에서는 WinHEC 행사를 상당히 중요하게 생각하고 있었기 때문에 NT 개발팀의 상당수가 이 행사에 참석했습니다. 점심 시간에는 이 개발자들이 자기들끼리 식사를 하지 않고 테이블당 한명씩 앉아서 같이 온 참석자들과 식사하면서 오전 세션들에 대해서 이야기할 수 있도록 배려했습니다. 그리고 오후에 발표 중에 DirectX에 대한 소개가 나왔는데 이 때 처음 본 게임이 툼레이더스였습니다. (정확한 게임 이름을 알게 된 것은 그 뒤였습니다. 이 때에만도 개발 초창기였기 때문에 MS에서 데모로 들고 나온 게임이었습니다) 이 게임의 3D 기능을 DX를 이용해서 개발한다는 이야기와 함께 DSound의 돌비 사운드에 대한 소개도 있었는데요, 이를 위해서 롯데 소공동을 빌렸다고 하더군요. 극장 수준의 사운드 데모가 이어졌는데 엔지니어나 게임 관계자가 아니더라도 충분히 감동할만한 쇼였습니다. 행사가 끝난 다음에는 뷔폐로 저녁이 준비되었습니다. 물론 이때도 강연자들이나 다른 참가들과 교류가 이루어질 수 있또록 준비가 된거죠. 아, 기념품 이야기를 안했군요. 'Made In Hongkong'의 가방이었습니다. 행사장에서 받은 각종 CD롬과 책자들, 브로셔등을 모두 넣고도 공간이 남는 큼직한 출장용 가방인데요, 디자인도 꽤나 멋진데다 앞면에는 마이크로 소프트라고 프린트되어 있어 긱(Geek)한 것을 좋아하는 개발자들에게 맘껏 자랑할 수 있는 레어아이템이었죠. 그리고 행사장에서 메모할 수 있도록 함께 건네준 볼펜도 있습니다. 문구사에서 쉽게 살 수 있는 볼펜이 아니라 대기업 부장님들이 가지고 다녀도 전혀 쪽(ㅡ.ㅡ)팔리지 않을 돌리는 볼펜이었습니다. 제가 앞에서 기념품을 보면 누굴 타겟으로 하는지 알 수 있다고 했는데요, 그 행사에는 국내 대기업들 관계자분들도 상당수 참가하셨더군요. 당연한 이야기지만 x대가리가 아니면 행사 기획할 때 누굴 부를건지 먼저 정하고 기념품도 기획하는게 맞겠지요. Game Tech 2009는 이런 점에서 상당한 괴리감이 느껴지는 졸속 컨퍼런스였습니다.

그래도 말입니다, 건질 건 건져야죠~ ^^

우선 간만에 뵌 분들이 있어 반가웠습니다. 게임 어스의 배상철 사장님(바로 알아 보지 못해서 쏘리했습니다.^^:), 휴가 중인데 몸소 오신 정팀장님 및 같이 프로젝 하시게 되었다는 여우님 등. 또 새로 인사드린 분도 계시군요. 블로그에서만 보다 인사한 Nettention의 배현직님 그리고 백승지님도 뵙게 되어서 반가웠습니다.

강연 내용으로는 개인적으로는 부분부분 흥미로운 이야기들이 있었습니다.

우선 Havok 세션에서는 다른 물리 엔진과 비교할 때 툴 부분이 상당히 흥미로웠습니다.

스케일폼의 경우 회사에서도 사용하고 있기 때문에 (또 이 기술의 원천 기술이라고 불리는 GameSWF의 Nebula2 포팅은 제가 했었다는 사실은 아시나요? ㅎ) 기술 자체는 궁금한 점이 없었지만 다음 버전에서 플래쉬 내에서 손쉽게 UI를 프로토타이핑할 수 있도록 UI Component를 지원한다는 점은 반가웠습니다.

Umbra는 dPVS 때부터 알고 있던 기술이고 또 작년 연말에 관계사(Umbra는 아닙니다만)에서 회사로 내방해서 한번 시연한 적도 있던지라 강연 때의 데모는 익숙한 데모였지만 GDC 2009에서 발표한다는 Scene Manager는 뜻밖이었습니다. 개인적으로는 기술 내용도 흥미로웠고 또 Umbra의 마켓에서의 포지셔닝도 확실하게 구분되는 부분이라 앞으로 많이 기대되는 내용입니다. 다만 데모 등이 없어 궁금했는데 다과(라고 쓰고 어린이집 간식 시간이라고 해석) 시간에 강연자인 Teppo Soininen에게 물어 봤는데 GDC를 기다리라고만 하더군요. 아무튼 기다려 볼 일입니다. -_-;

그리고 CUDA는 내용은 알고 있었지만 그닥 흥미가 없던 차에 이럴 때 와서 한번 머리 속에 정리하는 거죠. 한국어로 강연할 줄 알았는데 영어로 진행되어서 당황 아닌 당황을 했었는데 나중에 알고 보니 한국어 잘 하시더군요. 본인이 기술 내용은 영어가 더 쉬워서 그렇게 하셨다고 하지만 좀 더 살짝 살짝 끊어서 발표 하셨더라면 더 좋았을 듯 했습니다. 강연자 분들 중에서는 듣기 난이도가 제일 어려우셨어요. ㅋ

게임브리오는 이번에는 프로토타이핑 기능을 강조해서 나오셨더군요. 그런데 망갈로는 프로토타이핑 정도라 아니라 Rapid Dev.를 가능하게 한다니까요. 그것도 아주 스마트한 방법으로 말입니다. 게임브리오, 기술 주제의 방향은 맞는데 구현은 여전히 미숙해 보입니다. 더 이상 렌더러이기만은 포기할 계획일까요. 두고 볼 일입니다. 가격도 눈이 휘둥그래질 정도로 올리셨던데 말이죠.

엔도어즈의 염차장님 강연은 궁금한 점이 많았는데 시간 때문이었을까요. 좀 아쉬움이 많이 남는 끝자락이었습니다. 또 행사 성격이 그래서 어울리지 않는 자리 같기도 했습니다. 시간이 허락한다면 인사도 드리고 궁금한 점도 좀 물어 봤으면 좋을텐데 아쉽습니다.


다음에 또 행사가 진행된다면 제대로된, 얻는 것이 많은 그리고 아쉬움은 없는 행사가 되었으면 하는 바램입니다.

(그래도 이런 행사라도 있으니 바쁘신 분들 행사 핑계 대서라도 서로 얼굴들 보게 되는거겠지요. 많이 많이 반가웠습니다. ^^ 그나저나 행사 욕 너무 해버렸습니다. ㅋ)




tag :

Nebula3 포스팅 번역

08 Feb 2009 14:14:46 | kimsama | Nebula Device | Comments
The Brain Dump에 Nebula3의 최신 릴리즈도 언급되었고 해서 이전에[1] 몇 개 번역해 놓은 포스팅이 있어 올립니다. Nebula3를 이해하기 위한 가장 중요한 포스팅들입니다.
작년 8월에 소스 코드가 릴리즈 되었을 때 올 2월 쯤에 애니메이션을 포함한 새로운 릴리즈가 있을 것이라는 이야기를 한 적이 있었는데(오프라인에서) 거의 그럴듯 합니다.

번역이 되지 않은 부분은 게으름 때문인지라 혹 수고를 마다 않고 덧글로 올려 주시면 감사하겠습니다. 또 번역이 매끄럽지 못한 부분이나 오역은 능력 탓이니 개의치 마시고 질타와 함께 지적해 주시면 (아주!) 감사하겠습니다.



[1] Google Doc의 날짜를 보니 1월 1일이었군요. 신년에 이런 일을 하고 있었군요...저는 -_-;




Subscribe | Retrun to feeds | Users subscribed: 1 | Last Updated: Apr 24 2009, 10:18:16To top



 



Sign in to NewsAlloy
E-mail 
Password 
  Remember me 



News Alloy © Copyright 2005 - 2008 Mobispine AB. All Rights Reserved.

buy clomid buy zithromax buy cheap celexa buy cheap cymbalta buy naltrexone purchase finasteride purchase sildenafil citrate cheap tadalafil