Metal 在金属材质的半透明对象内渲染不透明对象

Metal 在金属材质的半透明对象内渲染不透明对象,metal,Metal,我试图在半透明对象中渲染不透明对象 我的做法是: 深度比较功能设置为更小 descriptor.depthCompareFunction=.less 首先,使用不透明对象进行绘制调用,并且未启用混合 第二次使用半透明对象绘制调用,并启用混合 但我得到了意想不到的结果: 这里的所有代码:在Caroline Begbie(raywenderlich)的帮助下,我找到了解决方案:将顶点前后排序 if !opaque { pipelineDescriptor.colorAttachment

我试图在半透明对象中渲染不透明对象

我的做法是:

深度比较功能设置为更小

descriptor.depthCompareFunction=.less

  • 首先,使用不透明对象进行绘制调用,并且未启用混合

  • 第二次使用半透明对象绘制调用,并启用混合

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


    这里的所有代码:

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

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