【问题标题】:Loading USDZ for ARKit (not a QLPreview) Material Properties为 ARKit(不是 QLPreview)材质属性加载 USDZ
【发布时间】:2019-03-22 09:48:28
【问题描述】:

我正在尝试将usdz 文件加载到其中一种材料具有玻璃透明度的 ARKkit 中。当我将模型放入QLPreviewController 时,玻璃会正确渲染。问题是我想用 ARKit 在 SCNScene 中渲染玻璃,而不是 QLPreview,当我将玻璃材料加载到 SCNScene 时,玻璃材料是黑色的。在 Xcode 中预览时也是黑色的。

不确定QLPreview 在做什么,或者我的场景中的照明是否有问题。我已经删除了所有自定义灯,只是将autoenablesDefaultLighting 设置为true。然后我将每种材质的光照模型设置为PhysicallyBased。但仍然只是黑色。

有人知道我需要做什么才能以与QLPreview 相同的方式进行渲染吗?是否需要解压usdz来获取透明纹理并手动设置?

谢谢!

【问题讨论】:

  • 更新:不得不在材质上手动设置透明度值,由于某种原因无法使用 png 进行处理。

标签: swift scenekit augmented-reality arkit usdz


【解决方案1】:

在 SceneKit 中创建玻璃的最佳方法是使用 Phong 着色模型(不是 PBR)。目前 SceneKit 框架中没有 PBR glass,所以你需要使用一个假的。要创建fake glass,您需要创建具有以下属性的SCNMaterial

let material = SCNMaterial()

material.lightingModel = .phong
material.diffuse.contents = UIColor(white: 0.2, alpha: 1)
material.diffuse.intensity = 0.9
material.specular.contents = UIColor(white: 1, alpha: 1)
material.specular.intensity = 1.0
material.reflective.contents = UIImage(named: "fileName.png")
material.reflective.intensity = 2.0

material.transparencyMode = .dualLayer
material.fresnelExponent = 2.2
material.isDoubleSided = true
material.blendMode = .alpha
material.shininess = 100
material.transparency.native = 0.7
material.cullMode = .back

.fresnelExponent 属性根据表面相对于观察者的角度确定表面中的反射强度。当从浅角度观察材料时,较高的菲涅尔指数会增加反射的可见性。它不是 IOR(菲涅耳折射率)。

由于光线追踪技术,PBR 玻璃或 PBR 水物体在渲染时非常昂贵。

如果您需要对象的部分透明度 - 只需使用 Material Inspector 中的 transparent 插槽为透明/不透明区域加载黑白蒙版。

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多