![cover](https://img-blog.csdnimg.cn/dfd73b3f57f740f5b3780a55e4446c35.png)
Unity3D:提升场景画面品质&平衡性能优化
Unity之提升场景画面品质及性能优化
在日常开发中,提升场景画面品质的同时平衡性能优化一直是很重要且头疼的一部分,尤其是当场景类型不同及效果需求不一样时。
所以怎么同时提升场景画面品质和平衡性能优化呢,下面介绍一些适用度高且实用性好的设置。
介绍之前先说一下结论:怎么样才能说的上是好的场景画面呢?我认为在保证场景光照颜色纹理不失真的情况下能够让场景画面足够亮且能看出有一定细节的场景画面品质那么就可以说的上是好的。
那么首先是项目工程设置:
点击Edit——ProjectSetting——Player——OtherSetting
ColorSpace,选择设置为Linear线性空间而不是Gamma非线性空间,因为线性空间在计算渲染时可以更真实的还原物理世界的光强度,实现更好的预期。需要注意的是,Linear不支持一些低端的移动安卓平台,目前只支持OpenGl SE3.0 Android4.3及以上,IOS只有Metal才支持。虽然Linear渲染的效果更好,但是Gamma的渲染开销更低,效率高,开发时根据情况选择。
点击Edit——ProjectSetting——Player——Quality
Levels,选择Ultra,绿色勾选代表当前平台选择的质量,想更改其通过点击下面的小三角选择具体即可。
PixelLightCount,根据情况设置像素灯数量,数量越多可渲染的灯数量也就越多,渲染开销也越高,有时候场景中有多个灯光但是只有几个是正常显示,原因就是灯光数量超过了PixelLightCount设置的数量。
TextureQuality,根据情况选择纹理质量大小,最好的是FullRes完整分辨率,往下有HalfRes QuarterRes EightRes,分辨率越高处理开销也越大。
AnisotropicTextures,一般都选择ForcedOn一直开启各向异性纹理,个别情况选择PerTexture逐纹理或者Disabled关闭。
AntiAliasing,根据情况选择抗锯齿级别,有2x 4x 8x,采样倍数越高抗锯齿效果越好同时处理开销也越大。
SoftParticles,根据情况选择软粒子是否开启,开启软粒子可以让粒子特效与场景有一个过渡,提升效果质量,不过开启后会增加处理开销,尤其手机移动端开启后掉帧明显。
RealtimeReflectionProbes,根据情况选择实时更新反射探针是否开启,开启实时反射对于场景画面的质量有很大提升,可以模拟物理世界的反射,但是开启后其处理开销也是大大增加,开发时酌情选择。
BillboardsFaceCameraPosition,开启后可以产生更好更逼真的图像,但是处理开销会增加根据情况选择。
ResolutionScalingFixedDPIFactor,基于当前的分辨率设置缩放,默认设置1,一般不动它,如果场景画面运行帧数不够可以降低设置,比如场景分辨率为1920*1080然后设置为0.5,则分辨率减半为960*540,可以优化性能。
Shadows,根据情况选择开启阴影或者阴影的类型,选择HardAndSoftShadows硬和软阴影都会被渲染,都渲染可以提升场景画面效果,但是会增加处理开销,选择HardShadowsOnly仅渲染硬阴影,仅渲染硬阴影会使的场景中的阴影看起来比较生硬没有过度,相对于硬软都开处理开销会低一些,DisableShadows不渲染阴影,则场景中没有阴影。
ShadowResolution,根据情况选择阴影的分辨率,有LowResolution MediumResolution HighResolution VeryHighResolution,分辨率越高处理开销越大。
ShadowProjection,根据情况选择阴影投射的方式,CloseFit渲染较高分辨率的阴影,但是当相机移动时,有时阴影会有轻微摆动,StableFit渲染的阴影分辨率较低,但是相机移动时阴影不会发生摆动。
ShadowDistance,相机的最大阴影可见距离,超过设置的距离则不会被渲染,默认设置150,根据情况设置。
ShadowmaskMode,根据情况设置阴影遮罩的质量,DistanceShadowmask以更高的性能成本提供更高保真度的阴影,Shadowmask以更低的性能成本提供更低保真度的阴影,配合lighting设置mode为Shadowmask,Shadowmask光照模式在所有光照模式中提供最高保真度的阴影,但是所需的性能成本和内存要求也是最高的,此模式适用于在高端或者中档硬件上渲染远处游戏对象可见时的真实场景,如空旷的空间世界。
ShadowNearPlaneOffset,根据情况输入阴影近平面偏移,默认设置3,用于解决大三角形由于阴影平坠而扭曲的问题。
ShadowCascades,根据情况选择阴影的级联数量,有NoCascades TwoCascades FourCascades, 级联数量越高,提供的质量越高,但代价是处理开销增加。
CascadesSplits,根据ShadowCascades设置的值可以看见两种或者四种不同的颜色,通过向左或者向右移动每个级联之间的垂直线来调整级联阴影分割,如果ShadowCascades设置为NoCascades则看不见CascadesSplits。
BlendWeights,选择在动画期间可以影响给定顶点的骨骼数量,有1Bone 2Bones 4Bones,根据情况选择。
VSyncCount,根据情况选择将渲染与垂直空白同步还是根本不同步,可将渲染与显示设备的刷新率同步来避免撕裂瑕疵,一般选择设置EveryVBlank。
LodBias,根据情况设置细节级别偏差,默认设置2,越高倾向于更多细节。
MaximumLODLevel,根据情况设置游戏使用的最高LOD,默认设置0,在构建中不会使用 LOD 低于 MaximumLOD 级别的模型,而是将其忽略(这样可以节省存储和内存空间)。Unity 将使用与目标平台质量设置相关联的所有 MaximumLOD 值中的最小 LOD 值。如果包含 LOD 级别,则该 LODGroup 中的模型将包含在构建中,并始终在运行时为该 LODGroup 加载,无论使用何种质量设置。例如,如果在任何质量设置中使用 LOD 级别 0,则所有 LOD 级别都将包含在构建中,并且所有引用的模型都将在运行时加载。
ParticleRaycastBudget,设置用于模拟粒子系统碰撞的最大射线投射数,默认设置4096,根据情况设置。
AsyncUploadTimeSlice,设置将缓冲的纹理和网格数据上传到GPU时花费的CPU时间量,默认设置2,单位为毫秒/帧,根据情况设置。
AsyncUploadBufferSize,设置用于将纹理和网格数据串流到GPU的异步上传缓冲区大小,默认设置4,单位为MB,根据情况设置。
其次项目光照设置:
点击——Window——Lighting——Setting
SkyboxMaterial, 天空盒材质是出现在场景中所以物体后面的材质,用于模拟天空或者远处的背景。
SunSource,当使用程序天空盒时,使用它来指定带有方向光的游戏对象,如果设置为None,场景中最亮的方向光则被指定为太阳光。
EnvironmentLighting,下面的设置会影响来自远处的环境光。
Source,散射的环境即存在在场景周围的光,它不是来自任何指定的光源,用它来指导一个源颜色,可选 Skybox 使用天空盒的颜色来确定来自不同角度的环境光,Gradient 可以为天空,地平线和地面的环境光选择不同的颜色,并在它们之间平滑的混合,Color 使用此选项可以为环境光指定一个平色,根据情况选择。
IntensityMultiplier,使用此设置来设定漫反射光的强度,可以提升场景亮度,根据情况调整数值。
AmbientMode,使用此选项可指定用于控制场景中环境光的全局光照模式,只有在场景中启用Realtime和Baked才可使用,根据情况选择。
EnvironmentReflections,下面的设置控制ReflectionProbe(反射探头)烘培中涉及的全局变量,以及影响全局反射的设置。
Source,来指定是使用天空盒还是Cubemap(立方体贴图)的反射效果,可选 Skybox 通过设置Resolution来达到反射的目的,Custom 通过设置cubemap来达到反射的目的,根据情况选择。
Resolution,指定分辨率,默认128,越高效果越好处理开销也越大。
Compression,反射贴图是否被压缩。
IntensityMultiplier,反射源在反射对象中的可见程度,可提升场景亮度,根据情况调整数值。
Bounces,当一个物体的反射被另一个物体反射时,会发生反弹,使用这个参数可以控制反弹的次数,根据情况调整数值。
RealtimeGlobalIllumination,实时全局照明,开启会实时计算和更新照明,可以大幅提升场景画面光照效果,同时增加处理开销,根据情况开启。
BakedGlobalIllumination,预先计算灯光并在运行时将其设置到场景中,相比于RealtimeGlobalIllumination实时全局照明,提升场景画面效果的幅度会降低一点,但是会减少处理开销提升运行性能,根据情况开启。
LightingMode,决定混合灯光和阴影在场景中使用的方式。
Lightmapper,指定使用哪个内部计算方法来计算光照贴图。选项是Enlighten和Progressive。
IndirectResolution,指定用于间接灯光计算的每单元的纹理数。增加此值可以提高光照贴图的质量,但是增加了bake时间。
LightmapResolution,光照贴图每单元的纹理数。
LightmapPadding,烘焙光照贴图中不同形状之间的分隔。
Lightmapsize,完整的光照贴图的尺寸,把单独的对象的纹理合并到单独的区域。
CompressLightmaps,压缩的光照贴图需要较小的存储空间,但是可能会在纹理中带来不需要的纹理效果。
AmbientOcclusion,环境光遮蔽是一种光照模型,它会计算像素亮度与场景中附近物体之间的关系。它将确定何时阻止特定像素接收附近的几何光的环境光,这样使其亮度便会降低。当两个均匀明亮的物体相互靠近时,它会产生基本的变光效果。开启后有FinalGather,最大距离,设置一个值控制射线的射程,以确定对象是否被遮挡,Indirect Contribution,控制直接光在lightmap的强度,Direct Contribution,控制间接光在lightmap的强度。
FinalGather,最终聚焦,开启后有Ray Count,每个最终聚焦的点发出的射线的数目。默认是256,Denoising(去噪),是否在最后的聚焦输出应用去噪过滤。
DirectionalMode,可以通过设置光照贴图,使物体表面每个点存储入射光的信息。direction lightmaps 比non-directional lightmaps存储了更多的环境灯光的信息,shader可以根据这些关于入射光的信息更好的计算 outgoing light,这就是shadr在屏幕的表现效果。开启有Directional,在定向模式中,会生成第二张光照贴图来存储入射光的主导方向。从而漫反射法线贴图材质可以在全局光照中起效。定向模式中光照贴图的信息大约需要两倍的存储空间。directional mode对于SM2.0(Shade Mode)和GLES2.0(OpenGL ES)无法支持。Non-directional,flat diffuse,平面漫反射,这种模式只需要一个光照贴图,存储了关于表面发出光的信息,假设它是单纯的漫反射,物体表现不那么立体。
IndirectIntensity,间接强度,控制实时存储间接光照和烘焙光照贴图的亮度。
AlbedoBoost,反射率增加,控制物体表面之间反射的数量。
LightmapParameters,光照贴图参数控制。
Fog,启用或禁用场景中的雾效,对于deferred rendering(延迟渲染)雾效并不适用,对于延迟渲染,后处理雾效可能能满足需要。开启后有Color 雾的颜色,Mode 设置雾效随着相机距离变化的累积方式。Exponential Squared(指数平方),Exponential(指数),Linear(线性),Density(密度)。
HoloTexture(光晕贴图):在光源周围绘制光晕纹理。
HoloStrength,光晕强度。
FlareFade Speed,耀斑褪色速度。
FlareStrength,定义耀斑的可见度。
SpotCookie,聚光灯cookie
最后是后期处理设置(需提前下载后期处理包):
环境光遮蔽 (Ambient Occlusion)
– 该效果会使光线无法照射到的区域变暗,如折痕、洞、物体与物体间的空隙部分。
包含两种模式,其中Scalable Ambient Obscurance (SAO)效果好但性能开销大,Multi-scale Volumetric Occlusion (MVO)速度快 (适用于移动端)。SAO参数 说明
Intensity 调整Ambient Occlusion产生的黑暗程度。
Radius 设置采样点的半径,控制暗区的范围。
Quality 定义样本点的数量,该参数影响最终效果与游戏性能。
Color 设置环境遮挡的色调颜色。
Ambient Only 启用此复选框使Ambient Occlusion效果只影响环境照明。此选项仅在Deferred渲染路径和HDR渲染时可用。
MVO参数 说明
Intensity 调整Ambient Occlusion产生的黑暗程度。
Thickness Modifier 修改遮挡的厚度。该参数能增加暗区,但会在物体周围引入暗晕。
Color 设置环境遮挡的色调颜色。
Ambient Only 启用此复选框使Ambient Occlusion效果只影响环境照明。此选项仅在Deferred渲染路径和HDR渲染时可用。
启用该效果后,看到墙角等物体交接处产生了黑影,真实感加强。
环境光反射 (Screen Space Reflections)
– 该效果会创建微妙的反射效果,用以模拟潮湿地板表面或水坑。
反射参数 说明
Preset 可以从下拉菜单中选择质量预设。使用Custom可以微调质量。
Maximum Iteration Count (Custom preset only) 设置射线行进通道的最大步数。值越高,反射越多。
Thickness (Custom preset only) 设置射线厚度的值。较低的值可以检测到更小的细节,但会比较消耗资源的。
Resolution (Custom preset only) 选择内部缓冲区的大小。选择Downsample性能最好。Supersample较慢,但效果更好。
Maximum March Distance 设置在场景中绘制反射的最大距离。
Distance Fade 设置接近反射面的反射淡出距离的值。可以用于消去伪影。
Vignette 设置反射图像淡出反射物边缘的范围。
添加该效果时,出现黄色警告。根据提示,更改Camera组件的Rendering Path为Deferred即可。更改后,发现画面出现锯齿,可以看到Post-process Layer组件中Anti-aliasing的Mode为No Anti-aliasing,改为其他任意一个即可。
启用该效果后,看到反射率大于0的物体会出现周围物体的反射像,真实感加强。
自动曝光 (Auto Exposure)
– 该效果会动态调整图像的曝光以匹配其中间色调,用以模拟人眼实时调整亮度的变化。
曝光参数 说明
Filtering 设置直方图中找到稳定平均亮度的上下两个百分比。超出这个范围的值将被丢弃,并且不会对平均亮度有贡献。
Minimum 设置最小平均亮度,作为曝光值(EV)的参考。
Maximum 设置最大平均亮度,作为曝光值(EV)的参考。
Exposure Compensation 设置中灰色值来补偿场景的全局曝光。
适应参数 说明
Type 选择适配类型。Progressive会进行自动曝光。Fixed不会进行自动曝光。
Speed Up 设置从暗到亮的适应速度。
Speed Down 设置从亮到暗的适应速度。
一般夜晚环境可能感觉场景偏暗,又不可能打太多太亮的灯,可以考虑使用这个效果给画面整体提亮。
颜色滤镜 (Color Grading)
– 该效果可以改变图像的颜色亮度。
全局设置参数 说明
Mode 选择Color Grading效果模式。
Lookup Texture LDR: 选择一个自定义纹理(条带格式,如256x16)应用于颜色滤镜的其他效果之前。如果没有纹理,则无效果。 External: 一个自定义纹理(色彩空间为log编码).
Contribution LDR: 设置纹理效果的比重。
色调映射参数 说明
Mode 仅在High Definition Range模式下可用。从下拉菜单中选择色调映射模式。None: 无色调映射。Neutral: 应用范围重映射与最小的影响色彩色调和饱和度。ACES: 应用接近电影色彩的外观 (参考ACES )。这种效果相比Neutral的色调和饱和度有更多的对比度。当启用该调色器时,所有的色彩操作都在ACES颜色空间中进行,能获得最佳的精度和结果。Custom: 一个全参数调色器。这是唯一一个有自设置的调色器。
Toe Strength 设置曲线的底部和中部之间的过渡值。值为0没有过渡,值为1为非常硬的过渡。
Toe Length 设置曲线底部的长度。值越大,我们图像的较暗的部分会更暗。
Shoulder Strength 设置曲线中部和顶部之间的过渡值。值为0没有没有,值为1为非常硬的过渡。
Shoulder Length 设置曲线顶部的长度。值越大,我们图像的较亮的部分会更亮。
Shoulder Angle 设置曲线顶部与中部过渡的角度值。
Gamma 曲线的 gamma 矫正 ,值为1 时不做矫正。
白平衡参数 说明
Temperature 设置白平衡色温。
Tint 设置白平衡补偿 (绿色或洋红色调)。
色调参数 说明
Post-exposure 仅支持**High Definition Range(HDR)**模式。设置EV单元中场景的整体曝光值。该效果会在HDR效果之后再处理,所以它不会影响前面渲染的结果。
Color Filter 选择渲染的色调。
Hue Shift 调整所有颜色的色调。
Saturation 调整所有颜色的强度。
Brightness 仅支持**Low Definition Range (LDR)**模式。调整图像的亮度。
Contrast 调整色调值的整体范围。
混合通道参数 说明
Channel 选择要修改的输出通道(红/绿/蓝)。
Red 调整红色通道在整体混合中的影响。
Green 调整绿色通道在整体混合中的影响。
Blue 调整蓝色通道在整体混合中的影响。
轨道球参数 说明
Lift 调整暗色调(或阴影)。
Gamma 调整中色调。
Gain 调整亮色调。
添加该效果时,出现黄色警告。根据提示,需要设置色彩空间。点击Edit > Project Settings > Player,找到Other Settings中Rendering的Color Space,将其改为Linear即可
这个东西跟PR里面的lumetri挺像的,就是个调色盘,参数非常多,能调出各种不同的效果。
发光 (Bloom)
– 该效果会使图像中明亮的区域延伸出光条纹,用以模拟真实世界中相机镜头被光线淹没的效果。
Bloom参数 说明
Intensity 设置Bloom过滤器的强度。
Threshold 设置亮度级别,过滤掉这个级别下的像素。这个值用γ空间表示。
Soft Knee 设置在阈值上下界(0 =硬阈值,1 =软阈值)之间的渐变阈值。
Clamp 设置限制像素的值来控制Bloom数量。这个值用γ空间表示。
Diffusion 设置遮蔽效果的范围(与屏幕分辨率无关)。
Anamorphic Ratio 设置比率以垂直(范围[-1,0])或水平(范围[0,1])缩放Bloom。模拟变形透镜的效果。
Color 选择Bloom滤镜的色调颜色。
Fast Mode 启用此复选框,通过降低Bloom效果质量来提高性能。
Dirtiness参数 说明
Texture 选择一个肮脏纹理添加污点或灰尘镜头。
Intensity 设置镜头的肮脏程度。
这里我们让墙上的海报发光,制作电子屏幕的效果。首先,设置它们的shader设置为一个不受光照影响的shader,我这里设为Unlit/Texture。
发光效果只能加一点点,不能加多喽,让光有一点点晕开的感觉就好。参数拉太高会产生光污染,影响游戏体验,非常难受。
色差 (Chromatic Aberration)
– 该效果会分离图像的红绿蓝通道,用以模拟现实世界中相机在光线折射产生的不同波长光分离的效果。
Property 说明
Spectral Lut 选择用于自定义散射颜色的纹理。当为空时,Unity将使用默认纹理。
Intensity 设置Chromatic Aberration效果的强度。
Fast Mode 使用一个更快的Chromatic Aberration效果的提高性能。
景深 (Depth of Field)
– 该效果会模糊图像的背景,用以模拟真实世界相机镜头的焦距特性,产生对焦效果。
景深参数 说明
Focus Distance 设置到焦点的距离。
Aperture 设置光圈的比例(称为f-stop或f-number)。数值越小,景深越浅。
Focal Length 设定镜头和胶卷之间的距离。数值越大,景深越浅。
Max Blur Size 从下拉菜单中选择散景滤镜的卷积内核大小。这个设置决定散景的最大半径。它也会影响性能。内核越大,需要GPU渲染时间越长。
镜头噪点 (Grain)
– 该效果会将胶片噪声叠加到图像上,用以模拟相机胶片上的小颗粒产生的粗糙效果,营造电影效果。
纹理参数 说明
Colored 启用复选框使用彩色颗粒。
Intensity 设置Grain的强度。数值越高,可见颗粒越多。
Size 设置Grain的大小。数值越高,颗粒尺寸越大。
Luminance Contribution 通过设置该值来控制噪声响应曲线。这个值是基于场景亮度的。数值越低,暗区噪音越小。
镜头失真 (Lens Distortion)
– 该效果会使图像产生畸变 (枕形/桶形),用以模拟真实世界相机镜头的形状引起的失真。
畸变参数 说明
Intensity 设置总失真量的值。
X Multiplier X方向上失真强度。0为不失真。
Y Multiplier Y方向上失真强度。0为不失真。
Center X 设置失真中心点(X轴)。
Center Y 设置失真中心点(Y轴)。
Scale 设置全局屏幕缩放的值。
镜头晕影 (Vignette)
– 该效果会使图像边缘变暗,用以模拟真实世界中过厚或堆叠过多滤光片、副镜头或不合适镜头笼罩引起的效果。使用此效果能使人的注意力聚焦到图像中心。
包含两种模式,其中Classic模式是围绕中心的晕影,Msaked模式可以自定义晕影形状纹理。
经典模式参数 说明
Color 设置Vignette的颜色。
Center 设置Vignette中心点(屏幕中心为[0.5,0.5])。
Intensity 设置屏幕上渐晕的数量。
Smoothness 设置Vignette边框的平滑度。
Roundness 将值设置为Vignette的圆滑度。较低的值会使其接近方形。
Rounded 启用此复选框可以使Vignette完全变为圆形。禁用时,Vignette效果依赖于当前的宽高比。
遮罩模式参数 说明
Color 设置Vignette的颜色。使用alpha通道来增加透明度。
Mask 选择一个黑白蒙版来用作为Vignette。
Intensity 设置遮罩不透明度值。
运动模糊 (Motion Blur)
– 该效果会使物体在运动方向产生模糊,用以模拟现实中相机光圈打开情况下移动或捕捉移动速度快于相机曝光时间的物体时产生的模糊效果。
模糊参数 说明
Shutter Angle 设置旋转快门的角度。数值越大,曝光时间越长,模糊效果越强。
Sample Count 设置采样点数量的值。这会影响质量和性能。
性能优化:
首先一个在制作纹理时,贴图大小需要使用2的次方,Unity在处理2的次方尺寸的纹理时更高效省时。
其次优化比较靠谱的方案有两种:一种是插件对模型合并网格合并材质球尽可能的减少cpu处理的任务数量,还有一种就是建模的时候尽量合并物体子物体越少越好贴图能共用就共用比如一个城市把几张小贴图合并成一个大贴图要帧数高很多。剔除其实只是优化的一部分。比如我一个角色原来是身体部分拆开的,可以换装而且有多个材质球,draw call要是160,优化后把模型合并在了一起贴图改成一张里面有上下左右四种图不可以换装直接换人draw call只剩3了。
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)