본문 바로가기

OGRE 엔진활용

[Ogre] 알파 적용된 플랜이 겹쳤을때 뒷부분이 제대로 표기되지 않을경우.


플랜을 활용하여, 부분적으로 알파를 적용한 이미지.. 혹은 두장의 플랜을  십자모양으로 두장을 겹치고(+) 풀과 같은 것들을 표현하고자 할때 일반적인 알파옵션을 쓰면 문제가 발생한다.

알파가 적용되어 뒤에 겹쳐진 이미지가 표시될꺼라 생각했겠지만.. 뒷부분이 뻥뚤린 화면이 나오게 될것이다.

이 문제를 해결하기위해, 두가지 방법을 기술해본다.
첫번째는 메트리얼파일(*.material)을 이용해 해결하는 방법이고, 두번째는 소스에서 직접 material을 만들어 쓸때 코드상 접근해서 해결하는 방법이다.

1. material 의 technique의 하단에 "scene_blend alpha_blend" 옵션을 삭제하고(없으면 상관없다) "alpha_rejection greater 128" 이라고 써주자.

예:
material Examples/LightRibbonTrail
{
 technique
 {
  pass
  {
   lighting off
   scene_blend add <-- 이거는 삭제
   alpha_rejection greater 128

   depth_write off

   texture_unit
   {
    texture ribbonband.png 1d
    tex_address_mode clamp
    filtering none
   }
  }
 }
}

2. 코드상 접근 방법은 Ogre::Pass 클레스에 정의되어 있는

void setAlphaRejectSettings (CompareFunction func, unsigned char value, bool alphaToCoverageEnabled=false)
      Sets the way the pass will have use alpha to totally reject pixels from the pipeline.


함수를 통해 접근할수 있는데 예제는 아래와 같다.

예: pPass->setAlphaRejectSettings(CompareFunction::CMPF_GREATER, Ogre::StringConverter::parseInt("128"));