,

A MINI Addiction

from Or........../MINI 2012. 5. 8. 13:51




멋지다~!!! R53 나도 R53 달려!

'Or.......... > MINI' 카테고리의 다른 글

MINI`s History  (0) 2009.09.29
MINI & Strida  (0) 2009.08.27
MINI - Lamp Replacement Guide  (0) 2009.08.27
Stoptech MINI  (0) 2009.08.27
,

처음으로 오랫동안 쉬면서 예전에 하지 못했던 엔진 작업을 다시 시작했다.
일을 하면서 상용 엔진을 써오면서 이렇게 내 엔진도 바꿨으면 하는 것들 모아 정리하고 적용을 하려고 엔진을 새로 다시 만들고 있다.
기존 베이스 작업들은 가지고 갈꺼지만 프레임웍 부터 싹 바뀔 예정 ! ㅋ

클래스 다이어그램도 만들어서 첨부 할 예정..

이제부터 시작 !

- 1 : eIRIS 엔진 - Service Manager
,

예전부터 고쳐야지 고쳐야지를 맘만 먹고 못 고쳤던 IME 문제를 해결하였습니다.

GFx를 이용하여 UI를 개발하면서 IME문제 (한글을 입력할 경우 조합시 한글이 깨지는 문제) 가 있었습니다. 참 답답하였죠. 예제와 포럼에 있는 글들을 싹 찾아서 똑같이 해보았것만 똑같은 현상이 일어났습니다. 정확하게는 "한글" 이라는 글자를 입력할 경우 "한+ㄱ+ㅡ"를 입력하는 중에 Text필드에서는 "한뉢"이라는 글자가 나오는 문제였습니다. 조합시 깨지는 거죠. 아.. 첨엔 조합글자에 대한 폰트의 문제이구나.라고 생각하에 폰트를 swf파일에 포함도 시켜보고 저희가 쓰고 있는 fontlib를 똑같이 마춰보기도 하고 별짓을 다해보았으나.. 역시 똑같은 증상만 나오더라구요. (참고로 GFx에서는 한글이 코어에 다 포함이 되고 있어 따로 IME 셋팅을 안하셔도 됩니다.) 한 일주일을 열심히 찾아봤습니다. 역시나..ㅜ.ㅜ 결론적으로는 제가 일주일동안 곰곰히 생각한 결과 Gamebryo엔진에 대한 문제라고 생각을 했습니다. 찾아본결과 틀린 부분이 한 부분이였거든요. 메세지처리에서 OnDefult가 먼저 불리느냐 Process가 먼저 불리느냐에 차이...! 예제에서는 OnDefault부분을 먼저 처리를 하고 Process함수를 처리를 하는데 저희쪽에서는 Process를 먼저 처리를 하더군요. (자세히 Gamebryo엔진 Application 메세지 처리 부분을 안보았지만...그렇게 호출을 하는 것 같습니다. 콜스택에도 그렇게 나오니깐요..)

저희 파트장님과 함께 열심히 찾아본 결과~! 맞습니다. Process를 먼저 처리를 해서 TranslateMessage와 DispatchMessage를 하면서 메세지의 code가 바뀌어서 생기는 문제였습니다. (정확히 DispathMessage입니다.) 아~~~~~~~ 얼마나 허무하던지.. 아무튼 이문제를 프레임웍을 전혀 안고치고 최적의 꽁수를 펼쳐~ 해결할 방법을 모색한 결과~!
기존에 Process에서 해결하고 있었던 GFx Handle 이벤트를 OnDefault와 같이 처리를 하도록 바꿨습니다. 기존에는 PreProcessKeyboard로 키다운, 키업을 IME Message를 던졌는데 이걸 IME관련 메세지 (WM_IME_SETCONTEXT, WM_IME_CHAR등등 )을 여기서도 같이 처리하겠끔 바꿨습니다. 단 GFx 이벤트 타입은 IME_PreProcessKeyboard로 설정을 하구요.

저와 같이 Gamebryo 2.6에 Scaleform 3.2 인테그레이션 해서 쓰시는 (3.1도 마찬가지 일 것입니다.) 분들은 이와 같은 방법으로 해결하셔도 좋을 듯 합니다. 단~! 이 방법이 과연 옳은 방법인지는 저도 잘 모르겠습니다. 정확히는 프레임웍의 호출 순서를 바꿔야 하겠죠.
아무튼 맘 내키지 않는 방법입니다. ㅋ ^-^

'Or.......... > Work' 카테고리의 다른 글

Scaleform - GFx [Gamebryo 2.6 - Scaleform 3.2 Integrations]  (0) 2010.09.02
Scaleform - GFx [Product]  (0) 2010.08.26
Scalform - GFx [Prologue]  (1) 2010.08.09
Shader Tree  (0) 2009.11.05
Overview of the Major Structural Changes in Direct3D 10  (0) 2009.08.27
,

UI 기획이 확 바뀌어 UI 리뉴얼에 들어갔습니다. 모가 바꼈을 까요~? 기획서를 봤습니다. 헛 흠 ..... Scaleform 홈페이지나 Scaleform 홍보 동영상에서 보았던 3D UI가 저희 프로젝트 기획서에 딱하니 있습니다. 네..ㅜ.ㅜ 3D UI를 하자는 거죠..

그래서 현재 사용하고 있는 Gamebryo 2.6 - Scaleform 3.1 버전을 3.2로 업그레이드 해야하는 작업이 생겼습니다. 예전에 3.0에서 3.1로 업그레이드할때 쫌 약간의 문제가 있었는데.. 이번에도 잘 될까 하고~ 두려움을 앉고 업그레이드 작업에 돌입했습니다. 참고로 Gamebryo 엔진용 Scaleform integration 배포판은 LightSpeed - 3.1 Integration 만 있습니다. 전 이걸 Gamebryo 2.6 버젼으로 수정하여 사용하고 있습니다. (네.. 수정할 것이 좀 있습니다.) 아무튼~! Integration 작업에 돌입하였습니다. 사용하고있는 3.1 Include 파일, 라이브러리, 소스, 서드파티 등을 다 지우고 3.2 버젼 으로 업그레이드 했습니다.

Gamebryo 엔진 Scaleform Integration인 NiGFx를 빌드를 했는데 ~ 엇 예상했던 거와 반대로 빌드가 깔끔하게 되었습니다. 기억으로는 3.0에서 3.1로 업그레이드할 때 약간 수정을 했던걸로 알고 있었는데 3.1에서 3.2로 업그레이드에선 인터페이스가 하나도 안바뀐 모양입니다. (이때까지 행복했습니다.) 그래서 테스트 겸 클라이언트를 실행했습니다. 헛 ㅜ.ㅜ 바로 죽어버리네요... 디버그로 찾아봤는데 .... 헛 GFx 내부 GRendererD3DxImpl -> PopRenderTarget에서 죽어버리네요.. 이유가 RenderTarget에 대한 정보를 스택에 넣는데 RenderTarget이 초기화가 안된 상태에서 스택에 들어가서 문제였습니다. 열심히 해결책을 찾고자 Scaleform 포럼에 들어갔습니다.
찾아 본 결과~ 나와 같은 경우를 겪은 사람들이 두명 밖에 없더군요. 그나마 다행입니다. 이런 문제점이 있어 글을 남겨서.. ^-^  글을 읽은 결과~! 딱 한마디로 써놨습니다. "너가 아마도 SetDisplayRenderTarget 함수를 호출하지 않았을꺼다. SetDisplayRenderTarget 놈을 호출해라~!" 라고 Scaleform 답변이 있었습니다. 언제? 어디서? 저놈을 해줘야 하는지가 없네요..ㅠ.ㅠ 이것까지 친절하게 알려주지..
[죽는 이유가 무비파일에서 어떠한 필터를 쓰거나 AS에서 필터 관련을 썼을 경우 GFx에서 내부 플래시 필터 Update시에 현재 RenderTarget을 스택에 push하고 렌더링때 pop을 해서 RenderTarget을 가져오는데 push할때 현재 RenderTarget이 아무것도 없이 초기화가 안된상태에서 push를 해서 생기는 문제였습니다.]

그래서 열심히 어디다 넣을까를 찾아봤습니다. NiGFx에서는 Scaleform의 GRenderer를 생성을 NiGFxRendererPair에서 따로 생성해서 사용하고 있었습니다. 그래서 해결책은~! NiGFxRendererPair에서 Initialize에서 SetDisplayRenderTarget를 해주면 됩니다.
[참고하세요~]
GRenderTargetD3D9::D3D9RenderTargetParams RTParams;
pkDevice->GetRenderTarget(0, &RTParams.pRenderSurface);
pkDevice->GetDepthStencilSurface(&RTParams.pStencilSurface);

m_spScreenRenderTarget = *m_spTheGRenderer->CreateRenderTarget();
((GRenderTargetD3D9*)m_spScreenRenderTarget.GetPtr())->InitRenderTarget(RTParams);
m_spTheGRenderer->SetDisplayRenderTarget(m_spScreenRenderTarget);

RTParams.pRenderSurface->Release();
RTParams.pStencilSurface->Release();

요렇게 해주시면 됩니다.

,

Scaleform 은 크게 3개의 제품으로 나누어져 있습니다.

코어인 GFx, 언어설정 및 다국어 지원을 해 줄 수 있는 IME, 플래시 비디오를 지원을 해 줄 수 있는 Video.
요렇게 3가지로 구성이 되어 있습니다. 다행이도 한글지원은 코어인 GFx에서 다 알아서 해주기때문에 IME 는 필요가 없지만 다른 나라에서도 서비스를 하기위해선 필요하겠죠.

현재 GFx 3.1을 사용하고 있지만 곧 3D UI, GFx 최적화 툴이 들어있는 3.2버젼으로 업그래이드 할 예정입니다. (현재 클라이언트에서요...)

Scaleform 쪽에서는 4.0을 올해 선보인다고 작년 KGDC에서 발표를 했는데 아직 모르겠습니다. Scaleform의 버젼업이 왜 이슈가 되냐면 버젼업에 따라 지원되는 AS 버젼이 정해지기 때문입니다. 현재 나온 3.2까지는 AS 2.0버젼을 지원하고 있습니다.

현재 저희는 겜브리오 엔진을 사용해서 겜브리오 엔진에 GFx Integration을 하여 사용하고 있습니다. 다른 팀에서는 GFx를 모듈로 만들어서 사용하고 있구요. Scaleform쪽에서는 각 엔진에 따른 GFx Integration를 제공하고 있습니다. (제가 알기로는 언리얼, 겜브리오 밖에 못 본듯...) 그러나 겜브리오 GFx Integration은 버젼이 겜브리오 2.2 와 최근에 나온 Lightspeed 만 제공하고 있습니다. 2.6을 쓰고 있는 저희로썬 Integration을 뜯어고쳐야하는..ㅜ.ㅜ 아무튼~! 현재 고쳐서 열심히 쓰고 있습니다.

단~! GFx Integration은 GFx의 모든 기능을 포함하고 있지 않습니다. 아주 기본적인 기능만 제공하고 있죠. 즉! 필요하면 Integration을 수정해서 써라~! 이말입니다. ㅋ 예를 들어 플래시안에 PNG로드가 필요하면 Integration안에 PNG로드하는 부분을 넣어야 하구요. 또 XML 파싱부분도 필요하면 직접 넣어야 합니다. (PNG로드 모듈, XML 파싱 모듈은 GFx에 원래 있습니다. 단 Integration에는 빠져 있습니다.) 이 부분 때문에 솔직히 많이 애 먹었습니다. ^-^

GFx 쓰면서 가장 많이 느꼈던건 정말 잘쓰면 최고의 UI엔진이지만 어쭙지않게 쓰면 그냥 기존에 사용했던 UI모듈을 쓰는게 훨 낫다고 느꼈습니다. 그만큼 플래시를 잘하고 이해가 높은 디자이너와 UI에 대한 기획을 잘하는 사람 GFx를 잘 컨트롤 할 수 있는 프로그래머 이 세명의 조화가 가장 중요합니다.

다음에는 실제 적용한 GFx 겜브리오 Integration에 대해서 쓰겠습니다.
,

록맨 온라인 팀에 들어와서 개발을 시작한지 언 일년이 지났다. 일년동안 해왔던 일은 Gamebryo 2.6엔진에 Shader 관련, 클라이언트 프로파일러 작업, 가장 큰 UI 작업... (UI작업을 나 혼자....ㅜ.ㅜ - 솔직히 말이 안되지만.. 뭐 위에서 시키는데 해야지요..)

록맨 온라인 UI는 GFx를 사용하여 다이나믹한 UI를 만드는게 목표~! (하지만 결과는~ 2D !!)

아무튼 GFx를 하면서 생겼던 이슛를 하나씩 적을 것입니다. ^-^/

참고..로...

누가 GFx가 쉽다고 했나요? 누가 GFx가 다 해준다고 했나요? -> 과대 광고에 속지마세요~!!!

개발하면서 많은 에로점이 있었습니다. ㅜ.ㅜ

'Or.......... > Work' 카테고리의 다른 글

Scaleform - GFx [Gamebryo 2.6 - Scaleform 3.2 Integrations]  (0) 2010.09.02
Scaleform - GFx [Product]  (0) 2010.08.26
Shader Tree  (0) 2009.11.05
Overview of the Major Structural Changes in Direct3D 10  (0) 2009.08.27
Scene Graph Rendering  (0) 2009.08.27
,


개발중입니다.
열심히~!! (아~~~~~~~~~~~~~ 힘들어라~)
,

Shader Tree

2009. 11. 5. 11:52
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
오랫만에 엔진 작업에 열을 올리며서 작업을 하고 있습니다. ^-^
예전에 작업했던 엔진을 가지고 eTool에 적용해서 맵툴을 만들려고 했는데 ..ㅜ.ㅜ 역시 저의 능력의 부족으로 엔진에 대한 부족한게 많이 있더라구요. 특히 메모리관련...ㅜ.ㅜ 과 각 기능 메니지먼트 관리 등등.
그래서 지금 다시 eIRIS Base 클래스 및 전부를 뜯어 고치고 있습니다.
...

곧 뜯어고친 놈의 자세한 사항을 올리도록 하죠..

p.s.
왜 프로그래밍을 하면 할수록 부족한게 많게 느껴지는 걸까요? ㅜ.ㅜ
중.고등학교 + 대학 4년 + 대학원 2년 + 사회 4년 했는데... 아~ 왜케 코딩을 못하는지..ㅜ.ㅜ
(아~~~~~~~~~~~~ 어려워~ ㅜ.ㅜ)
,