見出し画像

【すべてローカル】画像生成AI技術をBlenderで利用する③【中級】

はじめに

下記事の続きです。

3Dモデルを1枚の静止画(AI生成画像)から生成する

1枚の画像から3Dモデルを生成できるAI実装はネットサービスも含めていくつかありますが、まだまだ高品質と言えるものはないようです。それでも、およその形状を自動で生成してくれる利点は大きいと思います。

この記事では、生成した3Dモデルに手を加えて品質を向上させるアイデアを紹介します。

まずは、InstantMeshを利用して3Dモデルを生成します。     

※ InstantMeshの導入方法は下記にて紹介しています。

InstantMeshで読み込むための静止画を、Stable Diffusionで生成しておきます。InstantMeshもSDを利用しているので、512x512または768x768程度の解像度が最も適しているようです。

Stable Diffusionで生成した画像
InstantMesh

左上の欄に画像をドラッグ&ドロップして「Generate」を押すと、1分程度(RTX 3060)でOBJファイルが生成されます。

Blenderで読み込みます。デフォルト形式は頂点カラーなので、読み込むだけではグレーのメッシュのままです。下図のようにマテリアル設定すると頂点色が表示されます。

※ InstantMeshコマンドラインを利用すれば、出力を頂点カラーではなくテクスチャにできますが、その処理はBlenderで行うこととします。

Blender

形状や画質は良いとは言えないので、手作業で修正していきます。

まずは、AutoMirror機能拡張で左右対称にします。

生成された3DモデルをBlenderで読み込む

気持ち程度にスカルプティング機能で整形します。

Blender Sculpting

基本的に解像度が非常に悪いので、再度Stable Diffusionで高精細化した絵を生成して、それをBlenderのテクスチャ・ペイント機能を利用して貼り付けます。

正面へカメラを配置し、正面画像とDepthマップを出力します。

Depthマップを出力するには、「View Layer」の「Passes」の「Z」をチェックします。

Depthマップを出力する設定①

Compositingの設定

Depthマップを出力する設定②

Stable DiffusionのControlNetとimg2img機能を利用して、高精細化した画像を生成します。

img2imgを利用して精細化

精細化したテクスチャを3Dモデルへ貼り付けるために、モデルのUV展開をしておきます。

自動UV展開

次に、頂点カラーのままだと何かと不便ですので、テクスチャに変換します。「Bake」機能を利用します。

まずは、マテリアルのシェーダー・エディタでテクスチャを作成しておきます。

画像ファイル(tex03)の作成

この画像ファイル「tex03」へ頂点カラーを「Bake」します。

Bake Typeを「Emit」にして「Bake」とすると、頂点カラーがそのままテクスチャへマッピングされます。

次に、Texture Paintモードで精細化画像をこのテクスチャ上に貼り付けます。Textureは「Stencil」にして、Falloffは一番シンプルなベタ塗りモード「Constant」にしておきます。

Stencil テクスチャペイント

Stencilモードを利用して、画像をそのまま3Dモデルの表面へ上書き貼り付けします。

精細化画像を貼り付けたのは正面だけなので、モデルの横はゴミが入ってしまうので、手動で修正します。

手動修正後

あまり丁寧にしすぎるとAIを利用して自動生成した意味が無くなってしまうので、ほどほどにしておきます。

完成

まとめ

少し端折りすぎたような気がしますので後で書き直そうと思います。(分量が増えて)まともになれば有料化したいと考えています。


この記事が気に入ったらサポートをしてみませんか?