gpt4 book ai didi

swift - 在 SceneKit 中渲染具有半透明纹理的 3D 模型(头发)?

转载 作者:行者123 更新时间:2023-11-28 13:28:17 26 4
gpt4 key购买 nike

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

在 Xcode Scene Editor 中它是这样渲染的:

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

enter image description here

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

enter image description here

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

最佳答案

在您的 3D 模型中,当从不同角度观察时,一些头发会突然弹出,这对于 SceneKit 来说是很常见的:您的模型具有半透明 Material ,由于某些内部原因,SceneKit 无法正确渲染 engine rendering techniques (time 49:35)应用于深度缓冲区。

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

解决方案 1:

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

enter image description here

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:

头发不能是单一几何体,必须是复合几何体(由若干层几何体统一为一组)。

enter image description here

hair.geometry?.firstMaterial?.colorBufferWriteMask = SCNColorMask.all
hair.geometry?.firstMaterial?.readsFromDepthBuffer = false
hair.geometry?.firstMaterial?.writesToDepthBuffer = false
hair.geometry?.firstMaterial?.blendMode = SCNBlendMode.alpha

关于swift - 在 SceneKit 中渲染具有半透明纹理的 3D 模型(头发)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com