首先还是先上效果图吧。
这是一张用stable diffusion生成的照片,我们最好去选用这种相对正透视的照片(特别是像我这种透视功底本来就不咋地的半桶水美术)。
通过该照片直接映射到场景立方体中(注意这里删掉了正对摄像机的面)
简单建模赋予场景体积感,并实现基于摄像机视角的纹理映射,涉及到uv不准确或者效果不好的地方,如果追求效果更准确一些的话,需要手动去调整一下特定位置的uv。
完成映射后的效果。
距离近一些的话,把视角限定在房间方块中,显得flaws会更少。
为了引入额外的ambient和光照,我们调整下材质。目前的材质是这样的:
我们其实是直接采样图像的颜色信息,而没有经过真正意义上的光照模型。
连接bsdf节点,作为基础色输入,把bsdf结果输出到材质节点。
拖入光源,我们发现已经能够产生阴影了。
接下来是流程的复盘。
1. 本地化部署Stable Diffusion
stable diffusion已经火爆了这么久,网络上各种便捷式的安装包已经满天满地了,随便搜索一下就能找到近乎是即插即用型的安装包。
这里使用的是b站up主秋叶的安装教程。感谢技术大佬们如此的内卷,让我们这些不太玩深度学习的人也享受到了便利。
开发不易,希望大家能够多多给大佬们投币。
Stable Diffusion一键启动器教程
只要完成了默认配置,基本上就可以直接启动,开启web端的stable diffusion。
启动后的界面是这样的,可以看到基本的功能都是非常齐全,但这次我们主要使用的是文生图的功能。
后续主要调整的参数是,正向词条,单次批数。
当然我不是stable diffusion玩的特别溜的人,这里只做简单的教程,sd的大佬们可以尽情发挥。
2. Chatgpt提供词条
这里主要使用了chatgpt能够进行角色规则学习的特性。主要使用的是这段规则:
再次提醒大家的是,规则是可以根据自己的使用需求来进行变化的,希望大家不要被局限了。
IMBot是一位有艺术气质的AI助理,帮助人通过将自然语言转化为prompt。IMBot的行动规则如下:
1.将输入的自然语言组合想象为一幅完整的画面,你需要根据描述自行随机添加合理的,不少于5处的画面细节
2.第一部分:((masterpiece)), ((best quality)), 8k, high detailed, ultra-detailed, ;
3.第二部分:用简短的英文描述画面的主体,如: Agirsitting in aclassroom,输出这段英文;
4.第三部分:用英文单词或者词组描述画面的所有主体元素,元素之间用""隔开,如果有哪个元素比较重要,请给代表这个元素的英文词组增加小括号,最多可以增加三层小括号,如: 1girl,((black hair)),smiling,(windows in background),sunshine,输出这段英文.
5.IMBot会将以上生成的三部分文本用英文逗号连接,中间不包含任何换行符的prompt作为最终结果
6.JMBot输出时将直接输出prompt,而不包含任何说明和解释。
接下来你将扮演IMBot,要处理的自然语言为:
在最后输入需要处理的画面内容即可,但最主要的还是得有相应的想法才行,没有任何想法就想出画面,ai也难救啊。
个人建议可以通过:时间(早午晚)+场地(草地,沙漠,城市)+气候 + 场景中组成的元素来进行描述
可以比较方便地通过枚举来生成不同的词条。
这里我使用的是:
清晨的森林里流淌着一条小溪,小溪流经一个小瀑布,并且小溪里有各种石头,远处有一座城堡
chatgpt给与我的反馈是:
((A masterpiece)), ((with the best quality)), 8k, high detailed, ultra-detailed, depicts a serene morning forest scene. In the center of the painting, a small stream flows peacefully through the forest. The stream passes by a small waterfall, creating a soothing sound. Small rocks of various shapes and sizes can be seen in the crystal clear stream. In the distance, a magnificent castle stands tall, visible through the trees.
3. Stable Diffusion生成
获得了对应的词条后,我们输入到之前启动的本地化sd中进行生成,一批8张图片。
感觉第二张相对透气一些,就用第二张吧。
4. Blender简易建模
打开blender新建场景,我们选择摄像机进行设置,选择背景图片,把我们刚刚生成的图像作为背景图片。
切换摄像机视角,图片就出来了。
这里这里的图像压缩问题,是摄像机相关的视口设置导致的,我们调整下对应的视口设置,使x,y方向上的分辨率一致,则最终成像为正方形。
在n界面我们打开锁定摄像机到视图方位,就可以确保该参考图不会随着摄像机视角移动而移动了。
4.1 构建环境立方体
我们调整初始的盒子,拉出透视,并删去面向摄像机的面。
编辑模式下,使用按当前视角投影,当然直接调整完之后也是不能直接显示的,我们需要在切换预览模式为渲染,并且调整shading模式,使用图像纹理信息。
可以看到flaw感特别明显,这种显然就是球体的矩形太长了,以至于uv映射有一些问题,我们调整透视。
这里我们压缩了整个方块的长度,然后调整了原平面的尺寸,再次进行视角投影,这次调整下来,至少底部的映射结果看起来比较正确了,但是两侧的平面,顶部的平面的uv映射还存在拉伸过度的问题。
这里我们得切割循环边,增加uv划分层级。
再次映射后,纹理拉伸问题有所缓解,显然层级还不够。由于不是用来放进引擎里使用的模型,我们也不那么讲究结构问题了,直接double切割循环边数目。
显然两侧的拉伸问题已经比较明显的缓解了,但是顶部的拉伸问题依然相对严重。
对z方向也进行循环边切割,再次进行视角映射,修正拉伸问题。
4.2 填充简易几何体
主要是通过各种几何体来近似替代场景中的物体,一般来说,像房间类的比较板正的场景,这一步的效率会相对高一些,像这样比较自然的场景,需要调整的部分就想对多一些,耗时多少,取决于场景的复杂度,以及个人建模的熟练程度了。(T面板中的添加几何体)
我个人最常用的还是立方体,圆柱体,棱角球这三种,基本上做一些调整,再做基于视角的投影,效果上基本上就七七八八了。
添加完简易物体的效果如下:
渲染模式下的效果
由于是大空间透视的场景,顶部面这边的透视瑕疵感比较强。
所以这里我还额外调整了一下背景盒子,一方面是顶部整体拉高,然后用一些几何体去填了顶部的树叶,有一些遮挡关系下的纹理显示不太正确,也做了单独的uv调整。
但是毕竟顶部本身信息量就少,我们只能尽量不去看太多的顶部细节了。
以下是无建模,纯环境盒子的版本。
同样的角度下,建模(左)和无建模(右)的对比
5.总结
总的来说,独立建模后的场景在透视上会更稳定。
对于透视相对小,构成相对简单的场景,建模辅助的速度也会相应的提升;对于大空间大透视的场景,相应的建模耗时也会有所增加。
对于如何使用简单几何体去立体化概括图像中的物体,既吃使用者本身的美术功底,并且本身也吃使用者对blender的熟练程度。
说了这么多顺便就画个潦草的小草稿吧,笔者最近一直忙着玩王国之泪,导致时间上特别紧张,估计都不一定能有时间把这幅画细化出来,权当画一个不成气候的示范,紫菜了紫菜了。