亚马逊AWS官方博客

生花妙笔信手来 – 玩儿转游戏动漫场景

在上一篇博客中,我们为大家展示了 Stable Diffusion 在电商场景中的实践,在本篇博客中,我们则将为大家介绍在游戏行业中一些主流的应用场景。如何高可控输出图片是很多 Stable Diffusion 用户关心的方向,因此本文着重介绍了在游戏/动漫场景下,使用 ControlNet 提高可控输出的几种方式。

《生花妙笔信手来》系列:

温馨提示:心急的小伙伴可以下拉到第二部分,直接享用游戏/动漫场景内容,心满意足后再回来动手实践: )

1. 环境准备

在开始之前,请您按照第一篇“生花妙笔”博客中的方法安装 WebUI,并按照第二篇博客中的方法安装最新版 ControlNet 1.1 包含的模型。安装步骤详情如下所示:

1.1 安装 Stable Diffusion WebUI

请参考《生花妙笔信手来 – 基于 SageMaker Notebook 快速搭建托管的 Stable Diffusion – AI 作画可视化环境》中的 3.4 方案部署部分。请注意,3.4.1 的方案部署操作步骤第 4 步,选择 WebUI Version 时,建议您选择最新版本 0601,我们已经将本文实验所需的 ControlNet 1.1、OpenPose Editor 插件打包好了,省去您安装的大部分步骤。

图 1 版本选择 0601

1.2 下载 ControlNet 1.1 最新版本模型

请参考《生花妙笔信手来 – 基于 Amazon SageMaker 使用 Grounded-SAM 加速电商广告素材生成 [1]》中的 1.1 ControlNet 部分,在 SageMaker Notebook 的 Terminal 里面,通过脚本下载 ControlNet 1.1 版本所有模型,脚本略有修改,如下:

cd SageMaker/sd-webui
./download-controlnet-1.1-models.sh

2. 游戏/动漫人物原型生成(高可控输出)

接下来将通过不同方式,来完成游戏/动漫 5 个应用场景的高可控输出,请各位参考。希望可以帮助大家结合自身实际场景,提高 Stable Diffusion 在美术生产环节中的应用。下面实验中的图片均来自网络。

2.1 场景一:基于风格化大模型生成游戏/动漫人物

2.1.1 风格化模型选用

本文中我们选用的风格化模型为 DreamShaper_6_BakedVae,为了获得相对一致的测试体验,建议您可以一起安装,或也可使用其他您熟悉的风格化模型,脚本安装时替换模型下载链接即可。此步同样是在 SageMaker Notebook 的 Terminal 里面,通过脚本下载。以该模型为例,安装及文件移动脚本如下:

wget https://civitai.com/api/download/models/94081 --content-disposition
cp dreamshaper_631BakedVae.safetensors /home/ec2-user/SageMaker/sd-webui/data/StableDiffusion/

安装完成后,让我们回到 Stable Diffusion WebUI 界面,刷新左上角“Stable Diffusion checkpoint”即可在下拉菜单看到。

图 2 刷新“Stable Diffusion checkpoint”

2.1.2 生成游戏/动漫人物

让我们先用文生图(“txt2img”)的模式,根据指令生成动漫人物。配置如下:

Model: DreamShaper_6_BakedVae

Method: txt2img

Positive Prompt: girl with purple eyes, delicate skin, cat ears, chibi, blue, gold, white, purpple, dragon scaly armor, forest background, fantasy style, (dark shot:1.17), epic realistic, faded, ((neutral colors)), art, (hdr:1.5), (muted colors:1.2), hyperdetailed, (artstation:1.5), cinematic, warm lights, dramatic light, (intricate details:1.1), complex background, (rutkowski:0.8), (teal and orange:0.4), colorfull, (natural skin texture, hyperrealism, soft light, sharp:1.2), (intricate details:1.12), hdr, (intricate details, hyperdetailed:1.15), white hair

Negative Prompt: BadDream, UnrealisticDream, FastNegativeEmbedding

Sampling Method: DPM++ SDE Karras

Sampling Steps: 30

Batch Size: 4

Width: 512

Hight: 768

图 3 生成风格化游戏/动漫人物

我们将保存下方图片作为后续步骤的素材。

图 4 选择人物继续实验

2.2 场景二:使用 Reference-only 控制人物细节输出

很多玩家比较熟悉大模型+Lora 的方式来控制风格化输出,本文接下来将为大家展示另一种可控输出方式:在“img2img”模式,使用 ControlNet 1.1 中新增的 Reference-only 的预处理器,不加任何 Lora 模型情况下进行风格化输出。

原理:通过结合模型的注意力层与作为范例的图片特征,Reference-only 可以保留更多范例图片的内容和风格。目前 Reference-Only 有三种模式:Reference-Only, Reference-adian, 以及 Reference_adain+att。其中,Reference-adian 更侧重保留原图内容,Reference-only 更侧重保留风格,而 Reference_adian+att 则结合两者,最大程度保留了原图的主题特征。下面将先以“Reference-Only”做示范,再比较与 Reference-adian、Reference_adain+att 的区别。

2.2.1 垫图 + 提示词 + Reference-only

示范一:五官不变,发色、服饰改变

为了确保模型持续输出同一肤色,建议提示词可以在原有基础上稍微调整肤色颜色、发色颜色等,并把提示词尽可能靠前放。

Model: DreamShaper_6_BakedVae

Method: img2img

Positive Prompt: girl with purple eyes, delicate white skin, cat ears, chibi, blue, gold, white, purpple, dragon scaly armor, forest background, fantasy style, (dark shot:1.17), epic realistic, faded, ((neutral colors)), art, (hdr:1.5), (muted colors:1.2), hyperdetailed, (artstation:1.5), cinematic, warm lights, dramatic light, (intricate details:1.1), complex background, (rutkowski:0.8), (teal and orange:0.4), colorfull, (natural skin texture, hyperrealism, soft light, sharp:1.2), (intricate details:1.12), hdr, (intricate details, hyperdetailed:1.15), green hair

Negative Prompt: BadDream, UnrealisticDream, FastNegativeEmbedding

Sampling Method: DPM++ SDE Karras

Sampling Steps: 30

Batch Size: 4

Width: 512

Hight: 768

ControlNet: Reference

Control Modelbalanced

Resize ModelJust Resize

图 5  同一人物的绿色、粉色、白色头发

示范二:五官、发色不变,表情改变

1)为确保生成需要的表情,建议在提示词中添加表情关键词后,再添加括号和权重,如(grin smile)、(angry: 1.3)、(cry: 2)等,效果如图。

2)若希望增加发型、姿势控制,可以多个 controlnet 同时使用(设置方式如下图),如:controlnet unit 0 为 reference-only,controlnet unit 1 为 canny。

3)若希望增加面部控制,可以在提示词下方勾选“Restore faces”(面部修复)。

图 6  设置多个 ControlNet 同时使用

图 7  同一人物的开心、生气表情

2.2.2 垫图 + 提示词 + 不同 Reference-only 模式比较

在下面的实验中,我们可以通过去掉 Positive Prompt 中所有与女孩儿外貌相关的形容,并保持其他配置不变来更清晰地比较不同模式对于最终结果的影响,Positive Prompt 修改如下,其他不变:

Model: DreamShaper_6_BakedVae

Method: img2img

Positive Prompt: girl standing, bright background, fantasy style, (dark shot:1.17), epic realistic, faded, ((neutral colors)), art, (hdr:1.5), (muted colors:1.2), hyperdetailed, (artstation:1.5), cinematic, warm lights, dramatic light, (intricate details:1.1), complex background, (rutkowski:0.8), (teal and orange:0.4), colorfull, (natural skin texture, hyperrealism, soft light, sharp:1.2), (intricate details:1.12), hdr, (intricate details, hyperdetailed:1.15)

Negative Prompt: BadDream, UnrealisticDream, FastNegativeEmbedding

Sampling Method: DPM++ SDE Karras

Sampling Steps: 30

Batch Size: 4

Width: 512

Hight: 768

图 8  从左至右分别为:垫图、无 ControlNet、Reference_adian+att、Reference_adian、Reference-only 的输出结果

2.3 场景三:游戏/动漫人物换装

从上面的结果我们不难看出,Reference_adian+att 在输出结果上最大程度保留了输入中女孩儿的长相,服装样式以及服装配色。通过这种方式可以快速批量生成风格一致但有细节差异的游戏人物素材。然而,在实际设计流程中,我们往往还需要更丰富的编辑功能。

例如,我们可能希望为游戏/动漫人物更换不同服装,为下边左图美女战士(来自上一部分生成结果),穿上右图所示的铠甲。

图 9 美女战士

图 10 铠甲

此时,我们希望将铠甲的样式完全固定,并且可以控制美女战士的姿态,使得整体结果更自然。那么,需要为铠甲制作蒙版——调整美女战士姿势——换装,具体步骤如下:

第一步,使用 Inpaint 绘制铠甲蒙版

选择“img2img”的“Inpaint”模式并在原图上绘制出服装的蒙版,可参考上一篇博客第二部分的第三步,结果如下图所示:

图 11 铠甲原图与蒙版绘制

第二步,使用 Openpose 控制人物姿势

方式一:Inpaint + Openpose + Reference_adian+att + canny

您可以选择直接将带有目标姿态的图片,上传到“Inpaint”选项卡下方“ControlNet”部分的“Openpose”中,作为 Controlnet Unit 0 用以生成人物姿态;同时叠加之前介绍的 Reference_adian+att和canny 作为 Controlnet Unit 1 和 Unit 2,用以控制人物特征。但是这样往往会造成比例失调或者位置难对齐,如下图所示。

图 12 直接使用 Openpose 换装效果

方式二:Inpaint + OpenPose Editor + Reference_adian+att 

由于直接使用 OpenPose 效果不佳,因此我们建议可以通过使用 OpenPose Editor 插件,调整人物姿态,与铠甲相匹配后再进行换装。这样可以将带有服装的图片作为背景,使得关键点调整更直观精准,同时调整后的结果可以直接同步给 inpaint 中的 ControlNet,替换方式一中的 Controlnet Unit 0。OpenPose Editor 使用方法如下图所示:

图 13 OpenPose Editor 使用方法

下面将展示 OpenPose Editor 简要处理过程:

图 14 从左至右分别为:人物图片输入,识别初始姿态,目标服装,根据目标服装背景调整姿态

第三步,服装蒙版+人物姿势完成换装

将调整过的姿态发送到“img2img”的 ControlNet Unit 0 后,回到“Inpaint”界面,结合如下的配置获得最终结果:

Model: DreamShaper_6_BakedVae

Method: img2img

Positive Prompt: girl standing, purple eyes, delicate skin, chibi, blue, gold, white, purpple, dragon scaly armor, dark war background, fantasy style, (dark shot:1.17), epic realistic, faded, ((neutral colors)), art, (hdr:1.5), (muted colors:1.2), hyperdetailed, (artstation:1.5), cinematic, warm lights, dramatic light, (intricate details:1.1), complex background, (rutkowski:0.8), (teal and orange:0.4), colorfull, (natural skin texture, hyperrealism, soft light, sharp:1.2), (intricate details:1.12), hdr, (intricate details, hyperdetailed:1.15), white hair

Negative Prompt: BadDream, UnrealisticDream, FastNegativeEmbedding

Sampling Method: DPM++ SDE Karras

Sampling Steps: 30

Batch Size: 4

Width: 512

Hight: 768

图 15 Inpaint 配置

图 16 ControlNet 配置

美女战士 AI 换装结果如下:

图 17 美女战士换装(左图包含提示词“cat ears”而右图不含)

2.4 场景四:多个游戏/动漫人物绘制

有时我们可能希望将不同人物主体绘制在一起,如游戏运营策划所用的宣传海报、活动横幅等。理想情况下我们希望对每一个主体的位置和形态有相同的控制力,这点在文生图功能中,单单靠提示词往往很难达成,这时我们也可以利用上文提到的多个ControlNet来增强产图能力。具体步骤如下:

第一步,选择“txt2img”模式

第二步,调整不同人物主体布局

我们需要选定所需要的所有人物主体,并根据他们在最终图片上的布局调整位置,选择 Canny 模型,分别作为 ControlNet Unit 0 和 ControlNet Unit 1 的输入,如下图所示。这里值得注意的是,如果输入图片背景不是纯色,则需要手动绘制蒙版。

图 18 输入图 1

图 19 输入图 2

第三步,结合提示词完成多人物主体绘制

Model: DreamShaper_6_BakedVae

Method: txt2img

Positive Prompt: 2 girls standing together, castle background, fantasy style, (dark shot:1.17), epic realistic, faded, ((neutral colors)), art, (hdr:1.5), (muted colors:1.2), hyperdetailed, (artstation:1.5), cinematic, warm lights, dramatic light, (intricate details:1.1), complex background, (rutkowski:0.8), (teal and orange:0.4), colorfull, (natural skin texture, hyperrealism, soft light, sharp:1.2), (intricate details:1.12), hdr, (intricate details, hyperdetailed:1.15)

Negative Prompt: BadDream, UnrealisticDream FastNegativeEmbedding

Sampling Method: DPM++ SDE Karras

Sampling Steps: 20

Batch Size: 1

Width: 600

Hight: 528

图 20 txt2img 配置

图 21 ControlNet 配置

点击生成后将得到如下效果图,非常适合游戏运营策划:

图 22 多个游戏/动漫人物绘制结果

2.5 场景五:局部特写/提高图片分辨率

在游戏/动漫生成的场景里,有时为了分辨率要求,我们需要对局部做超分,在保证图像特征的前提下让图像更清晰;也有时为了突出戏剧效果,我们需要对局部特征做更精细的重绘。

实际上,Stable Diffusion WebUI Extras 中的 Upscale 和 ControlNet 的 tile 都可以对原图进行放大,然而由于原理不同,其性能和最终效果差距也较大适用的场景也各不相同。

2.5.1 Upscale

Upscale 可以独立使用或结合前后处理的脚本,但不能直接结合提示词或者 ControlNet,因此更适合局部超分的场景。其生成的图像更清晰也更能完整保留原图的特征,同时推理速度也更快,以下面的实验为例,整体推理时间仅需 0.82 秒。

图 23 Upscale 配置

图 24 原图与 Upscale 局部特写效果

2.5.1 Tile + Reference-only

Tile 不但可以结合提示词还可以结合其他 ControlNet 前处理器一起使用,因此更适合局部放大和重绘结合的场景。如果想最大程度保留原图特征,我们可以在 Positive Prompt 仅输入“higher resolution”,同时将原图输入 Reference_adian+att。从下面的实验结果不难看出,在放大到相同的图片尺寸时,生成的图像在细节处会与原图不同,清晰度较差,同时单张推理时间超过 21 秒,是 Upscale 的 21 倍多。

图 25 img2img 配置

图 26 Tile 配置

图 27 Reference 配置

图 28 左:原图,右:Tile 结果

Tile 细节重绘这一点,我们可以进一步从下面更多的例子中感受到这一点:


图 29 从左到右分别为:原图、Upscale 结果、Tile 结果

然而如果我们需要重绘,Tile 可以通过提示词实现更便捷的调控。例如,当我们将 Positive Prompt 改为“higher resolution, bright blue eyes”并保持其他参数不变时,我们可以得到如下结果。

图 30 原图与 Prompt 修改后结果

结语

以上是游戏和动漫设计场景中与客户沟通中比较主流的场景。随着 Stable Diffusion 和 WebUI 开源社区插件的快速迭代,AI 生图的操作越来越简单,图片的效果也越来越好,甚至可以超过一些商用软件的水平。我们也非常期待可以与您一同讨论相关的技术实践,如果您对博客内容有任何疑问也欢迎您直接联系我们。

本篇作者

李雪晴

GCR AI/ML 解决方案架构师。

刘楚楚

亚马逊云科技解决方案顾问,负责云计算市场探索与挖掘,为客户提供数字化转型咨询,帮助加速业务发展和创新。

杨松

亚马逊云科技解决方案顾问,致力于云科技与数据和行业的连接,赋能客户创新成长。

张铮

亚马逊云科技机器学习产品技术专家,负责基于亚马逊云科技加速计算和 GPU 实例的咨询和设计工作。专注于机器学习大规模模型训练和推理加速等领域,参与实施了国内多个机器学习项目的咨询与设计工作。

杨佳欢

亚马逊云科技 AI/ML 产品经理。专注于云计算、人工智能技术领域。