- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在使用ARKit中人们的遮挡来开发演示应用程序。因为我们想在最终场景中添加视频,所以我们使用SCNPlane
来使用SCNBillboardConstraint
渲染视频,以确保它们朝向正确的方向。这些视频也部分透明,在我们应用的SCNMaterial
上使用自定义着色器(因此一次播放2个视频)。
现在,我们遇到了一些人们的遮挡非常棘手的问题(见图)。我们正在测试的视频是一个穿着深色裤子和一条裙子的女人(如果您想知道图像中的黑色是什么)。
我们遇到的问题是,遮挡并不总是与人对齐(如图所示),并且不能总是正确地检测到某人的头发。
现在我们的问题是导致这些问题的原因是什么?以及如何改善问题,直到问题看起来像this为止?我们目前正在研究问题是否是因为我们正在使用飞机,但是仅使用SCNBox
不能解决问题。
最佳答案
更新:2020年10月29日。
借助新的 Depth API 和更高质量的ZDepth通道(可以60 fps捕获),可以提高ARKit 4.0中People Occlusion
和Object Occlusion
功能的质量。但是,为此,您需要配备LiDAR扫描仪的iPhone 12 Pro或第四代iPad Pro 2020。
但是在ARKit 3.0中,除非使用Metal或MetalKit,否则无法改善People Occlusion
功能。但是,相信我,使用Metal-family框架很难在ARKit 3.0中改进People Occlusion
。
技巧:考虑到 RealityKit 和 AR QuickLook 框架也支持People Occlusion
。
为什么在使用人员遮挡时会发生此问题?
这是由于第五个 channel 的性质– ZDepth
channel 。我们都知道,渲染的3D场景最终图像可以包含5个用于数字合成的主要通道- Red
, Green
, Blue
, Alpha
和。
当然,还有其他有用的合成渲染通道(也称为AOV): ZDepth
, Normals
, MotionVectors
, PointPosition
,此处唯一主要渲染集– UVs
和 Disparity
。
ZDepth通道在ARKit 3.0中具有三个严重缺陷。
Problem 1. Aliasing and Anti-aliasing of ZDepth.
RGBA
的功能。而且,是的,它几乎适用于所有 channel ,但不适用于ZDepth。 ZDepth的问题是–如果将每个前景对象(特别是透明的)的边界像素“
ZDepth
”“转换”为背景对象。换句话说,FG和BG的像素在FG对象的边缘上混合。
Anti-aliasing
而不是
anti-aliased
。但是没有一个游戏引擎支持它,因为
Deep channel
非常庞大。因此,深通道补偿既不适用于游戏引擎,也不适用于ARKit。唉!
Problem 2. Resolution of ZDepth.
ZDepth channel
中渲染
ZDepth 通道可对实际场景的深度进行编码,从而降低了合成质量。
Deep channel
here的
演示幻灯片pdf 。
Problem 3. Frame rate of ZDepth.
static var personSegmentationWithDepth: ARConfiguration.FrameSemantics { get }
因为它是一个可获取的属性,并且ARKit 3.0中没有ZDepth质量的设置。
You must look at sample code of
People Occlusion in Custom Renderers
app here.
compresses
扫描仪)。由于ZDepth通道的质量更高,因此即使在跟踪周围环境时 body 并不移动,LiDAR扫描仪也可以提高人员遮挡功能的质量和速度。 LiDAR系统还可以帮助您绘制墙壁,天花板,地板和家具的 map ,以快速获取虚拟网格,以使现实表面与之动态交互,或简单地在其上定位3d对象(甚至部分遮挡的3d对象)。配备LiDAR扫描仪的小工具可以检索真实表面的位置,实现无与伦比的准确性。通过考虑网格,射线可以与非平面表面或完全没有特征的表面(例如白墙或几乎不发光的墙)相交。
Bringing People into AR
选项,请使用以下代码:
let arView = ARView(frame: .zero)
arView.automaticallyConfigureSession = false
let config = ARWorldTrackingConfiguration()
config.sceneReconstruction = .meshWithClassification
arView.debugOptions.insert([.showSceneUnderstanding, .showAnchorGeometry])
arView.environment.sceneUnderstanding.options.insert([.occlusion,
.collision,
.physics])
arView.session.run(config)
Light Detection And Ranging
实例属性之前,您需要检查设备是否具有LiDAR扫描仪。您可以在
sceneReconstruction
文件中执行此操作:
import ARKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
guard ARWorldTrackingConfiguration.supportsSceneReconstruction(.meshWithClassification)
else {
fatalError("Scene reconstruction requires a device with a LiDAR Scanner.")
}
return true
}
}
sceneReconstruction
,
AppDelegate.swift
(例如,家具或墙壁)和
People Occlusion
。要在RealityKit 2.0中打开遮挡,请使用以下代码:
arView.environment.sceneUnderstanding.options.insert(.occlusion)
关于swift - 如何改善ARKit 3.0中的人物遮挡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269394/
我有一个 recycleView Activity ,这是我应该在设计中展示的内容 我用这段代码来展示它 val arr:ArrayList = arrayListOf("English","
我目前正在运行 Ubuntu 12.04LTS,nginx 发出请求。 我通过谷歌页面速度( https://developers.google.com/speed/pagespeed/insight
我有以下字符串作为键。从下面的代码中,我看到所有的键都指向同一个 reducer ,尽管有很多 reducer 。最后,同一个 reducer 重载。我想,每个键(字符串),去一个不同的 reduce
假设我有一个 flexbox,为了举例,每个元素都包含一个图像。在这种情况下,flexbox 的目的是将它们均匀分布。 看起来很简单。让我们试试吧。 #flex { width: 350px;
我正在从事基于视频车牌检测的项目。 它是这样的: 当我想在车牌上使用 OCR 时,我的问题就出现了。我在一些图片上对其进行了测试,效果非常好。这是一些例子: 但是当我把检测到的盘子放上去时,结果很糟糕
所以我有下面这组代码解析好吃的信息。它以下列格式从 Delicious 页面打印数据 书签 |人数 书签 |人数等等…… 我曾经使用以下方法来查找此信息。 def extract (soup):
我想为组特征(std、mean...)添加一些列,下面的代码有效,但数据集真的很大而且性能很差。有改进代码的好主意吗?谢谢 import pandas as pd df = pd.DataFrame(
我正在使用 new relic 来诊断和修复我们数据库的性能问题。所以我有以下最耗时的查询。 SELECT * FROM `page_view` WHERE `ip_address` = ?s A
我的公司使用 UIWebView 来展示广告。我遇到的问题是初始化 UIWebView 似乎很昂贵;使用 Time Profiler 进行的分析显示 [UIWebView alloc] initWit
如何让下面的代码更优雅?目前我必须手动添加每个条件。有没有一种方法可以检查 $total_points 的值是否位于数组 $ranking_list 的连续项之间? function ym_rank(
g++ 有时会产生相当复杂的输出。特别是在处理模板时。是否有任何工具可以使 g++ 输出更具可读性? ...至少有一些颜色? 在这里问这个问题可能听起来很傻,但我无法通过谷歌搜索。 最佳答案 从 4.
我有一个 API,它登录一个帐户,然后对我想通过 CFHTTP 请求出价的项目执行搜索,如下所示。 搜索.cfm: 登录.cfm:
我有一个包含超过一百万条记录的表,其结构如下: mysql> SELECT * FROM Measurement; +----------------+---------+--------------
使用 trainCascade 训练类似 HAAR 的特征。向社区寻求建议以获得更好的结果。一般来说,什么被认为是好的接受率? 我从一个较小的培训开始,遵循此链接作为指南:http://coding-
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我们从 JBoss 4(和 JDK 5)升级到 JBoss 5(和 JDK 6)。问题是开始时间已经从 1.5 分钟(在 JBoss 4 上)变为超过 4 分钟。 18:53:35,444 INFO
这是 a previous question on improving rails console loading time 的后续内容。 . 第一个很好的建议是找出 which gems take
我想知道以下哪一项会为加载大量 javascript(jQuery + jQuery UI + 各种其他 javascript 文件)的页面带来更好的性能。我已经浏览了大部分 YSlow 和 Goog
我正在使用多个 setInterval() 例如创建、移动、删除落在屏幕上的字符串 问题是 MODE 1 间隔导致 interval1 出现滞后 我也尝试过切换到MODE 2 STUFF,但仍然出现延
我是一名优秀的程序员,十分优秀!