2011-03-10 4 views
0

Nvidia FX Composer를 사용하여 반투명 CgFX 셰이더를 작성하고 있습니다. 내 렌더링보기에서 장면의 뒤쪽에있는 객체가 음영 처리 된 객체 위에 그려지기를 기대합니다. 내가 DepthMask 켜면FX Composer에서 그리기 순서를 제어 할 수 있습니까?

technique Main { 
    pass p0 
    { 
     DepthTestEnable = true; 
     DepthMask = false; 
     CullFaceEnable = false; 
     BlendEnable = true; 
     BlendFunc = int2(SrcAlpha, OneMinusSrcAlpha); 
     DepthFunc = LEqual; 
     VertexProgram = compile vp40 std_VS(); 
     FragmentProgram = compile gp4fp std_PS(); 
    } 
}

, 다음 완전히 마스크 아웃 얻을 뒤에 객체, 투명성의 목적을 패배 :

여기 내 기술입니다. 물체가 뒤로 당겨 보이지 않는 것처럼 보입니다. 이를 확인하는 방법이 있습니까? 그리고 FX Composer의 렌더러가 항목을 화면에 그리는 순서를 제어 할 수 있습니까?

+0

깊이 마스크가 없으면 깊이 버퍼 기술이 작동하지 않습니다. 사실 객체는 렌더링 전에 깊이 정렬되지 않은 것 같습니다. 이것이 FxComposer에게 가르쳐 질 수 있는지 나는 모른다. 그러나 당신은 당신의 프로그램에서 이것을 할 수 있습니다. – datenwolf

답변

0

이것은 쉐이더 내부에서 수행 할 수 없으므로이를 사용하여 응용 프로그램을 변경해야합니다. 일반적으로 모든 솔리드 오브젝트를 먼저 그린 다음 투명 오브젝트를 맨 위에 그립니다.

투명한 개체를 그렸으면 개체를 렌더링하고 배합 할 수 없습니다. OpenGL은 렌더링 할 수도 있고 렌더링하지 않을 수도 있습니다 (z-buffer culling 때문에).

개체를 다시 정면으로 그리는 것은 실시간으로 수행하기에는 너무 비쌉니다. 다시 정렬해야합니다. 전체 장면 초 60 회!

+0

이 경우 셰이더를 사용하는 응용 프로그램은 FX Composer입니다. 내 질문은 FX Composer가 뒤에서 앞으로 순서대로 씬 오브젝트 (적어도 투명한 오브젝트)를 렌더링하라는 지시를받을 수 있는지 여부입니다. – duggulous