やっとマンタらしくなってきた。

Gonbe Shan

2007年07月19日 12:43


海洋生物第一号はマンタに決めていました。
この1ヶ月間色々試行錯誤しながら、やっと見られるレベルまで来ました。

マンタの仕様は以下のように考えて進めていました。
1.プリムに関して
(1)マンタのボディ:スカルプトプリムを使用(1プリム)
(2)マンタのヒレ :フレキシブルプリム(円錐)を使用。両翼で2プリム
(3)尾       :同上で1プリム

2.スクリプトに関して
(1)マンタのボディ
 ・クリックでのスタート・エンド
 ・円周上の移動
(2)マンタのヒレ
 ・上下に柔らかく羽ばたく感じ

3.テクスチャ
(1)マンタのボディ用1枚
(2)マンタのヒレ用1枚
(3)マンタの尾用1枚

こんな仕様で作り始めました。そしてやっと次のようなところまで到達した訳です。



写真のように柔らかく羽ばたく感じで動かすのに苦労しました。
 

実際に一番時間がかかったのは、やはりマンタのボディ部分です。
LightWaveを使用してモデルを作成してスカルプトプリムにしたのですが、口の両側にあるヒレのような部分が上手くスカルプトプリムに反映しませんでした。
何度も手直ししたり、やり直したり。。。やはりコツがあるようですね。だいぶ良くなったと思います。

次に時間がかかったのがヒレの動きです。
ヒレをある支点を中心に上下に動かすと言う意味では、最初に思いついたのがドアの開閉で使うllSetrot()でした。
しかし、これでは上手く行きませんでした。
その後方形の板を半分にして、そちらを回転するようにしてヒレとリンクさせたり、色々と試しましたが上手くは行きませんでした。

そんな時フレキシブルの調整をしていて、重力パラメータを変更するとヒレが上下に動く事がわかりました。
そこでフレキシブルのパラメータ操作関数が無いか?と調べたところ、有りました!
llSetPrimitiveParams(list rule)です。
これは色々と使える関数だと思います。要はオブジェクトの作成・修正時に出てくる画面のパラメータをスクリプトから設定できる関数です。



上の画像内「重力」の値を -0.5←→0.5 と交互に繰り返し設定する事で、上手い具合に羽ばたく様になりました。


実際のパラメータですが、以下のようになります。

llSetPrimitiveParams([PRIM_FLEXIBLE,
    boolean flexible, //フレキシブル・パス→TRUE か FALSE
    integer softness, //柔軟性
    float gravity, //重力
    float friction, //ドラッグ
    float wind, //風
    float tension, //緊張
    vector <FORCE_X, force_Z force_Y,> //各軸毎のフォース
]);

てな感じですね。実際に値をセットして動きを確かめると実感し易いです。
海洋生物作成にはフレキシブルプリムは必須だと思っています。この特性を上手く利用してリアルなオブジェクトを作成できるようになりたいですね。

ちなみに現在の課題は以下のように残っています。
1)スカルプトプリムの微調整
2)マンタ本体のテクスチャ仕上げ
3)円周上を移動するスクリプトの作成(現在少々悩み中)
4)他のスクリプトを綺麗に仕上げる。(今はコメントも無く見づらい)

早くマンタの雄姿を眺められるよう、今後も地道な作業を続けていきます。
また進捗があればご報告したいと思います。
製作状況紹介