답변과 오픈소스 프로젝트 이야기

아침에 그 덧글을 보고 처음에는 그냥 피-식 웃었다.

별 뜻이 있는 것은 아니고,

화까지 났다고 하니까... ㅎ...그럴 정도의 일은 아닌 듯 한데 해서.


글 마지막에 있는 이분이 원하는 답만 하면 간단하긴 한데

그래서는 앞으로 Nebula는 물론이고 다른 오픈소스 프로젝트와도 친하게 못 지내실 듯 하다.

그래서 이왕지사, 길더라도 종합편으루다 한번 올려 보는 것도 좋을 듯 하다는 생각이 들었다.

아래는 덧글의 원문이다. (해당 포스팅은 여기)

------------------->
nebula2로 상용 게임도 만들고 nebula3로는 새게임을 만들고 있다고 하는데

도대체 커뮤니티 버전은 관리가 되고 있는 겁니까? (화내서 죄송--^)

논리적 오류도 아니고 몇일째 컴파일에러와 빌드에러만 고치고 있습니다.

튜토리얼이라고 고작 2~3개 있는데 버전 관리가 안되있어 스트레스만 쌓이네요.

굳이 알필요도 없는 에러 패턴에 대한 지식만 축적하고 있습니다.

(독특한 객체 시스템으로 "이름"을 사용하지만 이 이름이 제대로 맞지 않아 실행시 로드에러가 많이 납니다.)
("shaderPath" 여야 되는데 "shaderpath"로 되있어 한참 찾았습니다.)

Nebula2SDK_2005_06_19.exe 에는 Mangalore가 없고
svn nebula2는 버전관리가 안되있어 에러고치려면 구글의 힘이 필요하고

N3SDK_Sep2008.exe는 아직 render층의 기능이 부족한 상태고
svn nebula3의 audiotest_win32 예제는 XACTAudioDevice::WaitForWaveBankPrepared()에서
동기화가 안되어 무한루프를 돌고있고

그냥 하소연했습니다.;;

혹시 안정된 nubula2 sdk 구할 수 없을까요?

nubula2 conrib에 예제(openaldemo)도 만드신거 봤습니다.
------------------->

우선 기다리셨을테니 질문에 대한 답변부터.

소스포지에서는 SVN 버전을 사용하시고 Nebula2SDK_2005_06_19.exe와 같이 다운로드 버전은 사용하지 말기 바랍니다.

SVN으로 직접 소스 코드를 다운 받아서 사용해야 합니다.

최근까지 확인한 바로는 빌드 상의 문제는 최신의 DX SDK와 호환이 되지 않아서 실행시 관련 에러가 발생하는 것 외에는 기타 알려진 컴파일 에러나 런타임 에러는 없습니다.

이 부분은 커뮤니티 포럼 게시판(http://nebuladevice.cubik.org/forum/index.php)을 검색하거나 질문을 올리면 더욱 빠르게 원하는 답변을 받을 수도 있을 것 같습니다.


튜토리얼이라고 고작 2~3개 있는데 버전 관리가 안되있어 스트레스만 쌓이네요.
이 튜토리얼 디렉토리에 있는 것들은 보지 마시길 -_-; 빌드도 제대로 되는지 모르겠고 큰 도움이 안됩니다. 차라리 위에 포럼에서 찾아 보시면 튜토리얼이라고 올려 진게 있는데 훨씬 더 도움이 됩니다.

(독특한 객체 시스템으로 "이름"을 사용하지만 이 이름이 제대로 맞지 않아 실행시 로드에러가 많이 납니다.)
어떠한 의미인지요? 그리고, 실행시 발생하는 로드 에러는 어떤 것들인가요?

("shaderPath" 여야 되는데 "shaderpath"로 되있어 한참 찾았습니다.)
이 부분은 어느 파일인지 조금 자세하게 설명해 주시기 바랍니다.


N3SDK_Sep2008.exe는 아직 render층의 기능이 부족한 상태고
덧글의 제약 때문에 자세한 내용을 언급하지 못한 듯 한데, 어떤 기능이 부족한지 또 부족한 것을 보완할 좋은 방법은 무엇인지와 같은 의견을 주시면 개발에 많은 도움이 됩니다.

svn nebula3의 audiotest_win32 예제는 XACTAudioDevice::WaitForWaveBankPrepared()에서
동기화가 안되어 무한루프를 돌고있고
이 내용은 버그 리포팅해야겠군요. 구글코드의 svn에는 현재 개발자가 그리 많지 않습니다. 현재는 enlight 혼자서 대부분의 일을 처리하고 있습니다. Floh씨 블로그 사이트의 원본이 잘못된 것인지 아니면 머지하다고 생긴 버그인지 확인하는 일부터 필요하겠군요. 버그를 알려 주시면 제가 메일로 올리겠습니다.


nubula2 conrib에 예제(openaldemo)도 만드신거 봤습니다.
OpenAL 모듈 이야기로군요. 문서는 아마 제가 작성했을지도 모르겠습니다만, 코드는 제가 작성하지는 않았습니다. 2004년 경이었을 듯 한데요... 제 팀원 중 한분이 작성한 모듈입니다. 지금은 회사 만드셔서 개발이사신데... 바빠서 아마 수정 사항이 있어도 못하실 듯 ㅡ,.ㅡ

...


사실 기술적인 질문은 덧글로는 힘든 경우가 많다.

내용도 길고, 몇 차례 회신이 오고 가야 하는 내용도 있고,

가끔씩 메신저로 질문해 오시는 분들도 있는데

메신저는 더 힘들다.

그런데 메신저는 진짜 예의가 아니다. ㅋ

자리 이동할 때마다 메신저에 표시하는 사람들도 있지만

나는 그렇게는 안한다...귀찮아서 -_-;

그래서 항상 온라인인거다.
(그래야지 사장님이 보면 또 항상 자리에 있는걸로도 보이고, ^^;  --> 농담이다 ㅡㅡ;)

메일이 기본이다. 질문에는.

소스포지는 개발자한테 메일 보내면 소스포지 메일 서버가 개발자 개인 메일 계정으로 redirect 해준다.

그러니까 관련된 메일은 소스포지 메일로 보내자.


도대체 커뮤니티 버전은 관리가 되고 있는 겁니까? (화내서 죄송--^)

내가 난독증이 있는 것이 아니라면,

그리고 내가 이 라인 제대로 해석한 거라면

좀 어이가 없긴 하다.

나는 그냥 오픈 소스 프로젝트 개발자일 뿐

이 분(뉘신지도 모르고)한테  소스코드를 대가로 하등의 무엇인가를 받은 적이 없다.

라이센스를 완전히 오해하고 있는 케이스다. 아니면 관심 조차 없거나.

하기야 일면도 없는 나한테 화내시기야 했겠냐 만은

아마도...

모르긴 해도 빌드하다 잘 안되고

이것저것 다운도 받고 이리저리 메뉴얼 찾아서 읽고 빌드했는데...

에러만 막 난다...

짜증스러울 수도 있겠다.

또 Nebula2 가 대부분의 윈도우즈 개발자에게는 익숙하지 않은 컨셉이 많은 것도 한 원인이겠다.

그래도...

화부터 내지는 말자...

마음을 좀 가다듬고...

...

개발이라는 이짓거리가 밥벌이인지라...

힘들다고 내려 놓을 수 있는 짐이 아닌데...

말이 게임 개발이지... 게임이라는 단어는 그냥 치장 아닌가.

밥벌이가 즐거울리 만무하다.

그래도 말이다...

코드하고 싸우지는 말자.

잘 보듬자. 너무 스트레스 받지 말고.

열 낸다고 버그가 해결되고 에러가 없어지면

나는 진작에 강마에 되었겠다. ㅋㅋㅋ

그리고,

다른 분들은 Nebula 엔진을 어떤 용도로 보고 계신지는 모르겠지만...

적어도 나한테 이 프로젝트는 밥벌이가 아니다.

이 프로젝트 자체로 직접 돈벌이를 하거나 회사 프로젝트에 직접 사용한다면 모를까...

이 프로젝트가 내 밥벌이가 아니라는 이야기는

이 프로젝트는 내가 개발자로서 개발을 (진짜!) 즐길 수 있는 꺼리라는 이야기다.

처음 Nebula를 본 게 1999년 하반기 쯤이었던가...

본격적인 사용이 2001년부터니까

첫만남부터 따지면 이제 거의 10년이 다 되어 간다.

애착이 남 다를 수 밖에...

처음에는 모든게 부족한 것 투성이었다.

코드 수정하고,

IRC에서 토론하고,

3DS Max 플러그인 만들고,

도큐먼트 작성해서 올리고,

질문에 답해 주고,

그리고, ShaderX5에 기고한 일도 있구나.

이렇게 하나 하나 배웠다.

그러다 보니 엔진만 배우는 것이 아니라 개발 방법에 대한 깨우침도 오더라...

책에 나오는 수 많은 개발 방법론들...

사실 회사에서는 적용하기가 힘들다.

왜?

이상이 현실에 맞을리가 있나 - 그게 책이 나오는 이유 아니었던가? ㅎㅎ

그런데 이런 것들도 오픈소스의 세계에서는 가능하다.

회사라는 제한이 없으니까

그래서 오픈소스 프로젝트는 그 자체로 즐겁다. (밥벌이가 아니라서 더욱!)

이게 오픈 소스 프로젝트다.

오픈이 중요한거다 오픈이.

마인드가 오픈되어 있지 않으면

오픈 소스 프로젝트에 참여하기 힘들다. 
(혹시 참여는 안하고 필요한 것만 빼 가시겠다는 분들? 꿈도 야무지시다 ㅋ)

화내고 다가오는 사람에게

마음이 열릴리 만무하다.

굳이 알필요도 없는 에러 패턴에 대한 지식만 축적하고 있습니다.

이 마인드라면 나는 먼가.

굳이 가르쳐 줄 필요 없는데 남이야 빌드하던 말던 나만 할 줄 알면 됐지.

그런데 꼭 그렇지는 않다.

물론 본인에게 중요한 지식이 아니라서 삽질했다는 생각이 화를 더 부추겼을 수도 있겠다.

그런데,

꼭 그 에러들이 알 필요 없는 것들이었을까?

당사자에게는 그럴 수도 있겠지만,

이제 Nebula를 사용해서 똑같은 에러를 만난 사람에게는 해결을 이야기할 수 있는 방법이 생겼다고 생각하면 안될까?

다른 이에게 나눠 줄 수 있는 (Nebula로) 무엇인가가 생긴거다.

공유할 수 있는 그 무엇인가가.

이게 오픈 소스 프로젝트 아니었던가.

자기가 알고 싶은 것만 알면 편하겠지만, 또 효율적이겠고.

그래도

받은 만큼 주는게 세상 이치 아닌가.

새로움에는 진입 장벽이 있을 수도 있다.

그래도 배움이라는 것은 즐거운 일이다.

그리고 배운 것을 남들에게 알려 주는 일은 더 즐겁다.

게다가 남들과 함께 알아 가는 일은 더더욱 즐겁다.


이 방식의 프로젝트라는 것이

따라가는거지 무작정 왔으니까 답을 내놓으라는 식은 곤란하다.

처음에는 힘들 수도 있다.

하지만 코드던 사람에게든

화내지 말자...침착하게, 하지만 냉정하게.

그리고, 늘 따뜻한 마음으로.

느려도 즐겁게 한걸음씩.

그런데,

계속 느리지만은 않을거다.

미친듯이 가속이 붙는 때가 온다.

오픈소스 프로젝트의 이 플로우(flow)를 즐기려면,

그냥 조금씩 따라가면 된다.

단,

즐거운 마음으로,

남들과 함께.




악기는 연주하기 전에 튜닝이 필요합니다.

그런데 악기 중에는 튜닝이 힘든 악기도 있습니다.

누구에게는 Nebula가 그런 악기일 수도 있습니다.

하지만 튜닝이 끝나고 연주할 때에는

멋진 소리가 나오는 악기임에는 틀림이 없습니다.

Nebula 엔진 사용하시는 모든 분들,

화이팅 하세요~ ^^



by kimsama | 2008/11/26 21:58 | Nebula Device | 트랙백 | 덧글(2)

트랙백 주소 : http://kimsama.egloos.com/tb/1841068
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 너와나 at 2008/11/28 04:02
네, 위의 주인공이 바로 접니다. ㅎㅎ

그리고 이렇게 화답해 주시니 감사합니다.

일단 제 하소연의 대상이 되신 이유는 아래와 같습니다.

[Nebula Device2 도큐먼트의 내용]
"일전에 언급한 6월 경에 진행했었던 게임산업진흥원 게임아카데미의 'Open source Game engine - Nebula Device' 직무 교육 과정에서 사용되었던 문서의 일부입니다. "

이것을 보고 해당 강사님이라고 짐작 했고 큰(Big) 도움을 받을 수 있을 것 같았습니다.
(역시 Big 도움이 되었습니다.)


@@
(독특한 객체 시스템으로 "이름"을 사용하지만 이 이름이 제대로 맞지 않아 실행시 로드에러가 많이 납니다.)
어떠한 의미인지요? 그리고, 실행시 발생하는 로드 에러는 어떤 것들인가요?
@@

독특한 객체 시스템이라고 한 이유는
http://nebuladevice.cubik.org/documentation/nebula2/group__NebulaObjectSystem.shtml
에서 'Object System[Nebula Kernel]'이란 용어가 나와서 입니다.
그리고 문제가 되었던 부분을 정확히 말하면 'Named Object Hierarchy'에 의해
문자열로 객체를 식별하고, 이를 사용하기 때문에 형검사가 정적타임에 검사되지 않아 동적타임 실행 에러가 났습니다.
프레임웍은 이루는 객체야 이름이 자주 불리니 올바르지 않은 경우는 없었지만
테스트 리소스 같은 경우는 이름이 간혹가다 불리니 로드시 문제가 되었구요.


@@
("shaderPath" 여야 되는데 "shaderpath"로 되있어 한참 찾았습니다.)
이 부분은 어느 파일인지 조금 자세하게 설명해 주시기 바랍니다.
@@

shaderpath, shaderPath 문제는 답변을 쓰느라 낫낫히 조사해본 결과

sdk는 shaderpath로 svn는 shaderPath로 통일해서 쓰는데 저의 부주의로 svn과 sdk 코드가 섞여 문제가 발생했습니다.
(data 폴더를 복사했는데 자기 기술적인 xml도 포함되 있어 파싱하는데 문제가 있었습니다.)
(datashadersdx9hdr_renderpath.xml파일의 <RenderPath name="dx9" shaderpath="home:data/shaders/2.0"> 부분)


@@
(N3SDK_Sep2008.exe는 아직 render층의 기능이 부족한 상태고)
덧글의 제약 때문에 자세한 내용을 언급하지 못한 듯 한데, 어떤 기능이 부족한지 또 부족한 것을 보완할 좋은 방법은 무엇인지와 같은 의견을 주시면 개발에 많은 도움이 됩니다.
@@

이 부분은 '부족'이라는 표현이 부적절했네요. 말하고 싶었던것은 아직 미완성이라 기능이 다 구현되지 않아서 활용할 수 없다입니다. 개발중인 것을 쓰는 저의 책임이기도 하겠지만 호기심을 참을 수 없네요.
필요했던 기능은 UI였습니다.(;;)


@@
svn nebula3의 audiotest_win32 예제는 XACTAudioDevice::WaitForWaveBankPrepared()에서
동기화가 안되어 무한루프를 돌고있고
@@

이 부분은
Nebula3coderendercoreaudiowin360xactaudiodevice.cc 파일의

void
XACTAudioDevice::WaitForWaveBankPrepared()
{
while (!this->waveBankPreparedEvent.WaitTimeout(10))
{
this->xactEngine->DoWork();
}
}

에서 this->xactEngine->DoWork();명령을하면 xactEngine에서 wavaBank파일을 다 로드했을때
아래의 NotificationCallback 함수를 호출하여
시그널을 넣어줘야 하는데 이상하게 콜백함수가 호출되지 않습니다.
그래서 waveBankPreparedEvent.WaitTimeout(10)가 true가 되지 않아 무한루프를 돕니다.
코드의 논리적인 오류라기 보단 어떤 문제로 사운드 리소스가 제대로 로드되지 않아서
문제가 발생한것으로 막연하게 추측됩니다. SDK 버전에서는 문제가 없었거든요.

void
XACTAudioDevice::NotificationCallback(const XACT_NOTIFICATION* notification)
{
if ((0 != notification) && (0 != notification->pvContext))
{
XACTAudioDevice* self = (XACTAudioDevice*) notification->pvContext;
if (notification->type == XACTNOTIFICATIONTYPE_WAVEBANKPREPARED)
{
self->waveBankPreparedEvent.Signal();
}
}
}

WaitTimeout의 정의는
Nebula 3codefoundationthreadingwin360win360event.h 파일

inline bool
Win360Event::WaitTimeout(int timeoutInMilliSec) const
{
n_assert(0 != this->event);
DWORD res = WaitForSingleObject(this->event, timeoutInMilliSec);
return (WAIT_TIMEOUT == res) ? false : true;
}

참고로 waveBankPreparedEvent는
class XACTAudioDevice : public Base::AudioDeviceBase
{
private:
...
Threading::Event waveBankPreparedEvent;
...
};

이고

제 플랫폼에서는 Win360Event로 구현되 있습니다.

Nebula 3codefoundationthreadingevent.h 파일

#if (__WIN32__ || __XBOX360__)
#include "threading/win360/win360event.h"
namespace Threading
{
class Event : public Win360::Win360Event
{ };
}



[nubula2 conrib에 예제(openaldemo)도 만드신거 봤습니다.]

이부분은 해당 소스파일에 const char* companyName = "Kim, Hyoun Woo"; 보고
kim씨라서 제가 착각했습니다. 죄송합니다.



[도대체 커뮤니티 버전은 관리가 되고 있는 겁니까? (화내서 죄송--^)에 대한 답변에] 대한 답변

자체포럼이나 다른 커뮤니티에서 문제를 지적했고 (시간이 지났음에도) 수정되지 않아서
그렇게 생각했습니다. 엔진의 핵심 소스의 문제라기 보다는 테스팅소스와 튜토리얼소스의 업데이트 문제라고 볼수 있겠죠. 그래서 상용게임에는 엔진의 핵심 소스만 쓰이니 이것은 잘 관리되는 반면 커뮤니티 버전의 테스팅과 튜토리얼에는 신경을 못쓰는 것 같습니다.
물론 (오픈소스 개발에 참여하고 권한이 있는 사람이 아닌) 단순 사용자가 개발자에게 수정할 책임과 신경쓸 책임을 강제할 수는 없겠죠. 보고는 할 수 있어도.

개발에 참여 가능성 또한 누구에게나(?) 열려 있고 소스를 변경하여 (다른 장소에서) 다른 가지를 만들 자유도 있습니다.
다만 가지가 너무 많이 뻗지 않도록이 한곳에서 통합할 필요가 있는 것도 알고 있습니다.

저는 아직 엔진의 어떻게 구성되있고 어떻게 돌아가는지 잘 모릅니다.

불완전한 정보 보다는 아얘 정보가 없는편이 나을 수도 있다고 생각합니다.



[굳이 알필요도 없는 에러 패턴에 대한 지식만 축적하고 있습니다.]


해결하고픈 문제는 따로 있는데 중간에 이런저런 문제들로 진척이 없으니 답답했습니다.

뭐 해결하고픈 문제를 해결하기 위한 과정상의 문제일 수도 있겠지요.

계속해서 같은 문제에 봉착해서 어려움을 겪고 있는 사람들을 보면

그에 대한 해결책을 알려주는 것도 하나의 도움이 되겠지만

문제 자체를 없애는 것도 큰 도움이 되리라고 생각합니다.
(그 문제자체가 재미가 없으며 그 문제를 해결하는 경험(과정)이 별로 유익하지 않은 경우)

아래는 문제를 그대로 내버려둬 계속해서 같은 어려움을 겪게 만드는 문제입니다.
http://nebuladevice.cubik.org/forum/index.php/topic,69.0.html -- 쉼표때문에 링크 복사 필요
externes Symbol link에러의 경우 해당 심볼이 어디있는지 알기 힘든 c/c++의 문제 일수도 있겠군요.
-->이 문제도 해결하는 편이 낫겠죠?



이렇게 써놓고 보니 변명만 늘어놓은 것 같네요. 애초에 거두절미하고 질문한 제 탓입니다.


끝으로 Nebula 엔진을 사용하는 모든 분들이 많아졌으면 좋겠고

오픈소스에 참여하고 계시는 한분 한분에게 감사하다고 전하고 싶네요.



{
이 안에서는
탭과
스페이스로 들여쓰기가 안됩니다.
}
Commented by kimsama at 2008/11/28 09:28
포스팅도 이제껏들 중에서 제일 길었지만 덧글도 제일 길군요 ^^

메일 한번 주세요~ "kimsama 에뜨 핫메일 닷 컴"으로요.

:         :

:

비공개 덧글

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