
游戏开发移动开发WebAssembly【免费下载链接】minigame-unity-webgl-transform微信小游戏Unity引擎适配器文档。项目地址https://gitcode.com/GitHub_Trending/mi/minigame-unity-webgl-transform点击查看免费下载导读本文基于微信小游戏 Unity/团结引擎适配方案minigame-unity-webgl-transform的 WebGL2.0 渲染支持说明系统梳理 WebGL2.0 在微信小游戏环境中的适用场景、用户占比现状、已知兼容问题与解决方案。读者在掌握本文后可以判断自己的 Unity WebGL 游戏是否有必要启用 WebGL2.0能正确配置导出选项并能在 iOS 高性能模式下规避 GPU Instancing 闪烁、DrawMeshInstanced 显示错乱等典型坑点。一、WebGL2.0 是什么与 WebGL1.0 的能力边界WebGL 是用于在 Web 浏览器中渲染图形的 API其功能基于 OpenGL ES 图形库。两者的大致对应关系为WebGL 1.0≈OpenGL ES 2.0WebGL 2.0≈OpenGL ES 3.0Unity WebGL 的较多渲染优化特性都依赖 WebGL2.0例如 GPU Instancing、SRP Batcher、线性颜色空间、URP 后处理等因此微信小游戏适配方案专门针对该特性做了支持说明。当前仓库中 RenderOptimization.md 对两者关系做了进一步补充WebGL2.0基本兼容WebGL1.0但并不是完全向后兼容对 Unity 而言WebGL1.0 与 WebGL2.0 生成的 Shader 不一样各有优缺点。WebGL2.0 使用Uniform Buffer管理UnityPerDraw和UnityPerMaterial属性Unity 内置 Shader 有大量游戏可能用不到的冗余属性而 WebGL1.0 会用不到的材质属性会被剔除并非用 WebGL2.0 性能就一定比 WebGL1.0 好有条件的话建议分别打包对比帧率、CPU 利用率与内存使用。适合使用 WebGL2.0 的场景根据游戏项目统计相比 WebGL1以下游戏需求更适合 WebGL2.0场景说明线性颜色空间渲染目前 Unity 只有在 WebGL2.0 下才支持线性颜色空间WebGL1.0 必然是 Gamma 颜色空间GPU Instancing 提高渲染性能实例化合并 Draw Call属于 WebGL2.0 特性SRP Batcher 提高渲染性能减少渲染状态切换Unity 2021 以上 WebGL2.0 两个先决条件URP PostProcessing 提升品质URP 管线的后处理能力依赖 OpenGL ES 3.0 Shader存在大量难以降级到 ES 2.0 的 Shader如果游戏内容不多、材质比较简单、不依赖 GPU Instancing 等 WebGL2.0 特性那么 WebGL1.0 也足够参考 RenderOptimization.md。二、微信小游戏环境的 WebGL2.0 支持现状与用户占比Unity WebGL 较多渲染优化特性依赖 WebGL2.0因此需要针对该特性在小游戏环境的支持情况加以说明。官方统计数据截至 2022.12如下Android 平台小游戏基础库8.0.242022 年中版本起已支持 WebGL2当时用户占比 85%。最新占比请查阅微信官方基础库版本分布。iOS 高性能模式需要 iOS 系统版本 15.0当时用户占比 75%。iOS 高性能模式可以支持 iOS 系统版本 14.0的用户使用 WebGL2。其中高性能模式是微信小游戏环境框架提供的能力它在保留游戏独立进程的基础上将渲染重新挪回微信进程从而改善渲染效果与渲染内存消耗。当前仓库的 iOSOptimization.md 明确建议使用 WebGL2、内存压力大的游戏开启此选项开启后需要验证进程内存、渲染兼容性、帧耗时数据是否正常。三、已知兼容问题与规避策略3.1 总述iOS 高性能模式下使用 WebGL2 会存在较多问题平台暂不保证所有能力完善开发者务必验证游戏所用到的特性的支持情况。对于 WebGL2高性能模式有更好的兼容性。如遇到问题可联系我们详细排查。此外仓库 CompressedTexture.md 提到微信纹理压缩已支持 WebGL2.0 模式下的 Gamma 与 Linear 颜色空间渲染Beta但仅支持 2019、2020、2021 三个年限中部分 Unity 版本开发者使用后需进行详细真机测试。3.2 iOS 高性能模式开启 GPU Instancing模型闪烁 / 消失 / 不绘制原因iOS WebKit 对 WebGL2 的支持存在问题当uniform 变量过多时会出现绘制不正确、不绘制、效率变低等现象。解决方法减少 Shader 中 Instance Props 的大小在 Shader 中添加instancing_options选项可参考 Unity 官方文档《GPU instancing shader》说明assumeuniformscaling开启后默认 object 缩放为均匀缩放uniform 可以减少sizeof(mat4x4) * instance count的大小forcemaxcount:batchSize限制每次 draw call 的 instance 数量。根据机型分级使用 GPU Instancing 特性或合批处理。已知iPhone 7p 及以下机型需要进一步限制 instance count。3.3 iOS 高性能模式 DrawMeshInstanced 显示错乱原因iOS WebKit 对 WebGL2 的支持存在问题当批次较大时出现显示错误。解决方法iOS 上降低DrawMeshInstanced的参数matrices数量count 设置为 32 或更小的值。3.4 补充WebGL2 URP 的 Shader 编译报错仓库 DevelopmentQAList.md 记录了一个配套问题使用 WebGL2 URP 管线导出小游戏时可能提示Hidden/Universal/CoreBlit: invalid pass index 1 in DrawProcedural。有部分官方 URP 自带的 Shader 存在该问题在微信开发者工具上可能渲染异常一般真机上渲染正常。两种处理办法升级 URP 版本部分 URP 版本与 Unity 版本绑定此时可能需要同步升级 Unity 版本将工程Library/PackageCache目录下的com.unity.render-pipelines.universalxxx包拷贝到本地通过file方式引入然后修改Shaders/Utils/CoreBlit.shader只保留第一个 Pass注意需确保项目中只使用第一个 Pass。四、如何开启 WebGL2.0导出配置与工程实践4.1 通过导出面板配置在 Unity 顶部菜单栏选择微信小游戏 - 转换小游戏的导出流程中详见 Transform.md调试编译选项一类包含Webgl2WebGL2.0开关勾选即可在转换产物中启用 WebGL2.0 渲染。4.2 通过 MiniGameConfig.asset 配置WebGL2 开关也对应导出配置文件Assets/WX-WASM-SDK-V2/Editor/MiniGameConfig.asset中的字段配置字段总览见 AssetDescription.md// 调试编译选项 DevelopBuild -- Development Build AutoProfile -- Autoconnect Profiler ScriptOnly -- Scripts Only Build profilingFuncs -- Profiling Funcs Webgl2 -- WebGL2.0 // bool勾选后导出 WebGL2.0 渲染产物 DeleteStreamingAssets -- DeleteStreamingAssets即CompileOptions下的Webgl2bool 类型。开发者可直接修改该配置文件后调用WXEditorWindow.DoExport()集成到自己的构建系统参考 Transform.mdvar win new WXEditorWindow(); win.DoExport();4.3 启用 WebGL2.0 后的渲染优化配合结合 RenderOptimization.md 的建议启用 WebGL2.0 后可以从以下方向挖掘收益尽量使用GPU Instancing实例化合并 Draw CallURP 默认开启SRP Batcher它并不减少 Draw Call 数量而是减少渲染状态切换。如果渲染状态较多SRP Batcher 收益会比较明显建议开发者实测对比帧率、CPU 利用率和内存使用对于相同尺寸的纹理可考虑合并成Texture2D Array注意线性颜色空间会让 Unity 多一个全屏 Gamma 矫正 Pass对性能有比较明显的影响该问题在 Unity 2021.3.23 仍存在因此除非是 PBR 光照否则建议选择 Gamma 颜色空间。五、QA 小结与真机验证建议针对 WebGL2.0 的使用开发者在实际接入时应重点关注先评估必要性只有依赖线性颜色空间、GPU Instancing、SRP Batcher、URP 后处理或 ES 3.0 Shader 时才需要 WebGL2.0关注目标用户占比Android 需基础库 8.0.24iOS 高性能模式需系统 15.0iOS 高性能模式可放宽到 14.0iOS 必做真机验证iOS 高性能模式 WebGL2 存在较多已知问题务必逐一验证 GPU Instancing 与 DrawMeshInstanced 等特性遇到闪烁/消失/不绘制时优先按本文 3.2、3.3 节的手段缩减 uniform 与批次规模优先考虑高性能模式其对 WebGL2 兼容性更好并建议配合验证进程内存、渲染兼容性与帧耗时数据遇到其他问题可查阅仓库相关文档渲染性能优化、iOS 高性能模式说明、常见问题 QA或联系我们详细排查。参考文档Unity 官方文档——WebGL 图形原文档引用本仓库WebGL2.0 渲染支持说明、渲染性能优化建议、MiniGameConfig.asset 配置说明、转换工具导出微信小游戏、iOS 高性能与高性能模式、常见问题 QA、压缩纹理说明WebGL 规范WebGL1.0 spec、WebGL2.0 spec赞分享游戏开发移动开发WebAssembly【免费下载链接】minigame-unity-webgl-transform微信小游戏Unity引擎适配器文档。项目地址https://gitcode.com/GitHub_Trending/mi/minigame-unity-webgl-transform点击查看免费下载相关推荐微信小游戏 Unity WebGL 渲染性能优化实战指南微信小游戏 Unity WebGL 渲染性能优化实战指南 本文围绕微信小游戏 Unity WebGL 适配方案下的渲染性能优化系统梳理 WebGL1.0/2.游戏开发移动开发WebAssemblyGo Trace Experiments 实战指南基于 golang.org/x/exp/trace 定义、发射与恢复自定义执行追踪实验事件Go Trace Experiments 实战指南基于 golang.org/x/exp/trace 定义、发射与恢复自定义执行追踪实验事件 执行追踪exe游戏开发移动开发WebAssembly微信小游戏 Unity 适配EmscriptenGLX 渲染模式接入与性能优化实战指南微信小游戏 Unity 适配EmscriptenGLX 渲染模式接入与性能优化实战指南 EmscriptenGLX 渲染模式是微信小游戏 Unity/团结引擎游戏开发移动开发WebAssembly上一篇番茄小说下载器搜索功能为何失灵API 端点更换修复完整复盘指南下一篇ONNX Python API 完全指南从零构建、序列化、运行与调试 ONNX 模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考