블로그 이미지
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

'텍스쳐공유'에 해당되는 글 1건

  1. 2011.11.11 겜브리오의 텍스처 공유
게임엔진인 겜브리오는 데이타를 공유할 수 있도록 설계가 되어 있어서 자동적으로 텍스처메모리를 공유해서 사용하는 줄 아는 경우가 많다. 

물론 nif를 로딩한 뒤 그 것을 clone하여 사용하면 nif에 사용된 폴리곤과 텍스처메모리는 공유를 해서 사용하지만 다음과 같은 경우에는 텍스처메모리가 공유가 되지 않는다. 

1) a.nif 와 b.nif 가 t.dds 를 같이 사용하지만 텍스처를 내부에 넣어서 추출한 경우
 a.nif 로딩할 때랑 b.nif 를 로딩할 때는 각각 별도의 텍스처메모리로 생성되어서 사용된다.

2) a.nif 와 b.nif 가 t.dds 를 같이 사용하고 텍스처를 외부에 두고 추출한 경우
 a.nif 와 b.nif 로딩할 때 t.dds를 찾아 로딩하지만 역시나 별도의 텍스처메모리로 생성되어서 사용된다.

그럼 clone할 때를 제외하고는 텍스처메모리는 공유를 안된다는 이야기냐?! 기본적으로는 그렇다. 

다만 수동적으로 공유하게 할 수는 있다. 

여기에는 3가지정도의 방법론이 있다.

1) 똑같은 NiStream용 인스턴스를 사용하는 방법

NiStream fp;
fp.Load("a.nif");
:
fp.RemoveAllObjects();
fp.Load("b.nif");

위와 같이 하면 a.nif 에 쓰인 t.dds용 텍스처메모리는 b.nif 에서 공유되어서 사용된다. 

2) NiTexturePalette 객체를 NiStream끼리 공유하는 방법

(NiTexturePalette는 gamebryo에서 텍스처를 공유해서 사용할 수 있도록 만들어 놓은 인터페이스이다. 실제로는 NiDefaultTexturePalette 객체를 쓰면 된다)

NiDefaultTexturePalettePtr spTexturePalette = NiNew NiDefaultTexturePalette;
:
NiStream fp1;
fp1.SetTexturePalette(spTexturePalette);
fp1.Load("a.nif");
:
NiStream fp2;
fp2.SetTexturePalette(spTexturePalette);
fp2.Load("b.nif");

3) 전역으로 텍스처검색을 하도록 NiStream의 설정값을 변경하는 방법

기본적으로 NiStream은 생성자에서 NiDefaultTexturePalette객체를 하나 생성한다. 이때 NiDefaultTexturePalette가 내부검색옵션으로 되어 있는데, 이것을 글로벌검색으로 변경해주면 생성된 NiTexture 리스트를 모두 돌면서 검색해 같은 이름의 텍스처가 있으면 공유해 사용한다.

NiStream fp1;
((NiDefaultTexturePalette*)fp1.GetTexturePalette())->SetSearchGlobalTextureList(true);
fp1.Load("a.nif");
:
NiStream fp2;
((NiDefaultTexturePalette*)fp2.GetTexturePalette())->SetSearchGlobalTextureList(true);
fp2.Load("b.nif");


ps : 편의를 위해서는 겜브리오에서 기본설정이 전역을 찾도록 되어 있고 이를 수동으로 끄게 하는 게 더 편하지 않았을 까 생각해 본다. 


출처 : 
http://stnzone.com/gboard/blog/?id=1689 
반응형

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

DirectX 디바이스 얻어오기  (0) 2010.11.04
충돌 박스 노드에 임시 생성  (0) 2010.07.02
여러창 동시 렌더링  (0) 2010.07.02
Gamebryo 템플릿 클래스  (0) 2010.04.08
렌더러를 만들어보자  (0) 2010.04.08
Posted by blueasa
, |