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

news2024/9/28 17:35:17

接下来的几篇文章将与常规主题有所不同(这是在从事通用机器人技术的职业中吸取的教训)。 相反,我决定利用我的一些新空闲时间 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分割回文串-ii

分割回文串-ii 题目链接&#xff1a;分割回文串-ii 思路&#xff1a;分割字符串s&#xff0c;使得子串都是回文串&#xff0c;最后获得最小分割次数。那么我们可以不断把字符串缩短&#xff0c;判断子串是否可以被分割成回文串&#xff0c;并且最小分割次数。这就是子问题分割…

贝叶斯算法人生

哈喽大家好&#xff0c;我是咸鱼 之前看到过耗子叔写的一篇文章《程序算法与人生选择》&#xff0c;这篇文章中耗子叔结合计算机中的经典算法&#xff08;排序、动态规划等等&#xff09;&#xff0c;让大家在人生道路的选择上获得了一些启发 我最近看了一些关于贝叶斯思想的…

StringBuilder和StringBuffer

StringBuilder和StringBuffer 目录 StringBuilder和StringBuffer特点常见方法练习&#xff1a;测试字符串连接StringBuilder和StringBuffer的区别 特点 封装了char[]数组 是可变的字符序列 提供了一组可以对字符内容修改的方法 常用append()来代替字符串做字符串连接”” 内部…

智慧文旅VR全景展示,深度VR沉浸式体验

导语&#xff1a; 智慧文旅VR全景展示为我们带来了一种独特的旅行体验&#xff0c;让我们可以穿越时空、身临其境地感受历史、艺术和自然的魅力。 在这个数字化时代&#xff0c;智慧文旅VR全景展示成为了旅游界的新宠&#xff0c;它让我们能够以一种前所未有的方式探索世界&am…

看完这篇 教你玩转渗透测试靶机vulnhub—Corrosion:2

Vulnhub靶机Corrosion:2渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;Tomcat msf 上传漏洞拿到shell&#xff1a;③&#xff1a;look越权…

何时使用Kafka而不是RabbitMQ

Kafka 和 RabbitMQ 都是流行的开源消息系统&#xff0c;它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点&#xff0c;它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别&#xff0c;并分析何时使用 Kafka 而不是 R…

独立商城系统开发功能注意事项有哪些?

电商行业的不断发展&#xff0c;越来越多的企业开始构建自己的独立商城系统&#xff0c;以满足消费者日益增长的需求。然而&#xff0c;在开发独立商城系统时&#xff0c;需要注意什么样的功能才能使其成为一个成功的电商平台呢&#xff1f;下面我们就来谈一谈独立商城系统开发…

【C++ 程序设计】第 8 章:文件操作

目录 一、文件基本概念和文件流类 &#xff08;1&#xff09;文件的概念 &#xff08;2&#xff09;C 文件流类 二、打开和关闭文件 &#xff08;1&#xff09;打开文件 &#xff08;2&#xff09;关闭文件 三、文件读写操作 &#xff08;1&#xff09;读写文本文件…

软件测试工程师的那些经验分享

前几天&#xff0c;一个朋友去面软件测试工程师的职位了&#xff0c;回来还信心满满的跟我诉说自己的面试经历。然而&#xff0c;最后这个面试扑街了。其实我早就料到了…… 在面试这个环节&#xff0c;很多细节如果处理不好&#xff0c;最后就会凉凉&#xff0c;无论你软件测…

《名侦探柯南》所有主题曲名字

《名侦探柯南》所有主题曲名字列表&#xff1a; 1.第1-30集&#xff1a;心中动荡不安 2.第21-52集&#xff1a;Feel Your Heart 3.第53-96集&#xff1a;谜 4.第97-123集&#xff1a;转动命运之轮 5.第124-142集&#xff1a;真相究明 6.第143-167集&#xff1a;情义之印 7.第16…

IDEA导入Web项目的三种方式

文章目录 前言一、第一种方式二、第二种方式三、第三种方式 前言 无论那种方式&#xff0c;它们都有相同的前提&#xff0c;那就是首先将你想要导入的Web项目放置在你想要导入的工程目录下 例如&#xff08;举例子&#xff09;&#xff1a;笔者要将一个名为mavenWeb1的Web项目&…

设计模式-05.02-行为型-策略职责链

策略模式【常用】 策略模式。在实际的项目开发中&#xff0c;这个模式也比较常用。最常见的应用场景是&#xff0c;利用它来避免冗长的 if-else 或 switch 分支判断。不过&#xff0c;它的作用还不止如此。它也可以像模板模式那样&#xff0c;提供框架的扩展点等等。 策略模式…

日均调度 10W+ 任务实例,DolphinScheduler 在蔚来汽车一站式数据治理开发平台的应用改造

大家好我是张金明&#xff0c;在蔚来汽车担任大数据平台研发工程师。这次和大家分享的是 Apache DolphinScheduler 在蔚来汽车一站式数据治理开发平台的应用和改造&#xff0c;接下来我将从背景、应用现状和技术改造三个方面去分享一下。 背景 业务痛点 在蔚来汽车构建一个统…

机器人工匠阿杰ROS快速入门笔记记录

ROS 快速入门教程–机器人工匠阿杰 11. 年轻人的第一个node节点 cd ~/catkin_ws/src ; // 进入工作空间 catkin_create_p kg ssr_pkg rospy roscpp std_msgs ; // 创建一个名为ssr_pkg的工程&#xff0c;依赖包是&#xff1a;rospy roscpp std_msgs // 此时&#xff0c;利用c…

html 高频面试题

文章目录 1. html 元素的类型2. <!DOCTYPE html>3. HTML、XML 和 XHTML 有什么区别&#xff1f;解释关系区别 4. 超链接和锚点的区别&#xff1f;5. iframe6. title和h17. html58. html5语义化是什么&#xff1f;9.DataList10.SVG是什么&#xff1f;11.src和href的区别12…

为何大伙都不愿意去外包,离职出来都说自己都废了呢....

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近2年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个0舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测…

Qt停靠/浮动窗口的使用以及保存修改后的记录

目录 1、停靠窗口(dock windows)2、尝试编写一个停靠窗口3、保存停靠窗口状态并且能够恢复3.1、使用QSettings保存记录3.2 测试效果3.3、注册表查看配置 1、停靠窗口(dock windows) 停靠窗口(dock window)是指一些可以停靠在 OMainWindow 中或是浮动为独立窗口的窗口。OMainWi…

如何使用mock.js实现接口测试的自动化?

目录 Mock.js 基础用法介绍 安装 基础用法 随机生成一个用户信息 随机生成一个用户信息数组 Mock.js API 生成随机数据 生成数据模板指定的数据 模拟接口请求 设置Ajax请求响应时间 总结 Mock.js 基础用法介绍 Mock.js是一个常用于生成随机数据和拦截Ajax请求的Java…

【Vue FlatPickr Component】中文配置示例

【Vue FlatPickr Component】配置示例 核心代码 :config"{allowInput: true, locale: zh, enableTime: true, dateFormat: Y-m-d H:i:S, time_24hr: true, enableSeconds: true }" 详情 locale: zh&#xff1a;使用中文 enableTime: true&#xff1a;开启选择时间 …

【数据结构】——图的相关习题

目录 一、选择填空判断题题1题2题3 二、应用题题1 一、选择填空判断题 题1 1、无向图G&#xff08;V&#xff0c;E&#xff09;&#xff0c;其中&#xff1a;V{a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e&#xff0c;f}&#xff0c;E{&#xff08;a&#xff0c;b…