スレの内容内の話題であれば、話題がそれても大丈夫です。
回り回って何か役立つことがあるかもしれません。
せっかくなのでマルチテクスチャのシェーダーを作ってみました。
作り方がわからないという人もいると思うので、発表しようと思います。
シェーダー
wtexture.vert
wtexture.frag
sample.material
テクスチャ画像
test0.png
test1.png
sampleというオブジェクトに対するシェーダーだと思ってください。
何をしているシェーダーかというとtest0.pngのテクスチャに対し、
test1.pngのテクスチャを加算しているだけです。
実用的なシェーダーではありませんが、
マルチテクスチャの仕組みのサンプルとしては十分だと思います。
test0.pngはできるだけ暗い色のテクスチャで、
test1.pngはできるだけ明るい色のテクスチャで実行してみて下さい。
wtexture.vert
//------------------------------------------------------------------------------
// attribute
attribute vec4 a_position;
attribute vec3 a_normal;
//------------------------------------------------------------------------------
// uniform
uniform mat4 u_worldViewProjectionMatrix;
//------------------------------------------------------------------------------
// varying
varying vec3 v_normal;
//------------------------------------------------------------------------------
// main
void main()
{
v_normal = a_normal;
gl_Position = u_worldViewProjectionMatrix * a_position;
}
wtexture.frag
//------------------------------------------------------------------------------
// uniform
uniform sampler2D u_texture0;
uniform sampler2D u_texture1;
//------------------------------------------------------------------------------
// varying
varying vec3 v_normal;
//------------------------------------------------------------------------------
// main
void main()
{
gl_FragColor = texture2D(u_texture0, v_normal) + texture2D(u_texture1, v_normal);
}
sample.material
material wTexture
{
u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
sampler u_texture0
{
mipmap = true
wrapS = REPEAT
wrapT = REPEAT
minFilter = LINEAR_MIPMAP_LINEAR
magFilter = LINEAR
}
sampler u_texture1
{
mipmap = true
wrapS = REPEAT
wrapT = REPEAT
minFilter = LINEAR_MIPMAP_LINEAR
magFilter = LINEAR
}
renderState
{
cullFace = true
depthTest = true
}
technique
{
pass
{
vertexShader = res/shaders/wtexture.vert
fragmentShader = res/shaders/wtexture.frag
}
}
}
material mat1 : wTexture
{
sampler u_texture0
{
path = res/test0.png
}
sampler u_texture1
{
path = res/test1.png
}
}
このシェーダーはオブジェクトの法線だけで実装していますが、
実用的なレベルにするにはやはり複数のUVマップが必要になると思います。
>DRAGON CODE
さり気にミストが実装されていることに驚きました。
やるな、と思いましたね。ゲームとしても面白そうです。
ゲーム内のシェーダーについては自分のレベルではまだよく分からないところの方が圧倒的に多いのですが、
参考にさせて頂こうと思います。