最近の更新 (Recent Changes)

2013-10-23
2013-10-20
2013-09-12

최신 파일 자료

AndroidBenchmark (1.1)2011-09-26 14:01
AndroidSample_GoMyWay (1.0)2012-04-04 12:22
KinectJME (0.2)2012-01-16 19:12
lib-jar (2011-09-01)2011-09-01 15:18
locale_ja (1.0)2011-09-16 00:06
mikumikustudio (2011-09-02)2011-09-02 20:05
MMSAssetManagerForAndroid (0.21)2012-09-15 22:50
nativebullet (2011-10-15)2011-10-15 08:21
Samples (0.55)2011-09-03 01:23

Wikiガイド(Guide)

サイドバー (Side Bar)

Lighting

前章で作成したサンプルは陰影が全く無いため全然3Dっぽくありません。これでは面白くないため、陰影を付けてみます。

動画

ニコニコ動画 http://www.nicovideo.jp/watch/sm21769504

ライトの種類

陰影に必要なのはライトの設定です。MikuMikuStudioでは

の4種類のライトがサポートされています。

ライトを使う前の準備

ライトを使う前にマテリアルをUnshadedからLightingに変更する必要があります。以下の行を書き換えます。

変更前

    val material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md")
    material.setColor("Color", ColorRGBA.Blue)

変更後

    val mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md") // マテリアルをLightingに変更
    mat.setBoolean("UseMaterialColors", true) // 色指定を有効にする。
    mat.setColor("Ambient", ColorRGBA.Red) // 環境光の色
    mat.setColor("Diffuse", ColorRGBA.Red) // 拡散光の色

実行してみる。

何も表示されません。心配しないでください。これは正常な動作です。Lightingマテリアルを設定した場合、ライトが無い暗闇では何も見えません。

ライトを追加してみる

DirectionalLightを追加する

以下のコードをsimpleInitApp()に追加します。

    val dl = new DirectionalLight()
    dl.setDirection(new Vector3f(1, 0, -5).normalizeLocal())
    dl.setColor(ColorRGBA.White.mult(0.5f))
    rootNode.addLight(dl)
ここではDirectionalLightを設定しています。DirectionalLightは日光のように方向のあるライトです。

実行してみる

陰影が付きました。

AmbientLightを追加する

次に環境項を設定します。

先ほどはDirectionalLightのみを設定したため陰影がはっきりした画像になりました。次は環境光を設定してもう少し柔らかい表現にします。

以下のコードを追加します。

    val al = new AmbientLight();
    al.setColor(ColorRGBA.White.mult(0.5f));
    rootNode.addLight(al);

実行してみる

先ほどより柔らかい表現になりました。

全ソース

package com.example.app
import com.jme3.app.SimpleApplication
import com.jme3.math.{ColorRGBA, Vector3f}
import com.jme3.scene.Geometry
import com.jme3.scene.shape.Box
import com.jme3.material.Material
import com.jme3.system.JmeSystem
import projectkyoto.jme3.mmd.{CartoonEdgeProcessor, UpdateControl, PMDNode}
import projectkyoto.mmd.file.VMDFile
import projectkyoto.jme3.mmd.vmd.VMDControl
import com.jme3.light.{PointLight, AmbientLight, DirectionalLight}

class MainApp extends SimpleApplication {
  def simpleInitApp() {
    val dl = new DirectionalLight()
    dl.setDirection(new Vector3f(1, 0, -5).normalizeLocal())
    dl.setColor(ColorRGBA.White.mult(0.5f))
    rootNode.addLight(dl)

    val al = new AmbientLight();
    al.setColor(ColorRGBA.White.mult(0.5f));
    rootNode.addLight(al);

    val box = new Box(1,1,1)
    val geom = new Geometry("geom1", box)
    val mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md") // マテリアルをLightingに変更
    mat.setBoolean("UseMaterialColors", true) // 色指定を有効にする。
    mat.setColor("Ambient", ColorRGBA.Red) // 環境光の色
    mat.setColor("Diffuse", ColorRGBA.Red) // 拡散光の色
    geom.setMaterial(mat)
    rootNode.attachChild(geom)
  }
}

インデックスに戻る

tutorial2