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

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
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

'Gamebryo'에 해당되는 글 14건

  1. 2011.06.17 Gamebryo Default Coordinate
  2. 2011.04.04 쉐이더
  3. 2011.04.04 HDR
  4. 2011.04.04 겜브리오 쉐이더 제작시 주의사항
  5. 2011.03.28 [Link] 게임브리오 강의
  6. 2011.03.21 gamebryotip 1
  7. 2011.03.21 Setup about Effect Dumy…
  8. 2011.01.21 Gamebryo 관련 사이트
  9. 2010.07.02 충돌 박스 노드에 임시 생성
  10. 2010.07.02 여러창 동시 렌더링

Gamebryo Default Coordinate

Gamebryo / 2011. 6. 17. 15:53



게임브리오 좌표계가 OGL이랑 같다는 글을 보고 그러려니..하면서 지냈는데

아무리봐도 이상해서 테스트 해보니 게임브리오 기본 좌표계는 이미지 왼쪽과 같았습니다.

오른손 좌표계는 맞지만 OGL 좌표계와 같다고 하면 사람 헷갈립니다.(저처럼..)

겜버려 샘플들을 보다보면

kRotX.MakeXRotation(-NI_HALF_PI);
kRotZ.MakeZRotation(NI_HALF_PI);
m_kCamera.m_spOrientNode->SetRotate(kRotZ * kRotX);

부분을 볼 수 있습니다.

위 로테이션을 거치면 이미지의 우측과 같게 되고,

거기서 3DS Max와 맞추기 위해서 -X / -Y / Z를 사용하면 3DS Max와 같은 좌표계 입니다.

너무 헷갈려서 그려보고 기록을 남기기 위해서 올려 놓습니다.


P.s. 인터넷을 뒤져도 생각과는 다른 좌표계라서 제 생각이 틀렸을수도 있습니다. 
       틀린 부분이 있다면 지적 부탁 드립니다. (_ _)
 

출처 : Mine

[추가] 카메라 좌표계

Max의 카메라와 Gamebryo의 카메라는 방향 벡터가 월드 스페이스 축에 맵핑되는 방식이 서로 다릅니다. 아래 표는 카메라와 관련하여 Max 축에서 Gamebryo 축으로 맵핑되는 걸 보여줍니다. 이 전환은 익스포트 시에 Gamebryo 카메라에서 회전으로써 자동으로 처리됩니다.

지오메트리와 노드들의 좌표계는 Max Gamebryo 모두 같습니다.

카메라 방향

Max 좌표 축

Gamebryo 좌표 축

Up

+ Z

+ Y

Right

+ X

+ Z

Forward

+ Y

+ X



출처 : 게임브리오 문서 중, Coordinate System and 3ds Max 에서 발췌

반응형

'Gamebryo' 카테고리의 다른 글

[펌] 게임브리오 관련..  (0) 2011.07.25
[Link] 게임브리오 강의  (0) 2011.03.28
gamebryotip  (1) 2011.03.21
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
, |

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
, |
Setup about Effect Dumy…




작성 / 이 정 표

leegoongtr@naver.com








2006년 7월 을 기준으로 하여 팔에 붙는 더미는 1개로 통합 되었음을 미리 말씀 드립니다.

해당 이미지는 7월 이전의 셋팅에 기준 한 것이니 착오 없길 바랍니다.

하나로 통합 될 foot dumy 는 center dumy 와 같은 이름의 형식으로 바이펫의 footstep 위치에 위치 하게 됩니다. 법석씨께 확인 바랍니다.








더미의 생성 : 적당한 크기로 처음 생성하십시오.처음 생성하면 스케일값 100 으로 설정 됩니다.어떤 크기로 생성 하던지 초기 값은 아마 100 으로 설정 될겁니다.

가능한 더미의 크기를 변형 하지 마십시오.처음 생성할 때 적당한 크기로 생성을 해야 합니다.






더미의 위치 : 생성한 더미를 선택하고 해당 이름을 정해 준 후 해당 파트 즉 R_Handdumy 라고 한다면 이 더미를 선택하고 얼라인 툴로 바이펫의 RHand 에 정렬하도록 합니다. 정렬할때 피봇포인트가 아니라 센터 로 설정 하고 하시면 됩니다.

또는 셋팅 하시는 분이 어느정도 감으로 위치를 잡으셔도 무방합니다.

이 더미는 손에 붙을 이펙트의 위치를 잡기 위함과 무기 아이템의 위치 기준 더미가 될 것입니다.








위치를 모두 잡았다면 더미의 로컬 피봇을 확인합니다.

로컬피봇은 Up Vector 가 Z 로 되어 있어야 합니다.

만약 이 설정을 할 때 피봇이 잘 못 되어 있다면 아래 그림과 같이 Affect Pivot Only 활성후 Align to World 하면 큰 문제 없을 것입니다.





모든 피봇 셋팅이 끝났다면 모든 해방 더미를 해당 바이펫 노드에 차일드로 링크 걸어 줍니다.

단 Spinedumy 는 바이펫의 Spine 이 3 개 라고 가정 하에 Bip01 Spine1 에 걸도록 합니다.

























마지막으로 더미에 겜브리오 고유 속성을 붙혀 줘야 합니다.





더미를 모두 선택 하고 Keep 이라고 붙어 있는 아이콘을 클릭하여 팝업창을 엽니다.

위 그림처럼 체크박스에 체크 한 후 Apply to Selection This 버튼을 클릭 한 후 프로퍼티 유저 디파인을 보고 고유 속성이 잘 붙어 있는지 확인 합니다.

NiOptimizeKeep 이라고 붙어 있으면 된겁니다.

위치는 상관 없습니다.

이렇게 하여 더미의 기본 셋팅은 끝납니다.

반응형

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

[펌] 이펙트 에니메이션 방법  (1) 2011.05.20
강의자료 - 파티클 예제  (0) 2011.03.22
파티클 컨트롤 해보기  (0) 2011.02.24
이펙트 출력  (0) 2011.02.08
이펙트 작업에 필요한 기능  (0) 2011.01.27
Posted by blueasa
, |

Gamebryo 관련 사이트

Link / 2011. 1. 21. 01:32

출처: http://stnzone.com/gboard/blog/?id=1003 -> 자존심님의 블로그

 

 

 

http://www.gamebryo101.com/

 

호오... 상당히 폐쇄적인 겜브리오 국내 커뮤니티에 비하면 여기 어떤 곳일지??

 

일단 링크!!!



출처 : http://jedikim72.blog.me/10038718610

반응형
Posted by blueasa
, |

충돌정보를 넣어줄 노드는 임시로 NiNodePtr spNiNode; 로 한다~

우선은 바운드 박스로 한다!

NiBoxBV* CollisionBox;
CollisionBox = NiNew NiBoxBV();
CollisionBox->SetCenter(NiPoint3(5.0f,5.0f,5.0f));//바운드박스의 중앙을 잡는다.


바운드 박스의 사이즈 설정
CollisionBox->SetExtent(0, 10.0f);
CollisionBox->SetExtent(1, 10.0f);
CollisionBox->SetExtent(2, 10.0f);

 

여기까지 바운드박스 설정을 한후 충돌데이터에 링크 시킨다.
NiCollisionData *pCollisionData;

 

추가 시켜야할 노드의 정보로 충돌 데이터 생성한다.
pCollisionData = NiNew NiCollisionData(spNiNode);
pCollisionData->SetModelSpaceABV(CollisionBox);//위에서 만든 충돌박스 링크!

 

충돌방식에 대해 세팅한다.
pCollisionData->SetPropagationMode(NiCollisionData::PROPAGATE_NAVER);//콜백을 호출하기 위한 정보 세팅
pCollisionData->SetCollisionMode(NiCollisionData::USE_ABV);//ABV형식의 충돌검사를 한다는거?

 

이로서 충돌 데이터는 완성이다 이제 링크다
spNiNode->SetCollisionObject(pCollisionData);

 

이 박스의 와이어 프레임출력하고 싶을 시에는 박스정보를 이용해 색상을 설정하여 노드를 생성한다.
NiNode* CollisionBoundBox = NiDrawableBV::CreateWireframeBV(CollisionBox, NiColor(0.0f,1.0f,0.0f),1);

 

이걸 노드에 Attach!!!!
spNiNode->AttachChild(CollisionBoundBox);

 

이제 완성된 노드를 업데이트 시키면 된다아...
spNiNode->Update(0.0f);
spNiNode->UpdateProperties();
spNiNode->UpdateEffects();

 

이 노드를 CollisionGroup의 Collider이나 Collidee로 추가후

FindCollisions을 호출시 충돌이 일어나면 연결된 함수 포인터로 넘어간다.

 

...다른 좋은방법 아시는분 설명좀...;

출처 : http://tong.nate.com/ddpstddpst/mymaintong

반응형

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

겜브리오의 텍스처 공유  (0) 2011.11.11
DirectX 디바이스 얻어오기  (0) 2010.11.04
여러창 동시 렌더링  (0) 2010.07.02
Gamebryo 템플릿 클래스  (0) 2010.04.08
렌더러를 만들어보자  (0) 2010.04.08
Posted by blueasa
, |

기본적으로 랜더러는 여러개 생성이 되질 않으므로 하나의 랜더러를 가지고 카메라를 바꿔가며

 

여러창에 랜더링을 해주어야 한다.

 

그것을 위해 제공되는 아주 편리한 메소드가 있더라!

 

CreateSwapChainRenderTargetGroup(0, 윈도우핸들)

 

이것이다.

 

이것을 사용하게 되면 현 윈도우 핸들에 맞춰서 하나의 RenderTargetGroup이 리턴 된다.

 

문제점이 있다면 랜더타켓을 생성만 해주기 때문에 현재 랜더러 해상도에 맞춰서 랜더타켓이 생성이 된다.

 

만약 윈도우 사이즈가 변경이 된다면 랜더러의 해상도를 바꿔주면서 현재 랜더타켓을 삭제하고 다시금 랜더타켓

 

을 생성해야 하는 비효율적인 일을 해야한다.

 

GetSwapChainRenderTargetGroup(윈도우 핸들)

 

위의 메소드는 생성된 랜더타켓을 윈도우핸들을 인자로 받아 그게 맞는 랜더타켓을 리턴받게 된다.

 

이제 실제 랜더를 할때는 생성한 랜더타켓을 이용해

 

BeginUsingRenderTargetGroup(랜더타켓, 초기화)

 

//여기에 랜더링~

 

EndUsingRenderTargetGroup()

 

이후 디스플레이 시켜주면 끝이다.

 

툴에 4방향 랜더링 할때 유용할듯..

출처 : Tong - The_Ruins님의 GameBryo Engine통

반응형

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

겜브리오의 텍스처 공유  (0) 2011.11.11
DirectX 디바이스 얻어오기  (0) 2010.11.04
충돌 박스 노드에 임시 생성  (0) 2010.07.02
Gamebryo 템플릿 클래스  (0) 2010.04.08
렌더러를 만들어보자  (0) 2010.04.08
Posted by blueasa
, |