在金属中的半透明物体内渲染不透明物体

Rendering opaque object inside semi-transparent one in Metal

我正在尝试在半透明对象中渲染不透明对象。

我的做法是:

深度比较功能设置为较少

descriptor.depthCompareFunction = .less

  1. 首先使用不透明对象进行绘制调用,不启用混合。

  2. 使用半透明对象进行第二次绘制调用,启用混合。

if !opaque {
    pipelineDescriptor.colorAttachments[0].isBlendingEnabled = true
    pipelineDescriptor.colorAttachments[0].rgbBlendOperation = .add
    pipelineDescriptor.colorAttachments[0].sourceRGBBlendFactor = .sourceAlpha
    pipelineDescriptor.colorAttachments[0].destinationRGBBlendFactor = .oneMinusSourceAlpha
}

但我得到了意想不到的结果:example

所有代码在这里:https://github.com/quaternionboy/Metal-Playground

我在 Caroline Begbie (raywenderlich) 的帮助下找到了解决方案:从前到后排序顶点...

https://forums.raywenderlich.com/t/rendering-opaque-object-inside-transparent-one/121942/2