25 de abril de 2010

Problemas com o canal ALPHA ?

Quando temos um MODELO (MDL) com TEXTURAS em canal ALPHA por causa de algum efeito como tipo de cabelo ou outros que exijam  transparência , nos deparamos com um certo problema ao ver o modelo no 3DGS.


Provavelmente o modelo irá ficar estranho dessa forma como mostrado nos exemplos dessas  duas imagens :

  Note as falhas do z-buffer do render.



 Aqui vemos que o boné da cabeça do personagem está pra trás e não pra frente da cabeça e outros erros de z-buffer que podem aparecer caso o modelo esteja com canal ALPHA.














Para consertar esse problema de z-buffer segue o C-SCRIPT que deve ser adicionado ao seu MODELO.

function mtl_vegetation_init
{
 vec_set(mtl.emissive_blue,mat_model.emissive_blue);
 vec_set(mtl.ambient_blue,mat_model.ambient_blue);
 vec_set(mtl.diffuse_blue,mat_model.diffuse_blue);
 vec_set(mtl.specular_blue,mat_model.specular_blue);
 mtl.power=mat_model.power;
 mtl.albedo=mat_model.albedo;
 mtl.skill1=pixel_for_vec(vector(128,0,0),0,8888); }

material mtl_vegetation
{
 event=mtl_vegetation_init;
 effect=
 "
 texture entSkin1;
 dword mtlSkill1;

 technique vegetation
 {
  pass p0
  {
   Texture[0]=;
   ZWriteEnable=True;
   AlphaBlendEnable=False;
   AlphaTestEnable=True;
   AlphaRef=;
   AlphaFunc=Greater;
   CullMode=CCW; // CCW or None

   ColorArg1[0]=Texture;
   ColorOp[0]=Modulate2X;
   ColorArg2[0]=Diffuse;
  }
 }
 technique fallback{pass p0{}}
 ";
}

action personagem
{
 my.transparent=off;
 my.flare=off;
 my.material=mtl_vegetation;
}


Para sem efeito das bordas, mais simplificado use esse:

material mat_alphatest
{
  effect =
  "
    technique alpha_test
    {
      pass p0
      {
        zWriteEnable = true;
        alphaTestEnable = true;
        alphaBlendEnable = false;
      }
    }
  ";
}

action apply_alphatest_material
{
  my.material = mat_alphatest;
}

Resultado com o script acima adicionado ao MODELO :



 Caso seu MODELO não tenha nenhum efeito que seja necessério como cabelo por exemplo, recomendo usar TEXTURAS em BMP ou PCX assim não precisará usar o script acima.

Fonte: http://www.opserver.de/wiki/index.php/ImprovedOverlay

0 comentários:

Postar um comentário

Gostou ? Criticas, sugestões, deixe um comentário.