記事一覧に戻る
TutorialPicoBerry Team

ユニティで3Dを2Dとしてレンダリングする — 角度ごとにスプライトを描き直さないために

ユニティ 6.3で3Dオブジェクトを2Dとしてレンダリングする正確な設定を、公式ドキュメントに基づいてまとめました。核心は三つ——Mesh RendererにMesh2D-Lit-Default(またはSort 3D As 2D Compatibleシェーダー)を入れ、ルートにSorting Groupを付けてSorting Layer・Order in Layerで整列させ、Mesh Rendererの2D › Mask InteractionでSprite Maskに反応させます。通常のURP Litマテリアルでは2D Light・Sprite Maskは動きません。

キャラクターを8方向に回してスプライトを8枚描いたことのある人なら、この罠はもう知っているはずです——角度が一つ増えるたびに絵が一枚増え、そこにアニメーションが加わると、その一枚がフレーム数だけ掛け算されていきます。ユニティ 6.3のURP 2D Rendererは、この掛け算を断ち切ります。3D Meshを一つ、ほかのすべてと同じ2D Light・Sprite Mask・整列(Sorting)のルールに通せば、角度は回転になり、アニメーションは再利用になります。これは回避策ではなく、ユニティが正式にサポートする機能です。この記事では、その設定を公式ドキュメントそのままに——どのマテリアルとシェーダーを使い、整列とマスクをどう有効にし、うまくいかないときに何を点検するかを、正確にまとめます。

3Dの下書きを2Dスタイルのユニティシーンに置き、整列とマスク、ライティング、Game Viewの読み取りやすさまで確かめる様子。

なぜスプライトではなく3Dなのですか?

手描きの2Dとまったく同じ絵になるわけではありません——とりわけ、ピクセルアートやペインタリーな画がゲームの個性そのものである場合はなおさらです。3Dの利点は手描きを置き換えることではなく、角度・アニメーション・繰り返しの修正にかかるコストを再利用することにあります。画面で担う役割は似ていても、それを作る手間は違います。

左:8方向のスプライトを方向ごとに描き直す方式/右:3Dモデルを一つ回転させてすべての方向を再利用する方式——新しい角度が増えるたびにかかる作業量を比較した概念図

作業手描きのスプライト3Dアセットを2Dとして
新しい角度・ポーズ方向ごとに描き直すモデルを一つ回す
アニメーションフレーム単位で描くアセットのアニメーションを再利用
奥行き・描画順レイヤーを手で重ねるSorting Group + Sort 3D as 2D
ライティング・マスクフレームごとに焼き込む2D Light・Sprite Maskが反応

右の列が変えるのは、見た目ではなく反復コストです。新しい角度やアニメーションが要るとき、描き直しから始めるのか、すでにあるものを再利用するのか——その違いです。

2Dの整列ルールを適用する前と後——同じ3Dオブジェクトが Sorting Layer の順序に従って所定の位置に収まります。

二つの戦略:Z深度 vs Sort 3D as 2D

まず一つ決めます——シーンが奥行き(depth)を使うかどうか。

  • 戦略A · Z深度 — 各オブジェクトの実際のZ位置を、視差(parallax)・被写界深度・フォグ・シーン深度の効果に使います。2.5Dゲームに向いています。
  • 戦略B · Sort 3D as 2D — 3Dオブジェクトを、もう一つの2Dシーン要素として扱います。既存のSorting Layerのルールにそのまま従うので、前後の順序はスプライトとまったく同じ方式で決まります。

奥行きがゲームプレイの一部ならA、純粋にルックのためだけに3Dを使うならBです。

Z-depthと2D Sorting Layerを見比べる図——前後の順序の問題を診断するときに使うリファレンス

実際の設定 — 3D Meshを2D Rendererに通す

前提: プロジェクトが2D URPである必要があります。URP Assetのレンダラーが2D Renderer Dataになっていて初めて、下記の2DオプションがMesh Rendererに現れます——2Dテンプレートから始めれば自動で構成されます。

  1. マテリアル — Mesh Renderer(またはSkinned Mesh Renderer)に Mesh2D-Lit-Default マテリアルを入れます。2D URPプロジェクトで3Dオブジェクトを作ると自動で割り当てられ、既存のオブジェクトはMaterialsスロットで選んで差し替えます。通常のURP Litマテリアルでは2D Lightが反応しません。 (公式)
  2. カスタムシェーダーが必要ならAssets › Create › Shader Graph › URP からSprite Lit・Unlit・Custom Litシェーダーを作り、Graph Settingsで Sort 3D As 2D Compatible を有効にします。このトグルを入れないと、整列が2Dのルールに従いません。
  3. 整列 — オブジェクトのルートにSorting Groupを付けます(Component › Rendering › Sorting Group)。グループ内では各レンダラーのSorting Layer・Order in Layerで前後が決まり、カメラまでの距離はルートの位置から一度だけ計算されます。 (公式)
  4. マスク — Sprite Maskに反応させるには、Mesh Rendererの 2D › Mask InteractionNone から Visible Inside Mask または Visible Outside Mask に変えます。このオプションは2D URPプロジェクトでのみ表示されます。 (公式)
  5. ライティング2D Light はURP + 2D Rendererでのみ動作し、Mesh2D-Lit系のマテリアルを入れたオブジェクトが対象になります。

うまくいかないとき — 症状別チェック

症状よくある原因正しい設定
2D Lightが効かない通常のURP LitマテリアルMesh2D-Lit-Default(またはSort 3D As 2D Compatibleシェーダー)
Sprite Maskが効かないMesh Rendererの2D › Mask Interaction = NoneVisible Inside/Outside Mask
前後の順序が入り乱れるSorting Groupがない / Order in Layer未設定ルートにSorting Group + Sorting Layer・Order in Layer
Sceneでは正常なのにGameで崩れるGame Viewでレンダー順序を未確認実際のプレイカメラでGame Viewで検証
2Dオプションがそもそも出てこないURP Assetに2D Renderer Dataがないプロジェクトを2D URPに設定

Scene Viewでは正常なのにGame Viewで崩れるなら

単体で見れば問題ないモデルも、実際のカメラでは崩れることがあります。整列・マスク・ライティングは、必ずGame Viewで、プレイヤーが実際に見るカメラ距離で確認してください。

Scene ViewからGame Viewまで追いかけて——手前の大きな木に隠れてもキャラクターが読み取れるか、奥にある橋や水のレイヤーと奥行きが合っているかを確認します。

3Dはスプライトより安いのですか?

自動的に安くなるわけではありません。ドローコール・マテリアルの数・シェーダーのコスト・スキンドメッシュの負荷は、いずれもターゲット機で計測する必要があります。得をするのは見た目ではなく反復からです——角度が増え、アニメーションを再利用し、大きなオブジェクトをフレームごとに描き直さずに済むようになったとき、コストが回収されます。ですから判断は「3Dのほうが安い」ではなく、「このプロジェクトで、それに見合うだけの反復コストが生まれるか」で下してください。

いつ3D、いつスプライトのまま

3Dが得スプライトのほうがよい
回転・多方向のキャラクター角度が一つだけで、今後も増えない
アニメーションを再利用するユニットピクセルアートの手触りがそのままアイデンティティ
手のかかるボス・頻繁に変わる小道具小さく単純で、3Dのオーバーヘッドが割に合わない

下書きはPicoBerryで手早く

このワークフローの出発点は、使える3Dの下書きです。PicoBerry でテキストや画像からシルエットのはっきりした下書きを手早く作り、上の設定でユニティシーンに通します。AIがアーティストの代わりになるのではなく、最初の下書きまでにかかる時間を縮めるということです。

Unityで3Dの下書きを作る → — テキストや画像から始めて、そのままユニティシーンで検証できます。無料で始められ、カード登録は不要です。

AIの下書きをユニティの中で仕上げる — UModeler X

生成結果は完成したアセットではなく、下書きです。2Dシーンにきれいに収めるには、シルエットやピボット、ポリゴンに手を入れたくなることがありますが、そのたびに別のツールへ書き出して読み込み直す必要はありません。UModeler X は、モデリング・UV・ペインティング・リギングをユニティエディターの中にそのまま持ち込むので、AIが作った下書きを、シーンがすでに息づいているその場所で手直しできます。

ユニティエディター内のUModeler X——Push/Pull・プリミティブ・モデリングツールで、AIが作った3Dメッシュをその場で編集する様子

生成はPicoBerry、仕上げと調整はUModeler X——どちらもユニティを離れずに完結します。

次に読む

ひとことで言うと

ユニティ 6.3のURPは、3D Meshを2Dとしてレンダリングすることを正式にサポートします。Mesh2D-Lit-Defaultマテリアル(またはSort 3D As 2D Compatibleシェーダー)+ルートのSorting Group+Mesh Rendererの2D › Mask Interaction——この三つで、3Dはスプライトのように整列し、光を受け、マスクされます。通常のURP Litマテリアルでは動かないので、必ずGame Viewで検証してください。そうすれば、角度をもう二度と描き直さずに済みます。

続けて読む