8

AIGC教程:如何使用Stable Diffusion高效生产“等距游戏美术资源”?

 1 year ago
source link: http://www.gamelook.com.cn/2023/04/514269
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

AIGC教程:如何使用Stable Diffusion高效生产“等距游戏美术资源”?

2023-04-06 • 游戏美术

【GameLook专稿,未经授权不得转载!】

GameLook报道/对于游戏研发而言,美术资源是时间和资金占用比较高的一部分,尤其是游戏内大量的资源创作。随着生成型AI技术的进步,不少团队已经开始了用AI生成美术资源的尝试,尤其是2D游戏。

最近,海外一位开发者详细讲解了他使用Stable Diffusion创作等距游戏资源的过程。从生成结果来看,用AI制作游戏资源无疑是非常高效的,数分钟内就能生成大量品质较高的2D等距游戏资源,尤其是对于模拟经营、SLG以及2D回合制游戏。

不过,Gamelook需要提醒的是,在很多的模拟经营或类似的2D游戏里,创作这些资源只是一个方面,对于同一个建筑,玩家往往需要从低级升到高级,期间会出现明显的视觉提升。更重要的是,在不少游戏中,建筑升级实际上需要一个(等待)过程,而AI目前还不能生成动画,仍需要开发者手动制作升级动画。

以下是Gamelook听译的完整内容:

lazy.png

今天主要探讨的是如何制作等距游戏资源,看这张图,它们非常适合做模拟游戏、各种类型的RPG、回合制游戏,那么,如何用Stable Diffusion制作这些资源呢?

你的第一反应可能是输入指令,让AI生成等距游戏资源之类的事情,如果这么做,你可以得到很多不错的结果,比如下图这些资源,甚至是与你最喜欢的游戏资源风格很接近。

lazy.png

但是,如果仔细看细节,你很快会意识到,它们都不是同样的视角,有些视角比较低,还有些比较高。

lazy.png

因此,如果你将这些资源放在一款游戏里,它们是完全不兼容的,我们需要额外的控制,才能得到可用的等距游戏资源。

Stable Diffusion+ControlNet+Blender

比较好的是,我们刚好得到了一套叫做ControlNet的工具,帮我们将Stable Diffusion生成的资源调整到我们想要的效果。

我今天要做的是,用深度模型创作这些资源。这意味着什么?

lazy.png

我展示如何用Blender来为你想要的资源创建一个模糊的形状,通过渲染这些深度图,然后将其输入到ControlNet来创作你的最终资源。

这只是其中的一个案例,你可以用它来创作大量的选择。

lazy.png

甚至是完全不同的风格,不一定只是城建游戏,我还用它做了一个魔幻风格的游戏创意。

接下来我们进入正题,到底该怎么做?

lazy.png

第一步,当然是需要安装Stable Diffusion,我用的是AUTO1111界面,了解它的基本使用方法和简单的指令输入。

接下来你需要的是ControlNet扩展,进入Stable Diffusion界面,点击扩展标签,选择从URL安装,然后输入ControlNet网址(https://github.com/Mikubill/sd-webui-controlnet),黏贴到对应的地方,然后点击安装。

完成之后,点击已安装标签,将刚刚安装的扩展选项打钩,随后点应用并重启UI按钮。

lazy.png

重启UI之后,text2img和img2img标签界面下方就会多出一个ControlNet选项。

这里会有额外的设定选择,不过,我们还需要ControlNet模型。

为此,我们打开这个链(https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main),下载其中的control_depth_fp16模型,还要确保下载后缀为yaml的文件。

随后,进入Stable Diffusion下的webui文件夹,extentions→sd-webui-contronnet→models,然后拖拽下载好的模型到这里来。

如果完全按照今天的分享来操作,我还建议下载ayonimix模型,因为它可以很快速获得不错的效果。

lazy.png

我使用的是V5版本,下载它还需要一个VAE。

对于下载的这个文件,打开你的主文件夹(Stable-diffusion-weibui文件夹),然后依次打开models→stable-diffusion,将ayonimix拖拽到这里。

lazy.png

VAE文件则需要放到models文件夹下的VAE文件夹内。

lazy.png

接下来,如果想要选择这里的VAE,点击Settings→User Interface→Quicksettings list,在这个列表中增加sd_vae。然后应用设定并重启UI,接下来就可以得到跟我一样的设置了。

用Blender做深度图

进入Stable Diffusion操作之前,我们需要先打开Blender,因为它可以定义我们想要的资源形状,并得到我们想要的完美角度,为我们的游戏带来具有连贯性的资源。

由于我们做的是等距游戏,所以视角会比较平,不会有广角视图,我们可以点击默认摄像机,进入摄像机设定,将类型选为Orthographic(正交投影),然后立即可以看到这样的效果,也是我们需要的。

lazy.png

通常情况下,这样的视角为30-45度,不过,如果你想调整,也可以按N键,勾选lock选项下的camera to view选项,这样我们就可以调整角度了,并且随后可以对方块进行拖拽旋转。

接下来,我们要创建一个非正方形的矩形,然后进入output properties,将分辨率调整为2048X2048,之所以创建如此巨大的正方体,是因为我们需要保证后续的分辨率。所以,你不需要渲染能力强大的电脑就可以做到,因为我们只给了深度信息,材质什么的都没有关系。

lazy.png

然后我要创建一个网格,所以要删除方块,这里会创建一个2×2 m的网格,我们要做的是一个能覆盖所有东西的平面,所以这里要拉伸,乘以8,这样就可以覆盖几乎所有的图片。

随后我们要对其进行细分,所以我们进入modifier properties,增加一个subdivision Surface modifier,这里的值设为4,将渲染设置为简单。

因为,我接下来要增加一个wireframe modifier,可以对我们之前创建的modifier进行概览,你可以将它的厚度降低,甚至可以低到几乎看不见,看上去就像是一条条的线,这是创建网格最简单的方式之一。

我们在右上角的Plane选项关闭摄像机,就可以看到比较清晰的网格。

那么,我们在Blender里究竟要做什么?实际上,我们在这里主要是为想要的建筑做粗糙的形状,这里你不需要太多的担心细节,我会创建一些默认建筑作为我们需要的资源。

lazy.png

按shift+A创建一个新立方体,这样我们在网格上就有了一个新立方体,然后进入编辑模式。

现在,我要创建一个漂亮的家庭建筑,这里要先把摄像机锁定去掉,否则会导致物体移动。这里的家庭建筑非常粗糙,你只需要基础的Blender技巧就行。

按Ctrl+R,你可以添加环形剖线,这里你不用担心拉伸的长度,因为Stable diffusion会知道我们想要什么,然后是增加房间入口。

这就是我们想要的房间形状了。

如果视角贴的特别近,那是因为操作的时候碰到了鼠标滚轮,导致拉近了摄像机,这时候我们走出房间,按G\Z\Z,然后拖动摄像机,就可以回到正常视角,不过要确保你的建筑在摄像机范围之内。

接下来,如果你想直接渲染,看起来效果会比较差,因为光照是错误的,而且没有纹理,这些信息是没有用的,你需要的是深度图。

所以,我们随后点击compositing标签,点击use nodes,这里会有些复杂,但不用担心,我会详细说明。你需要将深度信息放到composite输出里,这里进入layer properties,勾选Z,就可以在左边看到深度层。

这时候按shift+A,搜索normalize节点,拖拽到depth选项,然后shift+A搜索Invert,将其连接到颜色信息中,最后,将颜色拖拽到与image相连。

lazy.png

Normalize的作用是,它可以让离摄像机最近的点变成纯白色,最远的变为纯黑色,所以你始终都可以让建筑形状有最大化的深度信息。

使用Invert是因为Stable Diffusion会用到相反色,然后点击渲染,你会得到一个完美的深度图。你可以把它存储并输入到ControlNet。

为了整洁起见,我们将文件名定义为House-depth,格式选择PNG、RGB都可以,由于不需要透明度,所以直接保存就行。

导入Stable diffusion生成游戏资源

lazy.png

接下来进入Stable Diffusion,需要提醒的是,第一步是先把深度图放到ControlNet,然后勾选启用(enable),其余设置不要修改,因为这已经是个很完美的深度图,只需要将模型切换为control_depth。

这时候权重有些高,所以我们将它跳到0.6看效果如何,通常这是保留所有必要角度的权重。

对于指令,我不会逐字阅读,因为很长,不过我找到了一个不错的指令,很适合这类游戏使用,你只需要复制黏贴即可。

lazy.png

[你的建筑描述], cozy, playful, beautiful, art by artist, (pastel colors:0.7), vector art, (illustration:1.4), digital painting, 3d render, stylized, painting, gradients, simple design, (centered:1.5), ambient occlusion, (soft shading:0.7), view from above, angular, isometric, orthographic

负面指令:

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, intricate, signature, text, watermark, fisheye, harsh lighting, shadows

采样器有时候可以选择DDM,不过这里选择Euler a即可,采样步数选择20,batch count设置为4,其余设置可以保留,毕竟我们做的也是方形。

lazy.png

这是我们的第一个结果,很明显少了车库和红瓦屋顶,不过没关系。

lazy.png

这个版本与我想要的很接近,比如红屋顶、车库、漂亮的窗户,不错的门。

还有些缺失了车库,所以上图很明显是最好的一个。

lazy.png

如果觉得满意,可以直接sent to inpaint,或者send to img2img,并做出一个更高分辨率的版本。

比如可以调整为1024×1024,如果我将denoising降低到0.2,即便是我这张不怎样的GPU也能生成,因为这样可以很好地保留这个风格,但还可以增加大量细节,让它看起来更漂亮。

这里可以将采样步数增加到45,为了保持风格,我还要回到text2img复制种子(seed),黏贴到对应位置,同时为ControlNet增加同样的深度图,以免丢失任何信息。

lazy.png

这就是生成的结果,能够看到它更加干净整洁,因为采样步数和分辨率都更高了,而且灯和窗户都更好看。

接下来,我们把它放到图形处理软件之中,我使用了Affinity Photo,你还可以使用Photoshop或其他软件,只不过会使用一些略微不同的小技巧。

创建新文件,尺寸设置为1024×1024,复制粘贴我们生成的结果,我把它放到这里是希望将它变为游戏资源,因此要去掉所有的背景信息。

所以,我们回到深度图,把它放到这里,这也是我们把深度图做非常大的原因,我们可以把它缩小,以适应画布,这一步很实用,因为这里已经有了几乎完美的遮罩(mask),不过有一些灰色成分。

lazy.png

我们可以使用threshold滤镜去掉,将它设置为1%,这时候就可以看到房间的完美轮廓。

选择rasterize to mask,随后就可以得到几乎完美的建筑图了。

lazy.png

当然,这并不是100%完美的结果,比如这里还有些边缘没有消除,但已经是非常不错的方法。

这里我们得到了第一个游戏资源,比较神奇的是,我们可以用它来创造任何其他东西。

lazy.png

比如我们可以在指令里写入医院、诊所,立即就可以得到很多比较酷的建筑。

还可以生成一个工厂建筑,对于其他建筑,你可以使用完全相同的步骤操作。或者,你也可以在Blender里做其他不同形状的深度图,做出各种各样的建筑或者资源。

我们快速展示一些资源的创作过程:

lazy.png

可以看这些建筑,不要介意它的细节,我只是通过调节一些指令得到了各种不同风格的建筑,并且在Blender里做了一些粗糙的模型,最重要的是,它们与网格很适合,所以这种方法非常强大。

你甚至可以几分钟内做大量的游戏内资源,并且所有资源都和角度、视角匹配。

lazy.png

这个方法可以适用于任何风格的资源,比如这是我做的魔幻风的资源,我希望你们通过这个技巧更有创意,它很强大,而且用起来很有趣。

如若转载,请注明出处:http://www.gamelook.com.cn/2023/04/514269


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK