繁体   English   中英

混合多个 MTLTexture

Blend multiple MTLTextures

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试找出在 Metal 中处理相互叠加的多个纹理的最佳方法。 目标是具有以下功能:

  • 许多纹理分层。 (10 到 20)
  • 每个纹理的位置/比例控制。
  • 每个纹理的混合模式支持 - (屏幕,乘法等),因此需要不透明度。

把它想象成 Photoshop 中的图层树。

我已经开始了这个项目,并且有一个图层运行良好 - 但目前尚不清楚在金属着色器中处理多个图层的最佳性能方式是什么。 我的第一个想法是在片段 function 中传递一组纹理以及相关位置/比例映射的数组,但不确定这是否是正确的路径? 在那种情况下,混合将如何工作?

提前致谢!

编辑 5/5/21

我还没有让它 100% 正常工作,但我确实有两个相互分层的纹理。 这绝对是粗糙且不理想的 - 但有点显示了我所追求的。 我觉得这一切可能不想生活在一个片段 function 上? 如果每个图层都设置了不同的混合模式,这可能会变得混乱。 它目前也固定为只有两个纹理。

typedef struct {
    float4 pos [[position]];
    float2 texCoords;
} RasterizerData;

typedef struct {
    simd_float2 pos;
    simd_float2 scale;
} FragmentPosition;

fragment float4
defaultFragmentShader(RasterizerData in [[stage_in]],
                      constant array<FragmentPosition, 2> &texCoordsScales [[buffer(0)]],
                      array<texture2d<float, access::sample>, 2> texture [[texture(0)]]) {
    
    constexpr sampler samplr(filter::linear,
                             mag_filter::linear,
                             min_filter::linear,
                             coord::pixel,
                             address::clamp_to_zero);
    
    float4 color1 = texture[0].sample(samplr, in.texCoords * (1 / texCoordsScales[0].scale) - texCoordsScales[0].pos);
    float4 color2 = texture[1].sample(samplr, in.texCoords * (1 / texCoordsScales[1].scale) - texCoordsScales[1].pos);
    return mix(color1, color2, 0.5);
   
}
问题暂未有回复.您可以查看右边的相关问题.
2 渐变混合多个图像

如何使用 CSS 使多个图像仅在特定区域相互渐变,如下图所示? 我试过的: .container { position: relative; display: flex; height: 200px; }.container:before { content: ''; position: abs ...

3 CGContext 中的多种混合模式

我正在绘制一个 CGContext。 为了简化情况,假设我有两个 CGPath 的 collections。 对于顶部的集合,当图层中的两条路径重叠时,我只想让顶部路径覆盖另一个,所以我使用destinationOver的混合模式。 但是当混合顶部集合和底部集合时,我想混合它们的颜色,所以我想使用正 ...

4 使用ImageMagic融合多个图像

我的问题如下: 我有几个.png文件。 每个文件都有一个特定颜色的小斑点。 所有文件具有相同的大小。 我的问题是如何将它们叠加在一起,以使不同颜色的斑点成为这些颜色的混合,而一种颜色不会与另一种颜色完全重叠? -flatten选项-flatten图像,但是在示例中,橙色(i ...

5 如何将 MTLTextures 合并到 currentDrawable 中

我是使用 Metal 的新手,但我一直在关注这里的教程,该教程获取相机输出并使用金属将其渲染到屏幕上。 现在我想拍摄一张图像,将其转换为 MTLTexture,然后在相机输出的顶部定位和渲染该纹理。 我目前的渲染代码如下: 我知道我可以使用以下代码将UIImage转换为 MTLTexture ...

7 如何使用不透明度混合多个图层?

使用three.js,我想对单个场景应用单独的后处理效果,然后将所有这些场景组合成最终渲染。 为此,我使用的是three.js Effects Composer。 const radialBlurShader = { uniforms: { "tDiffuse": { valu ...

8 MTKView经常显示混乱的MTLTextures

我正在开发一个支持MTKView的绘画程序,该程序可以通过存储关键帧的MTLTextures数组重播绘画历史。 我遇到一个问题,有时这些MTLTextures的内容会混乱。 例如,假设我想将下面的图形的一部分存储为关键帧: 在回放过程中,有时图形会完全按照预期显示,但有时会显 ...

9 如何在OpenCV中混合多个图像?

我有一组图像和相关的权重。 我想把它们混合在一起。 我知道OpenCV中有一个混合命令来混合两个图像。 但是如何将多个图像混合在一起? ...

10 如何在iOS中混合多个UIView?

我想以这样的方式混合多个UIView,它可以平滑地移动,旋转和调整大小。 我已经使用下面的代码实现了这一点,但它并不像PicsArt和SnapSeed等其他应用程序那么顺利。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM