如何在 Xcode 中渲染具有半透明纹理的 3D 模型?

Posted

技术标签:

【中文标题】如何在 Xcode 中渲染具有半透明纹理的 3D 模型?【英文标题】:How to render a 3D model with semi-transparent textures in Xcode? 【发布时间】:2019-01-31 23:04:54 【问题描述】:

我无法在 Xcode 中正确渲染具有纹理透明度的 3D 模型。

头发的 3D 模型由两个几何体(头发和帽子)组成,是在 Maya 中创建的。它是从here 购买的现成的。

正确渲染的模型如下所示(没有头部):

我将模型导出为 COLLADA 格式 (DAE),将其与纹理一起放入文件夹 model.scnassets,然后将其添加到 Xcode。然而在 Xcode 场景编辑器中它是这样渲染的:

这里有什么问题?


更新:

设置Transparent > Intensity = 5Settings > Transparency > Blend Mode = Double SidedSettings > Transparency > Options > Writes depth = false 给出了这个图像,其中蓝色球体上的头发多边形被正确渲染,但在蓝色球体上方,渲染的头发多边形不是最靠近相机的,但似乎是头发模型背面的那些。这显然是因为Writes depth = false,但似乎有必要禁用它来渲染半透明的头发。 (此处使用棕色纹理而不是读取纹理,但无论选择何种纹理,结果都是相同的)

【问题讨论】:

你解决了这个问题吗? 【参考方案1】:

如果您想在 Xcode 场景编辑器中看到 Transparent 插槽的正确结果,您需要为 3D 对象的透明部分使用预乘的 TIFFPNG 文件。 TIFFPNG 文件格式可以容纳四个通道(RGBA),但JPEG 只能容纳三个通道(RGB)。

Premultiplied 表示 RGB * Alpha = RGBA(与 unpremult RGB, A 相反)。

将预乘纹理应用到Transparent 插槽后,将其Intensity 属性设置为1...5Components 属性从下拉菜单(AllRedGreenBlue, Alpha)。

Apple 文档。

默认情况下,透明属性的内容对象是完全不透明的黑色,导致属性没有可见效果。将透明属性的内容设置为任何纯色会根据该颜色的不透明度值统一淡化材质的不透明度。要使材质的某些部分看起来透明,请将属性的内容设置为图像或其他纹理映射内容,其 Alpha 通道定义了完全或部分不透明的区域。

【讨论】:

让我们continue this discussion in chat。 你好 ARGeo!你能帮我解决类似的问题吗? 你好,@Joker!好的。在 SO 上发布您的问题并给我一个链接。 谢谢@ARGeo。这是我的问题:***.com/questions/57936887/…

以上是关于如何在 Xcode 中渲染具有半透明纹理的 3D 模型?的主要内容,如果未能解决你的问题,请参考以下文章

渲染具有透明度的纹理时 OpenGL 不需要的像素

跟诸子学游戏 unity3d Rendering Mode和Render Mode

在 OpenGL 中渲染一个*填充的*半透明立方体

将具有 alpha 的位图图层渲染到 FBO

如何使用 OpenGL 在 SDL 中获得正确的 SourceOver alpha 合成

OpenGL渲染到纹理透明度问题