【中間報告】3D×AI による Rendering 実験
English Version: [Interim Report] 3D×AI Rendering Experiment | by NeoClassicalRibbon | May, 2023 | Medium
現在進めている個人研究について、一旦中間的な成果がまとまったのでシェアする。
概要
主に行ったのは以下の作業である。
1: AI によるキャラクターデザイン
ControlNet を利用してオリジナルのキャラクターのデザインを行った。
2: 人力作業による 3D モデル化
AI で生成したキャラクターデザインをベースに、3D モデルを作成した。
この工程はほぼ人力である。
3: 3D Rendering 画像を AI によって再描画する
3D モデルを Rendering した画像をベースに、主に ControlNet 1.1 の機能を使用して再描画した。
3D モデルで作ったキャラクター性は保持したまま、質感の向上や画風の切り替えを AI によって実現可能であるかについて重点的に調査した。
目的
自身の 3D 制作のワークフローに対して、AI をどのように活用できるかを検討する目的で今回の調査を開始した。
キャラクターデザインについては、AI が得意とする分野であり、逆に自身としては苦手意識の大きいところなので、これは確実にワークフローに貢献すると考えた。
AI による Rendering 品質の向上は、実験的なものではあるが、3D によって表現するためのコストが高い部分を AI で補うことができればワークフローを根本的に転回させられると考えて取り組んだものである。
特に髪や肌の細部の質感表現については、3D での制作コストが高い一方、引きで見た画全体への貢献度はあまり高くない、しかしいい加減にするとチープに見えてしまうという面倒なものであり、これに関しては特に AI によるエンハンスメントを期待した。
1. キャラクターデザインへの活用
ここしばらく自分の脳内に住み着いているキャラクターの一人をデザインすることにした。
大まかな方向性は定まっていたので、まずイメージに合う単語をプロンプトとして絵を出力しイメージを具体化することとした。
次に CN openpose を使用して三面図を作成した。
色や顔立ちを AI に直接指定することは難しかったので、Photoshop で修正している。
最後に、自分の中でもう一歩キャラのイメージを固定させるために、手書きの絵によって要素を確認しつつ、それを CN scribble の入力として具体化した。
今回は初回の実験であるため、AI にとっても 3D にとっても難しくないデザインを心がけた。
完成形のデザインからするとあえて AI を使うほどでもないようなものだが、具体的な視覚資料を用意できたこと、AI に指示する過程で自分の中のイメージを言語化できたことから、3D の作業がスムーズに進められたことは大きい。
2. 3D モデリング
この工程はほぼ人力であるため、全体的な作業内容の解説は省略する。
この後の AI によるエンハンスメントを見据えて、特に肌と髪は普段の工程と比べて省力化を図った。
肌の制作
普段、肌は ZBrush で Scan Model を Wrap してディテールを転写している。
このためにモデルの細分化レベルを上げる必要があることから、処理負荷が上がり、ディテールをキープしながらの追加編集も面倒になる。
肌の質感は AI が向上させてくれることを見越して、今回は Substance Painter で Procedural Material を設定するのみに留めた。
3D 単体としてはのっぺりした感じは否めないが、AI の自然な肌表現を見るにこの点は上手くカバーしてくれると信じて作業した。
髪の制作
通常の工程では Curve によるブロッキングを行った後に、Particle Hair に変換して細かい毛の表現を行う。
Particle Hair に変換すると Rendering 負荷が上がるうえに、Hair Guide の編集も難しくなる。
また、そもそも Blender の Hair Particle 機能の貧弱さから自然な髪表現を行うには工夫が必要である。
(新しい Hair System はまだ試せていない。最低限 Clump などの Modifier がスタックできるようになっていると XGen を羨まし気に眺めずによくなるのだが…)
今回、髪は Curve のブロックのままとしておき、AI が自然な毛の流れを生成してくれることを期待した。
Curve 状態であれば後から髪を大きくねじったり広げたりすることも容易であるため、この状態で作業を進められるとポージングなどの作業でも利点が大きい。
今回の中間報告では、Rig を入れる前の状態のモデルを AI に通してみて、主に肌と髪を中心に効果があるかを見てみることとした。
3. AI による再描画
質感・ディテール向上
設定値
i2i に CN tile と lineart を併用して再描画を行った。lineart の preprocessor には lineart_realistic を使用した。
モデルには Alstroemeria Mix, LoRA にハイポリ LoRA を使用した。
評価
結果として、入力画像への忠実度は確保したまま、髪や肌には期待した通りの向上効果が見られ、全体的なライティングや細部の構造にも改善が見られた。
髪については、入力画像のブロック感が解消され自然な毛の流れが生まれた。3D で真面目にやろうとすると地味に面倒な生え際の処理も適切である。
肌に関しても、入力画像ではあえて工程を省いたキメと光沢が現れ、唇の表現も自然である。
その他全体的な効果として、ライティングのコントラストが改善されグロー効果も施してくれている。
入力画像にはなかった被写界深度を追加してくれているのも気が利いているところだ。
このように全体として再生成により変化はしつつも、服のロゴはほぼフォントの形状まで保たれるというのは良い方向に想定外だった。
再生成で文字が崩れてしまうなら、テクスチャでは書かずに Photoshop の後処理で入れることを検討していたので、その手間が省けるのはありがたい。
問題点
問題点は色が多少変化してしまう点である。
例えば、髪の毛は今回ストロベリーブロンドのカラーリングとしたかったのだが、再描画を通すと普通のブロンドになってしまった。
色が変わってしまうのは CN tile を "ControlNet is more important" で適用した場合の既知の問題のようなので、今後の改善に期待している。
その他関連する項目
プロンプトについては、"ControlNet is more important" にしていれば、基本的にはほぼ指定しなくてよさそうである。
逆に言うと入力画像に存在しないものをプロンプトで生成させるのは難しい。その場合は通常の inpaint なども併用することになると思われる。
Sampler の選択は重要であり、DPM++ SDE Karras は元画像をより大きく改変するためモデルの画風がより現れたり質感が大きく変化しやすいという特徴があるが、それが望ましくない場合は DPM++ 2M Karras や DDIM を選択すれば入力画像の質感を保ちやすくなる。
lineart を使用しない場合入力画像への忠実度は少し下がり細部に破綻が現れる場合があるものの、AI が自由に描画する余地が広がるため、よりリッチなディテールが得られる場合がある。
まとめ
いくつか問題点や今後検討が必要な部分はあるものの、全体として期待した効果が得られたと思っている。
ハイポリ LoRA はまさにこの目的のために作成したものであり、ようやく実証実験ができたことも含めて喜ばしい。
画風変化
モデルや LoRA を切り替えて画風を変化させることも可能であった。
人相が多少変わってしまう面もあるが、Photoshop で調整可能な範囲である。
lineart の "Ending Control Step" を低めに (0.4 など) にすると、細部は乱れやすくなるが、顔の造りによりモデルの絵柄を反映させやすくなるようだ。
ただし、入力画像への忠実度と画風の変化にはトレードオフがあり、オリジナルをキープしたまま画風を変化させられる範囲には限界がある。
例えば、アニメ塗りにしようとした場合、顔の変化も許容する必要がある。
CN を使わずキャラクター LoRA を作って生成すれば絵柄の変化とキャラクター性を両立させることも可能かもしれない。今後の調査項目の一つである。
うまくいかなかった方法
Tiled Diffusion + CN tile
Tiled Diffusion と CN tile を併用して高解像度化する方法で、Noise Inversion と Denoise Strength を上げることで、細部を再生成しながら高解像度化する手法を試した。
結果としては、画像の中の細かいノイズ・パターンも模様の一部として再生成されてしまい、品質が悪化してしまった。
背景のわずかなバンディングや、パーカーの質感を表す薄い明暗の斑点が縞模様として再生成されるのは好ましくない。
パラメータや入力画像の調整によって品質を上げることができるかもしれないが、CN tile + lineart の手法に比べて手間も計算時間もかかるため今回の調査は打ち切った。
CN reference
CN reference_adain+attn を使用した場合、ぼんやりと要素を再現しようとする努力は見られるものの、キャラ再現とまではいかなかった。
lineart と併用しても構造の崩れが大きく、今回実現したい効果には適さないようである。
MasaCtrl
MasaCtrl WebUI Extension を利用して、一度 CN tile + lineart で出力したキャラを記録し、再生成時にプロンプトによって別の構図やポージングで再生成することを試みた。
しかし、RECON で再生成しようとした際にエラーが発生して結果を確認することができなかった。現在の WebUI 実装では一定解像度以上ではエラーになってしまう不具合があるようだ。
(512x768 を超えるとエラーになるとの情報あり)
(追記: webui に --xformers と --medvram を指定することで大きな解像度でも機能するとの情報を頂いた。手元で実験したところ RTX3090 で 768x1024 の画像を CN tile と lineart を併用して出力することができた。次回以降の実験に活用させていただきます。)
通常の t2i で試した場合、CN reference 以上に一貫性を保持する能力があり非常に面白そうな技術であるため、今後の改善を待って再調査したい。
(おまけ)アニメ系モデルを使用した再描画
同様の手法をよりシンプルなモデルでも再現可能かを調査した。
モデルは VROID のプリセットを使用して簡単に作成し、Blender で Rendering した。
CN tile と lineart_anime を使用して再描画した。
上手いな…。
tile と lineart によってオブジェクトの境界線を拘束して再描画するので、その点に 3D っぽい硬さは残ってしまっているが、質感や顔立ちについてはかなり理想的にイラスト風にできている。手指の破綻もほぼない。
アトリエシリーズの 3D モデルを思わせる出来である。
モデルを変えれば画風の変換も可能である。
このようにして再描画した画像を、3D モデルのテクスチャとして Reproject する手法も紹介されていたが、このクオリティを見ると確かにそれも有望な方法であるように思われる。
(物理ベースのリアル系マテリアル作成には直接適用可能な方法ではないかもしれないが)
まとめと次のステップ
AI によって 3D Rendering をエンハンスできる可能性があることが分かり、今後のワークフローを考える上で非常に重要な知見を得ることができた。
最終的に 6-7 割くらいの完成度でモデルを用意しておけば、あとは AI に任せてしまっていいな、と思えれば当面の理想は十分叶えられたと言ってよい。
将来的に AI との連携を前提とした場合、3D モデルとして作っておくべき部分はどこで AI に任せられる部分はどこか、AI への入力として適した情報を入力するために 3D 側で守るべき仕様・制約はなにか、といった点は非常に興味深いテーマになると思っている。
本件の Next Step としては、 Rig を入れて、ポージングや背景を含めた状態での実験を行う予定である。
また別のアプローチとして、キャラクター LoRA を作成することで直接 3D Rendering を用いずに AI に描画を任せる方法についても検証したい。
この記事が気に入ったらサポートをしてみませんか?