アイス キューブのモデリング
このページでは、グラスに入ったドリンクにいれる氷(アイス キューブ)のモデリング方法について説明していきます。
作例として図のようなグラスに入った氷を作ります。

モデリングの要点
- ポリゴン立方体の表面にランダムな凹凸を付ける
-
図のようにポリゴン立方体の表面にランダムな凹凸が付くようにモデリングします。

- 氷どうしと氷とグラスがオーバーラップしないように配置する
-
アイス キューブはいくつか複製し、ドリンクに浮かぶように配置します。それぞれランダムな方向に向けますが、互いに重なったり、グラスにめり込んだり突き抜けたりしないように配置するのは意外に手間がかかります。
今回は、Bullet(バレット)という物理シミュレーションを使って対処していきます。
ポリゴン立方体の作成と編集
グラスとドリンク オブジェクトは、グループごとすべて隠して(H キー)おいてください。
大きさの目安として表示させることもありますが、アイスキューブのモデリング中は基本的に隠しておきます。
ポリゴン立方体を作成し、チャネルボックスの「入力」> [ polyCube ] を選択して1辺2.5cm、分割数「4」に変更してください。
- 幅:2.5
- 高さ:2.5
- 深度:2.5
- 幅の分割数:4
- 高さの分割数:4
- 深度の分割数:4


更に分割を増やしますが、次は「スムーズ」ツールを使い、分割を増やすと同時に角を丸めます。
「スムーズ 」ツール
と「スムーズ表示」(3キー)は意味が違います。
Mayaの日本語版は、同じような名前でも機能が異なるものがあるので注意してください。
❶ オブジェクトを選択し、❷ メインのモデリングメニューで「メッシュ」> 「スムーズ」を選ぶ。❸ オプションは変更せずに ❹ Qキーを押して「選択」ツールに切り替えてツールを抜けてください。


最後に、立方体オブジェクトの頂点をランダムに移動して表面に凸凹を作ります。
もし、オブジェクトがスムーズ表示になっている場合は、「1」キーを押して通常表示にしておいてください。(見分けがつきにくい形状なので、とりあえず「1」を押してください。)
このあと、頂点はほんの少しだけ移動してください。
移動が大きすぎると不自然になるだけでなく、エッジが交差して不正なポリゴンオブジェクトになる場合があります。
❶ オブジェクトを選択し、❷ メインのモデリングメニューで「メッシュの編集」> 「トランスフォーム」を選んでください。

下図のように頂点選択モードに切り替わり、少し見慣れないピボットが表示されますが、❸ 画面上はそのままにしてチャネルボックスを表示してください。

❹ チャネルボックスの下図のように「ランダム」に「0.5」と入力し、return (enter)キーを押してください。

❺ 図のように、チャネルボックスの「ローカル移動Z」の項目名を選択してください。(➡ ビューのピボットハンドルは表示されなくなります。)

ここから頂点をランダムに移動する操作です。
チャネルボックスで選択している「ローカル移動Z]の値をビュー画面上で「中マウスボタン ドラッグ」して調整します。
調整範囲は微妙なので、 必ずcontrol ( Ctrl ) キーを押しながら中ボタンドラッグしてください。(GIF動画参照)

続けて、次は ❻「ローカル移動Y」をチャネルボックスで選択してください。
下記GIF動画を参考に同じようにcontrol ( Ctrl ) キーを押しながら中ボタンドラッグしてください。(動画では後半でエッジの交差がないかタンブルして確認しています。)

次で最後です。続けて、同じように ❼「ローカル移動X」を少しだけ移動してください。

Qキーを押して選択ツールに切り替えてツールを抜けてください。
オブジェクトモードで選択し、3キーでスムーズ表示にして変形具合を確認します。 尚、ワイヤーフレームが表示されている場合は、OFFにすると形状が分かりやすくなります。

もし、「トランスフォーム」ツールでランダム移動をやり直す場合は、「1」キーで「スムーズ表示」をOFFにしてから、チャネルボックスで下図の [ polyMoveVertex ]をクリックしてください。「ランダム」の値を変えてみてもいいかもしれません。(0.0~1.0 の範囲です。)

複数のアイス キューブを配置する
編集したアイスキューブを複製し、グラスの中に配置していきます。
まずは、隠していたGlass_GRPを表示し、その中のドリンク(Drink)オブジェクトはHキーで隠してください。 グラス(Glass)オブジェクトとアイスキューブだけ表示しておきます。。

グラスの内側フェースを複製する
グラスの内側フェースを別オブジェクトとして「複製」し、それを目安にしてアイスキューブを配置していきます。
また、このオブジェクトはそのあと Bullet 物理シミュレーションで「衝突オブジェクト」としても使用します。
ドリンクオブジェクトを作った時と同じ要領で内側フェースを選択します。ただし、ここではグラスの内側フェースを上まで選択してください。なお、サポートエッジは含めません。

シェルフの「複製」をクリックして「新しいオブジェクトとして複製」してください。
この場合は、「ローカル移動Z」はしません。 そのまま選択ツールに切り替えてください。

グループ化されるので、アウトライナでグループを選択して「ヒストリの削除」を実行してください。

「複製」をするとオブジェクト名が変わったり、余分なグループができたりします。
グラスの名前を付け、新しいオブジェクト名を [ Glass_IN ]とします。

2重になったグループをシンプルな構造にします。
中マウスボタンでそれぞれ図のようにドラッグしてください。

図のグループは空になったのでdeleteキーで削除してください。

この後しばらくは、アイスキューブと Glass_INオブジェクトだけ必要なので、Glass_GRPは隠しておいてください。
また、アイスキューブオブジェクトの名前を 「 ICE 」に書き換えてください。

Glass_INオブジェクトを選択しないようにレイヤに入れて「テンプレート」表示にしてください。
レイヤで [ T ] 表示にします。

アイスキューブのマテリアル設定
アイスキューブを複製する前に、マテリアルを設定しておきます。複製前に設定しておくことで後の手間が省けます。
また、その前にアイスキューブの「ヒストリの削除」を実行してください。
「新しいマテリアルを適用」で、いつも通りの「標準サーフェス」を選択してください。
マテリアルアトリビュートで、下記の通りマテリアル名、スペキュラの「粗さ」と「IOR」、透過の「ウェイト」を設定してください。

ビューポートメニュー「既定のマテリアルを使用」
透明なマテリアルを設定したオブジェクトは、ビューでも透明になります。
そのままでは見えないので、下図のビューポートメニューの
ボタンをONにしてください。 ビューの表示が「既定のマテリアル」(グレー表示)になり、見えるようになります。

アイスキューブを複製する
グラス[ Glass_IN ]からはみ出さないように複製して移動を繰り返してください。
4画面で位置を確認しながら操作します。
また、アイスキューブとアイスキューブの間隔をあけるようにしてください。 互いにオーバーラップしてはいけません。
最初のひとつは図のようにグラスの中に移動して複製を始めます。
複製は、ショートカットキー[contrl ( Ctrl ) + D]です。

[ D ]キーを単独で押すと「ピボットの移動」になってしまいます。
ピボットハンドルだけが移動してしまう場合は、この状態です。
もう一度[ D ]キーを短くポンっと押せば元に戻ります。
次のように複製を進めると、比較的混乱せずにできます。
図のように底の近くにサイコロの「5」の目のように並べます。

5つとも選択し、Dキーを押して複製します。 そのまま Y ハンドルで一段上へ移動してください。

2段目の5つを選択し、control ( Ctrl ) + G キーで グループ化します。
そのままEキーを押して「回転」ツールに切り替えます。
回転ピボットの Yハンドル(水平なハンドル)を回しておおよそ45度くらいずらしてください。

STEP3 のグループを選択し、メインメニューの「編集」> 「グループ化解除」を選んでグループ化を解除してください。(デフォルトではグループ化解除のショートカットキーは設定されていません。)
アウトライナのアイスキューブオブジェクトの数とビューでの数が合っているか確認してください。
もしアウトライナでの数が多いと完全にオーバーラップしているオブジェクトがあることになります。
その場合は、アウトライナでひとつずつ選択し、ビューでダブって選択されているオブジェクトを見つけて削除してください。

Bullet物理シミュレーション
Bullet(バレット) を使い、アイスキューブがグラスの中でランダムに浮かぶようにしていきます。
衝突オブジェクトの準備
グラスの内側フェースを複製して作った Glass_INオブジェクトを「衝突オブジェクト」として使います。
「衝突オブジェクト」とは、この場合アイスキューブが浮き上がったときにそれ以上飛んでいかないように閉じ込めておく容器になるオブジェクトです。
したがって、Glass_IN オブジェクトの上端エッジループを押し出してふたを作ります。
Glass_IN オブジェクトを入れたレイヤの [ T ] ボタンを2回クリックして通常の表示にしてください。
Glass_INのふたを閉じる
❶ 上端エッジループを選択し、❷ 「押し出し」ツールで「分割:2」で中心に向かって押し出し、❸ 「センターへマージ」して閉じてください。

頂点をランダムに「トランスフォーム」する
アイスキューブの頂点をランダムに移動したときと同じように、今度はふた部分の頂点だけをランダムに移動します。
こうすることで、シミュレーションで浮き上がってくるアイスキューブがそれぞれランダムに傾いてふたで止まるようにできます。
図のように ❶ 中心とその周りの頂点だけを選択し、❷ 「メッシュの編集」 >「トランスフォーム」を選択します。
❸ チャネルボックスで「ランダム」の値は、「1」にしてください。❹さらに「ローカル移動Z」をランダムに移動してください。(項目名を選択し、ビュー画面上を中ボタンマウスで左右にドラッグします。)こちらを参考にしてください。>>

「トランスフォームのリセット」
Glass_INオブジェクトを移動せずに、ピボットだけをワールド座標原点に移動しておきます。
その前に、必ず「トランスフォームのフリーズ」を実行してください。
その後で、「トランスフォームのリセット」をつぎのようにして実行してください。 マニュピレーターがワールド座標原点に移動するはずです。
❶ オブジェクトを選択し、❷ メインメニューの「修正」> 「トランスフォームのリセット」を選んでください。

「ヒストリの削除」
いつものようにヒストリを削除してください。
ピボットの位置とトランスフォームの値が、下図のようになればOK です。

タイムスライダの確認
物理シミュレーションを設定する前には、必ずタイムスライダで「現在時間」が開始時間(1または0)になっているか確認してください。(単位は「フレーム [ f ]です。)

今回は、終了時間を「120」に設定してください。
フレームレートはデフォルトの「24fps」にしておきます。
以上の準備項目がすべて完了していない場合、この後のBulletシミュレーションは失敗します。
すべて問題がないか再チェックしてから次の設定をおこなってください。
Bullet パッシブ リジッド ボディの適用
Glass_INオブジェクトを「衝突オブジェクト」に設定します。
メインメニューの表示を [Fx]に切り替えてください。

❶ Glass_INオブジェクトを選択し、❷ [ Bullet ] > 「パッシブ リジッド ボディ」の □ を選択してオプションを開きます。

❸ リジッド ボディの作成オプションで、「コライダ シェイプタイプ」を「メッシュ(スタティックのみ)」に変更し、❹「適用して閉じる」ボタンをクリックして作成します。


アクティブ オブジェクトの設定
次にICEオブジェクトをアクティブオブジェクト(物理シミュレーションで動いたり衝突したりするオブジェクト)として設定していきます。
すべてのICEオブジェクトを選択し、トランスフォームのフリーズを実行してください。
さらに、ヒストリの削除を実行してください。
❶ すべてのICEオブジェクトを選択し、❷ Bullet > アクティブリジッドボディ □ (オプション)を選択してください。

「リジッドボディの作成オプション」で、❸ コライダシェイプタイプを「ハル」に切り替えてください。

❹ 「適用して閉じる」をクリックして設定を完了します。

bulletSolverの設定
❶ アウトライナで[ bulletSolver1]を選択し、❷ アトリビュートエディタの bulletSolverShapeタブを選択。 ❸ 「重力」のY の値(中央の欄)を「10」に設定して下さい。


シミュレーションの再生
画面右下のアニメーション再生ボタンをクリックして再生してください。
尚、最初は再生スピードが速すぎるので、図の「プリファレンス」を開くボタンをクリックし、「再生スピード:」を「24fps x 1 」に変更してください。 また、必ず「保存」ボタンをクリックしてからプリファレンスウィンドウを閉じてください。


再生結果
Bulletがうまくいけば次の動画のようになります。
とりあえず、ビューポートをワイヤーフレーム表示( 4 キー)にして結果を確認してください。
タイムスライダを使用したあとで、続けてモデリング操作をする場合は「現在時間」を必ず「開始時間」に戻すのを忘れないようにしてください。
モデリング結果に不具合が生じる可能性があります。
以上でモデリングは完了です。
Glass_INオブジェクトはHキーで隠してください。(削除はしない。)
このあと3つのオブジェクトそれぞれにマテリアルを設定していきます。
尚、今回はテクスチャー画像を使用しないので、UV編集はしません。
また、上の動画のようにビューでGlass_INオブジェクトだけを「ワイヤーフレーム表示」にする方法については下記リンクを参照してください。

