百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

「游戏开发」请别再说Unity不如Unreal:Unity室内场景 + 光照练习 3

haoteby 2025-07-10 14:56 47 浏览

关注“indienova”,挖掘独立游戏的更多乐趣

引言

上两节慢吞吞的补了很多技术实现的细节,感觉要是把用到的所有技术细节都过一遍可能还需要若干篇文章。所以决定先把整体的流程这篇好玩的写了,以后再慢慢补技术细节的部分。

模型导入

导入房间,沙发,雕像和电视机模型,同时还有相对应的贴图。

导入时,导入选项的Generate Lightmap UVs打钩。

摆放模型

按照个人喜好来布置房间里的家具,我做的如下:

设置材质

给模型贴上材质。这里需要对应的材质的贴图,我使用了下载的模型自带的贴图。比如沙发的材质是这样的:

嗯,其实材质在搭场景的时候还是很重要的,但是这部分内容比较美工向一些,这里就不展开了。我用的是Unity标准的材质,贴图用的是通用的棉布的Albedo +Normal 贴图。

这里安利一下我的上一篇文章,里面讨论了关于材质的内容:【如何用十块钱买房】Unity室内场景 + 光照练习 1

想要效果好一点的话可以使用substance painter。

Allegorithmic :https://www.allegorithmic.com/

贴好材质后的场景如下:

烘焙光线

把场景中各个物体设置为静态(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真实感场景渲染需要用到的效果,功能很强大,其中一些的效果甚至比付费插件还要好(毕竟是亲儿子)。

Asset Store :https://www.assetstore.unity3d.com/cn/#!/content/83912

但是在这里我还是想用传统的方法,逐个添加特效。

一般特效添加顺序:

  1. Screen Space Reflection

  2. Screen Space Ambient Occlusion

  3. Depth of Field

  4. Motion Blur

  5. Bloom

  6. Tonemapping

  7. LUT/Color Grading

  8. Anti Aliasing

使用的特效插件:

  • 官方的特效包:

https://www.assetstore.unity3d.com/cn/#!/content/51515

  • 一个效果比较好的Bloom插件:

https://www.assetstore.unity3d.com/cn/#!/content/17324

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不如Unreal:Unity室内场景 + 光照练习 3】

相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...