2007년 7월 10일 화요일

MapTool UI 를 위한 Codejock Xtreme Toolkit Pro 적용

<작업중인 맵툴 UI 에 적용한 Codejock 라이브러리>



<도킹판넬과 메뉴를 Office 2003 스타일로 적용>


일단 UI 를 위해서 많은 고민을 하였다.
예전부터 사용자 인터페이스 분야에 관심이 많았던 터라
이번에는 UI 를 어떻게 구성할지가 고민되었다.
이리저리 알아보니 현업에서도 심심찮게 Codejock Lib 를 많이 사용하는거 같아서
이번에 한번 적용해 보았다.
현제 적용된 부분은 Docking Pannel 과 Tab Control 정도 이다.
나머지는 시간이 좀 걸릴것 같아서 초안만 만들어두고 일단 전체적인 기능 위주로
가야될것 같다.

- 7 / 9
벌써 한 이틀째 밤을 지새우고 어젯밤은 이력서와 자기소개서를
작성한다고 또 밤을 새웠다.
이력서 작성을 해보니 정말 절망적이였다.
게임업계 취직을 위한 경력이 하나도 없으니....
그래도 태일이 형덕분에 미리 경험을 해보는 것 같다.
오전에 태일이 형한테 이력서와 현재 작업중인 맵툴을
보내드렸다.
결과는..... 공부 열심히하라고 그랬다. ㅡㅡ; ㅋㅋㅋ
예상했던 일이라 그리 상심하지 않았다.
이제 시작이니 열심히 해야겠다.
그래도 주변에 이렇게 도와주는 분이 있어 기분이 좋다.
인간관계는 돈문제만 꼬이지 않는다면 크게 문제 될게 없는거 같다.

오후에는 다시 태일이형한테서 메신저로 연락이 왔다.
이런저런 질문이 이어지고 주말에 면접보러 올라오라고 했다.
흠.... 너무 기뻣다.
사회에 첫발을 디디고 처음 보는 면접이다!
물론 지금 내 수준으로 면접을 무사히 통과하는 것은 무리이다.
하지만 좋은 경험이 될거 같다.
책이라도 먼저 보고 올라갈려고 생각중인데
앚아서 이런저런 책을 보니 사실 부질없어 보인다.
어차피 실제로 적용을 해보지 않고서 이해했다는 것은
거짓말이나 다름없기 때문이다.
짧은 시간에 모든걸 다 적용해볼수는 없는 일이고...

- 7 / 10
앚아서 Real-Time Rendering 을 다시보기 시작했다.
작년에 한학기동안 대학원에서 수업까지 들었지만
실제 그래픽스 관련 업무 경험이 없다보니
감이 잘 오지 않았었는데, 그래도 한번 들어 놓았던 것이
많은 도움이 되는 것 같다.
호서대 최유주 교수님께는 많이 죄송하다.
그렇게 열심히 가르쳐 주셨는데,
내가 특별히 감사 인사도 드리지 못했다.
내가 나빳다!
음... 언제 메일이라도 보내고 감사인사를 전해야 겠다.

오늘 책을 계속 보다가 어차피 적용해보지 않고 눈으로 본내용은
한계가 있다는 것을 알고 다시 MapTool 작업에 전념 하기로 했다.
태일형이 쉐이더 얘기를 많이하는걸봐서는, 이번에 기획하고있는 게임이
모만화영화를 바탕으로 작업하고있다는 상황과 빗대어 볼때
툰 세이딩에 대한 기술이 관건인것 같다.
가기전에 맵툴에 툰세이딩과 몇몇 쉐이딩을 적용해서
가지고 가야 겠다.

2007년 7월 5일 목요일

MapTool 디테일 맵과 스플레팅 작업







MapTool 에 스플레팅 까지 구현 하였다.
디테일맵과 스플레팅까지 조합하여 보니 꽤 볼만하다^^ ㅋㅋㅋ
그런데 예전에는 무진장 이해가 않갔었는데 막상 구현하고 나니
약간 허탈하기도 하다... 아직 갈길이 멀기는 하지만.....
Detail Map 과 Splattng 을 MultiPass 로 렌더링 하는데
이게 두번째 Pass 에서 맵이 자꾸 선이가고 일부분이 구멍이 생기는것이아닌가~~
그것땜에 하루 종일 삽질했다.
이유를 알고 보니 LOD 거리가 너무 짧아 생긴 일이였다.
아~~ 이래서 삽질을 많이 해봐야 되나 보다 ㅋㅋㅋ
그리고 SetSamplerState 와 SetTextureStageState, SetRenderState
를 사용한다음에는 반드시 원상복귀 해놓는걸 잊어서는 안될거 같다^^
맵툴의 UI 는 Codejock 의 Toolkit Pro 를 사용할 예정이다.
켄신이라는 사람의 블로그를 우연히 보다가 맵툴을 참 깔끔하게 만들었다고
생각했었는데 유심히 보니 UI 컴포넌트가 적용된걸 알수 있었다.
실제 업체에서도 많이 사용한다고 하니 이번기회에 함 사용해봐야겠다.
원래는 Farpoint 나 ComponentOne, NetAdvantage 를 사용했었는데
아무래도 SI 쪽에는 어울리지 몰라도 좀 무거운 감이 있다.
밥도 잠도 제대로 챙기지 못하고 3일정도 작업했다.....
오늘은 좀 쉬어야 겠다.
내일은 의료보험 옮기고~~ 증명사진이나 찍으러 가야겠다.
음... 아무래도 태일이형 한테 주기로한 이력서는 큰 기대를 하지 않는것이 좋을것 같다.
아직까지 공부해야될게 너무 많은 터라 내가 너무 부족함을 많이 느낀다.
이제 UI 쪽 손좀보고 Fog 와 BillBoard, 데칼, Texture Animation 구현에 들어가야겠다^^
오늘도 화이팅이다~~~ 아자~ 아자~~아자~~ ㅋㅋㅋ

2007년 7월 4일 수요일

MapTool DetailMapping 구현

이그~~
오늘도 밤을 새버렸다~~ 음... 오늘은 안자고 버티다가 앞으로는 낮에 작업해야겠다.
이러다 건강에 무리가 오는건 아닌지~~~ ㅋㅋㅋ
오늘 어머니랑 통화를 했다.
아들이 먼 타지에서 밥이나 잘 챙겨먹는지 항상 걱정이시다.
어머니도 허리디스크와 만성 위염으로 건강이 좋지 않으시지만
어머니의 마음은 항상 당신보다 가족이 먼저이시다.
군에서 전역후 그 걱정이 더해지신것 같아 많이 걱정이다.

중학교 졸업후 항공과학고로 진학한 이유로 집에서 줄 곧 떨어져서 지냈다.
울산에서 진주로 진주에서 서산으로 이제 다시 서울로.....
열심히해서 보란듯이 살아야겠다.
한국 IT 업계의 현실이 냉혹하다고들 하지만
이제는 돌아갈 길도 없다.
그저 열심히 꾸준히 할 뿐이다.

지형 텍스쳐 매핑을 하다가 안되어 확인해보니....
세상에 float 으로 들어 가야될 UV 좌표가 int 로 들어가고 있었다 ㅠㅠ;

디테일 매핑의 단점은 전체 지형을 덮을 Color 텍스쳐가 필요하다는 것이다.
그 텍스쳐가 없으니 아무래도 어색하다.
실제로 적용해보니 알 것 같다.

디테일 매핑의 중요한 점은

D3DXMATRIXA16 mat;
D3DXMatrixScaling(&mat,256,256,256);
SetTransform( D3DTS_TEXTURE1, mat)
SetTextureStageState(1,D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 );

이부분이 가장 중요하다.
0 번째 스테이지는 컬러 텍스쳐이고 1 번 스테이지가 디테일맵이다.
스케일링메트릭스를 이용해 디테일맵의 품질을 결정한다.

D3DXMATRIXA16 mat;
D3DXMatrixScaling(&mat,256,256,256);

m_Texture[0].SetTexture(0);
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
m_pd3dDevice->SetTransform( D3DTS_TEXTURE1 ,&mat);

m_Texture[1].SetTexture(1); // 디테일맵
m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
m_pd3dDevice->SetTextureStageState(1,D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_ADDSIGNED );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_ADDSIGNED );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );

이상이다. 나중에라도 까먹지 말고 적용하자^^

어느 연변 야근자의 한.....

우리 반도체에서는 말임다...
하루에 12시간 일하는건 일도 아님다.
아무데서나 돌을 던져 맞는 사람중 9할이상이 그 이상은 일한 사람덜임다..
고저 우리 사이서 '오늘 12시간 일했다'하믄 다덜 '오늘 한가했구나 야~'하구 부러워함다..
기본 base로 하루 14시간(10시퇴근)정도는 일해야 고저 고거이 '그래도 회사 다닐만하구나, 야'하구 좋아함다..
19시간 일하는 사람 보셨슴꽈?
고저 그런 사람들은 퇴근하는 날과 출근하는 날이 같슴다.
역시 반도체에선 흔함다.
우리 주위서 누군가 '어제 일하다 집에 못갔네'하믄
놀라거나 불쌍히 여기는 사람은 여기저기 어디에도 없슴다..
고저 '조거 하이닉스 다니던 넘 아이가....'하믄서 이상한 사람 취급함다... 요기 어디서도..
일하다 집에 못간것은 절대! 결단코! 자랑이 아님다....
언젠가 놀토란게 있다고 들었슴다....
첨엔 고고이 말그대로 '놀란 토기'를 말하는고이구나 했슴다.
하지만 진실을 알고나서도 그리 슬프지만은 않았슴다...
우리 반도체에선 일주일에 이틀을 쉴라치면 리듬이 깨져 주중동안 살아남을 수가 없음다...
일요일 말임까?
문득 달력을 볼라치면 조거이 왜 빨간색일까하고 다들 의아해함다...
한달에 격주로 일요일 쉴 수 있다고 누군가 했슴까?
고거이 누구맘대로 정한 거임까.....
고저 '아무생각 말구 일하라~~~'하믄 고거이 법임다... . . . . .

얼마전이었슴다!!!!

사무실 어딘가서 흡사 마른 하늘에 날벼락이라도 치듯이 '쿵'하는소리가 났슴다..
우리 모두 놀라서리 주위를 살펴보았슴다.
그것은....그것은....그것은...
한달내내 집에 못가구 야근하다 쓰러진 울 과장님의 소리였슴다.
손에는 일년에 몇번 못봐 아비 얼굴을 잊어간다며
슬퍼하던 자식들에게 통닭이라도 한마리 사줄 수 있다며
좋아하던 오티비 몇만원을 들고...-_-...

- 참으로 잼있는 글이지만 남일같지가 않다....

2007년 7월 3일 화요일

MapTool Picking 구현


또 밤을 꼴딱 새웠다.
다시 아침이 밝아온다.....ㅠㅠ 이러다가 조만간에 큰일 치르겄다~~
망할놈의 픽킹구현한다고 쌩쇼를 했다.
이론은 수십번보고 코드 수십번보고 이상이 없어 보이는데 좌표가 이상하게 움직인다.

POINT PickingPoint;
GetCursorPos(&PickingPoint);

creenToClient(hWnd, &PickingPoint);

D3DXVECTOR3 tempV;

D3DXMATRIX View;

D3DXMATRIX IView;
D3DXMATRIX PickMat;

D3DVIEWPORT9 vp;
Device->GetViewport(&vp);

D3DXMATRIX proj;
Device->GetTransform(D3DTS_PROJECTION, &proj);

tempV.x = ( (( 2.0f * PickingPoint.x) / vp.Width) - 1.0f ) / proj(0, 0);

tempV.y = ( ((-2.0f * PickingPoint.y) / vp.Height) + 1.0f ) / proj(1, 1);
tempV.z = 1.0f;

Device->GetTransform(D3DTS_VIEW, &View);

D3DXMatrixInverse(&IView, NULL , &View);

m_origin.x = IView._41;

m_origin.y = IView._42;
m_origin.z = IView._43;

m_direction.x = tempV.x * IView._11 + tempV.y * IView._21 + tempV.z * IView._31;

m_direction.y = tempV.x * IView._12 + tempV.y * IView._22 + tempV.z * IView._32;
m_direction.z = tempV.x * IView._13 + tempV.y * IView._23 + tempV.z * IView._33;

여기서 m_origin과 m_direction을 구해 반직선을 만든다.
이제 m_origin과 m_direction을 가지고 D3DXIntersectTri()를 이용해서 픽킹 하는것이다.

그런데 이상하게 World 메트릭스의 다시 View Matrix 와 World Matrix 을 가지고 곱하기 연산을 계속한것이다. 더 웃긴건 다른 사람들의 소스는 잘돌아간다.
아무래도 내가 만들어 사용하는 카메라 클래스 때문인것 같지만. 어찌되었건 인내력 시험 한번 잘한것 같다. 시간이 흐르면 흐를수록 내가 더 작아보인다.

오늘은 태일이 형이 이력서를 보내달라고 했다.
회사에서 요즘 신입사원도 뽑는터라 확인해보고 부족한게 있으면
얘기해주겠다고 했다.
사실 아직까지 나는 준비가 많이 되어있지도 않고, 예전 경력은 다 필요없으니...
보여줄게 없다...
그래서 지금 밤낮을 안가리고 개발에만 열중하고 있다.
뭐라도 조금이나마 보여드려야지~~~그게 최소한의 예의인것 같다.^^

요즘 팀의 인원 구성때문에 은근히 신경쓰인다.
팀이라는것이 사람만 갖다 놓는다고 되는 것은 아닐터~~~~
ㅋㅋㅋ 뭐 나도 허접이지만....
그래도 목적이 틀리다. 나야 작정을 하고 사회에 나와서 하기땜에
그냥저냥 취미삼아 하는 사람들하고는 섞이기 싫은것이 내 맘이다.

아~~ 좀만 자고 다시 일어나서 높이편집 기능부터 만들어야 겠다~

2007년 7월 1일 일요일

<아이올로스> 기획서 초안



앞으로 우리 팀에서 개발하게될 기획서 초안이 완성되었다.
기획서를 실제 작성하여보니 굉장히 어려웠다.
너무 많은 생각을 하게 만든다.
게임의 장르는 비행 레이싱이다.
<아이올로스> 는 오디셋이의 바람의 신의 이름이다.
제목은 내가 지었다.
암튼 제발 완성만 했으면 좋겠다.
오늘도 밤샛다.

작업 중인 맵툴 - 작업 2 일째



현재 작업중인 맵툴이다.
왠만하면 툴 안만들고 무대포로 갈려고 했는데
도저히 안될거 같다.
이명학 교수님께서 몸이 편할라고 하면 미리미리 툴은 만들어 두라고 하신다.
음... 그래도 지금껏 작업한 코어엔진 덕분에 쉽게 툴로도 잘 붙는것 같다.
박중수 교수님께서 말슴해주신대로 공부했던게 많은 도움이 된다.

이명학 교수님의 이펙트 툴


- 6/27
나는 사실 게임에 사용되는 이펙트툴을 처음 접해보았다.
느낌은 굉장히 새롭고 신선했다.
이명학 교수님이 6개월동안 작업하신 이펙트툴인데
굉장히 범용적인 툴이다.
코어가 라이브러리화 되어있어 엔진에 쉽게 붙여서 쓸수가 있다.
하지만 공짜로 사용할수 있는 툴은 아니라는거~~~

이명학 교수님의 <니트로패밀리>


- 6/27
학교 실습실에서 이명학 교수님을 모시고 예전에 개발 하셨던 <니트로패밀리> 제작과정에 대한 설명을 들었다. 소감은... 감히 근접 할 수없는 포스를 느꼈다~~
나는 언제쯤 저런걸 만들려나~~~ 교수님께서는 최소한 이정도는 만들 각오로 임해라고 하셨다.
스크린 샷을 잘 찍어야 되는데 타이밍이 좀 안맞았다. 교수님께서 세계세최초 개발하신 이펙트가 있는데 그 타이밍이 좀 어렵다.

2007년 6월 30일 토요일

이제 전역한지 1달이 지났다!!!

아~~~
벌써 한달이 지나갔다.
내가 군복을 벗은지도....
느낌은... 뭐랄까~ 너무 좋다.
세상사람들은 참으로 바쁘게 산다.
나도 예전에는 바빳다... 사실 별로 생산성도 없으면서 바쁘다.
지원소 사람들과 20비 사람들은 어떻게들 지내는지...
연락도 없다.
뭐 같지도 않은 계급사회에서 벗어나니 너무 자유스럽다.
내가 혈액형이 A형이다 보니 남의 시선과 눈치를 많이 보는 성격이라
지난 시간 동안 고생이 많았다.
음... 지난 얘기는 나중으로 미루어야 겠다.

- 6월 27일 수요일
잠을 많이 못잤다. 아침 7시에 일어났다.
오늘은 서울 학교에서 이명학 교수님과 차명희 교수님과
남창우 학생과 만남이 계획되어있다.
만남의 목적은 게임 동아리 활성화에 관한것이였다.
가는길에 수유리에서 길을 좀 헤맷다.
이상한 산동네로 들어 갔는데 빠져나온다고 죽는줄 알았다.
학교에서 차명희 교수님을 만나고 창우와 같이 점심식사를 했다.
무슨 쌈밥집이였는데..암튼 서울은 뭐든지 할게 많다.
하지만 딱히 정이 안가는 도시이다. 난 고향이 좋으디~~
오후에는 이명학교수님과 만남을 가졌다.
이명학 교수님이 개발한 와 이펙트 에디터에 대해서 설명을 들었다.
자신감 상실... 난 얼마나 해야 저런 경지에 오를런지...
숙제는 기획서를 작성해 오는 것이다.
그런데 동아리 활동을 하기위한 제반 시설이 너무 열악했다.
사실 그냥 주면주는데로 감사히 생각하고 해야하는데...
나도 얼마전까지는 공군에서 시스템소프트웨어 개발자로 지내면서
괜찮은 지원을 받아가며 좋은 장비를 만졌는데...
이런 생각을 버려야하는데 쉽지가 않다...
사실 팀 자체가 정비가 안된터라 굳이 사무실에 눌러앚아 개발할 필요성을
많이 못느끼겠다. 지도 교수님이 상주해 계시는것도 아니고...
그리고 거의 혼자 작업을 진행해야하다보니 집에서 하는게 오히려
더 맘 편한것 같기도 하다...
어차피 회의를 위한 미팅은 일주일에 한번정도면 충분한것 같다.
예전에 일할때도 회의 횟수와 일의 능률은 반비례한다는 사실~
그래도 지금 한달은 돌이켜보면 많이 발전한것 같다.
이제는 작업속도가 꽤 붙으면서 재미가 생긴다.

- 6월 30일 토요일
한 달동안 개인적으로 연락을 해온사람은 민정기 선배 뿐이다.
그리고 진용일 중령님, 인사처장님, 강성훈 대위, 최재호 대위,
최동진 대위... 한형준 중위~
이론~~부사관은 없다. 맨날 친한척 하더니만....
아~~ 인생 헛 살았다. 이제는 민정기 선배와도 연락을 자주 못하게된다.
하긴~~바쁘시니깐~~
제대후 가장 많이 생각해보는것이 사람과의 관계이다.
9년 가까이 죽도록 야근해가면서 술도 마셔가며
열심히 살았다고 생각했지만 거기까지인것 같다.
아직까지 내일이면 출근할것 같다.~~
하긴...이제 한달이지났으니...
오늘은 맵툴 작업에 신경을 쏟아부었다.
오랜만에 MFC를 만지니 좀 해맸다. 예전에 참 어렵게 공부했었는데...
그래도 그랬던 경험이 참으로 소중하다.
지금 밖에 비가 주룩주룩 내리고 있다.~~

일전에 알고 지내던 사람이 있었다. 오늘 나에게 거짓말을하고
다른데로 놀러갔다. 음... 나하고 별 관계도 아닌데 왜 거짓말을하는지...
어찌돼었건 밤중에 술을 좀 많이 먹었는지 전화해서 이리저리
인생충고를 들었다. 별로 듣고 싶지 않은 얘기들이였는데
참으로 안쓰러웠다. 집에 빨랑 들어가지~~

요즘 영어실력이 향상되고 있는것 같아 기분이 좋다.
회화위주로 작문을 배우다 보니 재미있다.
열심히 해서 블리자드에서 스타3는 내가 만들어야징~~~ㅋㅋㅋ