Cubic Enviroment Shading Shader
From GameStudio Wiki
The alpha channel of the model texture specifies how reflective the texture is. entities using this effect should have my.flare=off; and my.transparent=off; so that the engine won't unnecessarily depth sort them because of the alpha channel!
bmap bcube=<cube+6.tga>;
function mtl_envmap_view()
{
mat_set(mtl.matrix,matViewInv);
mtl.matrix41=0;
mtl.matrix42=0;
mtl.matrix43=0;
}
function mtl_envmap_init()
{
//...maybe you should copy the mat_model properties here...
bmap_to_cubemap(mtl.skin1);
mtl.event=mtl_envmap_view;
mtl.enable_view=on;
}
material mtl_envmap
{
skin1=bcube;
event=mtl_envmap_init;
effect=
"
texture entSkin1;
texture mtlSkin1;
matrix matMtl;
technique envmap
{
pass p0
{
texture[0]=<entSkin1>;
texture[1]=<mtlSkin1>;
zWriteEnable=true;
alphaBlendEnable=false;
colorArg1[0]=Texture;
colorOp[0]=Modulate2x;
colorArg2[0]=Diffuse;
colorArg1[1]=Texture;
colorOp[1]=blendCurrentAlpha;
addressU[1]=Clamp;
addressV[1]=Clamp;
texCoordIndex[1]=cameraSpaceReflectionVector;
textureTransformFlags[1]=Count3;
textureTransform[1]=<matMtl>; // transform camera space back to world space
}
}
";
}
instead of using an alphachannel you could just use the texturefactor as blending value. you would have to replace:
colorOp[1]=blendCurrentAlpha;
with:
textureFactor=0x40FFFFFF; // -> C0=75%, 80=50%, 40=25% colorOp[1]=blendFactorAlpha;
