首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有办法使混合和深度同时在金属中

是否有办法使混合和深度同时在金属中
EN

Stack Overflow用户
提问于 2017-01-26 15:50:39
回答 1查看 707关注 0票数 3

我有一个金属视图显示一些纹理的四边形。纹理是从PNG加载的,因此是预乘的。一些纹理具有透明像素。

当我启用混合和绘制以正确的顺序,透明度工作,你可以看到其他四边形通过透明部分的纹理。然而,我必须通过排序来计算正确的绘制顺序,这是非常昂贵的,并且大大降低了渲染速度。

当我尝试使用深度模板并按任何顺序绘制时,我可以使用z位置使命令正确工作,但是混合停止工作。纹理的透明部分显示的是金属场景的背景颜色,而不是下面的四层。

我做错了什么?是否有办法使这一工作,谁能提供一些示例代码吗?

我看到的另一个选项是尝试在GPU上进行排序,这会很好,因为GPU帧时间比CPU帧时间要小得多。不过,我也不知道该怎么做。

任何帮助都将不胜感激。:)

EN

回答 1

Stack Overflow用户

发布于 2022-12-01 19:24:19

您需要正确设置pipelineStateDescriptor:

代码语言:javascript
复制
    // To have depth buffer.
    pipelineStateDescriptor.depthAttachmentPixelFormat = .depth32Float

    // To use transparency.
    pipelineStateDescriptor.colorAttachments[0].isBlendingEnabled = true
    pipelineStateDescriptor.colorAttachments[0].rgbBlendOperation = .add
    pipelineStateDescriptor.colorAttachments[0].alphaBlendOperation = .add
    pipelineStateDescriptor.colorAttachments[0].sourceRGBBlendFactor = .sourceAlpha
    pipelineStateDescriptor.colorAttachments[0].sourceAlphaBlendFactor = .sourceAlpha
    pipelineStateDescriptor.colorAttachments[0].destinationRGBBlendFactor = .oneMinusSourceAlpha
    pipelineStateDescriptor.colorAttachments[0].destinationAlphaBlendFactor = .oneMinusSourceAlpha

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41877447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档