![8ae9a7e10185d681337261d1a82c4f46.png](https://i-blog.csdnimg.cn/blog_migrate/881ea274e3f07fd3bf0cc971eec13723.jpeg)
文 @罗培羽
效果
游戏美术成本很高,如果能够应用一些深度学习的方法,让机器自动生成美术资源,那么游戏开发将会变得简单。尝试制作一个应用,根据人物正面图自动生成侧面图。效果如下图,对于像素类图片,效果还是不错的。
![13a73e6dd0aefcd1cc41e9c1e48c162a.png](https://i-blog.csdnimg.cn/blog_migrate/7695248a68b2df15a6ad81c185359bf2.jpeg)
后面如果足够完善,就可以用同样的方法去生成背面、抬脚等多帧图片。做游戏行走图时,将不再需要绘制10几张图,而只需要绘制一张正面图,其他的由程序自动生成。
下面展示另外一些效果图,可以看出,程序能够拟合长发、长裙、帽子、铠甲、披风这些元素的侧面图。
![a778ed67d6b9603ac27ee5878175beb7.png](https://i-blog.csdnimg.cn/blog_migrate/cee34573cfb9517c271853a176db6e82.jpeg)
算法
算法都根据《Image-to-Image Translation with Conditional Adversarial Nets》这篇论文,而实际上因为论文很出名,tensorflow也有一个实现示例pix2pix,于是在该示例的基础上稍作改动。这是一个对抗网络的应用,生成器使用了unet结构,鉴定器使用了PatchGAN。资料比较多,后面有空再详细介绍。
训练
我找了2000多张rpg maker的行走图,训练集有2100张左右,还留下200张做测试集。每张图大致如下,截取了第一行第一列的图和第二行第一列的图来训练。
![46d4b9c56c37b32895d5c2b9b8a512f3.png](https://i-blog.csdnimg.cn/blog_migrate/8e4647452538709f4ad11d9130fac721.png)
这些图片有戴帽子的、有穿铠甲的,比较丰富。
![ffc053eba3c3b3b9ba5c8a09256c4dd6.png](https://i-blog.csdnimg.cn/blog_migrate/fadcf3abe84875afb08efb5f165318b0.jpeg)
训练了100个epoll,可能程序写的不好效率比较低,跑了10多个小时,燃烧了200块钱的云服务器费,还真贵啊!!
不足
生成器对于颜色鲜艳的像素图效果比较好,比如下面这张:
![cfd751a58a00956ebac80bc1596d7635.png](https://i-blog.csdnimg.cn/blog_migrate/11bd130cfc1cd9663cf7cafd1b69519f.jpeg)
但对于颜色灰暗的,效果就不太好,比如下面这张,糊了。
![2dd45b1b1835d535eb75c7bb705133c4.png](https://i-blog.csdnimg.cn/blog_migrate/48c73317133e48fe49410437b90c0e32.jpeg)
这个现象《Image-to-Image Translation with Conditional Adversarial Nets》论文给了一组对比,论文作者对比了几种正则化的式子(如下图),发现当前使用的L1+cGAN的灰色中的效果不太好。所以改善这个问题也许可以从优化L1式下手。
![5508d5787b056fd4dcd8c808b065993e.png](https://i-blog.csdnimg.cn/blog_migrate/e0b553cc9f42b7c1a86033ec31913cda.jpeg)
另外,因为训练图都是像素图,模型拟合了像素图的特征,如果使用更多细节的图片,效果也不好。下面是个失败的例子,原因大概在于,像素图的色块比较大,所以得出的卷积核不太适用于细节多的图片。
![fdcf1f782f1e67ad6c34cc9ddd3f468b.png](https://i-blog.csdnimg.cn/blog_migrate/44931519c2db3c8a9979d5ca2003ac5d.jpeg)
下一步
下一步当是优化算法,让算法更加健壮。主要在两个方向,1个是对灰色图的处理,另一个是对高精度图片的处理。同时可以运用同样的方法生成序列帧动画。
最后还是放个广告,笔者近期出版的《Unity3D网络游戏实战(第2版)》详细介绍网络游戏的开发的全过程,看完本书,能够亲手从零开始制作一款有一定规模的网络游戏。书中对网络编程有详细的讲解,全书用一个大例子贯穿,真正的“实战”教程。
![903b2171e4c483e68a4779566110acde.png](https://i-blog.csdnimg.cn/blog_migrate/e47119f40f665f027b0469b1ee4f501b.jpeg)