第 1 天|基于 AI 进行游戏开发:5 天创建一个农场游戏!
欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用各种 AI 工具,在 5 天内创建一个功能完备的农场游戏。到本系列结束时,你将了解到如何将多种 AI 工具整合到游戏开发流程中。本系列文章将向你展示如何将 AI 工具用于:
- 美术风格
- 游戏设计
- 3D 素材
- 2D 素材
- 剧情
想要观看视频快速了解?请 点击这里 快速了解本文内容,如果你需要掌握更多技术细节,请继续阅读!
注意:本教程面向熟悉 Unity 开发和 C# 语言的读者。如果你不熟悉这些技术,我们建议你先了解一下 Unity 然后再继续阅读,本文的作者制作了一系列 Unity 初学者视频,如果你希望我们发布到 Hugging Face 账号,请在评论区留言告诉我们。
第 1 天:确立美术风格
游戏开发流程第一步是 确立美术风格。对于要创建的农场游戏,本文将使用 Stable Diffusion 工具来帮助其美术风格的确立。Stable Diffusion 是一种基于文本描述生成图像的开源模型。接下来会介绍如何使用该工具为农场游戏创建视觉美术风格。
Stable Diffusion 基本设置
运行 Stable Diffusion 有两种方案可选:本地或在线。如果你拥有一台配备良好 GPU 的台式机并想使用全功能工具库,那么更建议本地方案。除此之外,你还可以尝试在线方案,请继续阅读本文详细查看本地方案和线上方案:
本地方案
本文将使用 Automatic1111 WebUI 在本地运行 Stable Diffusion。这是比较流行的本地运行 Stable Diffusion 的方案,不过要成功将其设置运行起来,还需要一些技术知识。如果你使用 Windows 且具有 8GB 以上内存的 Nvidia GPU,请按以下指示执行。否则,请在 代码仓库 的 README 文件中查看其他平台的运行说明,更或者可以选择在线方案。
在 Windows 上安装
要求:具有 8 GB 以上内存的 Nvidia GPU。
安装 Python 3.10.6,安装时勾选 "Add Python to PATH"
安装 git
在命令提示符中输入以下内容来克隆所需仓库
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
下载 Stable Diffusion v1.5 checkpoint,并将其移动到仓库的 models 目录下
运行
webui-user.bat来启动 WebUI浏览器中访问 localhost://7860。如果一切正常,你将看到如下内容:

在线方案
如果你不具备本地运行 Stable Diffusion 的条件,或者偏好简易的解决方案,同样有多种在线运行方案供你选择。
Hugging Face 提供的 Space 应用中包含众多免费在线方案,例如 Stable Diffusion 2.1 Demo 或 camemduru webui。你可以 查看更多在线服务,甚至可以使用 Diffusers 编写你专属的免费运行方案!你也可以查看简单的 代码示例 以快速上手。
注意: 本系列的部分内容将使用 image2image 等高级功能,有些在线服务未提供这些功能。
生成概念艺术图片
首先让我们生成一些概念图。只需几步,非常简单:
输入提示语
点击生成

但问题是,生成的图片是你真正想要的结果吗?如果不是,如何才能获得呢?这里要提醒你一下,输入提示语,本身就需要一些技巧。所以如果你生成的第一张图片非你所想也没关系,网络上有非常多神级资源可以帮助改善提示语。你可以查看 Reddit 上的帖子了解 书写指南,也可以 点击这里 查看我做的视频,带你 20 秒了解图片生成提示语的技巧!
上述书写技巧的共通之处是使用诸如 lexica.art 网站之类的图片库来查看其他创作者使用提示语在 Stable Diffusion 生成的内容范式,从中寻找与你期望风格相似的图片,从而获得书写提示语的灵感。实际上没有所谓的标准答案,不过在你使用 Stable Diffusion 1.5 生成概念艺术图片时,建议遵循以下温馨提示:
- 使用描述词: 描述词会限制生成图片的形式,如 isometric, simple, solid shapes 等。这样生成图片的美术风格在游戏中会更容易重现。
- 使用同义关键词: 一些关键词 (如 low poly) 虽然契合主题,但生成的图片质量通常较低。尝试找到它们的同义词,替换以保证生成质量。
- 使用指定艺术家的名字: 这种方式可以有效地引导模型采用指定艺术家的绘画风格,从而生成更高质量的图片。
我输入这样的提示语: isometric render of a farm by a river, simple, solid shapes, james gilleard, atey ghailan 生成图片如下:

使用 Unity 重现概念艺术
接下来,如何使用生成的概念艺术图片来制作游戏?本文将使用流行游戏引擎 Unity 来使游戏鲜活起来。
使用带有通用渲染管道的 Unity 2021.9.3f1 创建一个 Unity 项目。
使用基本形状绘制场景草图。例如,要添加一个立方体形状,右键单击 -> 3D对象 (3D Object) -> 立方体 (Cube)

设置材质: 可以参考前面生成的概念艺术图片对各部分进行设置。这里选用 Unity 内置的基本材质

设置光照: 这里使用暖调自然光 (
#FFE08C,强度1.25) 和柔和环境光 (#B3AF91)
设置摄像机: 这里使用 正交投影 来匹配概念艺术图片的投影形式

设置水着色器: 可以给游戏场景增加一些水流,这里使用 Unity 资源商店中的程式化水着色器

最后,设置后处理效果: 这里使用 ACES 色调映射和 +0.2 曝光

至此,一个简单上手而引人入胜的游戏场景,不到一天就创建完成了!如果你有任何问题,或者想跃跃欲试参与后续内容?现在来 加入我们的 Discord 频道 与我们交流吧!
在下一篇文章中,我们将 使用 AI 进行游戏设计,敬请关注我们获得后续更新!
英文原文:https://huggingface.co/blog/ml-for-games-1
译者:SuSung-boy (苏桑),经常倒腾图像的工业视觉算法工程师。
第 1 天|基于 AI 进行游戏开发:5 天创建一个农场游戏!的更多相关文章
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- C#游戏开发高速入门 2.1 构建游戏场景
C#游戏开发高速入门 2.1 构建游戏场景 假设已经计划好了要编写什么样的游戏,在打开Unity以后.要做的第一件事情就是构建游戏场景(Scene).游戏场景就是玩家游戏时,在游戏视图中看到的一切. ...
- [Unity3D]Unity3D游戏开发《反对》说到游戏(上)——目标跟踪
朋友,大家好.我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 首先博主要自我反省,过了这么久才来更新博客,这段时间主要是在忙着写期末的作业,所以博主基本上没 ...
- 基于Unity的AR开发初探:第一个AR应用程序
记得2014年曾经写过一个Unity3D的游戏开发初探系列,收获了很多好评和鼓励,不过自那之后再也没有用过Unity,因为没有相关的需求让我能用到.目前公司有一个App开发的需求,想要融合一下AR到A ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 使用Phaser开发你的第一个H5游戏(一)
本文来自网易云社区 作者:王鸽 不知你是否还记得当年风靡一时的2048这个游戏,一个简单而又不简单的游戏,总会让你在空闲时间玩上一会儿. 在这篇文章里,我们将使用开源的H5框架--Phaser来重现这 ...
- Android Wear 开发入门——怎样创建一个手机与可穿戴设备关联的通知(Notification)
创建通知 为了创建在手机与可穿戴设备中都能展现的通知,能够使用 NotificationCompat.Builder.通过该类创建的通知,系统会处理该通知是否展如今手机或者穿戴设备中. 导入必要的类库 ...
- Delphi for iOS开发指南(3):创建一个FireMonkey iOS应用程序
http://cache.baiducontent.com/c?m=9d78d513d9d431a94f9d92697d60c015134381132ba1d0020fa48449e3732b4b50 ...
- ItelliJ IDEA开发工具使用—创建一个web项目
转 http://blog.csdn.net/wangyang1354/article/details/50452806 最近想用IDEA编辑器开发,但是平时都用MyEclipse和eclipse ...
- ItelliJ IDEA开发工具使用—创建一个web项目(转)
最近想用IDEA编辑器开发,但是平时都用MyEclipse和eclipse习惯了,突然间用IDEA到处碰壁的感觉.在不断的摸索之后终于苦尽甘来,学会了基本的web程序如何创建以及运行了.期间在网上找了 ...
随机推荐
- 更换SSD系统启动盘-PE重装系统
由于把C盘所在的磁盘替换为了另一张大容量SSD,因此必须借助于PE系统重装Win10,基本步骤如下: 由于每个人电脑不同,遇到的情况也不同,我的电脑是惠普暗影精灵,在PE系统中需要用分区助手把新磁盘进 ...
- C++ set集合容器用法解析
1.简介 set是C++STL库中的一个容器,他十分的便利,所有的元素插入时都会被自动排序,并且容器内保证元素不重复,就想高一数学中讲的集合具有互异性一样,(好像set本来就叫集合容器 bushi)2 ...
- Silky微服务框架之模块
模块的定义 Silky是一个包括多个nuget包构成的模块化的框架,每个模块将程序划分为一个个小的结构,在这个结构中有着自己的逻辑代码和自己的作用域,不会影响到其他的结构. 模块类 一般地,一个模块的 ...
- 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理
在一个应用系统的开发框架中,往往很多地方需要用到缓存的处理,有些地方是为了便于记录用户的数据,有些地方是为了提高系统的响应速度,如有时候我们在发送一个短信验证码的时候,可以在缓存中设置几分钟的过期时间 ...
- SQL--插入单引号值
sql语句中插入单引号的值需要多写一个单引号进行转义 例如:插入一个值为student' name的值 update table set name='student'' name'
- 【Azure 事件中心】Event Hub 无法连接,出现 Did not observe any item or terminal signal within 60000ms in 'flatMapMany' 的错误消息
问题描述 使用Java SDK连接Azure Event Hub,一直出现 java.util.concurrent.TimeoutException 异常, 消息为:java.util.concur ...
- el-scrollbar 监测滚动条
export function processScroll (_this) { let _self = _this let scrollbarEl = _this.$parent.wrap ...
- 【笔记】区间DP
记录一些基础的区间 \(\text{DP}\) 题. 0x00 AT_dp_n N - Slimes 最板的区间 \(\text{DP}\) . 记 \(f[i][j]\) 表示合并 \(i\sim ...
- Bitmap和byte[]的相互转换
/// <summary> /// 将Bitmap转换为字节数组 /// </summary> /// <param name="width"> ...
- 基于python的数学建模---分支定界算法
zip函数 a = [1,2,3,4]b = [5,6,7,8]i = sum(x * y for x, y in zip(a, b))print(i)70 floor and ceil 函数 imp ...