可控AI纹理投影原理及实现

我最近一直在尝试使用 Dreamstudio 和 Midjourney 进行图像生成,这确实激发了我再次探索游戏开发。 我自己更像是一名编码员,而不是图形艺术家,所以我觉得人工智能的这些进步可能会让我在游戏开发等视觉媒体中表达自己。 在业余程序员的背景下,这也感觉更道德,因为我自己永远无法聘请艺术家,所以我不会剥夺任何人的生计。 尽管我认为这是一个更大的讨论领域。

深入研究这个主题后,我意识到,虽然《中途之旅》产生了一些令人惊叹的图像,但由于缺乏一致性以及对视角和视角的控制有限,它们在游戏开发中的实用性更加有限。

稳定扩散模型,包括 Midjourney 或 Dreamstudio 等付费服务,都会给出文本提示并从中生成图像,虽然你可能会在“等距、正交透视”等提示中描述你的“桶和板条箱”,但它缺乏精细度 -如果你希望使用这些模型来创建游戏资产,那么粒度控制是必要的。

ControlNet 最近解决了稳定扩散中缺乏控制的问题。 这种新模型扩展了稳定的扩散并提供了一定程度的控制,而这正是创建游戏资产时解决视角问题所缺少的要素。

ControlNet 提供了一系列模型来添加此类控制,例如精明的边缘、涂鸦、深度和法线贴图以及人体姿势。

1、AI纹理化工作流程

本文旨在记录我正在尝试的一些工作流程。 在此示例中,我正在处理固定等距+正交透视(54.736 度 x 45 度)的背景图像,类似于你在使用预渲染图像的旧 CRPG 中看到的图像。

通过一些搜索,我找到了我想要创建的东西的参考,中世纪酒馆类型的内部装饰。 我很快在 Blender 中画出了它的草图:

Blender 中的粗略草图

接下来我渲染了场景的深度图,实际上我决定单独渲染板条箱和桶,因为以前它们在一起时效果不太好。 这还有一个好处是可以让你对提示进行更细粒度的控制。

对于我使用这些合成节点设置的深度图,你还需要启用“视图层属性”→“通道”→“数据”→“Z”:

深度图的 Blender 节点

我放大了桶和板条箱,因为重要的信息是它们和相机的方向:

场景、板条箱和桶的深度图

接下来,我还烘焙了法线贴图,为此我使用了以下材质设置:

法线贴图的blender材质节点

这些节点是按照 ControlNet 期望的格式渲染法线贴图所必需的。 我不能 100% 确定这是否是正确的设置。 我找到了 Blender Artists 线程中提到的节点设置。

场景、板条箱和桶的法线贴图

为了使用 Stable Diffusion 和 ControlNet,我使用了 AUTOMATIC1111 令人惊叹的 stable-diffusion-webui 和 Mikubill 的 sd-webui-controlnet 扩展。 我使用了 SD 模型 AyoniMix v6 和 ControlNet 1.1 权重。

为了使用 Docker 运行 webui,我发现了这个很棒的 docker compose 设置。

我没有花很多时间修改超参数,我使用了欧拉采样方法,采样步长为 15,宽度/高度为 768,CFG 比例为 7。

稳定扩散 + ControlNet 生成的图像

2、稳定扩散提示词

我不是提示词专家,但仅供参考,我使用了这些提示:

Building:
medieval tavern, support beams, stone floor, wood walls, building interior, interior, diagram overlook, thunderstorm, isometric cutaway, art by artist, 3d render, stylized, intricate, 4k uhd, gradients, (centered:1.5), ambient occlusion, (soft shading:0.7), view from above, angular, isometric, orthographic, greg rutowski, square enix, unreal engine 5, FXAA
Barrels:
wood barrels, wooden barrels, oak barrel, vertical wood, diagram overlook, thunderstorm, isometric cutaway, art by artist, 3d render, stylized, intricate, 4k uhd, gradients, (centered:1.5), ambient occlusion, (soft shading:0.7), view from above, angular, isometric, orthographic, greg rutowski, square enix, unreal engine 5, FXAA
Crates:
old, wooden crates, metal handles, storage crate, dark oak crate, storage boxes, ((metal frames)), rusty metal, diagram overlook, thunderstorm, isometric cutaway, art by artist, 3d render, stylized, intricate, 4k uhd, gradients, (centered:1.5), ambient occlusion, (soft shading:0.7), view from above, angular, isometric, orthographic, greg rutowski, square enix, unreal engine 5, FXAA
Negative Prompt:
shadows, torch, fire, lamp, light, cartoon, zombie, disfigured, deformed, b&w, black and white, duplicate, morbid, cropped, out of frame, clone, photoshop, tiling, cut off, patterns, borders, (frame:1.4), symmetry, signature, text, watermark, fisheye, harsh lighting

3、纹理投影

最后,我们可以使用纹理投影直接使用生成的图像创建 UV 映射。 这为我们提供了一个有纹理的场景(从摄像机角度)。

最终场景的复合渲染

甚至可以照亮场景:

使用“太阳”光进行复合渲染

4、结束语

显然我没有花太多时间在 Blender 中的即时工程和灯光上(实际上根本没有),但你明白了。 我认为这实际上产生了一些非常有趣的结果。 当然,在这个例子中,几乎可以说,从资源库中拖放一些纹理材质可能会更容易。


原文链接:Stable Diffusion + ControlNet + Texture Projection Workflow

BimAnt翻译整理,转载请标明出处