体积摄像机
PolySpatial 提供了一个称为 Volume Camera 的新Unity组件,它决定了Unity应用程序如何与visionOS的模式和体积进行交互。体积摄像机与常规Unity摄像机类似,因为它们指定Unity场景的哪一部分将对用户可见和可交互。然而,当传统摄像机将3D内容平铺成2D图像时,体积摄像机保留了它们捕获的内容的3D性质。正如传统摄像机与2D视口或纹理相关联一样,体积摄像机与(3D)体积窗口相关联。
体积摄像机支持Bounded和Unbounded 模式。当体积摄像机的Mode设置为Unbounded时,整个Unity场景将显示在visionOS沉浸式空间中。
相比之下,Bounded模式下的摄像机对应于visionOS体积窗口,并且只有摄像机边界框中包含的内容才会出现在体积窗口内。体积摄像机边界内的Unity内容会按比例放大或缩小以适合其体积窗口,并且与窗口边界重叠的对象会受到GPU剪裁。VolumeCamera 组件在场景视图中显示预览范围,以帮助可视化在此模式下将渲染的内容。
您可以更改体积摄像机的变换和尺寸或对其进行动画处理,以动态更改场景的子区域将出现在其关联的visionOS 体积窗口内。但是,要在模式之间切换或更改体积窗口本身的大小,您必须更改体积摄像机引用的Volume Camera Window Configuration。您无法在运行时修改体积摄像机窗口配置的属性。
体积摄像机属性
VolumeCamera组件公开了以下属性:
Property | Description |
---|---|
CullingMask | 定义Unity图层的位掩码。体积摄像机仅显示属于指定图层的对象。您可以使用 CullingMask 指定体积摄像机应显示哪些对象。要在Bounded体积中可见,游戏对象还必须位于体积摄像机的边界框内(由其Dimensions属性和变换比例指定)。有关Unity中图层和图层蒙版的更多信息,请参阅Layers。 |
Dimensions | 定义摄影机边界框的大小(未缩放)。当您将体积摄像机Mode设置为Bounded时,摄像机仅显示缩放边界框中的GameObject。边界框的中心位于VolumeCamera变换的位置。边界框的世界空间维度是通过将Dimensions乘以变换的比例来计算的。当您将Mode设置为Unbounded时,Dimensions将被忽略,因为在该模式中没有边界框。 |
Open Window On Load | 启用后,在加载时体积摄像机会自动打开其体积。否则,您必须使用VolumeCamera.OpenWindow()方法手动打开体积。 |
Volume Window Configuration | 定义体积摄像机所连接的体积窗口的大小和模式。如果您未设置配置,则体积摄像机在打开其体积窗口时将使用PolySpatial Settings中为Default Volume Camera Configuration指定的配置。 |
实现细节和直觉
正如传统摄像机指定源尺寸(视场)和目标尺寸(视口尺寸)一样,体摄像机指定源尺寸和目标尺寸。体积摄像机的尺寸有点类似于视场:它们定义了场景的可见范围。同样,它的输出尺寸类似于视口大小:决定了内容对用户的显示大小。
体积摄像机将Unity中面向源的边界框 (OBB) 的内容映射到 VisionOS 体积窗口的相应目标 OBB,如下所示:
源 OBB 根据体积摄像机的GameObject的变换进行居中和定向,其大小等于其尺寸乘以其GameObject的比例。这个OBB中的所有Unity内容将被复制到visionOS中。调整源尺寸类似于放大或缩小摄像机——它会影响你看到的内容数量and*内容的显示大小。体积摄像机的尺寸和变换可以在运行时自由修改。
目标OBB——visionOS体积窗口——只能由用户或操作系统定位和旋转,但其大小由体积摄像机的Volume Camera Window Configuration的Output Dimensions决定。更改输出维度only缩放最终渲染内容的真实世界大小,not显示多少内容。
在运行时,不能直接更改有界卷窗口的尺寸。当您将体积摄像机组件的Volume Camera Window Configuration更改为具有不同Output Dimensions时,PolySpatial 会将现有体积窗口替换为新窗口。
体积摄像机事件
VolumeCamera具有以下可订阅的事件:
Event | Description |
---|---|
On Window Opened | 当该体积摄像机的窗口打开时触发的事件。第一个参数是世界空间中窗口的实际尺寸,如果体积是无界的,则为“Vector3.zero”。第二个参数是内容的实际维度,由于纵横比映射,在世界空间中可能会有所不同,或者如果体积是无界的,则为“Vector3.zero”。第三个参数是打开窗口的输出模式。这些参数中的任何一个都可能与打开窗口时由visionOS确定的DesiredOutputDimensions或DesiredOutput mode不同。 |
On Window Closed | 当显示此体积摄像机的窗口关闭(由用户或通过代码)时触发的事件。 |
On Window Resized | 调整此体积摄像机的窗口大小时触发的事件。第一个参数是世界空间中窗口的实际尺寸,如果体积是无界的,则为“Vector3.zero”。第二个参数是内容的实际维度,由于纵横比映射,在世界空间中可能会有所不同,或者如果体积是无界的,则为“Vector3.zero”。第三个参数是窗口打开时的输出模式。 |
On Window Focused | 当该体积摄像机的窗口获得或失去焦点时触发的事件(由操作系统定义)。第一个参数是一个布尔值,指示窗口是否具有焦点。 |
Volume Camera Window Configuration资源
因为visionOS要求在构建时预先声明所有可能的体积窗口尺寸,所以您必须提前指定所有体积窗口设置作为体积摄像机窗口配置资源。要更改应用程序的体积窗口的模式或大小,必须更改您的体积摄像机以引用不同的(预定义)体积摄像机窗口配置资产。您无法在运行时修改体积摄像机窗口配置的属性。
Volume Camera Window Configuration资源支持以下属性:
Property | Description |
---|---|
Mode | 摄像机是否应将渲染内容限制为其边界框内的对象或不受限制。 |
Bounded | 体积摄像机具有由其尺寸定义的有限边界。 |
Unbounded | 体积摄像机捕获所有内容,无论位置如何,并且尺寸字段被禁用和忽略。将体积摄像机的模式设置为无界相当于请求您的应用程序切换到"exclusive"模式。 |
Output Dimensions | 对于Bounded体积,确定显示体积的大小(以米为单位)。例如,如果您将输出尺寸设置为3x3x3,则在应用程序中打开的体积窗口是一个边长为3米的立方体。体积摄像机边界框中的内容被缩放以填充体积窗口(对于Unbounded体积被忽略)。 |
Note
The visionOS operating system is free to set the volume window dimensions as it sees fit.实际窗口尺寸在OnWindowOpened event中报告。
使用Create菜单创建体积摄像机配置资源:Assets > Create > PolySpatial > Volume Camera Window Configuration。您必须将这些资源存储在命名为Resources
的文件夹中,且这些资源必须在您开始构建时就已存在——而不能作为构建过程或构建完成后添加。有关Unity中“Resources”文件夹的更多信息,请参阅Special Folder names。您打算使用的所有体积摄像机配置资源都必须包含在构建中。不能在运行时动态创建这些资源。
创建后,您可以在运行时在配置之间进行交换,但无法直接修改体积摄像机的输出属性。您只能通过引用不同的体积摄像机配置资源来更改这些属性。
在体积摄像机配置之间切换就像给您的体积摄像机分配一个新的体积摄像机配置一样简单,无论是通过脚本还是通过检查器窗口。 可以在无界体积配置和有界体积配置之间相互切换。
如果您没有将配置资源分配给体积摄像机,它将使用项目的 PolySpatial 设置的 Default Volume Camera Window Configuration 属性指定的资源。(要更改此属性,请打开Project Settings窗口(菜单:Edit > Project Settings)并选择 PolySpatial部分。)
体积摄像机PolySpatial设置
常规PolySpatial Settings包括以下与体积摄像机相关的设置:
Setting | Description |
---|---|
Default Volume Camera Configuration | 如果您尚未将配置资源分配给体积摄像机,则定义体积摄像机用于打开其体积窗口的默认Volume Camera Configuration资源。如果您未识别默认配置,则任何没有配置的体积摄像机都会尝试以Unbounded模式打开其体积窗口。 |
Auto-Create Volume Camera | 启用后,如果场景加载后没有体积摄像机,PolySpatial 会自动创建体积摄像机。如果您在场景加载后从脚本创建初始体积摄像机,请禁用此属性。 |
在Project Settings的PolySpatial部分访问这些设置(菜单:Edit > Project Settings)。