基于Stable Diffusion的2D游戏关卡生成【实战】

作者通过实验使用StableDiffusion和控制网络技术,尝试为2D平台游戏生成艺术风格的关卡图像。经过多次尝试和调整,如使用深度图像和添加平台唇部等技巧,成功创造出与游戏交互的视觉效果。虽然遇到挑战,但最终实现了让玩家参与艺术创作的目标。
摘要由CSDN通过智能技术生成

接下来的几篇文章将与常规主题有所不同(这是在从事通用机器人技术的职业中吸取的教训)。 相反,我决定利用我的一些新空闲时间 1 边做边学,并使用所有酷孩子都在谈论的一些很酷的新 ML。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、项目简介

我的项目是制作一个 2D 平台游戏,玩家可以在其中设计自己的关卡,然后生成式 AI 将创建漂亮的渲染图像来表示关卡。 我想做一些没有 AI 就不可能实现的事情:让玩家参与艺术创作。 我们将跳到最后,您可以看到游戏现在的样子:
在这里插入图片描述

这里有一些不同的主题,但你也可以创建自己的主题。
在这里插入图片描述

你可以在这里尝试游戏:dimensionhopper.com

我建议查看随机级别或画廊,看看那里有什么。

但是让我们谈谈实现的过程。

2、概念验证

我以前玩过 Stable Diffusion,它是一个非常有趣的玩具,可以拍出很酷的照片,但我总觉得我的控制力不够。 对我来说,创作的乐趣来自于我所做的和我得到的之间的互动,我希望有更多的投入。 这就是为什么当我读到 control-net 时我如此兴奋,它提供了更多的旋钮来控制输出。 我立即想用它来制作 2D 游戏。

3、立刻行动

我在我的笔记本电脑上安装了 Stable-Diffusion,启动了 webui3 让控制网络工作并将这个深度图像输入到 Stable Diffusion:

在这里插入图片描述

这将平台近处的像素标为白色,黑色背景意味着该部分很远。 我使用的是像素艺术模型,在 CIVAI 页面上有这张令人惊叹的演示图片:
在这里插入图片描述

所以我从中复制提示和设置,稍微调整一下并点击生成………然后得到这个
在这里插入图片描述

不完全是我所希望的……我尝试让深度模式工作一段时间但没能成功。
在这里插入图片描述

并切换到控制网的“涂鸦”模式。 涂鸦模式采用形状轮廓并让它们引导图像(而不是深度)。

在这里插入图片描述

更有趣但仍然不好。

更改提示:

“pixelart 视频游戏环境,平台游戏级别。 在丛林中创造一个神秘的石庙形象。 阳光,戏剧性的灯光。 棕色石头上的藤蔓和裂缝”

更接近了! 我有一张照片。 它有点与关卡相互作用。 仍然不好但更好。
在这里插入图片描述

哦,我现在让关卡投下了一些阴影。
在这里插入图片描述

“pixelart 视频游戏环境,创建一个废弃空间站的图像,系统损坏,灯光闪烁,充满危险感。 展示残骸、废弃的房间和挥之不去的未知威胁。”

最终,随着更多设置的尝试,我得到了这样的关卡:
在这里插入图片描述

与开始相比,这是一个很大的改进,但是 (1) 关卡看起来不像是美术的一部分,充其量只是粘贴而已,并且 (2) 关卡纹理看起来像是重复的图块集。 人类视频游戏开发者这样做是为了他们不必为平台的每个方块绘制不同的草,但我没有那个限制。 嗯。

4、放弃像素艺术

我认为我的部分问题是使用在像素艺术上训练的模型。 它忠实地复制了重复 tileset 的类型,这正是我不想要的。 所以我换了另一个模型,这个模型是围绕儿童插画构建的,我的第一张图片是这样的:

在这里插入图片描述

哇! 好多了! 平台上有阴影,前后都有物体,这实际上是一幅漂亮的图画。 我正在做某事!

新模型拍出了漂亮的照片,但我很快意识到我在两种故障模式之间徘徊。

要么我有一张漂亮的图片,其中大部分绘制在它上面:
在这里插入图片描述

或者我得到一张漂亮的综合图片,其中真的不清楚你可以站在哪里:

在这里插入图片描述
在这里插入图片描述

最后一个特别有问题,因为你可以站立的“水平”部分被渲染为一个窗口,完全颠倒了语义。 这是使用“涂鸦模式”的一个基本问题,因为我让 Stable Diffusion 无法知道什么是近的,什么是远的,只是勾勒出形状。

5、突破:平台上的嘴唇

我回到深度,但有一个想法:如果我暗示平台的顶部有一个小唇怎么办? 我没有在我的游戏渲染引擎中编写代码,而是在 Gimp 中绘制它们。

在这里插入图片描述
在这里插入图片描述

快乐的小平台排行榜

天哪,它起作用了!

更重要的是:它几乎每次都能正常工作。 大多数 Stable-Diffusion 工作流程包括生成比实际需要多 4-10 倍的图像,并选择好的图像。 为了让我的想法奏效,我们需要所有关卡都可以玩(你可以知道平台在哪里)并且其中大部分都很好(漂亮的插图),因为不会有人工策划步骤。

6、控制图像很重要

我了解到深度图像的外观确实会改变输出的质量。 我在丛林废墟上工作,不断得到这样的图像:

在这里插入图片描述

(旁注:标准上升的速度令人惊讶。早期那张照片让我大吃一惊,但现在看起来没什么)。

问题 4 是,实际上并没有任何合理的带有该深度图的丛林图片。 丛林(实际上是一切)看起来不是那样的。 东西不会漂浮在空中,它下面有东西支撑着它。 这导致突破 2:添加支持。
在这里插入图片描述

每个平台块都将一个深灰色的盒子投射到它下面的地板上,这为世界提供了结构。 深灰色没有游戏目的,它只是向 Stable Diffusion 提示图片的内容。 我们得到了更好的图像。

在这里插入图片描述

一切都很好,但我仍然遇到洞穴问题,我想知道是不是因为它试图匹配深度图的笔直、锐利的边缘并且很难让它看起来有机,所以我添加了可调节的粗糙度 到图像(以及可调节的背景深度,这样天空对于室外场景可以很远,而对于室内/丛林场景则可以更近。
在这里插入图片描述

在这里插入图片描述

请注意,平台的底部真的很直,它发明了一堆光柱/瀑布,它们可以有完美的直垂直线。 这个其实挺好的,就是方角不太理想。
在这里插入图片描述

现在一切都在地下,而且在崎岖不平的岩石上的光线看起来很不错。

7、宝石和角色

稳定扩散不会产生任何透明度。

在这里插入图片描述

但是可以用关卡图像作弊,因为我有我输入的深度信息和基于此的掩码,所以角色可以在需要时进入平台“后面”。 对于宝石,如果我要求“<blue gem/ruby jewel> floating videogame object on a black background”然后在 python中减去背景
在这里插入图片描述

对于角色,我发现这个模型经过微调,可以制作 4 帧的行走动画。 创作者真的想要左/右/上/下动画,因此将这个模型与主题是谁的 lora 结合起来,创建描绘同一角色的所有 4 个方向。 因此,我认为它经过训练,因此所有“向右走”都只会得到提示“PixelartRSS”。

在这里插入图片描述

我希望能够提示有关我想要的角色的一些信息,这有时有点管用,但远没有我想要的那么可靠。 我怀疑如果我有训练数据,将其限制在侧身行走并用角色的实际描述标记它,它对我来说会更好。 但它确实能让人走路。 所以只要你不挑剔,全天都能拿到新的玩家角色精灵。

8、结束语

现在只需要让它在我自己的应用程序中工作。 我使用优秀的diffusers库来包装生成器并制作我的小服务器。 一切都进展得如此之快,以至于我确信我在我的 image_generation.py 中以非常愚蠢的方式做了一些事情,如果正确配置它可能会获得 2-3 倍的加速,但现在一切正常,而且它是 玩起来很有趣。


原文链接:用稳定扩散生成游戏关卡 — BimAnt

`stable diffusion`实战通常涉及到深度学习领域的一种生成模型——扩散模型。这种模型通过逐步添加噪声到数据上,然后从噪声重建原始数据的过程来进行样本生成、图像超分辨率等任务。其核心在于模型能够“逆向”从高维噪声空间恢复出低维的数据表示。 ### 简介 扩散模型的基本思想是在训练过程中对输入数据逐步加入高斯噪声,形成一个由干净数据到完全随机噪声的连续过程。训练阶段,模型学习如何从不同噪声级别下恢复数据。在实际应用时,通过反向过程(即从最终噪声状态逐渐去除噪声),模型可以生成新样本。这一过程称为“稳定扩散”。 ### 实战步骤: #### 准备工作: 1. **环境搭建**:首先安装必要的Python库,如PyTorch、NumPy等,并设置CUDA环境以便利用GPU加速计算。 2. **数据集准备**:选择合适的数据集用于训练和测试。例如,在图像处理场景下,可以使用MNIST、Fashion MNIST或ImageNet等数据集。 #### 模型设计与训练: 1. **模型架构**:设计扩散模型的前馈神经网络架构,包括编码器和解码器部分,以及关键的噪声预测层。 2. **损失函数**:采用交叉熵损失或其他适合的损失函数来优化模型。 3. **训练流程**:在训练集中逐批次加入噪声,模型通过预测噪声分布并尝试反向重构数据。这需要大量迭代以适应复杂的噪声扩散过程。 4. **评估与调整**:在验证集上评估模型性能,根据结果调整模型参数或结构。 #### 应用实例: - **图像生成**:通过控制扩散过程的起始噪声级别和时间长度,生成新的图像。 - **超分辨率**:在较低分辨率的图像上增加细节,提高清晰度。 - **文本生成**:基于预先训练的模型,生成新的文本序列。 ### 实验注意事项: - **内存管理**:由于扩散模型涉及大量的数据处理和矩阵操作,需要注意内存优化和避免过拟合。 - **训练效率**:合理设置学习率衰减策略,加快收敛速度。 - **正则化手段**:防止模型过度拟合,保持泛化能力。 ### 相关问题: 1. **扩散模型如何有效减少生成样本的多样性损失?** 这通常涉及到精细调整噪声添加策略和训练目标函数,保证模型能够在不同噪声级别上都能准确地恢复数据特征。 2. **在哪些场景下扩散模型特别有效?** 扩散模型适用于图像、文本等多种类型的数据生成任务,尤其是在对抗生成网络(GANs)难以达到理想效果的情况下,扩散模型提供了另一种有效的生成途径。 3. **如何优化扩散模型的训练效率和生成质量?** 优化策略包括但不限于调整噪声强度、改进损失函数设计、采用更高效的优化算法、引入正则化项等。同时,对于大规模数据集,还可以考虑分布式训练技术,以加速训练过程并提升模型的生成质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值