移动正向渲染
引言
Vision 提供一套为移动设备专门优化的正向渲染系统。 与常规正向渲染系统的主要差别在于,对于动态光照,移动正向渲染系统会选择一个光源作为单一主导光源,并将其作为基底通路的一部分来渲染。 所有附加光照作为附加几何体通路被渲染在场景几何体顶层。 在同一时间只有一个占明显主导地位的动态光源(例如太阳或明亮的眩光)的常见情景下,这可以免去一个代价高昂的几何体通路。 而且,该渲染系统增加了在移动设备上对动态阴影贴图的支持。 与已有的阴影贴图系统相反,这种阴影贴图直接应用于光照通路,而不会先生成延迟阴影蒙版。 其限制在于,移动设备上的阴影贴图不支持任何高级过滤技术。 详情请见下文。
就像常规的正向渲染系统一样,移动设备正向渲染系统也支持附加特定后期处理效果。 但其选择范围比常规正向渲染系统要有限得多。
注:移动设备正向渲染系统仅支持电脑(用于预览)、安卓、iOS 和PlayStation Vita。
如何激活移动正向渲染
在主层下拉菜单中选择相应的渲染器,即可将场景设为移动设备正向渲染模式:
特性
移动设备正向渲染系统的特性如下。
移动设备着色器提供器
Vision 移动设备正向渲染系统使用其自身的 Vision 移动设备着色器提供器。 该着色器提供器不仅支持移动着色器(来自 MobileShaders.ShaderLib),而且支持大多数常规的正向渲染着色器。
后期处理兼容性
Vision 移动设备正向渲染系统与所有只需要颜色缓存作为输入的后期处理特效兼容。 因为移动设备正向渲染系统不能生成法线、高光、线性深度或散射缓存,需要这些输入的后期处理特效通常只能在标准正向渲染系统中使用。
动态光照
为了判定当前视图中的主导光源,CPU 会计算光照影响范围的屏幕尺寸约值。 然后,渲染器根据这一尺寸生成优先级,并考虑对应光照是否投射阴影。 以这种方式,影响区域更大且附带阴影贴图组件的光照通常将具有更高的优先级。 优先级最高的光照将在基底通路中渲染。 所有其他光照则在额外叠加几何体通路中渲染。
注:只有用移动设备着色器渲染、并且在不透明主通路中的表面才支持基底通路中的主导光源渲染。 另外,对于实体来说,仅当其所有表面都不使用全亮光照方法时,上述情况才成立。
动态阴影
为聚光灯或平行光添加一个 VMobileShadowMapComponentSpotDirectional(V 移动阴影贴图 - 聚光灯 / 平行光照组件),即可在场景中添加动态阴影。 请注意,移动渲染系统不支持点光源阴影贴图。 由于移动设备上的性能限制,和默认阴影贴图组件相比,这一特殊阴影贴图组件有特定局限:
1. 不具备阴影贴图过滤,也就是说,阴影会有硬边缘。 因此,我们建议将阴影贴图限制在相对较小的区域内。
2. 平行光照的阴影贴图仅使用一个层叠。
3. 因为阴影贴图直接应用于光照通路,所以不会生成延迟阴影蒙版。
注:默认阴影贴图系统与移动正向渲染系统不兼容。 而且,V 移动阴影贴图 - 聚光灯 / 平行光照组件的动态阴影只能投射到用某个移动材质渲染器渲染的表面上,这一渲染器由 Vision 移动着色器提供器分配。 这些着色器包含在 MobileShaders.ShaderLib 中。 当然,添加并执行支持阴影贴图的自定义着色器也是可能的;请查看移动材质着色器获取参考。
注:移动设备上的阴影贴图需要 OpenGL 扩展”GL_OES_packed_depth_stencil”或”GL_OES_depth_texture”。 在不支持这两种扩展的设备上,动态光照将被直接渲染而不投射任何动态阴影。
重要: 移动设备上的阴影贴图容易产生精度问题,如下图所示。 配置聚光灯光源的半径和”移动设备阴影贴图组件”的近切参数时必须小心,因为两个参数分别定义了阴影贴图的近切和远切面。 下方示例的半径为 5000,近切值为 2,其结果是明显的精度伪影。 提高光源近切值或降低半径就可以避免这类伪影。
删减法阴影
让静态光源额外投射动态阴影也是可能的。 实现方法为向静态光源附加 Vision 移动设备阴影贴图 - 聚光灯 / 平行光源组件组件 所产生的阴影为删减型,因此会降低静态光照形成的预计算光照强度。
注:只能让一个静态光源投射删减法阴影。 使用多个附带 Vision 移动设备阴影贴图 - 聚光灯 / 平行光源组件的静态光源会导致渲染伪影。 投射删减型阴影的静态光源会始终拥有最高优先级,从而始终在基底通路中渲染。
为避免阴影区域完全变黑,阴影贴图组件提供了 MaxIntensity(最大强度)参数。 该值用于缩放阴影强度,其取值范围为 [0..1]。
缺失阴影贴图过滤所造成的自荫蔽伪影通常相当明显,为避免这些伪影,您可以通过实体和几何网格的光照影响位元蒙版来控制阴影投射的光照影响。
时间变化
移动设备正向渲染系统支持 Vision 时间变化系统。 这要求一个动态平行光照和一个VTimeOfDayComponent,并启用时间变化。
注:对于使用移动设备着色器渲染的材质,仅在启用时间变化系统时才会应用全局环境色。
分辨率放大
分辨率放大功能允许您以比移动设备更低的分辨率渲染场景。 这一功能有时对性能有益,因为有些移动设备有极高的显示密度(有时高于 400dpi),而游戏渲染通常不需要这么高。 在分辨率极高的设备上渲染像素着色复杂度高的场景时,分辨率放大功能有很大的益处。
不过您必须考虑到,分辨率放大要涉及额外的 blit 操作,这也需要占用 GPU 时间。 因此,在深度复杂度很低、材质简单的场景中,或是在渲染分辨率低于 300dpi 的设备上,使用分辨率放大往往得不偿失。
您可以在渲染器节点设置中为 Vision 移动设备正向渲染系统配置分辨率放大:
RenderingResolutionMode(渲染分辨率模式)指定是否使用分辨率放大,如为是,则指定使用哪种模式。 设为 FULLSIZE(全尺寸)时,正向渲染器节点将始终以其最终目标上下文(通常是含有后台缓存的上下文)的全尺寸分辨率进行渲染。 设为 QUARTERSIZE(四分之一尺寸)时,场景始终以最终目标上下文的四分之一分辨率进行渲染。例如,当最终目标上下文的分辨率为 1920×1080,则四分之一尺寸模式将以 960×540 的分辨率进行渲染。 最后,DPI 设定指示了场景应以某个具体的 dpi 率(密度)进行渲染。
如分辨率模式设为 DPI,则 DesiredRenderingDpi(期望渲染 Dpi)指定场景的目标渲染密度。 例如,如果设备的原始显示密度为 300dpi,分辨率为 1280×720,启用 DPI 模式,该值设为 150 dpi,则场景的实际渲染分辨率将是 640×360。 如果分辨率模式设为 QUARTERSIZE 或 FULLSIZE,则该设置不起效果。
如果设备的显示密度已经接近 DesiredRenderingDpi 中指定的 dpi 率,则可使用 ResolutionTolerance(分辨率容错)来指定容错阈值。 例如,如果设备的原始显示密度为 300dpi,DesiredRenderingDpi 值设为 250dpi,ResolutionTolerace 为 25(百分比),则渲染将以设备的原始分辨率进行,因为 300dpi 和 250dpi 的差异不到 25%。 其优势在于,在这种情况下禁用分辨率放大可省去一个完全渲染目标的分辨率放大 / blit 操作,该操作的开支往往比多渲染 20% 或 20% 的像素更大。 因此,在 DPI 模式下,我们建议将 ResolutionTolerance 值设得足够大。
最后,UseUpscaleFiltering(使用分辨率放大过滤)指定了将已渲染场景分辨率放大到 V 移动正向渲染系统的最终渲染目标时是否使用双线过滤。
请注意,分辨率放大仅影响主场景的渲染。 屏幕蒙版、Vision 字体、Vision UI 元素 和调试渲染输出依然以显示器原始分辨率显示,以确保 UI 元素和文本的清晰!
伽马校正
因为 OpenGL ES 2.0 仅通过一个 GL 扩展(GL_EXT_sRGB)支持硬件伽马校正,而目前支持该扩展的移动设备并不常见,所以,所有相关 sRGB 转换都需要在着色器编码中手动进行。 因此,移动正向渲染系统不支持伽马校正。
性能考量和优化提示
总的来说,适用于默认正向渲染系统的建议同样适用于移动正向渲染系统。 但也应牢记一些特殊事项:
由于目前的移动设备性能有限,动态光照的使用应非常小心。 要牢记,只有一个动态光照会在基底通路中渲染。 每多一个额外的动态光照,就必须多渲染一条叠加几何体通路,这对移动设备的负担尤其大。
后期处理特效在移动设备上的性能开支会很高。 因此,只有在真正提供显著的视觉改善时才能使用色调映射。 也可考虑在中低端移动设备上禁用色调映射。
移动设备阴影贴图系统在 CPU 侧决定了哪个几何体位于光照的阴影体内。 只有在阴影体内的几何体会被计算阴影贴图的着色器渲染。 所有其他几何体会被一个更简单、更快速的着色器渲染。
在当前一代的移动设备上,阴影贴图是一种性能开支高昂的技术,所以只能为数量有限的几何网格启用动态阴影投射。 例如,一个良好的使用实例是照亮场景且附加阴影贴图组件(删减法阴影)的静态平行光照。 在限制主角色模型的阴影投射器的同时,由于上文提到的阴影体优化,只有主角色周围的几何体会使用更高性能开支的、将阴影贴图纳入计算的着色器;而场景主体会采用性能负担小得多的、仅计算静态光照的着色器。
如果没有附加后期处理组件,且渲染分辨率模式设为 FULLSIZE,移动设备正向渲染器会自动绕过任何离屏渲染。 这将极大提升性能,因为分辨率放大或后期处理所涉及的额外图像块传输操作会占用大量 GPU 时间。
注:避免使用子分区很少的大几何体,例如仅由两个三角形构成的大片地面。 由于精度问题,这不仅会对纹理过滤造成负面影响,而且在极端情况下,平行光照所投射的阴影会非计划淡出。
相关推荐
《海康VisionMaster在亮度检测、Group管理和渲染中的应用详解》 海康威视的VisionMaster是一款强大的机器视觉软件,广泛应用于工业自动化、质量控制、智能安防等领域。它以其高效、精准的图像处理能力,为用户提供...
可能包含如何利用Vision引擎的接口加载预训练模型,以及如何进行模型优化和量化,以适应嵌入式设备或移动平台。 文档还可能包含关于实时视频处理的内容,解释如何利用Vision引擎实时分析视频流,实现人脸识别、行为...
VisionMaster 流程模块中的渲染图片和输出数据绑定到vs中
在本文中,我们将深入探讨如何在C#编程环境中引用并使用National Instruments (NI) 的Vision库,以便进行图像处理和机器视觉应用。标题"vision.rar_C# VISION引用_C#引用NI_Vision_c# vision_ni vision"以及描述"C#...
Pov-ray( Persistence of Vision Raytracer)出现在文件名称列表中,这可能是渲染大师所使用的引擎或者是配套的工具。Pov-ray是一款开源的、基于光线追踪的渲染器,以其强大的功能和灵活性著称。用户可以使用Pov-...
在Nvidia 3D Vision中,这个过程更为复杂,因为系统会自动检测并处理这些差异,为用户提供无缝的立体体验。开发者需要适配Nvidia的API,确保每一帧都正确地处理为左右眼的视差图像。 在CubeDemo中,你会看到如何...
本篇文章将深入探讨NIVision函数及其在图像处理中的应用。 首先,NIVision的核心是其丰富的函数集合,这些函数涵盖了从图像获取到图像分析的全过程。在“NIVision函数详解”中,我们将重点关注以下几个方面: 1. *...
在游戏开发领域,Unity引擎因其强大的3D图形渲染、跨平台支持以及丰富的社区资源而广受欢迎。而Vision Pro是一款专业级的计算机视觉软件,它在图像处理和机器学习方面具有显著优势。当Unity与Vision Pro相结合时,...
在VisionMaster中集成OpenCV库,可以极大地提升图像处理的效率和精度。OpenCVSharp是OpenCV的C#封装库,使得在.NET环境下调用OpenCV功能变得简单易行。本文将详细探讨如何在海康VisionMaster中使用OpenCvSharp进行...
NI Vision Assistant中文入门教程(带书签)
本指南不仅涵盖了NVIDIA 3D Vision Automatic技术如何融入现有技术栈中的概述,还详细介绍了在使用该技术时可能遇到的常见问题及其解决方法。 #### 二、目标读者 本实践指南的目标读者主要包括游戏开发者和技术人员...
OpenGL-Vision OpenGL-Vision OpenGL-Vision
在提供的"NI Vision Assistant中文入门教程 (1).pdf"中,你将找到详细的步骤和示例,包括如何使用基本工具、执行特定的图像处理任务以及如何设置和优化检测流程。教程中的案例涵盖了从简单的边缘检测到复杂的形状...
### GigE Vision Spec2.0中文完整版 #### 一、引言 ##### 1.1 目的 GigE Vision Spec2.0中文完整版是针对工业图像处理领域的一项重要技术规范,旨在为基于千兆以太网(Gigabit Ethernet)的图像采集设备提供一个...
NIVision是National Instruments公司开发的,主要用于LabVIEW环境中的图像处理和分析;而Halcon则是MVTec公司出品的,以强大的机器学习和模式识别功能著称。在实际应用中,有时我们需要将NIVision处理的图像数据转换...
在VISION中,用户可以通过图形化的编程界面来创建和编辑虚拟仪器,进行数据采集、处理和分析。 在这个"VISION库模型.zip"中,我们可以期待找到各种电子元器件的模型,如电阻、电容、电感、二极管、晶体管、运算放大...
NI Vision Builder AI 中使用 RS232 进行通讯 NI Vision Builder AI 是一款功能强大的机器视觉软件,用于开发和测试机器视觉应用程序。在本文中,我们将探索如何在 NI Vision Builder AI 中使用 RS232 进行通讯,...
4.µVision3 工具 给出了有关内置工具如文件中实现快速查找,及外部第三方工具如SVCS或Flash编程工具的信息。 5.测试程序 描述了如何用µVision3 调试器进行仿真及测试整个应用程序。 6.调试命令 给出了在可用...
《NI-Vision-Assistant2010中文入门教程》是一个为初学者准备的详细指南,旨在帮助用户了解和掌握National Instruments的视觉辅助工具——NI-Vision-Assistant的使用方法。这款软件广泛应用于工业自动化、质量控制、...