huawei AREngine 默认的 builtin 的渲染管线绘制预览流, 在如今行业普遍使用的自定义渲染管线有点儿过时。 看 ARFoundation 的实现, 已经默认支持builtin和urp的无缝切换, 于是就想着把 AREngine 的预览流绘制使用urp来实现一遍。
builtin的预览流实现:
首先预览流信息直接由GPU端直传到 glsl(shader)里了, 这个不需要经过cpu, 比如说转yuv这些格式, 这个效率是非常高了, 像官方c#里的代码的实现很多都是冗余的代码, 完全没有必要且可以删减。

真正传递camera信息过来是在glsl里使用了特使的标记 samplerExternalOES:
uniform samplerExternalOES _MainTex;
关于Android是如何获取预览流并绑定纹理具体可以参考链接。
在使用 samplerExternalOES 纹理前, 需要开启camera, 这个步骤既可以通过 AREngine的 SesssionComponent 组件, 也可以使用 unity 自带的 WebCamera来实现。 获取到纹理之后, 如何显示在屏幕上呢?
AREngine 使用的 CommandBuffer Blit, 这点跟 ARCore是一致的, 且绑定了 BeforeForwardOpaque、BeforeGBuffer 两个Event, 分别对应 前向渲染 和延时渲染。
AREngine预览流在URP渲染管线中的实现

本文介绍了将华为AREngine的预览流从默认的内置渲染管线迁移到Unity的Universal Render Pipeline (URP)的实现过程。在内置渲染管线中,预览流通过GPU直接传递到着色器,而URP则需要利用RenderFeature创建自定义渲染通道。通过ARBackgroundRenderPassFeature类和ScriptableRenderPass,实现了在BeforeRenderingOpaques渲染事件中绘制预览流。虽然在PC上预览流可能显示为紫色,但通过特定的Shader可以在编辑器中仿真手机效果。迁移至URP时,需要注意整体渲染流程的调整。
最低0.47元/天 解锁文章
4608





