チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第21回:キャラクタースキニングを知る~ジョイントこそ命!
- Maya
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- モデリング
- 中級者
- 学生・初心者
- 教育
- 映画・TV
うれしいことにこの連載も一周年を迎えました。Maya情報の中で、探してもなかなか見つからないマニアックな情報が少しでもみなさんに届いていれば幸いです。
ここ最近は「超マニアック」な難しい話が多かったので、ちょっと気分を変えてしばらく「すぐに役立つ情報」を発信していきたいと思います。いつの間にかコラムにくっついた「f」とか「B!」とか「ツイートする」のマークが気になって仕方ないというのもあったりしたりしなかったり…。
さて、古今東西3DCGを作るのにはまずモデリングをしますよね?モデリングはハマってくると楽しいのでついつい時間を割いてやってしまいます。ところがモデリングした物だけでは切っただけの食材の様に、ただの素材であって料理にはならないわけで、地味なUV作成という下ごしらえをしたり、テクスチャ、マテリアルの設定という味付けをしたりといろいろな作業が必要となります。
アニメーションさせるなら事前にスケルトンを作ったりスキニングすることが必要ですし、リグも必要です。思った以上にそういう地味な部分に時間がかかります。
私が学生の時のことを思い返すと、すぐに作品を完成させたいのに作業がなかなか先に進まない!とイライラしながら作業していたのを覚えています。特にスケルトンとスキニングは3DCGを作る工程では後の方です。しかもレンダリングやアニメーションの直前!早くそっちをやりたい!!と思うのが人の情というものです。
今となっては…こういう下準備こそ大切だとわかりました!といいたいところですが、やっぱり出来ることならやりたくない作業です!特にスキニングはあまり創造性の無い作業ですから、機械的に処理できればいいものなのです:)
自分がしていることが「何を目指して、何を行っている作業なのか」明確になると随分と作業のスピードと品質が上がりますので、今回からしばらくスキニングとスケルトンを見ていきたいと思います。
ちなみにスケルトンとは、ジョイントで作られた一連の骨構造のことです。
そういう経験を誰しも持っていると思います!コウモリの件はさておいて(事実ですが)、スキンウェイトをペイントして、ペイントして、ペイントしまくって、コンポーネントエディタも開いて値を入力して、それでも上手く変形しないという時は、既に大きな問題が起きています。
スキニングのウェイト調整は、わりとすんなり終わるはずなのです。もし終わらないとしたらジョイントの位置自体に問題があるのです。ジョイントの位置がそもそもおかしければ、どれだけウェイトを調整しても品質は良くなりません!私の主観ですが、キャラクターの変形の品質は、
「スケルトン(ジョイントの位置と数)が7割、スキニングが3割」
を占めていると思います。思った以上にスキニングの重要度は低いのです。だから作業もそういう感じの割合で進めないともったいないのです。 ジョイントがどういう役割を果たすのか、スキンウェイトはどういう役割を果たすのか、順々に見ていきましょう。
(ちなみにここでいうスキニングはスムースバインドのスキニングのことです)
逆に正しい位置にあれば、適当にウェイトを割り当ててもそれだけでかなりうまく動くようになります。当たり前のことなのですが、つまるところジョイントの位置がもっとも重要なのです。
作業をしていて何が正しいかよくわからない原因となっているのがジョイントの位置です。スキニングして、動かして、意図したように動いているか確認して初めてジョイントの位置が正しかったかどうかわかります。なのでとにかくジョイントを作ったらスキニングしてみることが大切です。その時「スキンウェイト調整はしなくてよい」です。
スキニングして、「自動でついたスキンウェイト」でもって、意図したように動いているかどうか確認しましょう。だって、スケルトンが変形の品質の7割を担っているのですから、正しい位置にジョイントを置けばスキンウェイトの調整をしなくてもある程度うまく変形するのです。
スキンウェイトの調整が難しいからといって、モデラーはジョイントの位置の決定をなんとなく決めて終わりになりがちです。スキンウェイトの調整はしなくて良いので必ずスキニングをして確認するようにすれば品質は簡単に上がります。
とはいえ、ジョイントの位置は正解の目安がありますので、それを紹介します。
(ゲーム用のスケルトンはジョイント数を最小限にする必要があります。処理を軽くするためです。その場合スキンウェイトをうまく行うことでジョイントの少なさをカバーします。これはさすがにスキンウェイトを調整するまで骨が正しい位置かどうかわかりません。)
当たり前のことではあるのですが、改めて確認しておきたいとても重要なことです。人のような有機的なものであっても同じことがいえるからです。まずは本物と同じようにジョイントを置くことが基本なのです。
機械と異なり有機的なものは肌など体積が可変する物を持ちます。なので「さらに追加の調整が必要となる」と考えるとよいでしょう。
これも当たり前~な感じがしますが重要なのです。なぜなら物の硬さを表現する時、
硬い = 動きが少ない、伸縮が小さい
やわらかい = 動きが大きい、伸縮が大きい
という関係があるからです。
まず構造上正しい位置にジョイントを置いて、それから硬いほうに少しジョイントを寄せると自然に変形するという理屈です!
次の図を見てもらうとよくわかることでしょう。三つの画像の腕モデルのスキンウェイトは同じで、ジョイントの位置を変えて回転させています。ジョイントをひじに寄せればひじの硬さが自然と出てきます。腕の内側にジョイントを置くと、ひじがノビノビになりゴムっぽくなります。
まあ、こういう調整はジョイントが少ないときによくやる調整で、現実の構造と比べて正しいとは言えないのです。本当ならジョイント数を増やして、本物の構造をまねるべきです。ひじなら2つのジョイントで回転させることでより自然な表現ができます。
早くゲームでも関節に2つジョイントを置くスケルトンを使いたいものです。
対処方法として手っ取り早いのは、中間にジョイントを追加する方法です。真中と右のジョイントでそれぞれ45度回転させれば90度回転してもジオメトリは縮みません。
他にもデュアルクオータニオンタイプのスキニングを行えばジョイント数を増やさなくてもこういう問題がなくなります。ゲームでも実用的になってきていますが計算処理が重いのが難点。まだジョイントを増やす方が高速です。
スキンウェイトはジョイントの位置に紐付きます。ジョイントの位置と全く違う場所にウェイトを割り振ることはなく、かならず近隣のジオメトリにウェイトを割り振ります。なので本来すんなり終わる作業です。
スキンウェイトに時間がかかるようなら、スケルトン自体の修正が必要かもしれないということを思い出しましょう!
今回紹介したジョイント位置の基本は「本物と同じ位置に置く」「硬い方に寄せる」「ねじれる場合はジョイントを増やす」というたった3つですが、ゲーム用の人体を作る上ではこれで十分です。
スキニングした後にジョイントを動かすのは、Skin > Edit Smooth Skin > Move Skinned Joints Toolで簡単にできるようになっているので、スキニングして動かして、正しいジョイント位置を探る癖をつけましょう。
次回はゲームならではのスケルトン作成方法を見ていきましょう。
ここ最近は「超マニアック」な難しい話が多かったので、ちょっと気分を変えてしばらく「すぐに役立つ情報」を発信していきたいと思います。いつの間にかコラムにくっついた「f」とか「B!」とか「ツイートする」のマークが気になって仕方ないというのもあったりしたりしなかったり…。
さて、古今東西3DCGを作るのにはまずモデリングをしますよね?モデリングはハマってくると楽しいのでついつい時間を割いてやってしまいます。ところがモデリングした物だけでは切っただけの食材の様に、ただの素材であって料理にはならないわけで、地味なUV作成という下ごしらえをしたり、テクスチャ、マテリアルの設定という味付けをしたりといろいろな作業が必要となります。
アニメーションさせるなら事前にスケルトンを作ったりスキニングすることが必要ですし、リグも必要です。思った以上にそういう地味な部分に時間がかかります。
私が学生の時のことを思い返すと、すぐに作品を完成させたいのに作業がなかなか先に進まない!とイライラしながら作業していたのを覚えています。特にスケルトンとスキニングは3DCGを作る工程では後の方です。しかもレンダリングやアニメーションの直前!早くそっちをやりたい!!と思うのが人の情というものです。
今となっては…こういう下準備こそ大切だとわかりました!といいたいところですが、やっぱり出来ることならやりたくない作業です!特にスキニングはあまり創造性の無い作業ですから、機械的に処理できればいいものなのです:)
自分がしていることが「何を目指して、何を行っている作業なのか」明確になると随分と作業のスピードと品質が上がりますので、今回からしばらくスキニングとスケルトンを見ていきたいと思います。
ちなみにスケルトンとは、ジョイントで作られた一連の骨構造のことです。
スケルトン:スキニング = 7:3
延々と終わらないスキニングのウェイト調整。いつまで経ってもいい形に変形しない。ウェイト調整を始めたのは朝なのに、あれよあれよという間に日は落ち、辺りは暗くなり、多摩川ではコウモリが飛ぶ…。そういう経験を誰しも持っていると思います!コウモリの件はさておいて(事実ですが)、スキンウェイトをペイントして、ペイントして、ペイントしまくって、コンポーネントエディタも開いて値を入力して、それでも上手く変形しないという時は、既に大きな問題が起きています。
スキニングのウェイト調整は、わりとすんなり終わるはずなのです。もし終わらないとしたらジョイントの位置自体に問題があるのです。ジョイントの位置がそもそもおかしければ、どれだけウェイトを調整しても品質は良くなりません!私の主観ですが、キャラクターの変形の品質は、
「スケルトン(ジョイントの位置と数)が7割、スキニングが3割」
を占めていると思います。思った以上にスキニングの重要度は低いのです。だから作業もそういう感じの割合で進めないともったいないのです。 ジョイントがどういう役割を果たすのか、スキンウェイトはどういう役割を果たすのか、順々に見ていきましょう。
(ちなみにここでいうスキニングはスムースバインドのスキニングのことです)
ジョイントが品質に及ぼす影響の強さ
すごく単純な話で、例えば頭を動かすジョイントを変な場所においてしまえば、どうやったってウェイト調整でまともになるとは思えませんよね?逆に正しい位置にあれば、適当にウェイトを割り当ててもそれだけでかなりうまく動くようになります。当たり前のことなのですが、つまるところジョイントの位置がもっとも重要なのです。
ジョイントの位置
はたしてどこにジョイントを置くべきか?作業をしていて何が正しいかよくわからない原因となっているのがジョイントの位置です。スキニングして、動かして、意図したように動いているか確認して初めてジョイントの位置が正しかったかどうかわかります。なのでとにかくジョイントを作ったらスキニングしてみることが大切です。その時「スキンウェイト調整はしなくてよい」です。
スキニングして、「自動でついたスキンウェイト」でもって、意図したように動いているかどうか確認しましょう。だって、スケルトンが変形の品質の7割を担っているのですから、正しい位置にジョイントを置けばスキンウェイトの調整をしなくてもある程度うまく変形するのです。
スキンウェイトの調整が難しいからといって、モデラーはジョイントの位置の決定をなんとなく決めて終わりになりがちです。スキンウェイトの調整はしなくて良いので必ずスキニングをして確認するようにすれば品質は簡単に上がります。
とはいえ、ジョイントの位置は正解の目安がありますので、それを紹介します。
(ゲーム用のスケルトンはジョイント数を最小限にする必要があります。処理を軽くするためです。その場合スキンウェイトをうまく行うことでジョイントの少なさをカバーします。これはさすがにスキンウェイトを調整するまで骨が正しい位置かどうかわかりません。)
実際に動く関節の部分にジョイントを置く
これは機械を動かすスケルトンを作る場合を考えればよくわかります。回転する部分にジョイントを置かないと上手く回転しないのは明白です。なので必ず機械の可動部にジョイントを置きます。スキンウェイトうんぬんではなく、ジョイントの位置でクオリティのすべてが決まります。当たり前のことではあるのですが、改めて確認しておきたいとても重要なことです。人のような有機的なものであっても同じことがいえるからです。まずは本物と同じようにジョイントを置くことが基本なのです。
機械と異なり有機的なものは肌など体積が可変する物を持ちます。なので「さらに追加の調整が必要となる」と考えるとよいでしょう。
ジョイントの位置で硬さが決まる
ジョイントが回転する時、ジョイントに近い頂点は動きが少なく、遠い頂点は動きが大きくなります。下図は極端な表示ですが、こんな感じで回転のピボットから遠いと長い距離を移動します。これも当たり前~な感じがしますが重要なのです。なぜなら物の硬さを表現する時、
硬い = 動きが少ない、伸縮が小さい
やわらかい = 動きが大きい、伸縮が大きい
という関係があるからです。
まず構造上正しい位置にジョイントを置いて、それから硬いほうに少しジョイントを寄せると自然に変形するという理屈です!
次の図を見てもらうとよくわかることでしょう。三つの画像の腕モデルのスキンウェイトは同じで、ジョイントの位置を変えて回転させています。ジョイントをひじに寄せればひじの硬さが自然と出てきます。腕の内側にジョイントを置くと、ひじがノビノビになりゴムっぽくなります。
まあ、こういう調整はジョイントが少ないときによくやる調整で、現実の構造と比べて正しいとは言えないのです。本当ならジョイント数を増やして、本物の構造をまねるべきです。ひじなら2つのジョイントで回転させることでより自然な表現ができます。
早くゲームでも関節に2つジョイントを置くスケルトンを使いたいものです。
ねじると縮む
ジョイントを回転させるとジオメトリが縮んでしまいます。図の上側のモデルでは先端のジョイントを90度回転させています。ジオメトリの中間部分が縮んでいるのがわかります。これだと体積が少なくなり、見た目がおかしくなります。対処方法として手っ取り早いのは、中間にジョイントを追加する方法です。真中と右のジョイントでそれぞれ45度回転させれば90度回転してもジオメトリは縮みません。
他にもデュアルクオータニオンタイプのスキニングを行えばジョイント数を増やさなくてもこういう問題がなくなります。ゲームでも実用的になってきていますが計算処理が重いのが難点。まだジョイントを増やす方が高速です。
まとめ
このようにスキンウェイトの調整をしなくとも、ジョイントの位置や数で変形の品質が決まってしまいます。何度も言うようですが、ウェイト調整をいくらしてもこれらの問題は解決しないのです。スキンウェイトはジョイントの位置に紐付きます。ジョイントの位置と全く違う場所にウェイトを割り振ることはなく、かならず近隣のジオメトリにウェイトを割り振ります。なので本来すんなり終わる作業です。
スキンウェイトに時間がかかるようなら、スケルトン自体の修正が必要かもしれないということを思い出しましょう!
今回紹介したジョイント位置の基本は「本物と同じ位置に置く」「硬い方に寄せる」「ねじれる場合はジョイントを増やす」というたった3つですが、ゲーム用の人体を作る上ではこれで十分です。
スキニングした後にジョイントを動かすのは、Skin > Edit Smooth Skin > Move Skinned Joints Toolで簡単にできるようになっているので、スキニングして動かして、正しいジョイント位置を探る癖をつけましょう。
次回はゲームならではのスケルトン作成方法を見ていきましょう。