Unity性能优化与分析--GPU,Unity后处理实现The World时停效果
Unity性能优化与分析--GPU
Unity移动端游戏的性能优化主要集中在GPU,确保高效的渲染流程能够减少带宽压力并提高帧率。
带宽管理是GPU性能的重要组成部分。随着项目复杂度的增加,合理优化内存格式(例如使用压缩格式来降低纹理带宽)、启用纹理Mipmap(以减少内存和带宽消耗)、采用合理纹理采样方式(避免过度使用各向异性或三线性采样)以及调整渲染分辨率(减少参与纹理采样的像素)都是关键策略。
Overdraw现象主要由半透明物体(如粒子系统和UI)引起。优化方案可包括限制粒子系统复杂度和屏幕覆盖面积、关闭不必要的UI、减少Mask组件的使用,以及优化UI渲染策略,例如使用静态图替代复杂的动态绘制。
在优化渲染效果时,需要权衡性能与视觉效果。可剔除不必要的后处理效果(例如Bloom),并根据设备选择更优化的渲染策略。监控Shader复杂度,使用Mali Offline Compiler工具评估指令数和时钟周期数,以帮助识别需要优化的Shader资源。
避免过度使用动态光照,利用自定义着色器和光照探针渲染动态网格。同时,可禁用阴影投射以减少绘制调用,使用光源层和LOD(细节级别)技术管理多光源场景和远距离对象。遮挡剔除技术则有助于移除被遮挡的对象,从而减少不必要的资源消耗。
对于移动端,降低分辨率(使用Screen.SetResolution方法)、限制摄像头使用、简化着色器,以及慎用后期处理效果(例如全屏发光)均为提高性能的有效方法。此外,避免频繁使用脚本访问Renderer.material,优化SkinnedMeshRenderer的使用,以及减少反射探针的使用都是节省资源的关键步骤。
通过这些策略,开发者能够更有效地管理GPU资源,优化在移动平台上的Unity游戏性能,确保流畅的用户体验。
Unity | 后处理篇
Unity后处理技术详解
在Unity中实现后处理效果主要有两种方式:利用内置插件Post-Processing,或通过脚本处理渲染帧缓冲区。Post-Processing在内置渲染管线和URP中有所区别,这里主要介绍内置管线的方法。
Post-Processing应用
详细信息请参考Unity官方文档中的Post-Processing部分。抗锯齿是消除图像边缘的“阶梯”效果,Unity内置的Quality设置和Post-Processing中的Anti-Aliasing功能可在相机的Post Process Layer组件中调整。此外,环境光遮蔽、自动曝光、辉光/泛光、色差等效果可增强视觉真实感。
Ambient Occlusion - 性能消耗较大,不适用于移动设备。
Auto Exposure - 动态调整图像曝光以提供适应性。
Bloom - 在后处理中添加真实光源感。
Chromatic Aberration - 模拟摄像机的色差,同时可用于模拟运动模糊效果。
Color Grading - 调整图像色彩和亮度,类似滤镜。
Depth Of Field - 景深效果。
Grain - 添加颗粒感。
Lens Distortion - 模拟镜头变形失真。
Motion Blur - 运动模糊效果。
Screen Space Reflections - 屏幕空间反射效果。
Vignette - 渐晕效果,增强图像焦点。
内置管线OnRenderImage()方法
在内置管线中,通过C#脚本的OnRenderImage函数访问渲染帧缓冲区,并结合自定义shader实现后处理。市面上有许多免费资源包含这些效果的脚本,供学习参考,这里不再详述。
Unity的屏幕后处理效果(1)
Unity中的屏幕后处理效果是一种在游戏画面渲染后增添特效的技术,如景深和运动模糊。核心在于利用OnRenderImage函数获取渲染图像,通过Graphics.Blit函数处理后显示在屏幕上。首先,创建基础脚本系统,确保平台支持和Shader可用性。PostEffectsBase.cs类作为基类,负责检查资源和条件,提供Shader绑定及材质创建功能。
例如,实例中的BrightnessSaturationAndContrast脚本继承基类并自定义Shader。它调整屏幕的亮度、饱和度和对比度,使用Unity的Range属性设置参数范围,OnRenderImage函数负责实际处理。Shader部分包括纹理属性声明、渲染状态设置、顶点和片元着色器,以及lerp和tex2D函数的使用。用户可拖动Shader到摄像机脚本中实时预览和调整效果。
总的来说,Unity的屏幕后处理通过脚本控制渲染过程,结合精心设计的Shader,为游戏画面增添艺术氛围。只需按照一定步骤和规则,开发者即可实现各种复杂的屏幕特效,提升游戏视觉体验。
Unity PostProcess的使用
在移动平台下使用Unity引擎开发游戏项目的效果总结已完成,包括光照、线性空间及后期处理。其中的知识点将帮助项目实现更好的美术效果、制定技术规范及优化制作流程。
关于光照的文档详细介绍了Unity在移动平台的光照烘焙及优化方法,以及从Gamma转至Linear颜色空间的经验分享。
官方文档
Post Process是基于屏幕的后期处理技术,通过在缓冲区中应用滤镜和效果,再显示应用以模拟物理摄像机和电影特效。
安装
对于Unity 2018.1及更高版本,可通过Package Manager安装和更新PostProcessing。对于低于Unity 2018但高于Unity 2017.1的版本,可从GitHub下载并放置在Assets目录下使用。
当前版本为Post-processing v2,适用于Build-in Render Pipeline和LWRP;HDRP不需要从package安装,提供更高级的解决方案。
基本使用
通过挂载Post Process Layer脚本在Camera或空物体上,并通过Trigger控制Camera应用后期效果。Layer用于管理Post Process Volume。
对Post Process Volume设置Layer,仅当Layer处于激活状态时,指定的后期效果才会生效。HDRP内置Post-process,无需Layer,通过Volume System直接控制。
Anti-aliasing(抗锯齿)移到了Camera上进行管理。
Anti-aliasing
Anti-aliasing是一种通过图像处理方式减少锯齿效果的算法,不依赖硬件设备。
Dithering
Dithering使用8-bit dithering像素点抖动技术消除色阶问题。
NaNs
NaNs自动用黑色像素替换Shader中的NaN(非法操作)或Inf(浮点值溢出或除0),对性能有轻微影响,仅在遇到无法解决的NaN问题时使用。
Post Process Volume
通过向GameObject添加Post-process Volume组件来控制后期效果区域。在HDRP中,Volume脚本用于管理后期效果。
主要参数包括:是否全局使用、混合多个Volume的权重值、优先级、后期效果配置文件等。
Post Process Profile
在Project窗口创建Post-processing Profile以定义后期效果的配置。HDRP使用Volume Profile。
Volume统一管理后期、环境设置、光照设置及自定义功能等,Profile的功能更细致,能针对项目制定使用规范。
通过Add Effect / Add Override添加后期效果。
Effects
Ambient Occlusion
Unity引擎中有两种AO方案,并提供Unreal Engine的效果示例作对比。
Auto Exposure
Auto Exposure调整图像亮度范围,通过直方图找到平均亮度值。
主要参数包括:直方图范围、平均亮度最小值、最大值、曝光值理解、曝光补偿值、曝光调整速度等。
Bloom
Bloom效果从图像的明亮区域扩散柔光,要求支持Shader Model 3。
性能影响参数包括:扩散程度、变形比例和快模式。降低Diffusion值将减少性能开销,Anamorphic Ratio的绝对值越小,性能开销越小。在移动平台或低端设备上开启Fast Mode以降低性能影响。
Chromatic Aberration
模拟摄像机镜头的颜色偏移,要求支持Shader Model 3。
性能影响参数包括:强度及快模式。Intensity值越大,采样次数越多,对性能影响越大。开启Fast Mode可减少性能开销,但效果不那么平滑。
Color Grading
后期校色调整画面色调,Unity引擎提供三种方案。
主要参数包括:中性映射、ACES调色、自定义设置。自定义设置可调整曲线,如Tone Strength、Shoulder Strength等。
Depth of Field
模拟相机变焦镜头的效果,要求支持Depth texture和Shader Model 3.5。
主要参数包括:焦距、光圈、焦距长度及最大模糊大小等。
Grain
颗粒效果模拟相机胶片中的颗粒感,要求支持Shader Model 3。
主要参数包括:带颜色的噪点、强度、颗粒大小及亮度贡献值。
Lens Distortion
模拟镜头扭曲效果,要求支持Shader Model 3。
主要参数包括:扭曲强度、X轴影响、Y轴影响、中心位置及缩放等。
Motion Blur
运动模糊效果,要求支持Motion vectors、Depth texture和Shader Model 3。
主要参数包括:旋转快门角度及采样点数量。
Screen Space Reflections
屏幕空间反射效果,模拟表面反射,要求支持Compute shader、Motion vectors、Deferred rendering path和Shader Model 5.0。
主要参数包括:预设质量、最大迭代次数、厚度、分辨率、最大追踪距离、衰减距离及暗角等。
Vignette
暗角效果使画面边缘暗淡,要求支持Shader Model 3。
主要参数包括:暗角颜色、中心点、强度、平滑度、圆度及圆形勾选。
Camera Physical Settings
Camera物理属性模拟真实相机,包括光圈、快门、感光度等参数。
主要参数包括:传感器类型、尺寸、ISO、快门速度、Gate Fit、焦距、光圈和镜头偏移等。
后期效果在项目中的使用
在项目中使用后期效果需制定规范,包括Volume、Profile、效果使用和优化方案。以Unity Build-in渲染管线为例,简述项目中后期效果的整体应用。
确定项目中必需使用的后期效果,规划每个效果的应用场景以确保整体效果的一致性和优化。
通过在MainCamera上挂载Post Process Layer或Volume组件控制整个场景及个别场景的后期效果,支持全局和局部的后期效果开关,以及参数调整。
单个场景的后期效果通过Prefab和Profile文件管理,以确保主效果优先并避免重叠。
整合UI界面以便接入后期效果的控制,并理顺与参数调节之间的逻辑关系。
综上所述,掌握Unity的后期处理技术并结合项目需求制定规范,有助于显著提升美术效果和优化制作流程,从而为游戏项目带来出色表现。
Unity3D URP 后处理如何作用于 UI 控件 Image 的详解
在Unity3D的Universal Render Pipeline(URP)中,后处理技术对于提升UI控件如Image的视觉效果至关重要。以下是实施后处理效果于Image的详细步骤和技巧。
1. 环境配置
确保项目启用URP,通过Unity的Package Manager安装,并在Graphics设置中选择URP作为渲染管线。
2. 创建URP资源
创建Universal Render Pipeline Asset,并将其添加到项目中的Scriptable Render Pipeline Settings,以激活URP功能。
3. 后处理设置与Volume组件
使用Volume组件配置Bloom、Vignette等效果,通常应用于全局Volume。
4. UI Image的后处理挑战
由于UI独立于相机,后处理的直接应用受限。可通过Shader编程或Render Texture间接实现。
方法一:自定义Shader
编写自定义Shader以在渲染时模拟后处理效果,这需要Shader编程知识。
方法二:Render Texture结合Camera
将UI渲染到RenderTexture,然后作为相机的附加层,使其能受后处理影响。
5. 示例代码
步骤一:创建RenderTexture,设置尺寸和格式。
步骤二:使用自定义Camera渲染UI到RenderTexture。
步骤三:在场景中使用其他Camera显示RenderTexture并应用后处理效果。
步骤四:注意调整相机设置,确保UI正确渲染且受后处理影响。
URP仿原神渲染制作思路分享-后处理篇
在Unity的URP渲染中,我分享了2.0仿原神风格的后处理技术,所有模型和贴图均源自miHoYo,仅用于学习用途。本次分享首先介绍了Bloom处理的三个核心步骤:识别Bloom区域、模糊处理和合并结果。Bloom区域提取可以通过颜色或亮度进行,通常颜色值提取效果更佳,模糊处理则采用逐级降采样和混合的技术以模拟扩散效果。
获取Bloom区域的方法,我通过ShaderFeature简化了处理,并通过宏控制颜色或亮度的提取。双Pass高斯模糊的优化通过Blit函数实现,Shader代码中使用了_BlurSize来调整模糊效果和迭代次数。降采样、升采样和混合部分则利用了双线性插值和平滑过渡,通过_BloomScatter调整不同层级的混合强度。
最后,我还分享了相关参考链接,包括COD 2014的Bloom处理和Unity官方的自定义后处理教程,以及自己制作的MMD和工作流程的链接。尽管效果还有提升空间,但这个过程耗时颇多。如果你觉得有帮助,请在相关视频下方点赞和关注,支持我哦。
Unity后处理实现The World时停效果
在Unity中通过后处理技术实现《世界》中的时间停止效果,主要涉及图像处理和图形学原理的结合。首先,我们可以查看以下三张GIF图,与原始版本对比,我们的实现仍有差距,这可能与动画场景中的动态因素有关。在《第五部》中,时间停止效果由轻微的抖动取代了之前的扭曲。
实现该效果,我们需考虑以下关键点:
颜色反转:Unity默认的ImageEffectShader即能实现此功能。
Hue变化:除颜色反转外,还需在HSV色彩空间中对H分量(色相)进行时间相关的变化。
圆形边缘扭曲与运动:模拟半径动态扩大的球体,球体内部进行颜色反转,外部保持不变。后处理中以圆形效果体现之。为模拟不规则的圆形边缘,我们使用正弦函数对原有半径进行调整。
冲击波效果:类似于边缘光晕,通过计算视线与法线的夹角,判断像素是否在边缘,并根据夹角大小叠加颜色。在二维场景中,我们指定一个半径进行颜色插值。
各向异性斑纹:参照《第五部》中的时停效果,斑纹以手指为中心发散,使用噪声贴图将不同的圆心角映射到不同颜色值,实现复杂且不规则的斑纹效果。
时停范围内的扭曲与灰度图转换:在完成斑纹叠加后,增加真实的扭曲效果,并在时停结束时转换为灰度图,使用经验公式控制灰度开关,实现平滑过渡。
径向模糊:增加速度感,通过沿方向的模糊处理,达到冲击感强烈的动态效果。
通过上述步骤,我们成功地模拟了《世界》中时间停止的效果。在代码实现中,我们尽可能优化流程,利用GPU友好的算法,避免复杂的条件判断,如使用`step`函数简化逻辑。
整个过程涉及图像处理和图形学的深入理解,旨在为读者提供完整的实现流程。如有反馈或疑问,欢迎讨论交流。感谢您的阅读,期待下次分享。