联系方式
学习资讯
Unity 手游渲染技术
Unity 手游渲染技术
Unity 手游的渲染技术对于提升游戏的视觉效果至关重要。在 Unity 手游中,渲染技术涉及多个方面。例如,现代 Unity 手游通常会采用一些先进的渲染管线,如 URP(Universal Render Pipeline)渲染管线。URP 渲染管线对使用环境做了一些限定,假定主光源只能是平行光,其它的附加光源在配置文件中限定数目,在一个 pass 内处理完所有的光源与光照计算。这样的设计在满足手机游戏开发需求的前提下,最大限度地提升了性能,能开发出满足手机游戏的实时光照的很好效果。同时,Unity 手游的渲染还涉及到相机与颜色空间的处理。像《秦时明月世界》手游中,基于相机和颜色空间表现进行了准备工作,主要是分辨率的分离,将 UI 进行高清的分辨率显示,场景进行动态控制,场景中使用线性空间的流程,UI 使用 Gamma 空间的流程进行绘制,这样可以保证场景基于不同的机型、不同的表现形式进行动态分辨率的调整,保证 UI 的高清化,同时也使 UI 的资产可以在 Gamma 空间下进行正确的显示,保证游戏中场景的线性空间的显示和 UI 的 Gamma 空间的显示可以在一个正确的流程下工作。在渲染过程中,深度图的改造也很重要。Unity 为开发者提供了深度 Pass 这个过程,帮助开发者可以在游戏项目中快速的某一阶段获取深度图来进行绘制及采样深度进行渲染,开发者可以根据项目需求进行定制化的改造。此外,Unity 手游的渲染还需要考虑到各种后处理效果,如高动态范围(HDR)渲染、动态模糊(Motion Blur)等功能。这些后处理效果可以让游戏画面更加吸引眼球,增加游戏的真实感。例如在一款画质接近主机的韩国手游 Hundred Soul 中,利用高动态范围 (HDR) 渲染和运动模糊这两个重要的后处理效果来营造该游戏令人着迷的图像。HDR 可调整亮度级别,以更准确地反映真实场景中的景象,而运动模糊功能可以给速度大于摄像机曝光时间的游戏对象添加快速移动的感觉,使得游戏内的剑术动若惊雷闪电,又不失真实性。
Unity 的 ECS 架构优势
Unity 的 ECS(Entity Component System)架构具有多方面的优势。首先,在性能方面表现出色。ECS 架构通过将游戏对象的数据和逻辑分离,使得系统能够更有效地遍历和处理组件,从而提高了游戏的性能。例如,使用 Unity ECS 可以保证所有数据以线性方式储存在储存器中,这意味着系统将以最佳方式访问实体组件。同时,ECS 使用任务并行技术,使得游戏的逻辑可以在多个 CPU 核心上并行执行,进一步提升了性能。而且,ECS 的内存布局是紧凑的,使得游戏对象的数据可以更快地被访问,这也对性能的提升有很大帮助。其次,ECS 架构具有良好的可扩展性。可以轻松地添加、删除和修改组件,使得游戏更具有可扩展性。这种灵活性使得开发者能够按需组合和修改游戏对象的行为和属性,从而满足各种复杂和多变的游戏设计需求。例如,当需要添加新的游戏对象行为时,只需要创建新的组件和系统,而不需要修改所有游戏对象的行为逻辑。再者,ECS 架构具有可维护性。通过将游戏对象的数据和逻辑分离,ECS 使得代码更加清晰、易于理解和维护。此外,ECS 还提供了一套完整的工具和生命周期管理机制,使得开发者可以更轻松地编写可维护和可测试的代码。另外,ECS 架构有利于代码重用。通过将行为和属性分离成组件,ECS 可以更容易地重用代码,减少重复编写相似代码的工作量。这有助于提高开发效率,同时降低维护成本。最后,ECS 架构在内存管理优化方面也有突出表现。Unity ECS 内存分配器将实体和组件数据存储在连续的内存块中,减少了内存碎片化的问题,提高了内存访问的效率。此外,通过重用已分配的 Chunk 来减少系统内存的申请和释放次数,进一步优化了内存管理。
Unity 手游 CPU 调优方法
在 Unity 手游开发中,CPU 调优是非常重要的环节。就目前的 Unity 移动游戏而言,CPU 方面的性能开销主要可归结为两大类:引擎模块性能开销和自身代码性能开销。其中,引擎模块中又可细致划分为渲染模块、动画模块、物理模块、UI 模块、粒子系统、加载模块和 GC 调用等等。在渲染模块方面,渲染模块可以说是任何游戏中最为消耗 CPU 性能的引擎模块,因为几乎所有的游戏都离不开场景、物体和特效的渲染。对于渲染模块的优化,主要从降低 Draw Call 入手。Draw Call 是渲染模块优化方面的重中之重,一般来说,Draw Call 越高,则渲染模块的 CPU 开销越大。降低 Draw Call 的方法则主要是减少所渲染物体的材质种类,并通过 Draw Call Batching 来减少其数量。但需要注意的是,游戏性能并非 Draw Call 越小越好。这是因为,决定渲染模块性能的除了 Draw Call 之外,还有用于传输渲染数据的总线带宽。当我们使用 Draw Call Batching 将同种材质的网格模型拼合在一起时,可能会造成同一时间需要传输的数据(Texture、VB/IB 等)大大增加,以至于造成带宽 “堵塞”,在资源无法及时传输过去的情况下,GPU 只能等待,从而反倒降低了游戏的运行帧率。在 UI 模块方面,主要是检查 UI 的逻辑响应函数是否占用过高,同时把不用事件响应的 UI 元素去掉选项 “Raycast Target”,这样不用在每个 UI 元素去检测用户是否有 UI 操作,减少 EventSystem.Update () 耗时开销。在物理模块方面,需要注意物理计算的复杂度,避免过多的物理碰撞检测和复杂的物理模拟。在粒子系统方面,要合理控制粒子的数量和效果,避免过度消耗 CPU 资源。在加载模块方面,要优化资源的加载和卸载过程,避免在加载过程中造成卡顿。在逻辑代码方面,要优化算法和数据结构,避免不必要的计算和内存分配。
Unity 手游制作管线要点
Unity 手游制作管线涵盖多个要点。在渲染方面,要根据游戏的需求选择合适的渲染管线,如 URP 渲染管线。URP 渲染管线在特定的满足手游开发需求前提下,最大限度的提升性能,它假定了一些特定条件如主光源只能是平行光,其它的附加光源在配置文件中限定数目,在一个 pass 内处理完所有的光源与光照计算。加上这些限制条件后,URP 渲染管线能开发出满足手机游戏的实时光照的很好效果,同时又能最大限度的获得最好的性能。在材质方面,像腾讯在实现首个 3A 级手游画面时,对于建筑来说,出于性能考虑,低端会简化一些光照的部分,就是刚才说的 Shader LOD。直接光其实会在远景用 shadowmask,直接光不会烘焙进 lightmap,直接光用纯动态的光照,间接光用的是 IBL cubemap GPU bake 的 lightmap。再来看 material,固有色、一张法线粗糙度合并的贴图,金属度 AO 放在另外一张贴图。材质接受了 lightprobe 的间接光照和一个直接光,还有来源于 environment 的间接光,最后得到整体的呈现。在制作管线方面,要注重量产,保证所有的外包,所有的人员,所有的开发,所有的美术标准都统一。对于 COD 这样一个 3A 级手游里面的制作管线,需要了解美术的工作、甚至要了解策划的一些工作,这样才能把游戏制做好。在《秦时明月世界》手游中,基于相机和颜色空间表现的准备工作,主要是分辨率的分离,UI 高清,场景动态,平衡效果与效率。在整个 3D 游戏世界中,经常会基于 PBR 的高清的线性空间制作,但是常规的 UI 美术平时习惯于在 Gamma 空间工作,导致两边的工作流程有一些冲突。为了解决这个问题,将分辨力进行分离,把 UI 进行高清的分辨率显示,场景进行动态控制,场景中使用线性空间的流程,UI 使用 Gamma 空间的流程进行绘制,这样就可以保证场景基于不同的机型、不同的表现形式进行一个动态分辨率的调整,保证 UI 的高清化。同时也使 UI 的资产可以在 Gamma 空间下进行正确的显示,保证游戏中场景的线性空间的显示和 UI 的 Gamma 空间的显示可以在一个正确的流程下工作。
Unity 手游的渲染技术对于提升游戏的视觉效果至关重要。在 Unity 手游中,渲染技术涉及多个方面。例如,现代 Unity 手游通常会采用一些先进的渲染管线,如 URP(Universal Render Pipeline)渲染管线。URP 渲染管线对使用环境做了一些限定,假定主光源只能是平行光,其它的附加光源在配置文件中限定数目,在一个 pass 内处理完所有的光源与光照计算。这样的设计在满足手机游戏开发需求的前提下,最大限度地提升了性能,能开发出满足手机游戏的实时光照的很好效果。同时,Unity 手游的渲染还涉及到相机与颜色空间的处理。像《秦时明月世界》手游中,基于相机和颜色空间表现进行了准备工作,主要是分辨率的分离,将 UI 进行高清的分辨率显示,场景进行动态控制,场景中使用线性空间的流程,UI 使用 Gamma 空间的流程进行绘制,这样可以保证场景基于不同的机型、不同的表现形式进行动态分辨率的调整,保证 UI 的高清化,同时也使 UI 的资产可以在 Gamma 空间下进行正确的显示,保证游戏中场景的线性空间的显示和 UI 的 Gamma 空间的显示可以在一个正确的流程下工作。在渲染过程中,深度图的改造也很重要。Unity 为开发者提供了深度 Pass 这个过程,帮助开发者可以在游戏项目中快速的某一阶段获取深度图来进行绘制及采样深度进行渲染,开发者可以根据项目需求进行定制化的改造。此外,Unity 手游的渲染还需要考虑到各种后处理效果,如高动态范围(HDR)渲染、动态模糊(Motion Blur)等功能。这些后处理效果可以让游戏画面更加吸引眼球,增加游戏的真实感。例如在一款画质接近主机的韩国手游 Hundred Soul 中,利用高动态范围 (HDR) 渲染和运动模糊这两个重要的后处理效果来营造该游戏令人着迷的图像。HDR 可调整亮度级别,以更准确地反映真实场景中的景象,而运动模糊功能可以给速度大于摄像机曝光时间的游戏对象添加快速移动的感觉,使得游戏内的剑术动若惊雷闪电,又不失真实性。
Unity 的 ECS 架构优势
Unity 的 ECS(Entity Component System)架构具有多方面的优势。首先,在性能方面表现出色。ECS 架构通过将游戏对象的数据和逻辑分离,使得系统能够更有效地遍历和处理组件,从而提高了游戏的性能。例如,使用 Unity ECS 可以保证所有数据以线性方式储存在储存器中,这意味着系统将以最佳方式访问实体组件。同时,ECS 使用任务并行技术,使得游戏的逻辑可以在多个 CPU 核心上并行执行,进一步提升了性能。而且,ECS 的内存布局是紧凑的,使得游戏对象的数据可以更快地被访问,这也对性能的提升有很大帮助。其次,ECS 架构具有良好的可扩展性。可以轻松地添加、删除和修改组件,使得游戏更具有可扩展性。这种灵活性使得开发者能够按需组合和修改游戏对象的行为和属性,从而满足各种复杂和多变的游戏设计需求。例如,当需要添加新的游戏对象行为时,只需要创建新的组件和系统,而不需要修改所有游戏对象的行为逻辑。再者,ECS 架构具有可维护性。通过将游戏对象的数据和逻辑分离,ECS 使得代码更加清晰、易于理解和维护。此外,ECS 还提供了一套完整的工具和生命周期管理机制,使得开发者可以更轻松地编写可维护和可测试的代码。另外,ECS 架构有利于代码重用。通过将行为和属性分离成组件,ECS 可以更容易地重用代码,减少重复编写相似代码的工作量。这有助于提高开发效率,同时降低维护成本。最后,ECS 架构在内存管理优化方面也有突出表现。Unity ECS 内存分配器将实体和组件数据存储在连续的内存块中,减少了内存碎片化的问题,提高了内存访问的效率。此外,通过重用已分配的 Chunk 来减少系统内存的申请和释放次数,进一步优化了内存管理。
Unity 手游 CPU 调优方法
在 Unity 手游开发中,CPU 调优是非常重要的环节。就目前的 Unity 移动游戏而言,CPU 方面的性能开销主要可归结为两大类:引擎模块性能开销和自身代码性能开销。其中,引擎模块中又可细致划分为渲染模块、动画模块、物理模块、UI 模块、粒子系统、加载模块和 GC 调用等等。在渲染模块方面,渲染模块可以说是任何游戏中最为消耗 CPU 性能的引擎模块,因为几乎所有的游戏都离不开场景、物体和特效的渲染。对于渲染模块的优化,主要从降低 Draw Call 入手。Draw Call 是渲染模块优化方面的重中之重,一般来说,Draw Call 越高,则渲染模块的 CPU 开销越大。降低 Draw Call 的方法则主要是减少所渲染物体的材质种类,并通过 Draw Call Batching 来减少其数量。但需要注意的是,游戏性能并非 Draw Call 越小越好。这是因为,决定渲染模块性能的除了 Draw Call 之外,还有用于传输渲染数据的总线带宽。当我们使用 Draw Call Batching 将同种材质的网格模型拼合在一起时,可能会造成同一时间需要传输的数据(Texture、VB/IB 等)大大增加,以至于造成带宽 “堵塞”,在资源无法及时传输过去的情况下,GPU 只能等待,从而反倒降低了游戏的运行帧率。在 UI 模块方面,主要是检查 UI 的逻辑响应函数是否占用过高,同时把不用事件响应的 UI 元素去掉选项 “Raycast Target”,这样不用在每个 UI 元素去检测用户是否有 UI 操作,减少 EventSystem.Update () 耗时开销。在物理模块方面,需要注意物理计算的复杂度,避免过多的物理碰撞检测和复杂的物理模拟。在粒子系统方面,要合理控制粒子的数量和效果,避免过度消耗 CPU 资源。在加载模块方面,要优化资源的加载和卸载过程,避免在加载过程中造成卡顿。在逻辑代码方面,要优化算法和数据结构,避免不必要的计算和内存分配。
Unity 手游制作管线要点
Unity 手游制作管线涵盖多个要点。在渲染方面,要根据游戏的需求选择合适的渲染管线,如 URP 渲染管线。URP 渲染管线在特定的满足手游开发需求前提下,最大限度的提升性能,它假定了一些特定条件如主光源只能是平行光,其它的附加光源在配置文件中限定数目,在一个 pass 内处理完所有的光源与光照计算。加上这些限制条件后,URP 渲染管线能开发出满足手机游戏的实时光照的很好效果,同时又能最大限度的获得最好的性能。在材质方面,像腾讯在实现首个 3A 级手游画面时,对于建筑来说,出于性能考虑,低端会简化一些光照的部分,就是刚才说的 Shader LOD。直接光其实会在远景用 shadowmask,直接光不会烘焙进 lightmap,直接光用纯动态的光照,间接光用的是 IBL cubemap GPU bake 的 lightmap。再来看 material,固有色、一张法线粗糙度合并的贴图,金属度 AO 放在另外一张贴图。材质接受了 lightprobe 的间接光照和一个直接光,还有来源于 environment 的间接光,最后得到整体的呈现。在制作管线方面,要注重量产,保证所有的外包,所有的人员,所有的开发,所有的美术标准都统一。对于 COD 这样一个 3A 级手游里面的制作管线,需要了解美术的工作、甚至要了解策划的一些工作,这样才能把游戏制做好。在《秦时明月世界》手游中,基于相机和颜色空间表现的准备工作,主要是分辨率的分离,UI 高清,场景动态,平衡效果与效率。在整个 3D 游戏世界中,经常会基于 PBR 的高清的线性空间制作,但是常规的 UI 美术平时习惯于在 Gamma 空间工作,导致两边的工作流程有一些冲突。为了解决这个问题,将分辨力进行分离,把 UI 进行高清的分辨率显示,场景进行动态控制,场景中使用线性空间的流程,UI 使用 Gamma 空间的流程进行绘制,这样就可以保证场景基于不同的机型、不同的表现形式进行一个动态分辨率的调整,保证 UI 的高清化。同时也使 UI 的资产可以在 Gamma 空间下进行正确的显示,保证游戏中场景的线性空间的显示和 UI 的 Gamma 空间的显示可以在一个正确的流程下工作。

更多培训课程,学习资讯,课程优惠等学校信息,请进入 重庆火星时代教育 网站详细了解,免费咨询电话:400-998-6158