Hallo
今年のSkin Fairは、初めてのHybrid Avatar出品ということもあって、Fairが始まる前は
不安で押しつぶされそうでしたけど、幸い現在まで大きなトラブルもなく、とてもたくさんの人に
”Hybrid Avatar Nea” を受け入れて頂けて、本当に嬉しく思っています。
開催直前まで作業に追われていたのと、年度末のリアルお仕事のあわただしさで記事を書ける時間も
取れなかったのですけど、少し落ち着いてきましたのであらためてこのアバターの製作について、
いくつか記事を書かせて頂きたいと思います。
技術的なお話ばかりで退屈だとは思いますけど、よろしければお付き合いください。
What's Hybrid Avatar ?
”Nea” は前にも書かせて頂いたように”Hybrid Avatar” です。
”Hybrid Avatar” というのは、昨年末にLOGOというお店が最初(?)に出したアバターの形式で、
メッシュで作られた頭部に、従来のシェイプボディを組み合わせたアバターです。
※LOGOのオーナーさんに”Hybrid Avatar” という名称使用について問い合わせをしたところ、
別の言葉を使うとユーザーさんが混乱するでしょうから、一般名称として広めた方がいいでしょうと
仰ってくださり、今回うちのアバターの名称にも有難く使わせて頂きました。
すごく大人の対応をされる方で感謝しています。
Choice of the hybrid avatar
メッシュオブジェクトは従来のプリムよりも細かな形状再現が可能で、スカルプのように制約ごともなく
ある意味とても扱いやすいオブジェクトです。スカルプに比べると読み込みも早く、一瞬で形状が現れます。
”Nea” は、このメッシュで頭部を作成しました。当初はメッシュのフルボディアバターの製作を目指して,
ボディを含めて制作を始めたのですけど、それは下記の2つの理由から断念しました。
1.フルボディメッシュの場合、着ることができる服の選択肢が非常に狭くなって、SLの楽しみの一つである
着せ替え要素が大幅にスポイルされてしまいます。
2.”Nea” は最初からリアル形状のアバター製作を目標としていたため、メッシュも比較的細かくなります。
その細かいメッシュボディの上に更にメッシュ服を着ることはSLへの大きな負荷が考えられます。
Automatic expression change
こうしてメッシュヘッド+従来シェイプボディの”Hybrid Avatar”の製作が始まりました。
私がこのアバター製作で是非実現したかったのは「自立(走)式の表情の変化」です。
アバターの表情を変化させる方法として、HUDのボタンを押して次々に表情を変えるという手法はありますけど、
それは主にスクリーンショットなどのためのものであって、お友達とチャットやボイスで会話中に、会話内容に
応じてHUDのボタンで表情を変えている人がいたら、それは大変なことでしょう。
どうしたら煩わしいHUD操作に追われることなく、アバターの表情を自然に変化させることができるか?
”Nea”の製作の最初の課題はそこでした。
Technical search 1 (Morph)
SLの標準アバターの表情変化はどうやっているのでしょう?まずはそれを調べることから始めました。
いろいろと検索していくうちに、それはモーフィングで行われていることがわかりました。
最初に基本となる形を作って、その頂点を編集して別のモデルを作り、その2点間の頂点の移動を
アニメーションとするやり方ですね。通常の3Dキャラクターアニメーションでよく使われる手法です。
こちらのページをご覧ください。リンデンラボのアバターデータバンクです。
開いたページは頭部のぺーじですが、すごい数のモーフターゲットが用意されています。
つまり、リンデンさんと同じ方法で、同じように表情を変化させるには、クリエーターさんは
こんなにすごい数のモデルを用意しなければいけないんですね。
もちろんモーフィングで表情を変化させることをリンデンラボはユーザーに公開していません。
たとえ公開されたとしても、私はこんなすごい量の作業はとてもとてもできませんw
試しに、ビューワのあるところからこのモデルをアウトプットすることができるので、
実際にアウトプットして再度同じものをインポートして上書きしてみました。
結果は・・・顔が壊れましたw おそらくモーフターゲットの頂点番号が変わってしまったのだと思います。
ということで、リンデンラボと同じやり方で表情を変化させることはあきらめました。
Technical search 2 (Bone)
さて、Nea に表情を与えるには別の方法を考えなくてはいけません。
SLアバターの体や手足を動かしているのは、ボーンとかスケルトン呼ばれる骨のようなものです。
個々の骨格を様々な方向に回転させ、それをスムーズにつなげることで動作のアニメーションが形作られます。
でも、SLアバターには映画の3Dキャラクターのように、たくさんの骨が仕込まれているわけではありません。
指には骨はありませんし、もちろん口やまぶたにも骨はありませんでした。
このことから Nea にはボーン制御による表情変化も用いることができないということになります。
Technical search 3 (Transparency)
さて、ここまでは予想通りでした。
次はオブジェクトの透明度変化によるアニメーションです。これは私にとって一番可能性のある方法でした。
顔のモデルの口部分を切り離し、開閉オブジェクトをいくつか作って、透明度が切り替わるスクリプトを入れて
試してみました。 たとえば A.開いた口 B.中間の口 C.閉じた口 を作ってそれぞれが透明度100⇔0
になるようにします。
ABCの透明度が変わるタイミングをずらせば口の開閉のアニメができるという具合です。
結果は大正解!と思ったのですけど・・・少し甘かったようです。
そういえばSecond Life には、透明なパーツが重なったときに白く見えるという
とは言いつつも、最早ほかの方法はありませんので、この方法を突き詰めてみることにしました。
お鍋の法則 (Law of the pan)
どうすれば透明の重なり問題を解決できるか? 少し頭をひねってみました。
先ほど書かせて頂いたように、透明な2つ以上のものが重なるとその重なり部分は白く見えてしまい
とても正常な表情変化はできません。それなら・・・透明なものは1つだけにすればいいのでは?
ということで、透明度の調整を変更してみました。
A.開いた口 → B.中間の口 → C.閉じた口 と変化させるときにクロスフェードをやめたのです。
Aが完全に透明になるまでは、Bは不透明のまま。Aが透明度100になった時点からBが透明になり始めます。
そしてもちろんBが完全に不透明になるまでは、Cは不透明のままです。
このようにすれば、透明なものが2つ以上重ならないで口を閉じることができます。
ただそのためには、Bは形状的に完全にCを覆うものでないといけないし、Aは更にBを完全に覆うものでないと
いけません。これはお鍋セットの収納方法に似ているので、私は勝手に 『 お鍋の法則 』 と名付けました。
Full Bright
検証していくと、『お鍋の法則』 にも弱点があることが分りました。
ビューワのグラフィック設定で、大気シェーダー:ON 、光と影:ON 、影のプルダウン:なし
と設定した時には、表情の変化の透明の重なり問題が再発してしまうのです。
※影のプルダウンでちゃんと『太陽/月・プロジェクタ』を選んであげれば問題ありません。
これを防ぐ方法は・・・一つだけ見つけました。それは頭部のメッシュオブジェクトのFull Bright 化です。
Full Bright に設定されたオブジェクトは、光の影響を全く受けなくなり自己発光100の状態になります。
このような状態であれば、透明の重なり問題は現れません。
ただ、光の影響を全く受けないので、だれから見ても同じ状態に見えるという利点とは裏腹に
少し変化に乏しい印象を受けます。 もちろんスクリーンショットの撮影の時などはFull Bright を切る
方が味のある表情を作れたりするので、これは切り替え式とすることにしました。
Neck Object
Full Bright にも弱点があります。
標準シェイプボディをを使っている以上、ボディの Full Bright化 は不可能です。
ですので、頭を Full Bright に設定した際には、首にはっきりと境目が出来てしまいます。
これを防ぐ手段として採用したのが首のメッシュ化です。先駆者のLOGOさんのメッシュヘッドは
首の中央部でスパッと切れていますけど、頭部のFull Bright設定がないので問題が起こりません。
しかしうちのヘッドは表情アニメーションを採用したことによってFull Brightへの切り替えが必須となり、
首の境目を目立たなくするために、鎖骨部分までメッシュ化してグラデーションアルファでボディへと
馴染ませています。ただ、フェイスライトの影響を受けにくいサイドからバックにかけては、
光の影響によって境目が目立ってしまっています。
※これを如何に目立たなくさせるかは、今後の取り組みとなります。
長くなってしまいましたけど、数人のの海外ブロガーさんが書いていらっしゃる
当店のメッシュヘッドの首の問題は、こうして起こりました。
こんな細かな技術的なことは、ブロガーさんたちにわかるはずもないですし、
使う人にとってはそんなことはどうでもいいことですので、
ユーザー目線で語って頂けることは大変良いことだと思います。
この問題をうまく解決できるようになればいいのですけど・・・