我正在继续去年开始使用 Three.JS 构建 3D 场景和草图的工作。
当时,DALL-E 和 Stable Diffusion 等 AI 图像生成器刚刚真正起飞。 我成功地在本地运行稳定扩散,并使用它为我正在构建的 3D 世界中的地形、建筑物和其他环境生成纹理。
当时我使用的是稳定扩散 v1。 我发现了一些我喜欢的提示,它们创建了具有如下样式的图像:
推荐:用 NSDT编辑器 快速搭建可编程3D场景
SDv1 非常擅长生成这样的纹理,我在使用不同的提示时生成了数百/数千张图像。
现在已经是 2023 年 8 月,AI 图像生成生态系统持续突飞猛进。 我一直在尝试使用 Stable Diffusion XL 来生成纹理,从大部分地形开始,我已经得到了一些很好的结果。
起初,我得到了一些令人沮丧的结果,因为我之前使用的提示效果不佳。 然而,经过一些实验,我得到的结果比我过去取得的任何成果都要好得多。
我想出了一个非常可靠的工作流程,可以使用 Stable Diffusion XL 和其他一些工具生成高质量的 4K PBR 纹理。 到目前为止,我对结果印象非常深刻,而且我现在才开始研究这些东西几天。
这是我能够得到的结果:
我最近买了一块7900 XTX显卡。 它具有 24GB 的 VRAM,足以生成具有稳定扩散的 1024x1024 图像,无需升级或其他技巧。
我选择 AUTOMATIC1111 WebUI 来安装和运行 Stable Diffusion。 它似乎是功能最丰富和最受欢迎的,并且它开箱即用地支持 AMD GPU。 我克隆了存储库,运行了 ./run_webui.sh 脚本,它自动安装依赖项并下载稳定扩散权重和其他模型文件。
为了运行它,我需要做一些手动操作。 我在第一次运行时遇到了段错误,但可以通过设置两个环境变量来解决此问题:
export CL_EXCLUDE=gfx1036
export HSA_OVERRIDE_GFX_VERSION=11.0.0
我目前正在使用 ROCm v5.5,我相信这就是需要这样做的原因。 该版本增加了对 AMD 7000 系列 GPU 的支持,但支持还不是很完整。 这些环境变量诱骗 Pytorch 和其他库认为它是其他模型并使其工作。
我之前写过一些关于使用 7900 XTX 安装 ROCm 和 TensorFlow 的说明。 不过,它们可能已经过时了。
无论如何,安装并导出这些环境变量后,Web UI 启动并生成图像!
该过程的第一步是找到一些好的纹理生成提示。 这当然是整个事情中最具创意的部分,并且对你的结果影响最大。
我这里没有太多指导; 这很大程度上取决于你想要生成的内容以及想要获得的风格。 然而,这是一个我已经取得很大成功的提示示例:
top-down image of rough solid flat dark, rich slate rock. interspersed with bright ((flecks)) of ((glinting)) metallic spots like mica. high quality photograph, detailed, realistic
负面提示:
blurry, cracks, crevice, round, smooth, distinct, pebble, shadows, coin, circle
请注意一些单词周围的括号。 这是我正在使用的 AUTO1111 webui 的一个功能,它告诉模型更多地关注它们周围的提示部分。 还有一些其他奇特的提示语法技巧; 大量的灵活性和可供探索的选项。
下一步是为图像生成提出良好的参数。
我发现 Stable Diffusion XL 实际上比旧版本对所选参数更敏感。 最重要的是,与一年前相比,需要调整的东西要多得多。 结果,我确实花了很长时间才想出能够产生令我满意的图像的设置。
为了解决这个问题,我广泛使用了 AUTO1111 webui 的“X/Y/Z 图”功能。 它位于用户界面的“脚本”下拉列表中:
它生成输出图像的网格,其中每个单元格都是使用不同的参数组合生成的。 使用它时的输出如下所示:
它对于为我的图像确定一组良好的基线参数非常有用。
经过大量实验后,这是我现在在生成新纹理时使用的基线参数:
你可能需要自己进行试验才能找到适合你的用例的参数,但在开始时这些可能会作为一个很好的基准。
我观察到的另一件事是,启用平铺会导致生成的图像总体上显着不同。 例如,当使用 Stable Diffusion Dream Studio 在线生成图像以利用其快速 GPU,然后尝试在本地复制这些结果时,这会变得很棘手。 他们的托管 UI 中没有平铺选项,也不允许调整采样器等参数,因此很难获得精确匹配。
一旦我找到了一个好的提示和好的参数,我只需将其设置为生成一堆图像,然后就可以了! 我让它运行了大约 2 个小时,并选出了大约 50 张图像。 虽然很多都是不好的,但是这堆宝石中有足够多的宝石可供使用。
你可能已经注意到的一件事是,我在这篇文章的标题中提到了“4K 纹理”,但到目前为止我生成的所有图像都是 1K。 好吧,如果你认为我会说我使用多种可能方法中的一种沿着升级路线做了一些事情,那么你实际上就错了!
我创建了一种独特的方法,将AI生成的纹理组合在一起,以生成更高分辨率的输出。 生成的纹理保留源图像的无缝/无限平铺属性。
我构建了一个在浏览器中运行的工具,可以轻松地完成此操作,你可以在这里使用它, 100% 免费且开源。
过程非常简单。 你拖放 4 个看起来相似的无缝平铺稳定扩散生成的纹理,并将它们组合在一起。 正如我提到的,输出也将是无缝平铺的,并且分辨率提高了 4 倍。
你可以右键单击生成的图像并选择“图像另存为”将结果下载为 PNG 格式。 默认情况下的输出非常大,因此你可能需要使用像 sqoosh 这样的工具来压缩/优化它。
与稳定扩散和其他AI工具相比,其实现实际上技术含量相当低。 但我发现总体效果非常好!
它最适用于看起来非常相似的图像。 如果样式、颜色等方面存在较大差异,则在结果输出中可能会很明显并且看起来很糟糕。
获得外观非常相似的源图像的一个好方法是找到你喜欢的生成图像,然后生成它的变体。 为此,请将生成的图像上传到 AUTO1111 Web UI 的“PNG Info”选项卡。 然后,单击“发送到 txt2img”按钮,它将使用用于生成它的所有参数预先填充 UI。
然后,勾选 txt2img 选项卡上的“额外”复选框。 将“变化强度”设置为较小的值,例如 0.1-0.3,并生成十几个左右的图像。 它们整体看起来应该与原始版本相似,但细节不同。 如果您选择其中 4 个上传到无缝纹理缝合器工具,我发现输出通常看起来不错。
一旦获得了满意的拼接 4K 图像,就可以将它们制作成完整的 PBR 纹理了。
为此,我使用了一个名为 Poly 的工具。 他们提供了一个AI驱动的纹理生成器,将图像作为输入并为其生成法线、高度、环境光遮挡、金属度和粗糙度贴图。 他们还提供自己的基于提示的生成工具,但我个人更喜欢自己生成它提供的控制。
他们的工具可以让你免费生成法线图和高度图,但是他们每月向你收取 20 美元来生成其他图。 我个人现在确实支付了该订阅费用,但你不必为了获得良好的结果而支付费用。 法线贴图是最重要的部分,您可以为纹理设置全局粗糙度/金属度值(这是您很多时候所需要的),或者编写自定义着色器以从像素值动态生成它们。
另一种可用于生成法线贴图的方法是 SmartNormap。 它使用非人工智能方法以编程方式为任何源图像生成法线贴图。 它有一些参数可以调整,结果还不错,但根据我的经验,总体来说不如AI驱动的 Poly 工具好。
无论如何,是的,那时你可以下载贴图并将其插入 Blender、Three.JS 或你想要的任何其他 3D 软件中。
如果你想更疯狂地使用它,无缝 4K 输出纹理可以与十六进制平铺算法一起使用,使其无限平铺,没有任何重复。 我正在开发一个 Three.JS 库来自动处理这个问题,下面是我在 Blender 中生成的一些地形上的布局:
这里真的有闸门打开的感觉。 我个人发现,使用 AI 图像生成纹理和其他构建块资产而不是完整图像或艺术品才是正确的选择。 我的创造力和投入有很大的空间来指导整个过程。 有无限的可能性可以探索,整个过程在我看来还是蛮有趣的。
无论如何,我希望这些内容对您有所帮助,如果你决定亲自尝试一下,祝你好运。
原文链接:用SDXL生成4K PBR纹理 — BimAnt