【发布时间】:2021-11-08 20:10:15
【问题描述】:
我想使用 Metal 进行屏幕外渲染并使用 alpha Blending 等使其看起来像一个完整的绘图。 我希望通过将在 OpenGL 上制作的内容移植一次,可以使用 Metal 复制该程序。
离屏渲染时的流水线
renderToTextureRenderPassDescriptor.colorAttachments [0] .clearColor = MTLClearColor (red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
目前的状态下,周围已经变黑了,
MTLClearColor (red: 1.0, green: 1.0, blue: 1.0, alpha: 0.0)
这很自然,但整个事情都变白了,
用MTLClearColor (red: 0.5, green: 0.5, blue: 0.5, alpha: 0.0),两者都在中间,颜色出来了,但和我想象的相差甚远。
即使不清除Color,也是一样的,我认为这部分不是根本原因,我认为是Shader本身的问题或者最终Rendering处Pipeline中描述的问题阿尔法混合的时间。
问题之一是最终渲染时OpenGL中的gl.clearColor (1.0, 1.0, 1.0, 1.0);还没有实现。我想知道它是否可以像 Apple 的开发者页面那样完成,但没有成功。
https://developer.apple.com/documentation/metalkit/mtkview/1536036-clearcolor
Shader 并不特殊,它使用距离函数的圆作为 alpha,在 alpha 混合和最终渲染时作为纹理粘贴。
我不想要像在白色背景上用红色圆圈渲染这样简单的方法,因为我重视 alpha 混合的结果。
我们已经可以下载实际代码,这是一个当前示例。网址如下。 https://sgaworks.com/code/MetalCodeSample.zip
【问题讨论】: