본문 바로가기

OGRE 엔진활용

[Ogre] 파티클 입자가 Fog 와 함께 나오기 위한 Material Setting


예전에 필드에 구름과 같은 효과를 주기위해 Fog를 낮게 깔고, 파티클 입자를  몇군대 방출을 하려고 했던 적이있었다.
이때 발생하는 문제점은 입자에 적용된 알파값이 Fog가 깔린 부분을 지날때 사각박스로 보이는 문제였다.
이때는 해결법을 몰라 잠시 접어뒀었는데, 어제 누군가 물어보길래 문득 드는 생각이 있어 해봤더니, 해결했더라는 것...

기억하는 Material 속성은 아래와 같다.

ex)
material test
{
technique
{
pass
{
lighting off
depth_write off
scene_blend alpha_blend

texture_unit
{
texture plare.png
tex_address_mode clamp
}
}
}
}


이런식으로 구성했을때, 일단 Fog와 겹쳐진 입자들도 제대로 표시되었던걸로 기억한다.
메트리얼에 쓰였던 texture 이미지 포멧은 png였고 이미지를 제외한 바탕색은 흰색으로 되어 있었다.
(png는 이미지 전체에 자체적으로 알파가 깔려있는 것으로 알고 있다.)

아마도, 'scene_blend alpha_blend' 옵션과 png 조합으로도 fog와 겹쳐졌을때 제대로 나올것으로 생각한다.

단, scene_blend alpha_blend 옵션을 썼을때 Plane 뒤에 겹쳐진 Plane이 제대로 표기되지 않는 문제점이 발생할수도 있는데, 이럴때는 'scene_blend alpha_blend' 옵션이 아닌 'alpha_rejection greater 128'과 같은 옵션을 써볼것을 추천한다.

'scene_blend alpha_blend' 옵션은 텍스쳐에 포함된 알파값을 이용하여 블랜딩을 하는것이지만,
'alpha_rejection greater 수치(0~256)' 옵션은 알파값을 사용해서 픽셀을 파이프 라인에서 제거하는 방법이다.

Format: alpha_rejection <function> <value>
예: alpha_rejection greater_equal 128

function 인자는 depth_function에 열거된 값 중 하나를 사용하고, value 값은 이론적으로 0에서 255사이의 모든 값을 사용할 수 있지만, 일반적으로 하드웨어 호환상의 이유로 0 또는 128로 제한적으로 사용된다.

'tex_address_mode'는 현재 사용하는 텍스처 좌표가 1.0을 넘는 경우 어떻게 처리할 것인지를 정하는 값이다. 모든 텍스처 좌표에 대해서 한꺼번에 설정하는 간단한 형식을 사용할 수도 있고 각 좌표마다 모드를 따로 설정할 수도 있다.
(현재 매트리얼 예제에는 적어놓은 옵션이지만, 실제로 없어도 될것으로 생각되는 항목이다. 테스트는 안해봐서 잘 모르겠다.)