model通过在a 的属性上设置材质的颜色ModelEntity,我可以更改对象的不透明度/alpha。但如何将其动画化呢?我的目标是使对象具有完全不透明度的动画,然后让它们淡入设定的不透明度,例如 50%。
有了SCNAction.fadeOpacityin ,这变得特别容易SCNNode。SceneKit
let fade = SCNAction.fadeOpacity(by: 0.5, duration: 0.5)
node.runAction(fade)
Run Code Online (Sandbox Code Playgroud)
AnEntity符合HasTransform,但这仅允许您对比例、位置和方向进行动画处理。与淡入或淡出之类的材质动画无关。如果您创建用于动画隐藏或显示的行为,则效果在 RealityComposer 中,但似乎没有类似的功能来HasTransform提供动画不透明度的功能。
我一直在文档中寻找一些东西,我的下一个想法本质上是创建一个自定义动画来替换这种行为,但它似乎应该可用,但我只是没有找到它。
我正在尝试使用 RealityKit 创建 AR 体验,但我发现默认情况下,实体在通过用户交互移动时会相互移动并重叠。
我想防止对象重叠并相互进入,这样当用户移动它们时,它们只是撞击/反弹而不会重叠。
我从 RealityComposer 文件中加载实体并将它们添加到场景中(在 catch 块中以及此简化版本中未显示的其他块中):
let entity = try Experience.loadBallSort()
anchorEntity.addChild(entity)
// anchorEntity is an AnchorEntity that is already attached to the scene
Run Code Online (Sandbox Code Playgroud)
我使用像这样的默认手势来启用用户交互,这就是导致对象重叠的方式,因为它们一旦触摸就不会停止:
arView.installGestures([.rotation, .translation], for: entity)
Run Code Online (Sandbox Code Playgroud)
在 Reality Composer 中,我启用了具有静态运动类型的物理功能,以及每个对象的默认物理材质/碰撞形状。我也尝试过generateCollisionShapes这样使用,但它不会改变碰撞的行为:
entity.generateCollisionShapes(recursive: true)
Run Code Online (Sandbox Code Playgroud)
如何防止 RealityKit 中的实体重叠?
我按照此处的说明使用 Reality Composer 应用程序记录 ARKit mov 会话,但是当我加载 Xcode 并使用 ARKit 应用程序运行时,该应用程序显示黑屏并显示错误:\n该应用程序在没有 .mov 文件的情况下运行正常
\n2021-07-17 20:57:40.773522-0700 ARKitInteraction[10346:6322385] \xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f WARNING [MOVStreamReader]: Cannot grab metadata. Unknwon metadata stream \'CVAUserEvent\'. \xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\n2021-07-17 20:57:40.773645-0700 ARKitInteraction[10346:6322385] MOVReaderInterface - ERROR - Error Domain=com.apple.videoeng.streamreaderwarning Code=0 "Cannot grab metadata. Unknwon metadata stream \'CVAUserEvent\'." UserInfo={NSLocalizedDescription=Cannot grab metadata. Unknwon metadata stream \'CVAUserEvent\'.}\n2021-07-17 20:57:41.614815-0700 ARKitInteraction[10346:6322385] \xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f WARNING [MOVStreamReader]: Cannot grab metadata. Unknwon metadata stream \'mdta/com.apple.arkit.arimagedata\'. \xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\n2021-07-17 20:57:41.615833-0700 ARKitInteraction[10346:6322420] \xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f WARNING [MOVStreamReader]: Cannot grab metadata. Unknwon metadata stream \'mdta/com.apple.arkit.arimagedata\'. \xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f\n2021-07-17 20:57:41.615940-0700 ARKitInteraction[10346:6322420] …Run Code Online (Sandbox Code Playgroud) 在我的 iOS 应用程序中,我想使用新的 Reality Composer 引入 AR 的一部分。
在我的项目中,我使用以下代码加载场景:
let arView = ARView.init(frame: frame)
// Configure the AR session for horizontal plane tracking.
let arConfiguration = ARWorldTrackingConfiguration()
arConfiguration.planeDetection = .horizontal
arView.session.run(arConfiguration)
arView.session.delegate = self
self.view.addSubview(arView)
Experience.loadSceneAsync{ [weak self] scene, error in
print("Error \(String(describing: error))")
guard let scene = scene else { return }
arView.scene.addAnchor(scene)
// THIS IS THE entity that i want to edit programmatically
scene.Label
Run Code Online (Sandbox Code Playgroud)
该“scene.label”在我的场景中的文本对象,我想设置文本编程。
我怎样才能做到这一点?这是可能的?
提前致谢
我使用 iOS 版 Apple\xe2\x80\x99s Reality Composer 应用程序创建了一些“现实”格式的文件。我很难弄清楚如何在网络上实现它。在查看了一些包含 USDZ 文件的网页后,我最终将其放入我的网站中(链接略有更改):
\n\n<a href="media/images/ar.reality" rel="ar">\n <img src="media/images/image.png" />\n</a>\nRun Code Online (Sandbox Code Playgroud)\n\n这在 iOS/iPadOS Safari 中工作得很好,但在其他浏览器(如 macOS Safari、Firefox 等)中效果不佳。当您在这些浏览器中单击链接时,它会想要下载现实文件。我想用 JS 编写一个脚本,仅当浏览器支持 USDZ 或现实文件时才会添加锚标记。有没有好的方法可以做到这一点?
\n\n编辑:
\n\n即时锅就是一个很好的例子。它们在 iOS/iPadOS Safari 上有指向 USDZ 文件的锚标记,但在 macOS Safari 或其他第三方浏览器上没有\xe2\x80\x99t。
\njavascript augmented-reality arkit arquicklook reality-composer
有没有办法禁用实时摄像头并将自定义视频作为 ARSession 中的输入传递?我想通过代码实现录制和回放ARSession。
RealityKit 的文档包括 structs: OcclusionMaterial, SimpleMaterial, 和UnlitMaterial用于将材料添加到ModelEntity.
或者,您可以加载一个带有材料的模型。
我想以ModelEntity编程方式向 a 添加自定义材料/纹理。如何在不将材质添加到 Reality Composer 或其他一些 3D 软件中的模型的情况下即时实现这一点?
在 SceneKit 中,有很多选项,例如
SCNMaterial.(diffuse|emission|ambient|...).contents SCNMaterial.transparency(从 0.0 到 1.0 的 CGFloat) SCNMaterial.transparent(另一个 SCNMaterialProperty) SCNNode.opacity(从 0.0(完全透明)到 1.0(完全不透明)的 CGFloat)我想知道是否有办法在 RealityKit 中为 ModelEntity 设置透明度/不透明度/alpha?
我希望能够将在 Reality Composer 中创建的文件添加到 Swift Playground 中以进行测试。我也认为用作剧本的补充会很有趣。如何将 rcproject 添加到 Playground 中,例如 Apple 提供的场景“Box”的 Experience.rcproject?
我正在 Swift 中使用 RealityKit 加载 USDZ 模型。模型加载良好,具有纹理。
但是,我无法更改材质的漫反射属性,材质总是以AnyMaterial.
我可以用 a 完全覆盖材质,SimpleMaterial或者我可以在运行应用程序之前更改 USDZ 漫反射颜色,但在运行时似乎无法做到这一点,有什么想法吗?
我只想能够改变一个属性
/*
Find an entity within the parent, and find the material, test to try and change it's material
**/
private func updateColor(entity: Entity) {
guard
let found = entity.findEntity(named: "MyItem"),
var modelComponent = found.components[ModelComponent] as? ModelComponent,
let existingMaterial = modelComponent.materials.first else {
return
}
// This is `AnyMaterial` - no diffuse property
// What can I use here to change the diffuse? …Run Code Online (Sandbox Code Playgroud) reality-composer ×10
arkit ×9
realitykit ×9
swift ×7
arquicklook ×1
ios ×1
javascript ×1
replay ×1
scenekit ×1