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

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Effect (10)
Lecture (15)
Shader (8)
Learn (6)
Shoveling (3)
Bug Report (2)
3DS Max (8)
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 00:00

HLSL로 작성된 셰이더 파일을 컴파일/디버깅 하는 프로그램으로는

RanderMonkey나 FX Composer 등이 존재한다.

하지만 아무래도 사용하기 불편한게 사실이다.

input으로 들어가는 변수나 리소스들을 일일이 매핑해줘야 하는 것도 그렇고,

그렇게 작성된 셰이더 파일을 다시 내가 작업하는 IDE 툴로 가져오는 것도

귀찮은 일이다.

이럴 때 내가 사용하는 작업환경이 Visual Studio 2005, 또는 Visual Studio 2008 이라면

External Tool ( 외부 도구 )를 사용해서 편하게 셰이더 파일을 컴파일/디버깅 할 수 있다.

아래와 같이 'Tools' 메뉴에 있는 External Tool을 클릭하자.




그리고는 'Add'를 눌러서 새로운 External Tool을 하나 만든 다음에 아래와 같이

Command에는 fxc.exe 파일의 경로를 넣어주자.

(fxc.exe는 ms에서 제공하는 셰이더 파일 컴파일러이다. )

( 내가 설치한 DirectX SDK 폴더 경로 )\Utilities\bin\x86\fxc.exe

그리고 Arguments에는 아래와 같이 넣어주자.

물론 옵션은 자기가 넣고 싶은 걸로 바꿀 수 있다.

주의할 사항이 있는데 맨 앞의 '/'앞에 한 칸 띄어야 하고, '/Tfx_4_0' 뒤에도

한 칸 띄어야 한다는 것이다. ^^

/Tfx_4_0 "$(ItemPath)"





출처 : 
http://gigaboy.egloos.com/10732591

반응형

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

알파블렌딩 렌더 설정  (0) 2011.07.22
알파 텍스쳐 블렌딩 공식  (0) 2011.07.22
[펌] Soft Particle (Depth bias blend)  (0) 2011.06.15
쉐이더  (0) 2011.04.04
HDR  (0) 2011.04.04
Posted by blueasa
, |

출처 : http://blog.naver.com/spinx85/140127478677
반응형

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

HLSL Shader file ( fx file ) 컴파일 하기  (0) 2011.08.27
알파 텍스쳐 블렌딩 공식  (0) 2011.07.22
[펌] Soft Particle (Depth bias blend)  (0) 2011.06.15
쉐이더  (0) 2011.04.04
HDR  (0) 2011.04.04
Posted by blueasa
, |

Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
 Device->SetRenderState( D3DRS_SRCBLEND,  어쩌구);
 Device->SetRenderState( D3DRS_DESTBLEND, 저쩌구 );

 

 뭐 이런식으로 설정해서 나오는 알파블렌딩 적용을 통해 나오는 최종값 공식입니다.

 

 FinalColor = TexelColor × SourceBlendFactor + PixelColor × DestBlendFactor

 

 한글로 설명하면

 결과색상 = 소스칼라값 * 소스 블렌딩 계수 + 대상칼라값 * 대상 블렌딩 계수

 

 소스 - 프레임 버퍼에 전송하고자 하는 픽셀 - 그리고자 하는 픽셀

 대상 - 그리고자 하기 이전에 이미 프레임 버퍼에 존재하던 픽셀

 

 이런 최종값을 알파 텍스쳐 블렌딩 계수 변경을 통해 직접 수정할수 있다.

 

Constants

D3DBLEND_ZERO

Blend factor is (0, 0, 0, 0).

D3DBLEND_ONE

Blend factor is (1, 1, 1, 1).

D3DBLEND_SRCCOLOR

Blend factor is (Rs,Gs,Bs,As).

D3DBLEND_INVSRCCOLOR

Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).

D3DBLEND_SRCALPHA

Blend factor is (As, As, As, As).

D3DBLEND_INVSRCALPHA

Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As).

D3DBLEND_DESTALPHA

Blend factor is (Ad, Ad, Ad, Ad).

D3DBLEND_INVDESTALPHA

Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).

D3DBLEND_DESTCOLOR

Blend factor is (Rd, Gd, Bd, Ad).

D3DBLEND_INVDESTCOLOR

Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).

D3DBLEND_SRCALPHASAT

Blend factor is (f, f, f, 1); f = min(A, 1 - Ad).

 Device->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_ZERO);
 Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );

 

 이런 상태 설정후에 블렌딩 방정식은 다음과 같게된다

 

result =   (Src-R, Src-G, Src-B, Src-A) * (0, 0, 0, 0) + (Dest-R, Dest-G, Dest-B, Dest-A) * (Src-R, Src-G, Src-B, Src-A)

         =   (Src-R*0 ,Src-G*0 ,Src-B*0 ,Src-A*0)

           + (Dest-R*Src-R ,Dest-G*Src-G ,Dest-B*Src-B ,Dest-A*Src-A)

         =  (Dest-R*Src-R ,Dest-G*Src-G ,Dest-B*Src-B ,Dest-A*Src-A)   

 


출처 :  http://cafe.naver.com/jzsdn/6116

반응형

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

HLSL Shader file ( fx file ) 컴파일 하기  (0) 2011.08.27
알파블렌딩 렌더 설정  (0) 2011.07.22
[펌] Soft Particle (Depth bias blend)  (0) 2011.06.15
쉐이더  (0) 2011.04.04
HDR  (0) 2011.04.04
Posted by blueasa
, |

소프트 파티클은 들인 노력과 비용에 비해서 큰 시각적 효과를 볼 수 있는 방법인 것 같다. 최근 엔진을 Deferred 시스템으로 엔진을 바꾸면서 소프트 파티클을 사용 하기가 쉬웠다( 비단 soft particle뿐 아니라 DOF, SSAO등 깊이 버퍼가 필요한 놈들은 죄다 ㅎㅎ).

연기나 불 등 여러개의 파티클을 사용하는 이펙트들이 오브젝트와 겹치면 좌측 이미지처럼 경계가 날카롭게 나타난다. 소프트 파티클은 이 칼같이 나타나는 경계를 우측처럼 스무스하게 바꿔 주는 것이 기본 목표이다.

알고리즘도 간단하다. PS단에서 파티클 깊이(카메라로부터의 거리)와 뒷 오브젝트의 깊이가 근접할 수록 알파를 더 빼주는 것이다.

더 빼주는 알파 값 D = saturate(( Z object - Z particle) * scale)

단, 그림과 같이 단순하게 위의 수식으로만으로는 덜 자연스럽게 페이드 아웃이 되어 엣지가 존재하기 떄문에 pow()를 걸어주어 좀 더 자연스러운 페이드 아웃이 되게 한다.

당연한 소리가 되겠지만 파티클의 깊이 정렬이 되어 있어야 자연스러운 모습이 나올 것이다. Volumetric Particles니 뭐니 해서 좀 더 귀찮게 하던데, 큰 시각적 차이도 없어 보이고 소팅만 제대로 되어 있으면 굳이 그렇게 까지 할 필요는 없어 보인다.

이 글을 당신 역시 언능 해보시라~ 야구동영상 볼 시간 조금만 아끼면 금방 해보거늘!!!
반응형

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

알파블렌딩 렌더 설정  (0) 2011.07.22
알파 텍스쳐 블렌딩 공식  (0) 2011.07.22
쉐이더  (0) 2011.04.04
HDR  (0) 2011.04.04
겜브리오 쉐이더 제작시 주의사항  (0) 2011.04.04
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 에서 Fx Shader 를 사용하려고 하면 편리하게 제공된 클래스가 있다. Full Demo에서 사용되어지는 ShaderHelper 라는 클래스인데.. 간단히 어플리케이션 시작시 초기화와 끝날시 해제를 하여준다면 ShaderHelper에서 사용자가 설정한 디렉토리에 쉐이더파일(Fx.등등)에 쉐이더를 모아둔다면 로딩과 해제를 하여준다..

 

처음 Fx파일이 로딩될시 GameBryo Library에 보면 이 쉐이더파일을 Parsr하는  NiD3DXEffectParser라는 클래스가 있다. 이 파서에 보면 GameBryo가 어떤식으로 Fx Shader에 Application에서 Dx를 통해 제공하는 매트릭스(world, view, worldview) 등을 넘기는지를 알수있는데 그것이 세만틱과 각종 주석들이다..(물론 이건 나도 처음부터 궁금했었지만 최근에야 알게되었다, Help파일에 있드라.. 미리좀 자세히 바뒀으면..) 주석에는 desc, description, uihelp, hidden, uiwidget, none name, target, obejct, objectindex... 기타등등이 있고 Semantic을 파서하는 내용을 보면.. 세만틱 내용에 it, trans, transpose, inv, i, inverse, model, space, 기타등등의 이름을 찾아서 있으면 그것을 넘기는 식이다.. 예를들어..

float4x4 viewInv : ViewInverse < string UIType = "None"; >;  
float4x4 viewInv : InvView < string UIType = "None"; >; 

 

위 코드가 있다면 이것을 파서하여 해당단어들의 존재유무로 매트릭스를 넘긴다.위 두개코드에서 넘겨받는 viewInv는 동일하다. 세만틱에 View라는것이 있고 Inverse나 Inv가 존재하면 그걸을 InverseView로 인식하는 식이다. 다른것도 마찬가지이고 SKINBONEMATRIX3 라는 세만틱이 존재하고 그것을 이용한다면 메쉬를 Hardware skinning으로 처리하여 스킨계산을 application에서 하지 않는다.

 

맥스에서 쉐이더로 설정한 값들은 메쉬에 쉐이더 주석의 이름으로 ExtraData로 넘겨져서 들어가져 있어 셋팅을 변화하고자할때는 이 ExtraData를 찾아서 값들을 세팅하여 주면되고 맵등은 메쉬의 TexturingProperty에 shadermap 을 변경하여 주면된다.

 

그 밖에 특정 쉐이더를 직접 어떠한 노드구조 하위에 입히고자 할때에는 아래처럼 하면 된다.

void FindGeomSetMaterial(NiAVObject* pkAVObject, bool bMarkedParent, int nID)
{
  if (NiIsKindOf(NiGeometry, pkAVObject))
  {
  NiMaterial* pkMaterial;
  pkMaterial = NiSingleShaderMaterial::Create("GB_NomalOutLine_TEST");
  //if (bMarkedParent || strstr(pkAVObject->GetName(), "PlanarOccluder"))
   {
   NiGeometry* pkGeom = (NiGeometry*)pkAVObject;
   pkGeom->ApplyAndSetActiveMaterial(pkMaterial);

   const NiMaterial *pkMat = pkGeom->GetActiveMaterial();
   }
  }
  else if (NiIsKindOf(NiNode, pkAVObject))
  {
       // bool bMarked = false;
       // if (strstr(pkAVObject->GetName(), "Occluder"))   // 해당노드의 이름에 Occluder가 들어간 놈들만은. 머 이런식으로..
         bool   bMarked = true;

        NiNode* pkNode = (NiNode*)pkAVObject;

        unsigned int uiChildren = pkNode->GetArrayCount();
        for (unsigned int ui = 0; ui < uiChildren; ui++)
        {
            NiAVObject* pkChild = pkNode->GetAt(ui);
            if (pkChild)
                FindGeomSetMaterial(pkChild, bMarked, nID);
        }
    }
}

[출처]
 < Tips >: Using Fx Shader In GameBryo |작성자 메딥


반응형

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

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