引言
上两节慢吞吞的补了很多技术实现的细节,感觉要是把用到的所有技术细节都过一遍可能还需要若干篇文章。所以决定先把整体的流程这篇好玩的写了,以后再慢慢补技术细节的部分。
模型导入
导入房间,沙发,雕像和电视机模型,同时还有相对应的贴图。
导入时,导入选项的Generate Lightmap UVs打钩。
摆放模型
按照个人喜好来布置房间里的家具,我做的如下:
设置材质
给模型贴上材质。这里需要对应的材质的贴图,我使用了下载的模型自带的贴图。比如沙发的材质是这样的:
嗯,其实材质在搭场景的时候还是很重要的,但是这部分内容比较美工向一些,这里就不展开了。我用的是Unity标准的材质,贴图用的是通用的棉布的Albedo +Normal 贴图。
这里安利一下我的上一篇文章,里面讨论了关于材质的内容:
想要效果好一点的话可以使用substance painter。
贴好材质后的场景如下:
烘焙光线
把场景中各个物体设置为静态(static),至少是光照贴图静态(light map static)。
设置场景的光源属性为烘焙。这里以场景中的方向光源(directional light)为例。设置如下:
把项目设置为线性颜色空间(可选项,看各自项目需求)
在Edit=>Project Settings=>Player Settings 下,Color Space 选项调节为Linear。
然后打开光照设置窗口,Windows=>Lighting=>Settings,在弹出窗口的Scene框下,设置如图:
点击最下方Generate Lighting按钮,最终效果如下:
经过烘焙,物体的阴影变得更加柔和,场景也变得明亮,显得舒服多了。不过仔细观察,还是可以发现比如沙发底下地板过亮,电视机屏幕没有反射显得死板等等毛病。
添加反射
GameObject => Light => Reflection Probe,给场景添加一个反射探测球。
在场景中出现一个灰色的球。选中Reflection Probe(灰色的球),把它移到房间正中。调节Box Size使其刚好覆盖房间内所有对反射光线比较敏感的物体(电视+木板+雕像)。调节属性Resolution志512或者更高。
调节好后,点击Bake。
烘焙成功后,球会变成一个带场景反射贴图的球。
上图添加了反射的场景。嗯,好像也没什么变化。。。其实这一步是为了下面添加Image Effect做准备的。注意到右侧的电视屏幕出现了反射光。
特效美化
场景搭的好坏50%靠材质,50%靠特效,当然,这是建立在物品摆放+打光基本没问题的基础之上。
Unity 5.5 官方推出了一个免费的特效插件Post Processing Stack,这个插件涵盖了这篇文章之后讲的所有特效,基本上是收录了所有常见的3D真实感场景渲染需要用到的效果,功能很强大,其中一些的效果甚至比付费插件还要好(毕竟是亲儿子)。
但是在这里我还是想用传统的方法,逐个添加特效。
一般特效添加顺序:
- Screen Space Reflection
- Screen Space Ambient Occlusion
- Depth of Field
- Motion Blur
- Bloom
- Tonemapping
- LUT/Color Grading
- Anti Aliasing
使用的特效插件:
SSR (Screen Space Reflection)
这个特效是给场景的物体添加反射,用特效取代实际的渲染,而获得廉价但是效果十分不错的反射效果。
选中主相机,添加脚本Screen Space Reflection。设置Camera的Rendering Path 为Deferred,并且关掉 Allow MSAA。注意Screen Space Reflection要求相机使用延迟渲染(Deferred Rendering),但是相机自带的抗锯齿为MSAA,要求向前渲染(Forward Rendering)。所以添加SSR后,场景中的锯齿会骤然变多。之后进行的抗锯齿阶段会进行修复。
添加SSR后,木地板和电视玻璃可以明显的看到反射,整个场景变得立体了。
SSAO (Screen Space Ambient Occlusion)
这个特效是给场景的一些小旮旯添加阴影,强化物体投影与物体暗部的分界线,使物体更加立体。画过素描的可以理解为给物体和投影的分界线加深几笔(嗯,老师会骂的,但是效果很好情不自禁的就画了呀)
给相机添加SSAO脚本。在Asset Store上有一个叫SSAO Pro的插件,但是用了几次感觉有些莫名其妙的Bug。Unity 官方出的SSAO比较稳定,所以还是用免费的这个吧。
可以看到沙发底部,电视机背面和天花板缝隙等地方的阴影加深了,场景主体更加凸显。
DoF(Depth of Field)
简单来说就是达到照相机的对焦的效果,把前景和远景虚化。想想玩单反的同学发的高逼格照片,嗯,就是那种效果。
给相机添加Depth of Field脚本。点击Visulize,可以看到场景变成了黑白色,黑色表示清晰,白色表示模糊。调节Focal Distance和Focal Size来调节需要聚焦和虚化的部分。
最后效果如下,我特意把参数调得夸张了一些:
Motion Blur
主要用于快速移动的物体以及摄像机快速移动时产生动态模糊的效果。由于这里的场景是静态的所以就不考虑这个特效了。
Bloom
这个特效是让场景比较亮的部分发光。通常用于霓虹灯,阳光,光球等效果。个人感觉在发光物体和周围场景有一点区分度的场景中效果比较好。另外这个效果葉可以用于给场景添加模糊以遮盖部分瑕疵。
给相机添加SE Natural Bloom And Dirty Lens,由于这个场景对于发光的要求不高,所以用这个插件遮一下瑕疵。在免费的特效里,Bloom Optimzed的效果也是不差的。
画面稍微柔和一些。
Tonemapping & Color Grading
基本上等同于Photoshop里的拉曲线+调色调,Final Cut 里面调色板的功能,或者说是美图秀秀里面的各种滤镜。
给相机添加Tonemapping Color Grading的特效,调节各部分属性至理想效果。
通过色彩的调整可以做出各种不同氛围的场景,我这里调了一个偏温馨感觉的色调。
Anti Aliasing
抗锯齿,即把物体粗糙的边缘变得平滑。目前感觉效果最好的还是Camera自带的MSAA(特别是这个场景中后半部分的门窗部分,这种规整细长的框架解构,特别明显。无奈与SSR冲突。所以在使用DOF+Bloom把后半部分的门窗虚化后已经不那么明显了。)
沙发的边缘变得光滑,抗锯齿效果非常好。后面的的门窗部分依然有锯齿,但是并不影响整体效果。
收尾
给三个门窗加上区域光,使其正好覆盖在门窗上。
在Lighting 的窗口内点击Generate Lighting,重新生成一张光照贴图。
检查帧率,FPS为70+
最后对场景进行微调,一个午后喝茶的场景就做好啦~
再来对比一下Unreal做的类似的场景:
你们真的觉得这两个引擎的差距很大?
最后安利一波这个系列的前两篇文章,对于用到的一些技术的细节进行讨论。
如果有时间的话会把特效部分的技术细节讨论补上。
希望喜欢的朋友点个赞 ~
Unity不比UE差,只有开发者的水平高低
伪命题,
虽说最后两张图的差别其实很大,但你的场景还是有改进空间的,首先在于材质,文中采用unity默认的标准shader,并且一共只有两张贴图:漫反射和法线。如你自己所说可以用sp,或者更轻量的比如crazybump来做材质,再用shaderforge连连看调整材质。然后才是后处理效果,比如文中的景深和Bloom,而对比图中的差别,要看具体的算法。所以如果对渲染流程有一些了解,不太会纠结标题所述问题,因为很多的工作其实是脱离引擎的。(但我还是被标题吸引进来了2333,那这篇文章你问我支持不支持,我当然是支持的,不然也不会发一波评论+点赞收藏了。标题虽有引战嫌疑,但内容是干货,想让更多人使用自己使用的引擎,这点竞争少不了啊。
最后两张图的差别其实很大,但还是支持。