3Dアセットパイプライン · プロンプトからGLBへ

3Dアセットパイプライン:テキストプロンプトからゲームで使えるGLBまで(手順解説)

自分だけの3Dアセットパイプラインを作る

AIで作った3Dモデルがたどる道のり全体:プロンプト、メッシュ、再トポロジー、UV、テクスチャ、圧縮したGLB。そして、不良アセットがゲームに届くのを止めるチェックポイント。

✦ゲーム
作る:3Dアセットパイプライン

3Dアセットパイプラインとは、モデルが文章による記述からゲームで読み込めるファイルになるまでの、順序立てられた道のりです。記述し、メッシュを生成し、再トポロジーを行い、UVを展開してテクスチャを貼り、検査し、圧縮したGLBを書き出します。Neta Studioではその道のりは、3Dゲームビルダーがブラウザ上のThree.jsに渡すGLBで終わります。したがって各工程は、デスクトップの表示画面で正しく見えるものではなく、ブラウザが耐えられるものを生み出す必要があります。

多くのパイプラインは大きな音を立てて失敗しません。静かに失敗します。エディタでは正しく見えたモデルが、レベルに置くと四十倍の大きさで現れる。あるいは、胴では鮮明だったテクスチャが、UVアイランドを異なる密度で詰めたためにブーツではどろどろになる。以下に挙げるチェックポイントはどれも安上がりなものです。ワイヤーフレームの確認、非多様体の選択、バウンディングボックスの計測。どれも一分もかからず、アセットがシーンに入ってから半日を費やすことになる種類の不具合を捕まえます。

簡潔な答え:3Dアセットパイプラインとは何か

3Dアセットパイプラインとは、記述を、ゲームエンジンやブラウザが読み込めるファイルに変える、順序立てられた工程の集合です。六つあります。対象を言葉で記述する、メッシュを生成する、トポロジーが使いものにならないときに再トポロジーを行う、UVを展開して表面にテクスチャを貼る、ワイヤーフレームと法線とマテリアルスロットを検査する、そして圧縮したGLBを書き出す。テクスチャを貼る対象にとって、この一覧に省略できる工程はなく、各工程には次へ進む前に確認できる関門が一つずつあります。

順序が重要なのは、工程がチェックリストではなく依存関係だからです。再トポロジーは頂点インデックスを書き換えるため、その前に作ったUVマップやベイクしたテクスチャは捨てることになります。テクスチャはUVに合わせて作られるため、テクスチャの後に展開するとテクスチャを作り直すことになります。圧縮は非可逆で最後に走るため、そこで生じる劣化は、三工程前に捕まえるべきだった不具合と見分けがつきません。順序を守らずに工程を走らせると、時間を損するだけでなく、検査を通り抜けながらシーンでは壊れるファイルができます。

各工程を、契約を伴う生産者として扱ってください。第二工程は、メートル単位で三角形数が分かっている単一のメッシュを第三工程に渡さなければなりません。第四工程は、アイランドが一つのテクスチャセットを共有するモデルを第五工程に渡さなければなりません。第六工程は、描画側が期待するものと一対一で対応するマテリアルを備え、容量予算内に収まるファイルを実行環境に渡さなければなりません。後になってアセットがおかしくなるとき、壊れているのはたいてい、書かれることのなかった契約です。

六つの工程をひと目で

各工程には一つの成果物と、一つの特徴的な失敗があります。役に立つのは失敗の列です。アセットを先に進めてよいか判断する前に、各工程の終わりの関門が何を確認すべきかを教えてくれます。

工程生み出すもの最もよくある失敗
1. 記述するシルエット、素材、縮尺、姿勢、様式を固定するプロンプト曖昧なプロンプトが、任意の大きさの融合した複数パーツの物体を返す
2. メッシュを生成する高密度の三角形メッシュ。通常は数万三角形開いた殻、内部の面、側面から使えるシルエットがない
3. 再トポロジーする選んだ三角形予算に収まった清潔なメッシュUV展開の後に再トポロジーを行い、UVを捨てる
4. UV展開とテクスチャ0〜1に詰めたUVアイランドと、アルベド/粗さのセットテクセル密度のむら、目に見える曲面を横切る継ぎ目
5. 検査する確認済みの法線、マテリアルスロット、ワイヤーフレーム書き出し後に見つかる反転法線と空のマテリアルスロット
6. GLBを書き出すテクスチャを埋め込んだ圧縮済みの.glbスキンメッシュにジオメトリ圧縮をかけてウェイトを失う

第一工程:対象を記述する

生成プロンプトは願い事ではなく仕様書です。五つの項目が仕事をします。シルエット、素材、縮尺、姿勢、様式です。シルエットの言葉は、メッシュがどの輪郭に沿って作られるかを決めます。素材の言葉はアルベドと粗さを決めます。縮尺の言葉は比率の基準を定めます。「大きい」ではなく「高さ1.8メートル」と書いてください。生成器には、それが卓上の置物なのか建物なのかを知る他の手段がないからです。姿勢の言葉は、リグを組む対象にとって重要です。中立なAポーズやまっすぐ立った姿勢なら、骨格を合わせられるメッシュが生成されますが、動作のポーズは手足を形に焼き込み、リグを組み直しにくくします。

毎回加える価値のある節が二つあります。パーツ数を明示すること。単一の物体か、本体と台座を分けるか。融合したジオメトリは、生成したアセットにアニメーションを付けたりパーツごとのマテリアルを与えたりできなくなる最もよくある理由です。そして、省くものを明示すること。台座なし、背景なし、地面なし。生成器は空いた空間をもっともらしいジオメトリで埋めます。頼んでいない余分な面は、後で削除しなければならない面です。

  • 弱いプロンプト「石灯籠」— 縮尺も素材も姿勢もパーツ数もありません。生成器があなたの代わりに様式と大きさを選び、高さ9メートルのファンタジー灯籠が返ってきます。火袋には光る水晶が入り、台座が基部に融合していて、それを取り除くのに二十分かけることになります。
  • 強いプロンプト「単一の石灯籠、高さ1.8メートル、六角形の笠、継ぎ目に苔むした風化した灰色の花崗岩、まっすぐ縦に立つ姿勢、空の火袋、落ち着いた写実的様式、一つの物体、台座なし、原点を中心に配置」— どの節も、生成器から奪い取った一つの判断に対応します。縮尺は固定され、素材は固定され、姿勢は中立で、パーツ数は一つです。

第二工程:メッシュを生成する

メッシュ生成には、テキストからメッシュ、画像からメッシュの二通りがあります。画像入力はシルエットをより細かく制御できます。すでに望む比率の参照画像を渡せるからです。テキスト入力は、形が定型的な物体では速い方法です。どちらにしても、返ってくるのは出荷できるアセットではなく原材料です。生成されたメッシュは通常、必要以上に高密度で、三角形の流れは不規則で、表面をUVのためにどう切るかは考えられていません。

何よりも先に三つを確認してください。メッシュが閉じているか、縮尺がまともか、三角形数が作っているシーンで許容できる範囲か。三つ目が否で、その物体が決して変形しないなら、シルエットを保ったコラプス方式のデシメート修飾子は正当な答えです。再トポロジーの代わりにはなりませんが、静的な置物には多くの場合正しい取引です。

1

01

水密の確認:Blenderの編集モードで、特性による全選択 → 非多様体。期待される数はゼロです。笠の下や手足に沿った穴は、生成器が開いた殻を作ったことを意味します。影が正しく出ず、ブーリアンもソリッド化も3Dプリントもできません。

2

02

重複と内部のジオメトリ:距離0.0001メートルで結合し、三角形数を読み直します。内部の面は驚くほど頻繁に生成後も残り、通常のレンダリングで暗い斑点として現れます。

3

03

縮尺:表示画面ではなくNパネルでバウンディングボックスを読みます。0.4メートルのはずの置物が4メートルと計測されるなら、配置する人が縮小しますし、その衝突判定も同じ倍率だけずれます。

4

04

三角形予算:置物はおよそ500〜3,000三角形、主役級の物体は5,000〜15,000、背景の飾りは500未満。生成器の生メッシュが20万三角形なのは普通ですが、出荷するアセットとしては普通ではありません。

第三工程:メッシュが乱れているときに再トポロジーする

清潔な四角面のトポロジーは、書き出し後に表面が仕事をする場合に重要です。つまり変形するものすべて — キャラクター、布、旗、植生 — です。エッジループが、肘が曲がるか潰れるかを決めるからです。細分割する場合、高ポリゴンの細部を法線マップにベイクする場合(均等に分布した四角面と安定したUV配置が必要です)、後で誰かがシルエットを編集する場合、同じ物体の予測可能な低詳細版が必要な場合にも重要です。

遠くから見る静的な置物、シルエットがすでに正しいハードサーフェスの物体、およそ千三角形未満に収まるものには重要ではありません。そうした場合、正しい法線と清潔な輪郭を持つデシメート済みメッシュが正解であり、四角面の流れに一時間かけるのは、レンダリングでは決して取り戻せない一時間です。

順序は決まっています。まずリメッシュかデシメート、次に展開です。BlenderのUV展開の手引きは、継ぎ目を切り始めるときにメッシュが最終形であることを前提にしています。その前提こそが要点です。再トポロジーは頂点インデックスとエッジの流れを変えるため、その前に作ったUVマップは意味のある形ではもはや存在せず、それに合わせて描いたテクスチャはすべて位置がずれます。リメッシュを行い、適用してから、展開の手順に従ってください。1メートルの物体に0.01〜0.02メートルのボクセルリメッシュをかけ、目標面数までクアドリフローをかけるのが標準的な道筋です。デシメートのコラプスは静的なジオメトリ向けの速い道筋です。

第四工程:UV展開とテクスチャ

UV展開は、表面をアイランドに切り分け、それぞれをできるだけ歪みなく平らにし、0〜1のUV正方形に詰めます。スマートUVプロジェクトは、ハードサーフェスの物体におよそ許容できる基準を数秒で与えます。キャラクターや目に見える曲面を持つものは、手で継ぎ目を置く価値があります。手足の内側に沿って、背中に沿って、耳の後ろに。カメラが正面から見る形の中央を横切るような場所には置かないでください。

テクセル密度は、モデルが一貫して見えるかを決める数値です。世界単位あたりのテクスチャ解像度であり、1024×1024のマップを1平方メートルに広げると、1メートルあたりおよそ1,024ピクセルになります。キャラクターの頭が1,024ピクセル毎メートルで、ブーツが300ピクセル毎メートルなら、同じ画面の中でブーツは明らかにぼやけ、どれだけ先鋭化しても直りません。密度を一度決めてから、すべてのアイランドをそれに合わせて拡大縮小し、アイランド同士の差をおよそ10〜20パーセント以内に保ってください。

パッキングには効率だけでなく余白が必要です。1024で4ピクセル、2048で8ピクセルの余白を残し、ミップマップとバイリニアフィルタが隣のアイランドを継ぎ目に引き込まないようにします。ウェブ向けではUVを厳密に0〜1の内側に保ってください。UDIMタイルは一部の書き出しツールが対応していても、ほとんどのブラウザ向けローダーは対応しておらず、二つ目のテクスチャセットは二回目の描画呼び出しを要します。モデルの一部が決して見えないなら、面を削除するのではなく、見える部分にそのUV空間を割り当ててください。欠けた面は、やや密度の低い隠れた領域よりも後で診断しにくいからです。

第五工程:書き出す前に検査する

検査は三つの別々の確認から成り、それぞれ特定の種類の不具合を探します。この順序で行ってください。法線の問題はマテリアルの問題を隠し、マテリアルの問題はワイヤーフレームの問題を隠すからです。

ワイヤーフレーム

ワイヤーフレームに切り替え、三角形の分布を読みます。探すのは、長く薄い細片 — 陰影が悪く、変形はさらに悪い — と、多角形面(glTFの書き出しが独自に三角形化し、ときにこちらが選ばない方向に切ることがあります)、そして誤った場所の密度です。平らな壁が6,000三角形を負い、曲面の笠が200しか負わないような状態です。密度は、生成器が面を出した順序ではなく、曲率と変形に従うべきです。

法線

外向きに再計算し、裏面カリングを有効にした単一の平行光源の下でモデルを見ます。反転した面は黒い斑点として見えるか、完全に消えます。ハードエッジも確認してください。自動スムーズの角度は30度ほどがハードサーフェス向け、60度が有機物向けで、カスタム分割法線は形式変換によって最初に黙って壊されるものです。書き出した後にだけモデルが黒いなら、ジオメトリ圧縮なしで再書き出しし、圧縮器とメッシュのどちらに問題があるかを見分けてください。

マテリアルスロット

スロットを数えます。生成されたメッシュは六つで届くことがよくあり、二つは空、さらに二つは同じ画像の複製を指しています。各マテリアルは描画呼び出しなので、物体が許すなら一つのテクスチャを持つ一つのマテリアルに統合し、空のスロットを削除し、アルファモードを確認してください。合成は並べ替えを強制し塗りつぶし率を食い、マスクは安上がりで、植生や手すりにはたいてい正解です。両面フラグも確認してください。有効のままにすると、見た目の利点なしに陰影計算の表面が二倍になります。

Blenderモデルギャラリー — ブラウザで検査できる実際のBlender書き出しです。

第六工程:圧縮したGLBを書き出す

ブラウザ向けでは、書き出した後ではなく前に容量予算を決めます。単一の置物はおよそ1メガバイト未満、主役のキャラクターは2〜4メガバイト、シーン全体は、中位のノートパソコンで目に見える停止なく読み込ませたいならおよそ15〜20メガバイト未満に収めるべきです。予算を支配するのはテクスチャです。背景の物体は512ピクセル、置物は1024ピクセル、カメラが近づくものだけ2048ピクセルにします。

圧縮には二つの異なる仕事があり、分けて考える価値があります。ジオメトリ圧縮 — DracoまたはMeshopt — は、頂点位置、法線、UVを決まったビット数に量子化し、バッファを並べ替えます。Dracoはたいていより小さいファイルを生み、Meshoptは復号が速く、モバイルではこれが重要です。どちらも精度の水準では非可逆で、メッシュがもともと清潔でなければスキニングのウェイトやモーフターゲットを乱すことがあります。KTX2/Basisによるテクスチャ圧縮は、生のRGBAに復号せずグラフィックメモリ上で画像を圧縮したままにしますが、ローダーが対応しなければならない拡張を要します。glTFの中核仕様が保証するのはPNGとJPEGだけです。

書き出したファイルは、完了とする前に必ずGLBビューアで開くか、3Dゲームビルダーに読み込んでください。書き出しは、法線が反転し、マテリアルスロットが一つに潰れ、親に変換を適用してメッシュに適用しなかったために縮尺がずれる場所です。アセットを生んだツールで試しても何の証明にもなりません。実際に出荷するローダーで試すことがすべてを証明します。

パイプラインが壊れる場所と、それを見つける方法

以下の症状は、うまくいかないことの大半を網羅します。六つのうち四つは一度の検査で見え、書き出したGLBをきちんと試せば、どれも元のファイルを開く必要はありません。

3Dアセットパイプラインの失敗が二つの工程に集中する理由

生成と書き出しが不具合の大半を生みますが、理由は正反対です。生成は制約がありません。モデルは何であるべきかを告げられていないため、縮尺、パーツ数、内部のジオメトリを勝手に作ります。書き出しは破壊的です。データが量子化され、並べ替えられ、一つのファイルに詰められる最初の地点であり、メッシュの潜在的な問題がすべて一度に現れます。第三から第五工程は、不具合を連鎖の破壊的な端から、まだはっきり見える場所へ移すために存在します。

症状原因対処
モデルが真っ黒に描画される、またはシーンで見えない頂点法線の反転または欠落。書き出し時に生じることもある書き出す前に外向きに再計算する。圧縮なしで再書き出しして原因を切り分ける
物体がレベル内で大きすぎる、または小さすぎる単位の不一致 — センチメートルで作り、メートルを期待されている、または縮尺が適用されていないバウンディングボックスを測り、縮尺を適用し、書き出し前にシーン単位をメートルに設定する
テクスチャが胴では鮮明で、ブーツではぼやけるUVアイランド間のテクセル密度のむら世界空間の密度で詰め直し、アイランド同士の差を20パーセント以内にする
GLBが数十メガバイトになり、タブが止まる非圧縮のジオメトリと4096ピクセルのPNGテクスチャ1024/2048に下げ、DracoかMeshoptをかけ、未使用のマテリアルと隠れた面を除く
アニメーション時に肘でメッシュが裂けるリギングの後に再トポロジーを行った、または継ぎ目に沿って頂点が溶接されていないリギングの前に再トポロジーを行う。距離で結合し、スキンのウェイトを再確認する
UVの継ぎ目に沿って明るい線や光が出るアイランドの縁に余白がなく、ミップマップが隣のアイランドをサンプリングする1024で4〜8ピクセルの余白を付け、余白付きでベイクし、アイランドを0〜1の内側に保つ

その世界の中を歩いてみる

スプライトは、立つ場所を持たないキャラクターです。最後の一歩は、他にはないもの — 作ったばかりのシートを、人が歩き回れる世界に置くことです。小さな島、惑星、雨の街角。このサイトのすべての世界は、一つの文章による記述から作られ、遊べるページとして公開されています。

FAQ

3Dアセットパイプラインとは何ですか? +

記述を読み込み可能なファイルに変える、順序立てられた工程の集合です。記述し、メッシュを生成し、再トポロジーを行い、UVを展開してテクスチャを貼り、検査し、圧縮したGLBを書き出します。順序は依存関係で決まります。再トポロジーはUVを破壊し、テクスチャはUVに依存し、圧縮は以前に生じた不具合を隠します。

FBXやOBJではなくGLBを使うのはなぜですか? +

GLBはglTF仕様で定義された単一のバイナリコンテナです。ジオメトリ、マテリアル、テクスチャ、スキニングが一つのファイルに入り、Three.jsやほとんどのエンジンが変換器なしで読み込みます。OBJはマテリアルもアニメーションも持ちません。FBXは独自の開発キットを必要とします。ブラウザ向けでは、GLBだけが連鎖にもう一つツールを必要としない形式です。

再トポロジーは必要ですか? +

書き出し後に表面が仕事をしなければなりません。変形、細分割、高ポリゴンの細部を法線マップにベイクする場合です。シルエットが正しい静的な置物はデシメートのまま出荷できます。再トポロジーは展開の前、リギングの前に行い、決して後には行いません。

三角形は何個から多すぎますか? +

単一の数値ではなく、画面上の占有率とインスタンス数で予算を決めます。およそ500〜3,000三角形が置物向け、5,000〜15,000が主役級の物体、500未満が背景の飾りです。画面の小さな部分を占め、五十回現れる物体は、三角形ではなくピクセルで予算を考えるべきです。

UV展開を省けますか? +

平らな色か、UVを必要としない手続き型シェーダーを使う場合だけです。しかもそのシェーダーは書き出しに耐えません。glTFが運ぶのはベイク済みの物理ベーステクスチャであり、ノードグラフではないからです。描いたアルベドやベイクしたアルベドを持つものには実際のUV配置が必要なので、テクスチャを貼る前に展開してください。

GLBはどこで試すべきですか? +

実際に出荷するローダーで試してください。3Dゲームビルダーに読み込むか、単体のglTFビューアで開き、四つを確認します。既知の基準に対する縮尺、単一の光の下での法線、マテリアルとアルファモードが残っていること、キャッシュを無効にした状態のネットワーク越しのファイル容量です。

3Dゲームビルダーに戻る

完成した31の3D世界、ゲーム、シーンはすべて一つのページにあり、そのすべてが遊べます。

プラットフォーム:Neta Studioページ:3Dアセットパイプライン:テキストプロンプトからゲームで使えるGLBまで(手順解説)次に読む:/explore/guide/blender-uv-unwrap · /explore/tool/3d-model-generator · /explore/tool/glb-viewer
×