Blender Materials


Blender Material



マルチテクスチャ


マルチテクスチャが可能になり、3つまでの Texture が Material 毎に使用可能です。Texture は、Material Texture パネルからアクセスし、Image と Envmap が使用可能です。

それぞれは blending モードの Mix、Add、Subtract、Multiply、Screen でブレンド可能です。Texuture は一つ前の Texture もしくは Material カラーとブレンドされます。

以下がその動作です。
(訳注:原文では previous のユニットの添え字が current と同じですが、前述と矛盾してしまうため、n-1 にしています)
previous= texture ユニット(n-1) もしくは material カラー
current = texture ユニット(n)
Mix 	= interpolate(previous, current, color factor で補間)
Add 	= previous + current-0.5
Subtract= previous - current
Multiply= previous * current
Screen	= previous + current
画像に USEALPHA が設定されている場合:
previous= texture ユニット(n-1) もしくは material カラー
current.alpha = texture unit(n)

Mix 	= interpolate(previous, current, current.alpha で補間)
Add 	= previous + current.alpha-0.5
Subtract= previous - current.alpha
Multiply= previous * current.alpha
Screen	= previous + current.alpha

もし Image タイプが Envmap であれば、Load オプションで読み込まれた画像により、GL Cube map が生成されます。
使用例もいくつか含まれています。→Blender 2.41 Game Engine demos


ミラーボール効果の作成方法(訳注:かなり加筆してます)


他の Object からの キューブマップテクスチャ座標の生成方法
Material パネルの 'Map Input' 内で、'Object' オプションを使用し、コピー元の Object 名を指定します。そして適用される平面を指定します。(X、Y、Z、None)

'Map Input' パネルの 'Size'/'Offs' オプションにより、どんな画像でも、テクスチャ座標のスケーリングとオフセット移動を行うことができます。


マルチ Material


16までの Material を Mesh ごとに使用可能です。それぞれの Material は複数の Texture を持つことができます。また、Material に特有の(GLSL)シェーダを適用することもできます。

Material は Face ごとにEditButtons 内のリンクや Material パネルによって割り当てることができます。単に好きな Material を 'New' で追加し、Material 番号と Face を選択し、'Assign' を押すだけです。


Material アニメーション(Ipo)


Matrial Ipo を Game Engine で扱われる他の Ipo と同じ方法で使用できます。使用したい Ipo を設定し、Ipo Actuator とつないで使用します。

現在使用可能な Ipo:RGB、Alpha、All Color

Ipo は Material パネル上で[I]キーを押して設定します。現時点では、Ipo は Mesh に最初に設定された Material のみで、Mesh 全体に適用されます。


別の UV 座標


Separate UV coordinates
二つめの UV 座標セットを Python で設定できます。好きな座標を設定し、適用する Texture ユニットを選択します。

この機能はライティングエフェクトに便利です。

座標の設定方法:
# --
import GameLogic
cont = GameLogic.getCurrentController()
obj = cont.getOwner()

mesh_index = 0
mesh = obj.getMesh(mesh_index)
while mesh != None:
  for mat in range(mesh.getNumMaterials()):
    for v_index in range(mesh.getVertexArrayLength(mat)):
      vertex = mesh.getVertex(mat, v_index)
      uvco = [1.0, 0.0]
      unit = 1
      vertex.setUV2(uvco, unit)

  mesh_index +=1
  mesh =obj.getMesh(mesh_index)
# --
他に何も設定されていないと、この二つめの座標系は初回は一つめの物となります。



Blender Materials
Last update: Jan 26 2006.
This section is maintained by Ton Roosendaal.