当前位置: 首页 > news >正文

Unity Apple Vision Pro 开发(四):体积相机 Volume Camera

文章目录

  • 📕教程说明
  • 📕教程内容概括
  • 📕体积相机作用
  • 📕创建体积相机
  • 📕添加体积相机配置文件
  • 📕体积相机配置文件参数
  • 📕体积相机的边界盒大小
  • 📕体积相机边界盒大小和应用边界盒大小的区别
  • 📕无边界模式

此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 开发者社区,博主目前在内担任 XR 开发的讲师。该社区提供专人答疑、完整进阶教程、从零到一项目孵化保姆服务、投资|融资对接、工程文件下载等服务。

社区链接:
SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子

在这里插入图片描述


📕教程说明

这期教程我将介绍使用 PolySpatial 开发包中的体积相机(Volume Camera)。体积相机是开发 Apple Vision Pro MR 应用的必备组件,可用于区分 Shared Space 共享空间和 Full Space 独占空间。

视频讲解:
https://www.bilibili.com/video/BV1AW421d75b


📕教程内容概括

在这里插入图片描述


📕体积相机作用

Unity 开发 visionOS 应用的不同模式如下:

  • 窗口模式:对应共享空间中的窗口应用
  • VR 模式:对应独占空间中的 Fully Immersive(VR)应用
  • MR 模式:
    • 开发共享空间中的体积 3D 应用 -> 应用被包裹在立方体范围内,有边界盒
    • 开发独占空间中的 Passthrough 应用 -> 应用无边界,整个空间都是应用载体

其中,Unity 的 PolySpatial 开发工具包可以用于开发 MR 应用,要么是有边界的体积应用,位于共享空间中;要么是整个空间都作为载体的独占空间应用。根据有无边界这个特性来区分共享空间和独占空间,PolySpatial 推出了体积相机的概念,我们可以在体积相机中设置应用是有边界还是无边界的。


📕创建体积相机

导入 Unity PolySpatial 开发包,在 Unity Hirerachy 面板中点击鼠标右键,选择 XR > Setup > Volume Camera,可以在场景中创建体积相机。

在这里插入图片描述


📕添加体积相机配置文件

找到体积相机物体上的 Volume Camera 脚本,有一个 Volume Window Configuration 参数,我们要对这个参数进行赋值。

在这里插入图片描述

如果你导入了 PolySpatial 样例场景,那么可以在 Assets > Samples > PolySpatial > Resources 文件夹里找到官方提供的两个配置文件。开头是 Bounded 为有边界配置文件,用于共享空间开发;开头是 Unbounded 为无边界配置文件,用于独占空间开发。

在这里插入图片描述

如果你想自己创建体积相机配置文件,可以在 Resources 文件夹下通过 Create > PolySpatial > Volume Camera Window Configuration 创建。

注:体积相机配置文件必须存放在项目 Assets 文件夹下的任意 Resources 文件夹内。


📕体积相机配置文件参数

在这里插入图片描述

Mode:可以选择 Bounded(有边界)和 Unbounded(无边界)开发模式
Out Dimensions:输出尺寸,单位是米,用于表示整个应用的边界盒大小(只有选择了有边界开发模式才有用)。Output Dimensions 数值越大,应用的边界盒越大,应用内的物体的缩放会越大。

注:能渲染场景中的什么物体就由体积相机来控制,场景中默认添加的 Main Camera 是没有作用的。


📕体积相机的边界盒大小

Volume Camera 脚本的 Volume Window Configuration 选择了有边界模式的配置文件后,点击 Volume Camera 物体可以在场景中看到一个立方体的范围(如下图所示),它代表了体积相机的边界盒大小,只有在立方体范围内的物体才能被渲染出来,超出范围的部分无法被渲染。

在这里插入图片描述
体积相机的边界盒大小等于 Volume Camera 脚本上的 Dimensions 数值乘上 Volume Camera 物体的 Scale 缩放大小。

在这里插入图片描述

如上图所示,体积相机的边界盒大小就等于 2×3,2×3,2×3,也就是 6,6,6(单位:米)


📕体积相机边界盒大小和应用边界盒大小的区别

这两种边界盒是不同的概念。体积相机的边界盒决定了体积相机能拍到的范围,只能在拍摄范围内的物体才能被渲染出来。

体积相机的边界盒越大,可渲染的物体越多,物体的缩放越小。

因为在应用的边界盒大小不变的情况下,能渲染更多的游戏物体,为了能将这些游戏物体装进应用的边界盒,这个物体的缩放就要变小。

但是体积相机的边界盒大小不会影响应用的边界盒大小,应用的边界盒大小由体积相机配置文件中的 Output Dimensions 控制,应用边界盒越大,应用内物体缩放越大。


📕无边界模式

Volume Camera 脚本的 Volume Window Configuration 选择无边界模式的配置文件后,开发的就是独占空间 MR 应用。

无边界模式下,程序运行后体积相机的位置位于头显正下方的地面处,体积相机的 z 轴朝向和头显正前方一致。

相关文章:

Unity Apple Vision Pro 开发(四):体积相机 Volume Camera

文章目录 📕教程说明📕教程内容概括📕体积相机作用📕创建体积相机📕添加体积相机配置文件📕体积相机配置文件参数📕体积相机的边界盒大小📕体积相机边界盒大小和应用边界盒大小的区别…...

C语言 | Leetcode C语言题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; const int BIG 1 << 30;bool isPowerOfTwo(int n) {return n > 0 && BIG % n 0; }...

GitHub备份代码的学习笔记

1. 备份工具&#xff1a;GitHub CLI 2. 认证方式 2.1 公用云服务器&#xff1a;SSH 可以通过使用GitHub CLI(命令行界面)在本地创建一个新的GitHub仓库,并直接使用本地项目代码文件夹的名称作为仓库名称,无需手动输入相同的名称。这可以通过以下步骤实现: 首先,确保您已安装…...

微信小程序与本地MySQL数据库通信

微信小程序与本地MySQL数据库通信 因为本地MySQL服务器没有域名&#xff0c;也没有进行相应的请求操作封装&#xff0c;因此微信小程序没办法和数据库通信。 但是对于开发人员来说&#xff0c;没有数据库&#xff0c;那还能干撒&#xff1f;虽然我尝试过用json-server&#x…...

Flutter热更新技术探索

一&#xff0c;需求背景&#xff1a; APP 发布到市场后&#xff0c;难免会遇到严重的 BUG 阻碍用户使用&#xff0c;因此有在不发布新版本 APP 的情况下使用热更新技术立即修复 BUG 需求。原生 APP&#xff08;例如&#xff1a;Android & IOS&#xff09;的热更新需求已经…...

【机器学习-00】机器学习是什么?

在科技飞速发展的今天&#xff0c;机器学习已成为一个热门话题&#xff0c;广泛应用于各个行业和领域。那么&#xff0c;机器学习到底是什么&#xff1f;它又是如何工作的&#xff1f;本文将深入探讨机器学习的定义、原理及其在各领域的应用&#xff0c;带领读者走进这个神秘而…...

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决&#xff1a;WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武…...

无人机监测的必要性及方法

为什么需要无人机探测&#xff1f; 无人机的快速发展和广泛使用为各个行业带来了巨大好处&#xff0c;包括送货服务、农业和监控。然而&#xff0c;这种扩散也导致滥用现象增多&#xff0c;造成非法入侵空域、侵犯隐私和安全威胁。监控和探测在特定空域盘旋的无人机的能力变得…...

PHP框架详解:Symfony框架

Symfony是一个功能强大且高度灵活的PHP框架&#xff0c;广泛应用于企业级项目和复杂的Web应用开发。本文将详细介绍Symfony框架的主要特性&#xff0c;并通过实例展示其强大功能。 1. 什么是Symfony&#xff1f; Symfony是一个基于MVC&#xff08;模型-视图-控制器&#xff0…...

在 Navicat BI 创建自定义字段:类型更改字段

早在 Navicat 17 的预览版中&#xff0c;我们就已经介绍了一些新的商业智能&#xff08;BI&#xff09;功能&#xff0c;即图表互动和计算字段。需要说明的是&#xff0c;计算字段不是 Navicat BI 中唯一可用的自定义字段类型。事实上&#xff0c;有五种&#xff1a;类型改变、…...

llama-index,uncharted and llama2:7b run locally to generate Index

题意&#xff1a;本地运行 llama-index、uncharted 以及 llama2:7b 来生成索引 问题背景&#xff1a; I wanted to use llama-index locally with ollama and llama3:8b to index utf-8 json file. I dont have a gpu. I use uncharted to convert docs into json. Now If it …...

vue、js截取视频任意一帧图片

html有本地上传替换部分&#xff0c;可以不看 原理&#xff1a;通过video标签对视频进行加载&#xff0c;随后使用canvas对截取的视频帧生成需要的图片 <template> <el-row :gutter"18" class"preview-video"><h4>视频预览<span&…...

STM32智能家居系统教程

目录 引言环境准备智能家居系统基础代码实现&#xff1a;实现智能家居系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;家居智能化管理问题解决方案与优化收尾与总结 1. 引言 智能家居系统通过STM32嵌入…...

uniapp 开发 App 对接官方更新功能

插件地址&#xff1a;升级中心 uni-upgrade-center - App - DCloud 插件市场 首先创建一个 uni-admin 项目&#xff0c;选择你要部署的云开发服务商&#xff1a; 然后会自动下载模板&#xff0c;部署云数据库、云函数 第二步&#xff1a;将新创建的 uni-admin 项目托管到…...

【PostgreSQL】PostgreSQL 教程

博主介绍&#xff1a;✌全网粉丝20W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Qt类 | QLabel类详解

文章目录 一、QLabel类介绍二、Properties&#xff08;属性&#xff09;三、Public Functions&#xff08;公共函数&#xff09;1.构造函数2.alignment与setAlignment函数 -- 标签内容的对齐方式3.buddy与setBuddy函数 -- QLabel关联的伙伴控件4.hasScaledContents与setScaledC…...

深入剖析 Android 开源库 EventBus 的源码详解

文章目录 前言一、EventBus 简介EventBus 三要素EventBus 线程模型 二、EventBus 使用1.添加依赖2.EventBus 基本使用2.1 定义事件类2.2 注册 EventBus2.3 EventBus 发起通知 三、EventBus 源码详解1.Subscribe 注解2.注册事件订阅方法2.1 EventBus 实例2.2 EventBus 注册2.2.1…...

End-to-End Object Detection with Transformers【目标检测-方法详细解读】

摘要 我们提出了一种新的方法,将目标检测视为一个直接的集合预测问题。我们的方法简化了检测流程,有效地消除了许多手工设计的组件,如非极大值抑制程序或锚生成,这些组件显式编码了我们关于任务的先验知识。新框架的主要成分,称为DEtection TRansformer或DETR,是一个基于…...

CSS3实现提示工具的渐入渐出效果及CSS3动画简介

上一篇文章用CSS3实现了一个提示工具&#xff0c;本文介绍如何利用CSS3实现提示工具以渐入的方式呈现&#xff0c;以渐出的方式消失。 CSS3主要可以通过两个样式来实现动画效果&#xff1a;animation和transition。 其中&#xff0c;animation需要自己定义一组关键帧从而实现…...

JVM 垃圾回收算法

一、如何确定为垃圾 引用计数法 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff0c;当引用为0&#xff0c;则认为对象可被回收。引用计数不能解决循环引用的问题 根可…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...