블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 07:22
이펙트를 에니메이션 시키는 방법은 약 4가지 정도가 일반적으로 사용됩니다
이 방법은 각자 장단점이 있기 때문에필요에 따라 적절한 방식을 선택하여 사용하며때로는 각 방법은 혼합해서 사용하는 경우가 많습니다

1. 오브젝트의 에니메이션


보통 이펙트는 일정 오브젝트에 텍스쳐로 그려지는 경우가 대부분입니다
특히 많이 쓰이는 방법 중 하나는 Plan 에 텍스쳐를 입혀 제작하는 것인데

이 방법과 함께 많이 쓰이는 방법은 빌보드 (Billboard)라고 하는 방식으로써제작된 plan이 언제나 카메라 쪽을 바라보게 함으로써 이펙트를 평면처럼 보이지 않게 하는 방법입니다

이렇게 plan에 적용한 이펙트는지형이나 오브젝트에 닿게 되면 잘려 보이는 현상이 일어나서 plan임을 들키기 쉽다는 단점이 있습니다.



그리고 이렇게 오브젝트에 적용된 이펙트는오브젝트를 회전시키거나 크기를 에니메이션 시켜서 이펙트를 에니메이션 시킬 수 있습니다
이 방식은 단순히 회전이나 크기이동를 에니메이션 시킬 수 밖에 없다는 단점을 가지고 있습니다이펙트의 모양을 변하게 하기 위해서는 다른 방법을 사용해야 합니다



2. 텍스쳐 좌표 에니메이션

텍스쳐 좌표의 에니메이션은 Unwrap 을 이용한 맵핑 좌표를 에니메이션 시켜서 이펙트를 에니메이션 시키는 방법입니다이 방법은 한 장의 텍스쳐에 여러 장의 에니메이션 시퀀스를 배열한 후 메 프레임마다 좌표를 이동시키는 방법으로적은 양의 프레임일 때에는 효율이 좋지만 많은 양일 때에는 불편한 단점이 있습니다
그러나 텍스쳐가 한 장으로 충분히 구현할 수 있으므로 텍스쳐의 개수를 줄이는 장점을 가지고 있습니다


1. 한 장의 텍스쳐에 에니메이션 시킬 이미지를 모두 배열합니다


2. Plan
에 이 텍스쳐를 적용시킵니다연속적으로 배열된 이미지가 한 장에 모두 배열됩니다.

3. Unwrap UVW
텍스쳐의 일부분만을 영역 지정해 준 후에니메이션 버튼을 이용하여 메 프레임 좌표를 이동시킵니다



3. Ifl 파일을 이용한 에니메이션

ifl 파일을 이용한 에니메이션은 텍스쳐 좌표 에니메이션처럼 각 에니메이션 시퀀스 이미지를 에니메이션 시킨다는 것은 동일하지만그 각각의 이미지가 파일로 독립되어 있고, ifl 이라고 불리는 파일 포멧으로 그 에니메이션을 제어한다는 것이 다른 점입니다
파일 개수가 많아진다는 단점이 존재하지만사용하기에는 상대적으로 간단한 방법입니다

1. 
에니메이션 텍스쳐를 준비합니다각각 다른 파일로 준비합니다.

2. 
에니메이션 이펙트 텍스쳐가 있는 폴더에 txt 파일을 하나 만들어 넣고다음과 같이 각 에니메이션 프레임의 파일명을 작성합니다뒤에 있는 숫자는 각 파일별 프레임 속도입니다숫자가 클수록 느리게 됩니다


3. 
파일 확장자를 ifl로 바꾼 다음텍스쳐와 동일한 폴더에 저장한 후이 파일을 이용해서 텍스쳐링하면 에니메이션 됩니다


4. 파티클을 이용한 에니메이션

파티클은 3D max 에 기본적으로 포함되어 있는 파티클 시스템을 의미합니다
많은 게임 엔진에서 3dmax의 파티클 시스템을 그대로 게임 엔진으로 컨버팅 하는 기능을 가지고 있지만일부 엔진에서는 이 기능을 지원하지 않고따로 자체 툴을 제작하여 제공하는 경우도 있습니다


만약 엔진이 3D max의 파티클 시스템을 지원한다면, 3D max의 파티클 시스템을 이용하여 이펙트를 제작하기만 하면 게임 엔진에도 그대로 들어갑니다
일반적으로 파티클을 이용한 이펙트는 퀄리티가 좋지만부하가 많이 걸리는 작업입니다




5. 쉐이더를 이용한 에니메이션 방법 (추가)

http://chulin28ho.egloos.com/4784689


출처 : 
http://chulin28ho.egloos.com/4652773 
반응형

'Gamebryo > Effect' 카테고리의 다른 글

Effect 애니메이션 초기화 방법  (0) 2011.09.21
[펌] 체인라이트닝 이펙트 만들기  (1) 2011.06.11
강의자료 - 파티클 예제  (0) 2011.03.22
Setup about Effect Dumy…  (0) 2011.03.21
파티클 컨트롤 해보기  (0) 2011.02.24
Posted by blueasa
, |

쉐이더

Gamebryo/Shader / 2011. 4. 4. 06:41

쉐이더파일 - > HLSL
 - NSB : 바이너리,
 - NSF : 아스키
HLSL == NSF => NSB

NIF에 쉐이더 코드는 들어가지 않음.. 따로 관리 / 로딩해야함.. ㅡㅡa 약간 불편한 구조다..

DLL구조때문에 소스가 좀 이상타~~ 좀 더 쉽게 해주지.. 쩝... 폴더경로 읽으면 됨...
NiShaderFactory::RegisterErrorCallback(ShaderCallback_Errors);
NiShaderFactory::RegisterRunParserCallback(ShaderCallback_RunParser);
NiShaderFactory::RegisterClassCreationCallback(ShaderCallback_LibraryClassCreate);

맥스에서 쉐이더 이름을 설정해 줘야 한다...~~~
쉐이더 이름과 파일이름이 매칭되는듯 하다..

사용자 삽입 이미지
사용자 삽입 이미지

노드 이름 검색 : NiNode->GetObjectByName()
노드 연결 : NiNode->AttachChild


 출처 : 
http://hopkh.nayana.kr/tc/hopkh/246?category=20
반응형

'Gamebryo > Shader' 카테고리의 다른 글

알파 텍스쳐 블렌딩 공식  (0) 2011.07.22
[펌] Soft Particle (Depth bias blend)  (0) 2011.06.15
HDR  (0) 2011.04.04
겜브리오 쉐이더 제작시 주의사항  (0) 2011.04.04
Using Fx Shader In GameBryo  (0) 2011.03.17
Posted by blueasa
, |

HDR

Gamebryo/Shader / 2011. 4. 4. 06:15

여기에서는 HDR의 간략한 개념과 PostEffect를 구현하는 방법에 대해서 이야기합니다.

 

HDR의 구현에 대해서는 자세하게 적지 않습니다.

 

HDR

 

Hight Dinamic Range....

 

빛의 밝기를 R8G8B8A8로 표현하려고 하다보면.. 8비트 컬러값으로 부족하다.

 

밝기의 단계가..256단계라니... 쉣!

 

그래서 DX9로 넘어오면서 R16G16B16A16 이라는 엄청난 포맷을 내놓았다고...

 

이제는 16비트 컬러값으로 밝기를 표현할 수 있으니.. 실로 엄청난 발전이라 할 수 있겠다.

 

HDR은 위와 같은 발전된 파일 포맷을 이용하여, 빛을 좀 더 풍부하게.. 그리고 좀 더 현실적으로 표현하는 방법이라고 정의 하는것이 맞을 것 같다.

 

HDR의 구현은 간단하다.

 

화면 전체의 평균 밝기를 계산하고

 

밝은 부분은 따로 때내서( 이때, 평균 밝기를 사용 ).... 가우시안 블러를 먹인 후, 원본 이미지와 더해주면 된다.

 

( 역시, 말은 쉽다 ㅎㅎ )

 

In Gamebryo

 

알아야 하는 것들..

 

- Shader 사용 방법

- Mesh에 Shader 적용하는 방법

- NiScreenFillingRenderViewImpl 의 소개

- Shader의 변수 설정 : float, texture

- Render Target의 관리

 

Shader 사용 방법 

간단하다... NiSample을 사용한 Shader 등록은 정말 간단하다.

 

혹시, NiSample을 이용하지 않았다면.. ShaderLib 샘플에서 제시한 방법을 사용하도록 한다.

 

bool HDRSample::RegisterShaderParsers()
{
    m_kParserLibraries.Add(&NSFParserLib_RunShaderParser);
    return true;
}

bool HDRSample::RegisterShaderLibraries()
{
    m_kShaderLibraries.Add(&NiD3DXEffectShaderLib_LoadShaderLibrary);
    m_kShaderLibraries.Add(&NSBShaderLib_LoadShaderLibrary);
    return true;
}

 

Mesh에 Shader 적용하는 방법

Gamebryo 2.5에서는 Shader가 Material로 통합되어있다. 정확하게 몇 버전 부터 그래왔는 지는 잘 모르겠다.

 

다음은 우리가 .fx 파일에 정의해둔 Material을 받아오는 방법이다.

NiMaterial* pDownScale4x4Material = NiSingleShaderMaterial::Create("HDRRenderStep_DownScale4x4");

 

다음은 RenderObject( 일반적으로 NiMesh )에 Material을 적용하는 방법이다.

kRenderObject.ApplyAndSetActiveMaterial(pDownScale4x4Material);

 

NiScreenFillingRenderViewImpl

몇 일전에 Shader를 Post Effect를 적용하기 위해서...

 

2DRenderView를 만드들고 RenderView을 가득채울 수 있는 NiMeshScreenElements를 만든적이 있다.

 

아~!!!! 삽질이여...

 

NiScreenFillingRenderViewImpl 는 PostEffect에서 딱 사용하기 좋은

 

내가 위에서 했던 삽질을 한방에 해결해주는 RenderView이다.

 

Shader의 변수 설정 : float, texture

 

변수 설정

 

NiShaderFactory::UpdateGlobalShaderConstant( "gfBrightPassThreshold", sizeof(float), &f);

 

float, matrix, color, float array... 등을 넘기는 함수는 형태가 동일하다 ^^;

 

텍스쳐 설정

if (pkShaderMap0)
    {
        NiTexturingProperty::ShaderMap* pkPSVSShaderMap0 
            = NiNew NiTexturingProperty::ShaderMap(
            pkShaderMap0, 0, NiTexturingProperty::CLAMP_S_CLAMP_T,
            NiTexturingProperty::FILTER_NEAREST, 0);

        NIASSERT(pkPSVSShaderMap0);
        spPSVSQuadTex->SetShaderMap(0, pkPSVSShaderMap0);
    }

 

그냥 TexturingProperty에 SetShaderMap이라는 함수를 호출해 주기만 하면.. Shader로 Texture가 넘어가도록 되어있다.

 

SetShaderMap 함수의 첫 번째 인자가 Shader에 정의해둔 Shader Index와 일치해야한다.

 

다음은 HDRRenderStep.fx 의 내용중 일부이다.

texture Shader0Tex

    bool hidden = true;
    string NTM = "shader";
    int NTMIndex = 0;
>;

 

Render Target 관리

 

 Render Step의 Render Target 설정

 

m_spFrame->GetRenderStepByName(m_kMainRenderStepName)->
        SetOutputRenderTargetGroup(m_spHDREffect->GetInputRenderTargetGroup());

m_spHDREffect->SetOutputRenderTargetGroup(
        m_spRenderer->GetDefaultRenderTargetGroup());

 

// MainRenderStep의 출력을 HDREffect의 입력으로 넣어주고..

// HDREffectStep 의 출력은 DefaultRenderTargetGroup 로 맞춰준다.

 

GetInputRenderTargetGroup은 원래는 제공하지 않는 함수다..

멤버 변수로 화면 크기와 같은 Texture와 그의 RenderTargetGroup을 만들어 놓은 것이다.

 

 

 

 

각 HDR 단계도 위와 같이 RenderTarget을 공유하도록 한다.

 

타겟으로 사용될 하나의 Texture를 만들고, 여기서 RenderTarget을 만들어 내낸다.

 

m_spTex = NiRenderedTexture::Create(uiWidth, uiHeight, m_pkD3DRenderer, kPrefs );

spRenderTG = NiRenderTargetGroup::Create( kBuffer.m_spTex->GetBuffer(), m_pkD3DRenderer, true, true) );

 

m_spTex를 누군가의 입력으로 사용하는 방법은 간단하다...

 

spMesh 에 Base Texture 혹은 Shader Texture로 설정해주기만하면 된다. ( Shader 변수 설정을 보면 된다 )

 

샘플에서는 HDR 각 단계가 RenderClick을 상속 받아서 만들어졌다.

 

아직도 RenderClick으로 구분하는 것과... RenderView에 RenderObject를 차례대로 넣어주는 것의 차이를 정확하게는 이해할 수 없지만.. 뭔가 어렴풋하게는 좋은것 같다.

 

 

위에서 한 번 언급한적 있지만.. RenderTargetGroup은 DefaultRenderTargetGroup 이외에는 존재하지 않는다.

 

우리가 사용할 RenderTargetGroup을 만들어서 RenderStep과 RenderClick 사이에 입력과 출력으로 잘 끼워넣어야한다.


[출처]
 [Sample] HDR |작성자 프라이드

반응형

'Gamebryo > Shader' 카테고리의 다른 글

알파 텍스쳐 블렌딩 공식  (0) 2011.07.22
[펌] Soft Particle (Depth bias blend)  (0) 2011.06.15
쉐이더  (0) 2011.04.04
겜브리오 쉐이더 제작시 주의사항  (0) 2011.04.04
Using Fx Shader In GameBryo  (0) 2011.03.17
Posted by blueasa
, |
1. NSF 를 건드리면 반드시 NSB 를 삭제한 후 Asset Viewer나 MAX를 실행시켜, NSB가 생성되는지 확인할 것. 
생성이 안되면 엔진에서 NSF를 읽지 못한 것이다. 

2. NSF는 hlsl이 아니라 스크립트다. 때문에 띄어쓰기나 Tab에 매우 민감하다 (그런 것 같다) 
이 부분 때문에 수많은 삽질을 한 관계로, NSF를 제작시 Tab과 스페이스바에 주의하라. 

3. NSF를 건드리면 모든 뷰어를 종료하고 NSB가 생성되는지 확인해야 하지만, 
hlsl을 건드렸을때에는 맥스가 실행중이라고 해도 바로 확인할 수 있다. 

4. 반드시 한 줄을 추가하고 실행되는지 계속 점검하라. 
한 시간 동안 짜놓은 코드가 작동이 안될 때에는 찾을 방법이 없다. 

5.  텍스쳐 UV 에니메이션의 키 값을 받아오는 명령은 
CM_Defined     TexTransformBase     MatrixTexbase     4
이다. TexTransform의 계열에는 여러 종류가 있고, 커스텀 Attribute도 이런 식으로 넘길 수 있을 듯 하다. 

6. Constantmap 에서 순서는 다소 애매한 느낌이 있다. 

CM_Defined     WORLDVIEWPROJ     view_proj_matrix     0


에서 view_proj_matrix 는 레지스터를 나타낸다고 생각하면 좋다.그리고 레지스터를 자동으로 잡아준다고 생각하면 좋다. 
그리고 그 이후의 숫자는 Extra Data로, 기본적으로 0을 쓰면 된다. 
물론 텍스쳐와 같이 여러 장을 쓸 때는 인덱스 넘버로 사용해서, 0부터 1,2,3 순서로 쓰면 된다. 
그리고 같은 방식으로 이런 방식이 가능하다. 

CM_Defined     WORLDVIEWPROJ     0     0
 

이것은 이름으로 받지 않는 형식이라, 앞의 숫자는 인덱스 넘버를 위한 엑스트라 데이터가 아니라 레지스터가 된다. 즉 사용하는 레지스터만큼 넣어주면 된다. 
그 이후에 숫자가 더 들어갈 수 있는데, 이것은 초기값이다. 

CM_Defined     MaterialEmissive    0     0     0


즉 위와 같은 형식이 가능하다는 ..

CM_Difine 된 것은 저렇게 구분해서 사용하면 되고, User Custom Attribute 를 사용할 때에는 이후 숫자가 레지스터를 수동으로 표시해주는 넘버부터 나오게 된다 (고 한다) 


출처 :  
http://chulin28ho.egloos.com/5035307
반응형

'Gamebryo > Shader' 카테고리의 다른 글

알파 텍스쳐 블렌딩 공식  (0) 2011.07.22
[펌] Soft Particle (Depth bias blend)  (0) 2011.06.15
쉐이더  (0) 2011.04.04
HDR  (0) 2011.04.04
Using Fx Shader In GameBryo  (0) 2011.03.17
Posted by blueasa
, |
반응형

'Gamebryo' 카테고리의 다른 글

[펌] 게임브리오 관련..  (0) 2011.07.25
Gamebryo Default Coordinate  (0) 2011.06.17
gamebryotip  (1) 2011.03.21
Posted by blueasa
, |

게임브리오 파티클 시스템 예제

programmatic particle systems.zip

출처 : http://freewill.egloos.com/867049
반응형

'Gamebryo > Effect' 카테고리의 다른 글

[펌] 체인라이트닝 이펙트 만들기  (1) 2011.06.11
[펌] 이펙트 에니메이션 방법  (1) 2011.05.20
Setup about Effect Dumy…  (0) 2011.03.21
파티클 컨트롤 해보기  (0) 2011.02.24
이펙트 출력  (0) 2011.02.08
Posted by blueasa
, |

추출할때 Dummy사 사라지지 않더록

에서 NiOptimizeKeep 선언한다.

그리고 추출후 어썰트 뷰로 재대로 되어있는지확인하자.

NiNode * pbackNode = (NiNode*)m_BackGraund->GetObjectByName("Dummy01");

반응형
Posted by blueasa
, |
http://search.naver.com/search.naver?ie=UTF-8&query=%EB%A7%A5%EC%8A%A4%EC%97%90%EC%84%9C+%EB%8D%94%EB%AF%B8%EB%85%B8%EB%93%9C+%EC%9D%B5%EC%8A%A4%ED%8F%AC%ED%8A%B8+%EC%8B%9C+NiOptimizeKeep
위 링크로 가셔서 카페 카테고리에서 [맥스에서 더미노드 익스포트 시 NiOptimizeKeep]을 찾아서 클릭하세요.
카페라서 바로 링크로 못가네요..

충돌을 위해 긴 시간동안 맥스와 씨름하고 있는(뭔가 아이러니..) 중에

오늘 빛과 같은 발견을 해서(나한테만이야 -_-)

알려주기 위하여 글쓰기를 눌렀어

 

 

주제 : 맥스 작업 후 익스포트 시 노드 생성 관련

스샷과 함께 설명해 주겠어

 

 

1. 아래와 같은 구조로 되어있는(ST-Soldier는 모델링과 스킨들이 하나로) 맥스파일을 익스포트 해서 nif파일을 뷰어로 보면,

 

 

 

2. 아래와 같은 구조로 노드가 구성되어 있어. 빨간줄 쳐논걸 잘봐

 

 

3. 그래서 우리 더미로 같은 구조로 해보면,

 

 

4. 아래처럼 모델링들의 메쉬들이 노드 없이 되버려. 이러면 안돼

 

 

5. 내가 대충 만들어본 우리 게임의 맵 더미를 아래와 같이 구성해놓고 뷰어로 돌려봐도,

 

 

6. 컬리젼 부분만 노드가 생겨있고 스타트 지점이나 오브젝트들은 노드없이 되버리지. 역시 이러면 안되는거야

 

 

7. 해결방법은 바로 아래와 같은거야. 오브젝트 프로퍼티 들어가서 유저 디파인드에다가 "NiOptimizeKeep" 이라고 적어줘야해

   (아니면 적용할 것들을 선택해놓고 왼쪽 브리오 툴바에서 KEEP이라고 되어있는걸 켜서 체크하는거 하나 있는데 체크하고

    Apply to Selection을 한번 눌러주면 돼)

 

 

8. 캔츄씨?

 

 

9. 아하? 알겠지?

 

 

 

 

이거 꼭 해줘야 하니까 맥스 만지는 사람들은 꼭 참고해서 작업시에 적용을 해줘 나중에 대량 수정작업 안하게 ㅋㅋ

그럼 난 이만 퇴근~

반응형
Posted by blueasa
, |

더미,포인트등은 그냥 export되지 않는다.

 

3d Max

 

helpers의 object type에서 dummy, point등등 을 선택 우클릭

object properties 에서 User Defined -> User Defined Properties 여기에

NiOptimizeKeep <- 이걸 써넣으면 NiNode로 뽑힌다.

 

Customize User Interface에 Gamebryo Tools내에

 NiOptimization Helper를 사용 할 수도 있다.

Do Not Optimize This check

Apply to Selection click <- 이건 선택한 것만

or Select Matching Objects click <- 이건 전부?

 

NiOptimizeKeep이 추가 되지 않으면

Scene Root(NiNode)에 메쉬들은 NiMesh로 뽑힌다.

메쉬들을 NiNode로 뽑을려면 추가해줘야한다.


 
[출처] 3dMax의 Helpers-Object Type를 NiNode로 Export 하기|작성자 cry

반응형
Posted by blueasa
, |

gamebryotip

Gamebryo / 2011. 3. 21. 20:14
맵 처리

* 그라운드 매쉬 * 지형높이 : 아바타 좌표에서 높은 높이에서 Picking 함. (테스트 완료)

* 오브젝트 충돌 : 겜브리오 충돌시스템 사용함. MAX에서 충돌박스 심기

* 지형위 오브젝트로 이동 Issue : Picking 기법 체크

* 정적오브젝트

  • 애니메이션 오브젝트 테스트 완료

* 동적맵구성

  • Issue : 레벨 에디팅
아바타

* 충돌박스

  • 큐브타입으로 심어서 테스트 완료

* 애니메이션

  • Max에서 Gamebryo Animation Manager를 통한 텍스트키 심기
    • Gamebryo Tools에서 Animation Manager아이콘을 클릭한다.
    • Sequence Tags란에 속해있는 Extra Info Tags란에서 설정하면 된다.
    • Key Text에서 텍스트 키 이름을 입력하고 Tag Time에서 원하는 시간을 입력한 후 Add Info Tag버튼을 누르면 텍스트키가 등록된다.

* 파츠

* 도구장착

익스포트

* Max의 dummy는 플러그인에서 성능 향상 쪽을 확인해서 Off해줄것 ( 자식없는것 없애는 게 있음 )

  • Scene Graph Optimization 더블클릭 할것

* Max hierarchy와 똑같은 구조의 Scene graph Export하기

  • Scene Graph Optimization에서 Remove childless nodes, Remove single-child nodes, Merge sibling nodes, Merge sibling NiTriShape objects 4개의 항목을 off한다.

메뉴얼_위치_artist_s_guide_-_gamebryo_3ds_max_plug-in_-_3ds_max_plug-in_tutorials_-_changing_optimization_setting_in_3ds_max}

* 애니메이션 매니저 사용하기 ⇒ .kf .kfm 파일을 뽑기 위해선 애니메이션 매니저를 반드시 써야한다. 메뉴얼_위치_artist_s_guide_-_gamebryo_3ds_max_plug-in_-_3ds_max_plug-in_tutorials_-_simple_animation_sequence}

* Gamebryo에서 캐릭터가 정면( X축 양의방향 )을 향하게 하려면 Max에선 캐릭터가 Y축 음의 방향을 바라보게 한 후 익스포트 해야한다.

* File Export Script관련( .nif .kf .kfm )

  • Controller Extractor
    • Plug-in 중에 Controller Extractor를 찾아 더블클릭하면 관련 옵션을 수정할 수 있다.
    • 메뉴얼을 보면 시퀀스 추출 방법 선택, KF file naming convention, KFM file 생성 유무, 시퀀스간 트랜지션 셋팅 등을 설정할 수 있다.
    • @ Root같은 .kf 파일이름에 Actor Roots Name(character name)을 집어 넣지 않으려면 KF File Naming Convention란에서 Use character name 항목을 비활성화 시키면 된다.

메뉴얼_위치_reference_-_toollibs_-_tool_plug-ins_-_controller_extractor}

* Hidden object 제거하고 Export하는 방법

  • Process Script에서 Edit버튼을 누르고 Remove Hidden Object Plug-in을 추가
  • Move up 버튼을 눌러 최상위로 올림
  • Plug-in 중에 Scene Graph Optimization을 더블클릭해서 에디트창을 오픈
  • Remove childless nodes 체크( Remove Hidden Object Plug-in을 추가 함으로써 Hidden Object의 Geometry는 모두 Export되지 않는다. Node의 자식이 없다는 건 Geometry가 없다는 것과 상통하므로 자식이 없는 불필요한 Node들은 제거해서 Export한다. 단, Leaf Node나 단일 Node가 필요한 Dummy일 경우에는 이 옵션을 체크 안 하거나 유저지정속성을 통해 Node가 유지되도록 해야한다. )

* Optimization을 통해 제거 될 수 있는 Node들을 보존하는 방법

  • Scene Graph Optimization 내 Remove childless nodes나 Remove single-child nodes 항목을 체크하면 필요 없는 Node들을 제거하게 된다. 그러나 특정 문자열을 통해 노드가 제거하지 못하게 보존하는 방법이 있다.
  • 해당 오브젝트 속성( Object Properties )을 열면 4번째 탭에 User Defined라는 항목이 있다. 항목을 선택해 공란에 “NiOptimizeKeep”라는 특수 문자열을 넣으면 된다.

* 파츠 아이템( 옷, 안경등 신체의 직접적으로 접촉되는 것들, 스킨정보 必 ) Export

  • 캐릭터에 아이템을 장착한 상태에서 Export하면 된다.
  • 장착한 아이템 빼놓고 나머지 것들은 모두 Hidden Object로 설정한다.
  • 캐릭터에 biped정보도 함께 Export한다.
  • 캐릭터와 아이템은 따로 링크를 시키지 않는다.

* 파츠 아이템( 손에 붙이는 무기나 오브젝트, 현재는 스킨정보 無 ) Export

  • 캐릭터 biped정보는 필요 없고 순수 아이템 정보만 Export하면 된다.
  • 캐릭터 본( 예시: 손, 발 )과 연결될 아이템 부위에 Dummy를 하나 만들어 아이템에 링크 시킨다.
  • 원점에 위치하여 Export한다.

* 파츠 관련 이슈

  • 예를들어 손에 주전자를 Attach한다고 할 때, 현 시점(2008.09.24)에서는 본에 직접적으로 Attach를 하지만 차후에는 손에 Dummy를 만들어 붙일 수 있게 변경 할 것이다.
  • 손 <ATTACH> Dummy - 주전자 ==============⇒ 손 - Dummy <ATTACH> Dummy - 주전자
  • 현재 손에 붙이는 무기나 오브젝트는 스키닝 정보가 없는 것들만 가능하지만 차후에는 스키닝 정보가 있는 것들도 지원해야 할 것이다.

* 각 애니메이션 별 Loop속성 설정 방법

  • 캐릭터 애니메이션(kfm)
    • Animation Manager에서 Loop Sequence란에 박스 체크
  • 텍스처 좌표 애니메이션( ifl파일을 이용했을 경우 )
    • Material Editor에서 맵핑 된 텍스처(ifl파일)를 선택
    • 선택된 맵 에디터에서 Time란 안에 End Condition란에서 선택한 후 체크
  • 오브젝트 트랜스폼 애니메이션
    • Max 메인메뉴에서 Graph Editors → Track View - Curve Editor 선택하면 에디터 창이 열림
    • 메뉴에서 Controller → Out-of-Range Types 선택하면 에디터 창이 열림
    • Loop 그래프 밑에 버튼 2개를 모두 활성화 시킴
    • 파티클 애니메이션
    • 파티클 오브젝트를 선택하고 Max 기본 툴바에서 Modify를 선택
    • 여러가지 파티클에 관련된 파라미터란들이 나오는데 스크롤을 쭈욱내리면 제일 밑에 Gamebryo Export Params란이 있다. 거기 안에 Simulation Options란에서 선택한 후 체크
  • Loop속성이 잘 적용됐는지 확인 하는 방법
  • Max에서 애니메이션 작업을 한 후 Asset Viewer에서 애니메이션을 돌려보면 보통 Loop를 하게 된다. 그러나 이걸 100% 신뢰해서는 안 된다. Asset Viewer가 내부적으로 Loop를 돌리기 때문이다( 추측 -_-;;; ) 그러므로 정작 App에서는 Loop가 안 될수 있다. Loop속성이 On이 되었는지 정확히 판단하려면 Time Controller를 뒤져봐야 한다.
  • Asset Viewer의 Scene Graph Tree에서 해당하는 Geometry를 선택하면 노드에 관한 정보가 나온다. 보통 부모노드에 트랜스폼 정보가 있으므로 부모노드의 Time Controller 정보를 보면 된다.
  • 해당 하는 Controller를 더블클릭 해서 Basic Info란의 Cycle Type을 확인해서 LOOP( Max에서 Loop를 On했을 경우)라고 써 있으면 정상적으로 익스포팅 된 것이다. 참고로 텍스처 좌표 애니메이션은 Max에서 키를 안 잡기 때문에 Time Controller에 아무 정보도 기입되어 있지 않다.

카메라

* Gamebryo좌표계랑 Max좌표계는 같은 오른손 좌표계를 쓰지만 방향을 나타내는 카메라 뷰 벡터들( Up, Direction, Right )은 서로 다르다.

  • Gamebryo( Up : 양의 Y축, Dir : 양의 X축, Right : 양의 Z축 )
  • Max( UP : 양의 Z축, Dir : 양의 Y축, Right : 양의 X축 )
  • 그러므로 맥스에서 익스포터한 오브젝트들이 정상적으로 보이게 하려면 카메라를 X축으로 -90도 Z축으로 90도 회전해야 한다.

메뉴얼_위치_programmers_s_guide_-_general_topics_-_programming_for_scene_rendering_-_viewing_geometry_-_cameras}

이펙트

* 빌보드 * 파티클

  • Issue : Max 기반의 Effect 작업방식 확인 필요 .
물리
리소스 관리
게임로직


출처 :  
http://joygram.org/wiki/doku.php?id=gamebryotip
반응형

'Gamebryo' 카테고리의 다른 글

[펌] 게임브리오 관련..  (0) 2011.07.25
Gamebryo Default Coordinate  (0) 2011.06.17
[Link] 게임브리오 강의  (0) 2011.03.28
Posted by blueasa
, |