作者 | 杨栋
出品 | 汽车电子与软件
荐言:
前言:
尽管 Unity 引擎在游戏开发市场的占有率达到了全球第一,在手机游戏开发中占有超过 70% 的市场份额,但在车机 HMI 内容开发上,Unity 引擎仍然是一个新工具。此外,车机 HMI 内容开发与游戏开发在工作流程上有较大的区别,因此我们有必要从概念上全面了解 HMI 内容开发的工作流程。
本章讲解的车机 HMI 内容开发流程,来自 Unity 中国团队近年来参与众多车厂 PoC(Point of Concept,概念验证)和量产项目开发经验的积累总结。这里展示了如何使用 Unity 引擎高效开发车机 HMI 内容的典型工作流程,读者可以根据各自团队的具体情况调整后参考使用。
图 1 展示了将要讨论的简化版 Unity HMI 项目开发工作流程。
图 1 Unity HMI 项目开发工作流程
1.1 2D设计
在此节点中,HMI 设计师使用各种设计工具(如 Adobe Photoshop 、Figma)和 AI 图形 生成工具(如 Midjourney)来设计用户界面元素,以及进行交互设计。具体工作包括:场景和布局设计、颜色方案选择、图标和按钮的制作,以及视觉风格的定义等。重点是完成符合汽车行业标准、直观且响应式的 HMI UI/UX 设计,这需要设计师具备良好的美学理念和对目标用户群体行为深入理解的能力。
当然,除了传统的 2D 设计工具,HMI 设计师还可以将 3D 建模动画软件(如 Blender 和 Cinema4D)整合到 HMI 设计工作中。因为我们最终希望设计包含 2D 和 3D 的内容,甚至许多 2D 内容会被放置在 3D 空间中进行交互。
如果一开始我们就将整个设计放在更高维度的 3D 空间中来思考,并将3D 实时渲染的原理考虑进去,那么就能解决在HMI设计阶段可能遇到的一系列与3D 空间设计相关的问题,比如流畅的“一镜到底”转场效果的演示(这在2D图形软件中很难用可视化的方式传达出来)。当然,这些与3D 相关的设计也可以在第二个动效环节解决,但如果HMI设计师一开始就在3D 空间中进行设计,第二个动效环节的工作将会变得事半功倍。
1.2 2D转3D动效
在此节点中,2D HMI 设计稿的关键页面会被动效设计师用 Cinema4D 、Blender 或者 Unity 引擎制作出视频形式的演示动画。这些演示动画可能不是 100% 代表最终效果,却是关键 HMI 设计亮点的绝佳展示。此节点产出的演示动画,也可在后续开发节点(3D 美术和 技美实现节点)中作为参考。
此节点的关键是将静态的 2D 设计元素转化为 3D 动画的视觉效果。这个过程要求动效设计师具备良好的动画制作技能,并理解动画中的物理运动规律。
1.3 3D美术
在此节点中,团队中精通实时渲染和互动式内容开发的美术人员(通常来自游戏开发行业)会对 HMI 设计稿和动效进行把关。当然,这个把关过程可能在第一个节点就已经开始了。
3D 美术人员要确保 HMI 设计在“好看”的同时,也能够满足最终实时渲染时的运行性能要求,因此 3D 美术人员需要确保 HMI 设计师在设计稿上的各种效果(如清晰的反射效果、使用多次光线反弹才能获得的全局光效果、对性能影响很大的高级多层车漆效果、动态日夜变化效果等)都能够在车厂指定的车机算力范围内实现。这其中就涉及在 HMI 设计上做出取舍,并对最终需要实现的美术效果进行正确的评估和判断。
1.4 技美实现
当我们决定了大部分的 HMI 设计,制作了动效视频,且美术人员也完成了审核以后, 我们就可以把这些资料作为技美实现节点所需的输入信息。“技美”是技术美术的简称,它在 HMI 设计稿在引擎具体实现的过程中,发挥着非常重要的作用。
技美人员的重要职能之一是桥接设计与开发。他们负责将 HMI 设计和 3D 动效转化为适用于实时渲染的高质量 3D 场景,包括材质创建、光照设置、自定义 Shader 编写和细节优化等。此外,技美人员还需考虑诸如反射、全局光照和动态环境等高级渲染效果的实现,同时保证这些效果不会超出车厂指定车机硬件的性能限制。
1.5 程序开发
程序开发节点主要是编写和实现前端逻辑与后端服务的交互。这包括 UI 控制逻辑的实现、数据处理,以及与车辆其他系统的接口对接等。开发团队需要使用 Unity 的 C# 脚本(或者使用 Visual Scripting 这样的可视化编程模块)进行编程工作,并确保代码的可维护性和可扩展性。
由于车机 HMI 应用与传统手机应用在软硬件运行环境中存在差异,在进行程序开发时,我们需要对这两者的区别有清晰的认知。
以下是针对车机 HMI 应用开发和手机应用开发的具体对比。
1. 多任务并行与资源共享
车机 HMI 系统中通常需要同时运行多个应用程序,如导航、音乐播放和车辆监控等,这些应用会竞争有限的计算资源。为此,车机 HMI 应用需要严格进行资源管理和优化,以确保系统流畅运行和响应速度。
相比之下,手机应用通常独占用户设备的大部分资源,尤其是在应用前台全屏运行时。 在手机应用开发时,我们可以假设资源的高可用性,从而专注于功能的实现。
2. 实时性和稳定性要求
车机 HMI 应用涉及驾驶安全,对实时性和稳定性的要求极高。任何延迟或故障都可能直接影响驾驶安全。因此,车机 HMI 应用的开发需要严格的错误处理机制和高可靠性的设计。
传统手机应用虽然也注重用户体验,但对实时性的要求通常不如车机 HMI 应用严格。 传统手机应用崩溃或重启的后果也没有车机 HMI 应用那么严重。
3. 用户界面设计
车机 HMI 设计必须考虑驾驶时的操作便利性和安全性,强调简洁明了的视觉元素和易于访问的控件。此外,车机 HMI 应用通常需要满足车内多种光照条件下的观看视角要求,并且需要解决在更大显示屏上交互时可能带来的问题。
手机应用的用户界面设计更加注重美观和趣味性,同时用户的交互也更为复杂和多样化,因为用户操作手机时的注意力和精细动作能力都更强。
4. 输入方式
车机 HMI 应用需要支持多种输入方式,包括语音命令、物理按键、触摸操作和手势控制,以满足驾驶过程中的操作需求。因此,开发者在设计车机 HMI 应用时需整合和优化这些复杂的交互方式。
传统手机应用主要支持触屏操作,虽然现代手机也支持语音和某些手势控制,但这些功能的应用并不如车机 HMI 应用那样广泛和关键。
5. 开发和测试环境
车机 HMI 应用的开发和测试需要在模拟真实车辆环境下进行,这可能包括使用车辆硬件模拟器和复杂的集成测试平台。这个过程比在传统手机应用开发更为复杂,相对成本也更高。
传统手机应用的开发和测试可以利用大量廉价的手机设备与成熟的应用程序接口( API) 来搭建测试环境,实际测试时自动化程度也比在车机环境中测试更高。
车机 HMI 应用开发面临的技术挑战和开发要求与传统手机应用开发有显著不同。开发者需要在设计和实现过程中充分考虑这些差异,以确保应用的性能和安全性。
1.6 测试和优化
在开发车机 HMI 内容时,测试和优化是确保最终产品达到高质量标准的关键节点。这 一节点涉及多个方面,包括功能性测试、性能测试、用户体验测试、安全性测试等。
1. 功能性测试
模块测试:每个独立的功能模块都需要通过详尽的测试来验证,以确保按照预期的方式运行。这包括测试快速响应的界面元素、准确的数据处理,以及正确的交互逻辑。
集成测试:随着各个模块的整合,我们需要进行集成测试,以确保模块间的接口可以正确交互。在 Unity 引擎中,这可能涉及验证不同场景和预制件的加载和卸载,以及它们在不同硬件配置下的表现。
2. 性能测试
资源使用情况:使用 Unity 引擎的Profiler 工具可以详细了解应用程序在运行时对 CPU 、GPU 和内存的使用情况。
渲染性能:这里我们要检查渲染流程中可能存在的瓶颈,特别是在渲染复杂界面或进行大量数据处理时的瓶颈。我们可以使用的渲染优化手段包括减少绘制调用(Draw Call)次数、使用更高效的着色器、调整渲染设置、优化代码结构和所使用的 Unity API 等。
3. 用户体验测试
UI 测试:确保 UI 元素在不同屏幕尺寸和分辨率下的表现一致,交互元素易于访问且响应迅速。
可用性测试:我们可以通过实际用户测试来收集真实的可用性反馈,进而对界面的 直观性和使用便利性进行准确评估。在车机 HMI 中,这种测试尤为重要,因为它关系到驾驶安全。
4. 安全性测试
错误处理:确保系统能妥善处理输入错误、设备故障和其他异常情况。这对车机系统至关重要,因为任何一个小错误都可能影响驾驶安全。
恢复机制:测试车机 HMI 的恢复策略,确保车机系统在发生故障时能够快速恢复到安全状态。
5. 工具和策略
自动化测试:开发自动化测试脚本,以便在应用更新后快速执行回归测试。
持续集成 / 持续部署( CI/CD ):搭建完整的 CI/CD 流程,确保每次提交都自动构建并测试,快速发现并解决问题。
1.7 打包
完成所有测试和优化后,开发团队将软件进行最终打包。这包括将所有资源文件、脚本和依赖库编译成一个可执行软件包,为最终部署到车机系统中做准备。
Unity 引擎为所支持的平台开发了非常便捷的打包流程和工具链。无论使用哪个平台, 打包流程都是相似且易于设置的。
上述 7 个节点组成了一个环环相扣的流程,每个节点的输出都是下一节点的输入。
另外,在整个开发流程中,快速迭代对于推进项目落地和保质保量交付,起到关键作用。快速迭代的开发模式是通过每个节点的反馈和修正来实现的,以下是实现快速迭代的关键策略。
1 )持续集成和持续部署( CI/CD ):通过自动化构建和测试流程,可以确保每次提交都能快速反馈,从而提早发现并解决问题。在实践中,我们可以考虑使用成熟的 Unity 解决方案如 Unity Plastic SCM 版本控制系统、Unity UPR 性能测试分析和 Unity 云真机测试服务云平台。
2 )开发原型和最小可行产品(MVP):通过开发原型和MVP,我们可以在项目早期验证概念和设计,降低后期大规模修改的风险。Unity引擎本身就可以作为一个完整的原型开发和验证工具使用。Unity自带的模块如ProBuilder和PolyBrush(可通过PackageManager 获得),可以让我们在Unity编辑器中快速搭建3D 场景和进行交互测试用的模型,然后为这些模型添加用于验证的 C# 脚本。
3 )定期评审和调整:每完成一个开发阶段,我们需要进行项目评审,并根据反馈快速调整开发计划和相关设计。这有助于确保项目目标的持续对齐,并使开发团队能够快速响应变化。
4 )跨功能团队合作:鼓励 HMI 设计师、3D 美术人员、技美人员、开发人员和测试人员紧密合作,以提高沟通效率和工作协同性。
通过这种结构化的流程和贯穿整个工作流程的快速迭代策略,我们可以有效提高车机 HMI 设计的还原度和程序开发质量,以及加快整体交付速度,从而确保最终产出内容能够 满足用户需求并适应快速变化的技术环境。
在 1 节描述的 Unity HMI 开发流程中,有一个重要的前提条件是参与整个工作流程的团队必须紧密合作和持续沟通。特别是在 2D 设计阶段到与设计相关的技美实现的这一过程 中,HMI 设计师要与动效师、3D 美术和技美人员一同快速迭代。总之,不应将 HMI 设计师的工作孤立起来。HMI 设计师输出的内容是后续开发工作的中心。
不过,我们也在图 1 的流程中看到了在后半部分 Unity 开发工程师发挥的重要作用、他们负责将前半部分设计师和动效师的输出成果保质保量地在合理的项目时间范围内完成, 并确保最终完成的应用程序可以在设定的性能参数指标范围内流畅运行。
从事过任何类型开发工作的朋友可能都了解,项目开发阶段的特点通常是:时间紧、任务重、加班加点修复 Bug。针对这些特点,开发团队的人员需要覆盖上述开发流程中的大多数职能。
下面我们从一个典型的 Unity HMI 开发团队构成角度,探讨如何组建一支能够实现 HMI 设计师想法的完整开发队伍。
3.1 HMI 产品经理
( 1 )职责
HMI 产品经理负责收集市场和用户需求,定义车机 HMI 应用的功能和性能参数。产品 经理与项目经理共同制定产品的开发时间表和路线图,确保项目按计划推进。HMI 产品经理应作为设计、开发、市场和销售团队之间的联络人,确保各方协同工作,并监督最终交付的产品质量,同时与市场部门协同制订相应的宣传计划。
(2)重要性
HMI 产品经理在确保产品从概念到市场的每一个步骤都符合高标准要求,有效推动车机 HMI 内容落地方面起着重要作用。
3.2 项目经理
( 1 )职责
项目经理负责整个项目的日常管理工作,确保项目按照既定时间线和预算顺利推进。
项目经理还需处理团队内外复杂的沟通工作,解决跨部门甚至跨公司的协调问题。
(2)重要性
HMI 项目的复杂性决定了一个项目可能有众多供应商参与开发,涉及的沟通协调工作量可能非常大。因此,项目经理在项目开发过程中的重要性不言而喻。
3.3 HMI设计师
( 1 )职责
HMI 设计师负责设计直观且符合用户需求的界面。HMI 设计师需要将设计想法通过具体的设计稿表达出来,以供其他开发团队成员参考。
(2)重要性
HMI 设计师的输出直接影响最终产品的用户界面和交互体验,是整个开发过程的起点。
3.4 动效师和3D美术师
( 1 )职责
动效师和 3D 美术师的工作是将 HMI 设计师的 2D 设计转化为后续技美人员与程序开发人员可用的动画效果以及在引擎中使用的相关美术资产。他们需要确保制作的动画和美术资产不仅在视觉上吸引人,而且能够在技术上实现。
(2)重要性
动效师和 3D 美术师的工作缩短了 HMI 设计与在 Unity 引擎中实现之间的距离,确保 HMI 设计在 Unity 引擎中实现高保真。
3.5 技美人员
( 1 )职责
美术资源整合:负责将 3D 模型、纹理、动画等美术资源导入 Unity HMI 项目中,并确保这些资源在车机 HMI 中能够正确显示和高效运行。
美术性能优化:对 HMI 应用中的视觉元素进行优化,确保应用在目标车载硬件上达到最优性能。这包括但不限于模型整合和优化、纹理简化、优化着色器和光照效果、减少绘制调用次数(Draw Call)、合批、遮挡剔除、优化相机等。
着色器与特效的开发:负责开发和维护项目中使用的着色器(如车漆着色器),以及开发场景中所需的各类特效(如速度线、粒子效果等),并确保这些效果的性能消耗在合理范围内。
技美相关的技术支持: 解决在美术效果实现与性能优化中遇到的技术难题。
跨部门协作:与 HMI 设计师、开发人员和项目经理等其他团队成员密切合作,确保 HMI 设计在 Unity 引擎中实现高保真。
(2)重要性
确保艺术愿景与技术实现相匹配:技美人员可以将 HMI 设计师的创意在 Unity 引擎中具体实现。这对于保证原始 HMI 设计的完整性和实现高质量的最终用户体验至关重要。
优化应用性能:通过对资源使用和美术效果的优化,可以直接提升应用运行性能和响应速度。这在性能受限的车载系统中尤为重要。
提升开发效率:技美人员通过建立有效的工作流程和自动化工具,可以加速开发过程,减少重复劳动,提高整个团队的工作效率。
技美人员在车机 HMI 应用开发中不仅是视觉实现的关键角色,也是保证项目高效交付的核心力量。他们的工作确保了产品在视觉吸引力和系统性能之间取得平衡,是成功开发高质量车机 HMI 应用的重要保障。
3.6 Unity开发工程师
( 1 )职责
界面实现:负责将 HMI 设计师的设计稿转化为可在车机 HMI 上操控的用户界面,包括界面布局、UI 控件开发、相关的 UI 动画开发、用户交互逻辑开发等具体工作。
功能开发:编写代码以实现功能逻辑,如数据处理、与车辆系统的接口对接等,确保 HMI 应用能够与车机中其他应用或系统进行无缝的数据交换和交互。
性能优化:进行性能调优,包括优化内存使用、减少 CPU 和 GPU 的负载、优化程序逻辑等,确保 HMI 应用在目标车载硬件上按照预定的性能参数指标流畅运行。
测试与调试:负责在开发完自己负责的 HMI 应用的模块后进行测试和调试,包括单元测试、集成测试和功能测试等,以确保在交给质量保证工程师(QA 工程师)之前,自己开发的模块可以正常运行。
技术支持与维护:提供技术支持服务,解决车机 HMI 应用上线后出现的各种问题,并进行必要的功能迭代、更新和维护。
(2)重要性
确保 HMI 设计的实现:Unity 开发工程师需确保 HMI 设计师的视觉和交互设计在最终产品中真实体现,因为这直接影响到最终用户体验。
确保系统稳定性和安全性:车机系统的稳定性和安全性至关重要。Unity 开发工程师需要通过严格测试和质量控制,确保软件的高可靠性,减少故障。
支持快速迭代:在车机 HMI 开发过程中以及后续维护迭代工作中,功能需求可能会频繁变更。Unity 开发工程师需要快速响应这些变更,及时调整开发策略,确保项目按时完成。
Unity 开发工程师在车机 HMI 应用开发中扮演着核心角色。他们的工作不仅关系到应用的功能实现和视觉效果,更直接影响整个系统的性能和用户的最终体验。
3.7 质量保证工程师(QA 工程师)
( 1 )职责
测试计划和用例开发:QA 工程师负责制订详尽的测试计划,包括定义测试策略和方法,以及编写具体的测试用例。这些测试用例应覆盖 HMI 应用的各个方面,从功能、性能、用户界面到安全性和兼容性等。
自动化测试:在 Unity 项目中,QA 工程师通常需要设计自动化测试框架,利用 Selenium、QTP 等工具来自动执行重复的测试任务。这不仅提高了测试效率,也让测试过程更为一致和准确。
性能测试:QA 工程师应对 HMI 应用进行性能测试,以确保在目标硬件上流畅运行,并满足如启动时间、UI 响应时间、资源消耗在合理范围内等预设的技术参数和指标要求。
回归测试:当代码有更新或修复时,QA 工程师要负责执行回归测试,确保新的更改没有破坏已有功能或导致新的性能问题产生。
缺陷跟踪和管理:QA 工程师需要记录、分类和跟踪所发现的问题和缺陷,并与 HMI 产品经理、项目经理和 Unity 开发工程师紧密合作,确保所有问题都能被及时解决。QA 工程师应定期向项目团队和管理层提供测试结果和质量报告,包括缺陷分析、测试覆盖率和风险评估等重要信息。
(2)重要性
QA 工程师通过综合测试和持续监控,能够确保最终产品满足用户的需求和预期,降低质量问题导致的用户流失率。通过早期发现和修复缺陷,QA 工程师还可以帮助减少产品发布后修复缺陷的成本。
本章从车机 HMI 应用开发工作流的角度,详细讲解了典型的使用 Unity 引擎开发车机 HMI 应用的工作流同时阐述了在使用 Unity 引擎等实时渲染内容开发工具时,持续迭代在设计和程序开发节点的重要性。
本章还详细讲解了典型的 Unity HMI 应用开发团队所需的参与角色,以及每个角色的主要职责和重要性。
当然,无论是工作流还是开发团队的成员组成,都需要根据公司组织架构和项目的实际需求进行更细致的设计。本章内容来自Unity 中国团队和笔者合作伙伴的开发实践,因此可以作为参考。
无论理论多么优秀,如果不结合实际项目,都是空中楼阁。因此,下一章将通过一个可免费下载的 Unity 官方 HMI 应用示例,为大家详细讲解HMI应用开发实践、可复用的资源(如场景和代码等)、UI 和代码实现等。
/ END /