Blender ウォッチング

ローカル処理で画像から3Dモデルを生成する「Pixal3D」を使いこなす!

パラメーターの調整方法を解説

 本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。

「Pixal3D」で生成した3Dモデル作例。「Blender」で少し修正とマテリアルを調整したものの、基本的には生成したまま

 今回は前回ローカルに導入した、画像から3DモデルをAIで生成するTencentARCの「Pixal3D」を色々試してみたいと思います。

「Pixal3D」とは

 「Pixal3D」(PIXel Aligned 3D model)とは、画像を読み込み、3Dモデルに変換してくれるAIモデルで、前回はこの派生プロジェクトでもっと導入が簡単な、「Pixal3D-pipeline」を導入しました。

使用方法

 使用方法をざっとおさらいしてみましょう。

 まず、「Pixal3D-pipeline」をインストールしたフォルダーを開き、「START.bat」をダブルクリックして実行します。

 コマンドウィンドウが開き、しばらくしてWebブラウザーに、「Pixal3D」の設定ページと、数分遅れて「ComfyUI」のページが開きます。

「Pixal3D-pipeline」をインストールしたフォルダーを開き、「START.bat」をダブルクリック。自動的にWebブラウザーに「Pixal3D」の設定ページと「ComfyUI」のページが開く

 「ComfyUI」のページには下図のようなノードツリーを生成します。恐らく前回導入時に作成した物がそのまま残っているはずです。なければ、前回の記事の『「ComfyUI」の起動』を参照し、ノードの追加と設定を行ってください。特に背景処理の無効化も確実に行っておいてください。

右クリックメニューから図のようなノードツリーを作成する。モンキー画像は前回のなごり

 そして背景をアルファ透過させた画像を用意し、画像ノードに指定後実行すれば、しばらくするとタスクが完了し、モデルが生成されます。

 生成された「.glbファイル」は、左上のタスクリストの右側からダウンロード可能です。また、「Pixal3D-pipelineComfyUI_windows_portableComfyUIoutput」フォルダーにも保存されているので、そこから利用してもよいでしょう。

.glbファイルはタスクリストの右側をクリックし、ダウンロードでブラウザーからダウンロードするか、上記インストール先からコピーしよう

 終了したい時は「START.bat」実行で開いたコマンドウィンドウの閉じるボタンをクリックする前に[Ctrl]+[C]キーを押してください。

 いきなり閉じるボタンで閉じてしまってプロセスが残ったままになった場合は、タスクマネージャーでプロセスを停止させてください。

像の生成

 「Pixal3D」の特長は ピクセル毎の特徴を3Dに取り入れることで直接ピクセルと3Dを対応させた、詳細な形状とPBRテクスチャの作成 ということで、凹凸の多い形状でもっとも力を発揮するのではないかと推測できます。

シーサー

 というわけでまずは昔沖縄で撮ったシーサー像です。

元画像(左)と生成モデル(右)

 バラバラと細かいポリゴンが生成されているのが気になりますが、なかなかいい感じです。ただし、毛や歯が省略されているのが気になります。

 写っていない後ろ側もたぶんほぼ想像通り(だいぶ前のことなので覚えていません)。しかし残念ながら、丸く渦を巻いている毛の部分は、タコの吸盤のようになってしまいました。

後ろ側

女性像

 以前TripoAIの記事で使用した、女性像の画像より。

 ドレープはよく再現されていますが、代わりに顔や掲げている物が省略されています。上記のシーサーやこの像の再現されなかったディテールは、後述の「パイプラインタイプ」の変更でだいぶ改善されます。

全体的にはいい感じだが、片目がないなど細部が省略されている

アニメ系キャラクターの生成

リアルよりアニメ系キャラクター

 次にアニメ系キャラクター。編集氏から提供された画像の背景を除去したのですが、元画像には細かいパーティクルがあるため、完全に切り抜きできず、体の周囲に背景が少し残ってしまいました。

 その結果、それが体の周辺にオーラのような形状となって現れ、下図のように面白いことになったのはいいのですが、問題は顔。リアルな「鼻」と「唇」が作成されている所為で、なんとなくおばちゃんみたいな感じに……何度か作成してみましたが、やはり同じで困りました。

体の周囲に残った残骸がオーラのような形状に。顔は……うーん……

フリル満点のウェーブヘアーの少女

 もしかしたら、目の大きさでリアル人体と判定されているのかも……と思い、今度はもっと目が大きい、デフォルメの強い画像をGeminiに生成してもらいました。

 ついでにフリルマシマシのふわっふわなドレスと、ウェーブヘアーという、自分でモデリングするのは超面倒なデザインにしてみました。

 その結果、ボタンの数や顔のバランスは少し違うものの、フリルやウェーブヘアーは無事3Dモデルになりました。ありがたいです。

ボタンなどは少し違うが、地獄のような大量のフリルやウェーブヘアーが見事3Dモデル化されている。

鉢植え

 他にも複雑な物として、どこの家庭にもよくある(?)金のなる木の鉢植えを生成。一枚の画像からよく頑張ったなと思う反面、よく見ると他の枝とくっついていたりして、注意が必要です。

しれっと別の茎との間に横に枝ができていたりするので油断できない

欲しい形状を手に入れるために

 生成される形状は乱数に左右されるため、生成AIでは欲しい形状が手に入るまで、何度も生成を繰り返すことになりがちです。

 それとは別に、PCのVRAMメモリ容量により、生成される形状の品質が上記の例のように制限されてしまいます。しかし、用途に合わせたパラメーターを設定することで、ある程度のコントロールは可能になります。

[Pixal3D Image To 3D]ノード側の設定

 [Pixal3D Image To 3D]ノードではおおまかには[seed](ランダムシード)、[生成後の制御]、[pipeline_type](パイプラインタイプ)、[steps](ステップ数)、[max_num_tokens](最大トークン数)を調整します。

[Pixal3D Image To 3D]ノードの[seed](ランダムシード)、[生成後の制御]、[pipeline_type](パイプラインタイプ)、[steps](ステップ数)、[max_num_tokens](最大トークン数)パラメーター

ランダムシードの固定

 デフォルトでは、ランダムシード値は実行毎に変更されますが、[生成後の制御]を[fixed]に変更することで、シード値を固定できます。

パイプラインタイプの変更

 [Pixal3D Image To 3D]ノードのパイプラインタイプ([pipeline_type])で、生成する形状のディテールの細かさが決まります。

 VRAM 12GBや16GBの環境でデフォルトでの[pipeline_type]は[1024_cascade]が推奨されていますが、本体メモリと一部を共有する「共有GPUメモリ」が多ければ[1536_cascade]でも動作する可能性があります。

[pipeline_type]の[1024_cascade]と[1536_cascade]の違い

 上図のようにあからさまに変わるので、当然こちらで実行したいのですが、本体メモリへのアクセスで速度がかなり低下し、さらにスワップが発生した場合は大幅にスピードダウン、さらに穴などのエラーが増えるリスクもあります。

 VRAMが潤沢でない環境の場合、まずは[pipeline_type]を[1024_cascade]で実行しておき、いい3Dモデルが生成された時はシード値を[fixed]で固定し、[pipeline_type]を[1536_cascade]に上げて再実行するのが基本となります。

最大トークン数の増減

 [max_num_tokens]で設定されている最大トークン数は、形状の生成とテクスチャの品質に影響します。

 デフォルトはVRAM 12GB設定では[49152]に設定されていますが、形状に影響しない(または妥協できる)範囲でもっと小さめの値に設定し、他の設定にメモリを回すこともできます。

最大トークン数が[10240]と[32768]での違い。顔や胸のボタンで顕著(クリックで全体像)

 タスクマネージャーのパフォーマンスモードでVRAMの消費状態を監視しつつ、調整していくことをお勧めします。

ステップ数の増減

 [steps]はサンプリングするステップ数で、VRAMの使用量には影響しません。大きくすると品質があがりますが、計算時間が長くなります。下図の例では倍ぐらいかかりました。

 下はデフォルトの「12」と「20」を比較した例です。確かにディテールの増加やエラーの低減により品質は改善していますが、好みの結果になっているかは別問題なので、実際に生成して試してみる必要はあります。

[steps]が「12」と「20」の比較。品質が上がってはいるものの、顔は左の方が適度に省略されていて好み。穴や緑の髪の毛があるのはメモリ消費量がギリギリ(4096テクスチャで作成)なためか

[Pixal3D Export GLB]ノード側の設定

 [Pixal3D Export GLB]ノードでは、[decimation_target](デシメーションターゲット)と[texture_size](テクスチャサイズ)を調整します。

 前述の[Pixal3D Image To 3D]ノードでランダムシードを固定した場合、こちらのノード設定の変更だけであれば、前のノード出力は再計算されないため、時間が短縮できます。

[Pixal3D Export GLB]ノードの[decimation_target](デシメーションターゲット)と[texture_size](テクスチャサイズ)

デシメーションターゲット

 [decimation_target]はメッシュモデルの目標面数と思われます。減らしてもVRAM消費量はあまり変わりませんが、データ量が大きすぎて扱いに困る場合は、生成された形状の品質が劣化する代わりに小さくすることができます。

テクスチャサイズの増減

 [texture_size]で出力テクスチャのサイズが決まります。

 VRAM 12GB設定では[2048]が推奨されていますが、前述のようにメモリに余裕があればもっと増やせます。

 逆に、前述のシーサーや女性像のように全体的に色の変化がほぼない場合や、「Blender」で後で着色するのであれば、この値を最低まで減らし、他のパラメーターを優先することもできます。

形状のクリーンアップ

 生成された「glb」ファイルを「Blender」で開いてみると多くの部分が形状的に離れており、ちょっと扱いづらいです。

 細々とした破片も生成されているため、ざっと綺麗にしてしまいましょう。

頂点の統合

  1. [Tab]キーで編集モードに入り、[A]キーで全選択します。
  2. [メッシュ]メニューから[マージ]-[距離で]を実行します。バラバラになった頂点が統合され、メインの形状が1つになります。
[Tab]キーで編集モードに入り、[A]キーで全選択後、[メッシュ]メニューから[マージ]-[距離で]を実行(図)

破片の削除

  1. メインの形状の上にマウスカーソルを置いて[L]キーを押します。
  2. [選択]メニューから[反転]を実行すると、周囲の破片が選択されます。
  3. [Del]キーから[頂点]で消します。
メインの形状の上にマウスカーソルを置いて[L]キーを押して選択し、[選択]メニューから[反転]を実行。破片のみが選択されるので、[Del]キーから[頂点]で削除

終わりに

 非常に精細なモデルが生成できて驚きましたが、代わりにメモリも非常に消費するようになっており、メモリの高騰が続く昨今ではモデルの生成精度とともに、省メモリ化の技術が待たれるところです。

 ではまた。