Wonderfulで始めるAlternativa3D

入門編2. マテリアル(表面素材)

マテリアルは3Dオブジェクトを彩る表面素材です。
次項で取り扱う、プリミティブ(3Dオブジェクトの基本形体)も、このマテリアルを設定しないと表示されません。

マテリアルの種類

alternativa.engine3d.materialsパッケージには、以下のマテリアルクラスが存在します。

DevMaterial フラットシェーディング(陰影)風のマテリアル
FillMaterial 単色で塗りつぶすマテリアル
WireMaterial ワイヤーフレームマテリアル
MovieClipMaterial MovieClipを使用するマテリアル
TextureMaterial BitmapData(画像)を使用できるマテリアル
SpriteTextureMaterial
Sprite3D専用の画像マテリアル
   
SpriteMaterial Sprite3D専用の基本マテリアル
SurfaceMaterial サーフェース用の基本マテリアル
Material 基本マテリアル
   
TextureMaterialPrecision TextureMaterialのクオリティ指定の為の定数

実際に使用するのは、以下の6種類
DevMaterial、FillMaterial、WireMaterial、MovieClipMaterial、TextureMaterial、SpriteTextureMaterial

以下3種類は、上記マテリアルの基本クラスで、入門、初級では直接使用する事はありません。
SpriteMaterial、SurfaceMaterial、Material

最後のTextureMaterialPrecisionはTextureMaterialのパラメータを指定する場合に使用する定数クラスで直接マテリアルとしては使用しません。

マテリアルの設定

「入門編1. とりあえず触ってみよう」で使用した、Basic Template を使用し、各マテリアルを設定してみます。

	// マテリアルを作成します
	ver material = new DevMaterial();
					

DevMaterialが設定されていますので、これをFillMaterialに変更します。
FillMaterialは、単色で塗りつぶすマテリアルですので、第一引数に色を指定します。

	// マテリアルを作成します
	ver material = new FillMaterial(0x0000FF);
					

importしているマテリアルのクラス変更も忘れずに

package {
	import alternativa.engine3d.materials.FillMaterial;
					

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得

こんな感じになります。

では、よく使う3つのマテリアルをもう少し詳しく見てみましょう。

DevMaterial

フラットシェーディング(陰影)風のマテリアルです。
「風」としたのは、一般の3Dモデルのフラットシェーディングのように、光源による陰影ではなく、BSPツリー(*1)に基づいて、陰影の濃度が決められます。また、光源を持たないので動的に陰影は変更されません。なので、光源を持つフラットシェーディングは、Ver5.6.0の時点では自作するしかありません(ver7では実装予定らしいです)。

簡単な、面の確認などで使用したりしますが、実際のコンテンツ制作ではほとんど使わないマテリアルです。

インスタンスの生成時に以下の引数を指定できます。(引数はすべてインスタンスのプロパティとして取得できますので後からも設定可能です)
DevMaterial(parameterType:uint = 0, color:uint = 0xFFFFFF, maxParameterValue:Number = 20, showNormals:Boolean = false, normalsColor:uint = 0x00FFFF, minMobility:int = 0, maxMobility:int = 255, alpha:Number = 1, blendMode:String, wireThickness:Number = -1, wireColor:uint = 0)

parameterType:
BSPツリーにおいての可視化のTYPEを指定する引数で、以下6つの定数を指定できます。
DevMateria.BSP_DEPTH=0
DevMateria.DEGENERATE_POLY=4
DevMateria.FRAGMENTATION=5
DevMateria.MOBILITY=1
DevMateria.NON_PLANAR_POLY=2
DevMateria.NO_UV_MAPPING=3

DevMateria.BSP_DEPTH以外は、BSPツリーにおけるMobilityレベルを確認する為のModeらしいのですが、いまいち効果的な使い方がわかりません。

color:uint
基本となる色です。

maxParameterValue: minMobility: maxMobility:
Mobilityレベルを制限する引数ですが、parameterType同様、効果的な使い方がわからないパラメータですので、デフォルトのままでいいでしょう。

showNormals:Boolean
各面(fase)の法線の表示・非表示を切り替えます。trueで表示します。
normalsColor:uint
各面の法線の色です。

以下は各マテリアル共通の引数です。
alpha:Number 
マテリアルのアルファ透明度です。0~1
Alternativa3Dでは3Dオブジェクト(Object3Dから派生するオブジェクトすべて)はalpha値を持っていません。透明度を指定する場合は、マテリアルで指定します

blendMode:String
使用するブレンドモードを指定する flash.display.BlendModeクラスの値です。
alpha同様、3Dオブジェクトでは指定できませんので、マテリアルで指定します。

wireThickness:Number
ワイヤーフレームの太さを指定します。-1で非表示、0で細線、1~です。

wireColor:uint
ワイヤーフレームの色です。

以下のサンプルは
DevMaterial(0,0x00FF00,20,true,0x00FFFF,0,255,1,BlendMode.NORMAL,4,0xFF0000);
で作成した物です。

なお、BlendModeを指定する場合は、flash.display.BlendModeクラスを使いますので、importを忘れずに。

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得


FillMaterial

単色で塗りつぶすマテリアルです。

インスタンスの生成時に以下の引数を指定できます。
なお、DevMaterialと違いcolorは省略できません。
FillMaterial(color:uint, alpha:Number = 1, blendMode:String, wireThickness:Number = -1, wireColor:uint = 0)

color:uint
塗りつぶす色をです。

以下のサンプルは
FillMaterial(0x0000FF,0.2,BlendMode.NORMAL,1,0x000000);
で作成した物です。

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得


WireMaterial

ワイヤーフレームのみのマテリアルです。
なお、Alternativa3Dのワイヤーフレームは、BSPツリーで再帰的に分割された線で表示されますので、一般的な3Dオブジェクトのワイヤーフレームとは表示が異なる場合があります。

インスタンスの生成時に以下の引数を指定できます。
WireMaterial(thickness:Number = 0, color:uint = 0, alpha:Number = 1, blendMode:String)

thickness:Number
ワイヤーフレームの太さを指定します。-1で非表示、0で細線、1~です。
color:uint

ワイヤーフレームの色をです。

DevMaterialやFillMaterialの後半と引数の並びが違うので注意してください。

以下のサンプルは
FillMaterial(0x0000FF,0.2,BlendMode.NORMAL,0,0x000000);
で作成した物です。

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得

 

その他のマテリアル

MovieClipMaterial、TextureMaterial、SpriteTextureMaterialについては、初級以降に解説します。

 

注釈

*1
Alternativa3Dは、空間の奥行きをBSP(Binary space partitioning=バイナリ空間分割)ツリー法という方式で管理しています。 興味がある方はバイナリ空間分割で検索してみてください。

以下のページでも詳しく解説されています(英語ですが・・・)
http://docs.alternativaplatform.com/display/TDEN/BSP-Tree

Menu

入門編

初級編

7. Sprite3Dとは?

8. MovieClipMaterial

中級(インタラクティブ編)

1. インタラクティブなオブジェクト

2. 反応するモデルと反応しないモデル

3. サーフェースごとのマウスイベント

4. フェースごとのマウスイベント

中級(コントローラー編)

1. コントローラーとは?

2. コントローラーをカスタマイズ

3. 重力・衝突判定

4. LookAt

中級(カメラ&View編)

1. カメラZOOMとFOV

2. 複数のカメラとView

3. Viewのクリッピング

中級(メッシュ作成編)

1. 頂点を作成する

2. 面を作成する

3. 表面を作成する

4. UVを設定する

5. メッシュを作る

実践・応用編

1. 読み込んだ画像で絵本を作る

3. GoogleNexusOne

4. 3Dスロット

5. ルービックキューブ

実験編

1. 3dsの読み込みと操作

2. イラレで作ったpathを押し出す

3. 押し出しによるText3D

4. 自作のマテリアルクラスを作る

5. フラットシェーディングマテリアル

6. 衝突判定を利用した跳ね返り

7. Sprite3Dによるパーティクル表現

8. Sprite3Dでピクセルレンダー

9. Objectのグロー、ブラー