必要充分なメカニカルリギング
僕はリガーではありませんが、主人公が乗るトライク(三輪バイク)がオフロードを走行する際のサスペンションやドリフトの動きにこだわるべく、リギングにもチャレンジしました。その手順を紹介します。本職のリガーさんには呆れられるかもしれませんけど、CGに不慣れな人たちに勇気を与えられたら嬉しいです(笑)。

前輪のサスペンション部分のモデルです。これにリギングを施します。

スプリングの内側に仕込んだピストンのパーツです。まずは、これに対してボーンを追加します。Blenderのリグから[Armature]を選んで[Add Bone Constraint]を実行します。Armatureは、他の3DCGソフトにおけるSkeltonに該当します。

ArmatureのObject Data Property(非常口のピクトサインのようなアイコン)で表示方法を[Envelope]に変更。In-frontとNameをONにすると作業しやすいです。下側のボーンの名前を「piston bottom」などと、分かりやすい名前に変えておきます。

上側のボーンを追加して名前を「piston top」に変更しました。ボーンのRadiusなどを変更して、モデル形状に合ったサイズに調整。そして、2つのボーンをコンストレイントの[Damped Track]で親子関係を追加します。これでピストンのリグは出来上がりです。

リギングは、モデル形状に合わせてボーンを配置して、各ボーンにさまざまなコンストレイントを使い分けながら関連付けるという作業のくり返しです。次は、地面に当たる部分に「ground」というボーンを追加します。このボーンが動くと残り全てのボーンが動くという仕組みを作っていきます。

アーム部分にボーン「arm up」を追加。さらにボーン「ground」を複製して、図のような位置に「ground 001」という補助ボーンを追加して、[Keep Offset]で親子関係を設定します。そして「ground 001」と「arm up」を選択した状態でIK(Inverse Kinematics)を追加します。最後に「ground」と「piston bottom」をコンストレイン。「arum up」と「piston top」をコンストレインさせたら完成です。

最後にピストンの表側にあるバネのオブジェクトに、「spring」という名前のボーンを追加。このボーンを「piston bottom」にコンストレイントさせます。その上でバネのボーンと「piston top」を[Stretch To]でコンストレイント。このままでバネの伸縮にオフセットが付いてしまうため、バネの上端に補助ボーン(spring help)を追加して「spring top」とコンストレイントします。そして、バネの伸縮を見た目で調整した上で「spring help」をEdit Modeから「Maintain Volume」を「None」に変更すると自然な見た目でバネが伸縮するようになります。

完成したトライクのリグです。後は、ひたすら各ボーンのコンストレイントを重ねていくことによって複雑なリグが出来上がります。作業は、実際のトライクの仕様書なども参考にしつつ行いました。
HoudiniによるシミュレーションとFX
3Dエフェクトとシミュレーションは、Houdiniで作成しました。エンジンの排気や爆発炎上などにはPyro、主人公のライダースジャケットが風でなびくクロスシミュレーションにはVellumを使いました。
アニメーションとしては150〜200kmという高速で移動しているため、素直にシミュレーションするとものすごく横長に伸びた見え方になってしまいました。そこで、トライクなどの乗り物を原点からあまり動かさない状態にした上でシミュレーションをかけることで、良い見た目になるように調整しました。


NukeによるDeep Compositing
コンポジット作業では、Deep Compositingに挑戦しました。これを使うと、各ピクセルごとに奥行き(デプス)や不透明度、カラーなどのサンプルデータを保持した状態でコンポジット作業が行えるので、3DCG素材の位置や奥行きを変更しても、3DCGソフトに戻って再レンダリングするという手間を省くことができます。コンポジット作業負荷は重くなりますが、確実にクオリティを高めることができました。

結果:色々と勉強はできたけど、TOP100選外……。
制作中はハードな日々が続きましたが、何とか期日までに完成させることができました。結果は、残念ながらTOP100に入ることができませんでした。全工程で新しいツールや機能を試すことができて、すごく良い勉強になりましたが、その分、ひとつひとつの作業の詰めが甘くなってしまったと思います。特に制作後半でキーライトの向きをほぼ反対に変えたことで画のメリハリが弱まったことが敗因だと思います。

第10回 『Chasm’s Call』(2025)
『Chasm’s Call』ルール
ルールの内容
2回目に参加したコミュニティチャレンジです。テーマは「Chasm(深淵)」ということで、奥行きのある画づくりを競うことになりました。シチュエーションは深い穴に限定せず、宇宙空間など自由です。奥行きをどのように描くのか、そうしたアイデアやストーリーも審査ポイントです。





公式サイトを見る
ライティング(陰影)に重点を置く
今回のワークフローです。『Endless Engine』の反省を活かして、TOP100入りすることを目標にしました。そこでライティングのトライ&エラーを効率良く行うためにもほぼ全ての作業をUnreal Engineで行うことにしました。モデルの調整はBlenderで行いました。最後に軽くLUTを充てましたが、9割以上はUEで画づくりしています。

良い画は、モノクロでも様になる
仕上げ段階まではモノクロで画づくりを行う
この作品のテーマは「少年と巨大ロボット」でした。僕のこだわりとして、オリジナル制作では「パグの要素をなんらかのかたちで入れ込む」というものがあります。SNSのニックネームも「Pugman」です(笑)。そこで今回は、巨大ロボットの頭部デザインをパグっぽくしました。
とにかくライティングに最大限のリソースを割くために、建造物やロボットなどのシーンに使ったモデルは市販モデルをキットバッシングで作り替えることで効率化しました。ライティング作業では、その大半をモノクロの状態で行いました。ご存知の方も多いと思いますが、人間の視覚は色よりも輝度に対して敏感だからです。実際、名作と呼ばれる映画の代表的なカットはモノクロで見ても格好良いです。そこで、Blueprintでポスタリゼーションを手早く施せるスクリプトを作成して、その状態でもシルエットが様になっているか、伝えたいストーリーが理解できるか確認をしながら作業を進めていきました。
ワンカットに動きを込める作戦として、主人公を配置するフォアグラウンドをエレベーターにしました。



視線誘導テクニックとして、別フロアの床によるシャッター、キャットウォークを移動する作業員、非常灯ランプなどの発光体、メカニックの作業で生じる火花エフェクトといった演出をどの位置で、どのタイミングにするのが効果的かトライ&エラーをくり返しました。




BlenderとUE間のモデル共有テクニック
先ほど説明したように、今回は市販モデルをキットバッシングすることで背景アセット制作を効率化しました。市販モデルをUEシーンにどんどん配置してレイアウト作業を行い、後からモデルの加工・調整をBlenderで行うというながれで進めました。ここでは、BlenderとUEでモデルデータをインポート/エクスポートする際のコツを紹介します。
POINT 1:ファイル形式は「glTF」がオススメ

UEからBlenderへモデルをエキスポートするときのポイントです。まず、NaniteをOFFにしておきます。そして書き出すファイル形式は「glTF」がオススメです。

Blender上でインポートするときは[Import→glTF 2.0]から書き出したファイルを選択します。

glTF形式だと、UE上のマテリアル設定がテクスチャにベイクされた状態で読み込めます。窓ガラス部分などのトランスルーセントも保持されています。
POINT 2:必ずマテリアル名を一致させておく


次は、Blenderから再びUEにインポートする際の注意点です。適用されているマテリアル名をUEのマテリアルスロット中の名前と必ず一致させてください。

Blenderから書き出す形式はglTFではなく、FBXなどでもOKです(ベイクされたテクスチャは不要のため)。UEに再インポートするときは、UE上のモデルを更新したいので新規に読み込むのではなく[Reimport with New File]を実行します。

すると、UE上のマテリアル設定を保った状態でBlenderで加工したモデルに置き換えることができました。なおUEから書き出したモデルをBlenderに読み込む際は、必ず新規にファイルを作成してからインポートしてください。そうしないとファイル名がUE上のモデル名と一致しなくなってしまいます。
POINT 3:プラグイン「Sketchfab For Blender」エラー解消法

3DモデルやVR・ARコンテンツを公開したり、売買できる「Sketchfab」を利用している人が多いと思います。2021年にEpic Gamesに買収されて「Fab」という名前で改修が進んでいるようですが、残念ながらSketchfabサイトだと検索でヒットするものがFabでは見つけられないことが多々あります。BlenderにはSketchfabへ直接アクセスできるプラグイン「Sketchfab For Blender」がGitHubで公開されていますが、その開発もストップしています。

そのためBlenderバージョン4以降でSketchfabプラグインを使うと、エラーが出てしまいます。そこでプラグインのinit.pyファイルを開き、エラーが起きている行を検索。その行にある”BLENDER_EEVEE”を、”BLENDER_EEVEE_NEXT”に書き換えるとプラグインが正常に動作するようになります。
詳しい解説
結果:見事、TOP100入り!
『Chasm’s Call』では、目標だったTOP100に入ることができました! ライティングに注力する作戦が功を奏したと言えます。「3D Community Challenge」に2回参加した自分なりの考察ですが、ライティングとコンポジション(構図)が特に重視されると思いました。それに続いて、ストーリー(設定)とアニメーション。そして独創性やエフェクトのクオリティが審査ポイントになっている印象です。TOP5に輝いた作品もぜひチェックしてみてください。

モチベーションを維持しながら、成長を続けるには
最後に、僕が考えるスキルアップを続けていくためのコツをお話します。第一に「できるだけ好きなジャンルを見つけること」。義務のウェイトが大きくなるほど長続きしないと思います。次に「目標となる自分より上手いクリエイターを見つけること」。そして「燃え尽きを感じたら、いったん休むこと」です。「パレートの法則」を意識すると、効率良く習得できると思います。「3D Community Challengeには興味があるけど、英語が苦手……」という人は、日本向けのコンペ「三次元無双」があります。今年も開催されるかは未定ですが、まずはアーカイブをチェックしてみてください。