Ios 图形-缓冲区之间的混合,不考虑先渲染哪个缓冲区

Ios 图形-缓冲区之间的混合,不考虑先渲染哪个缓冲区,ios,graphics,metal,Ios,Graphics,Metal,我正在使用以下工具启用混合: self.pipelineDescriptor.colorAttachments[0].blendingEnabled = true self.pipelineDescriptor.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactor.SourceAlpha self.pipelineDescriptor.colorAttachments[0].destinationRGBBlendFactor = MT

我正在使用以下工具启用混合:

self.pipelineDescriptor.colorAttachments[0].blendingEnabled = true
self.pipelineDescriptor.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactor.SourceAlpha
self.pipelineDescriptor.colorAttachments[0].destinationRGBBlendFactor = MTLBlendFactor.OneMinusSourceAlpha
我渲染缓冲区A,然后渲染缓冲区B。它们中的每一个都可以有透明对象。问题是渲染的顺序-透明度将只在一个方向上工作,因此,如果我先渲染A,而A具有透明对象,B将不会在A后面渲染


它可以解决吗?

这是一个和图形一样古老的问题。使用非交换混合函数渲染半透明对象时,必须先绘制所有不透明对象,然后从后向前渲染透明对象。在过去的几年中,诸如深度剥离之类的技术已经被用于近似与顺序无关的透明度,但是每一种这样的技术都伴随着与渲染时间、内存和正确性相关的权衡

假设没有透明对象无法明确排序的病态情况,则首先在启用深度写入和深度测试的情况下以通常方式渲染不透明对象,然后在禁用深度写入和启用深度测试的情况下从后到前绘制透明对象。这几乎是通过alpha混合获得“正确”结果的唯一方法