1

我正在尝试在 SceneKit 中渲染 3D 模型,但它看起来不正确。例如这个模型(它是一个带有纹理的 SCN 文件,您可以在 Xcode 中重现它):

在 Xcode 场景编辑器中,它呈现如下:

Transparency -> Mode -> Dual Layer
Double Sided = true

在此处输入图像描述

如果我关闭“写入深度”选项,它将如下所示: 但也有一些问题,因为我只看到“最底层”的理发。

在此处输入图像描述

我认为这应该是可能的。怎么做才对?

4

1 回答 1

2

在您的 3D 模型中,从不同角度观看时会弹出一些头发的原因对于 SceneKit 来说很常见:您的模型具有半透明材质,由于某些内部引擎渲染技术,SceneKit 无法正确渲染(时间 49:35 )应用于深度缓冲区。

为了解决这个问题,有两种解决方案:

解决方案 1

您的 3D 模型必须具有完全不透明的纹理(完全没有半透明部分)。在这种情况下使用.dualLayer属性。

在此处输入图像描述

let scene = SCNScene(named: "art.scnassets/Hair.scn")!
let hair = scene.rootNode.childNode(withName: "MDL_OBJ", recursively: true)!

hair.geometry?.firstMaterial?.transparencyMode = SCNTransparencyMode.dualLayer

解决方案 2

发束不能是单一几何体,而必须是复合几何体(由几个统一为一组的几何体层组成)。

在此处输入图像描述

hair.geometry?.firstMaterial?.colorBufferWriteMask = SCNColorMask.all
hair.geometry?.firstMaterial?.readsFromDepthBuffer = false
hair.geometry?.firstMaterial?.writesToDepthBuffer = false
hair.geometry?.firstMaterial?.blendMode = SCNBlendMode.alpha
于 2019-09-15T07:28:56.973 回答