问题标签 [cikernel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
94 浏览

ios - 作为自定义 CIWarpKernel 在边缘上捏图像不会产生预期的结果

我开发了一个自定义CIWarpKernel,它是我的 Numbers 模型设计的转置,如下所示:

我用来设计内核的 Numbers 模型

阳性的单元格y是: SIN($A2×PI()÷2)×(−COS(B$1×PI())×($A2+1)÷$W$3+SIN($A2 ×PI()÷2))其中$A2yB$1x并且$W$3是中心拉伸因子。

代码如下:

我遇到的问题是,尽管转置是 100% 准确的,但我在模型中没有得到相同的结果。查看生成的平铺图像变形:

扭曲平铺的图像

为什么我在中心 y=0 和上下两侧有膨胀?

有关信息,我的平铺图像如下:

平铺图像

0 投票
3 回答
712 浏览

swift - Metal:为 MSL cikernel 设置编译器和链接器选项后,.metal 文件中定义的 vertexFunction 变为 nil

.metal 文件中定义的 VertexFunction 和 FragmentFunction 运行良好,但是一旦我按照Apple 的文档指定编译器和链接器选项,它们就变成了 nil :Other Metal Compiler Flags 选项中的 -fcikernel 标志,以及用户定义设置中 MTLLINKER_FLAGS 中的 -cikernel flat。

我需要上面的设置用于带有 MSL(金属着色语言)的 cikernel。事实上,带有 Core Image Kernel Language 的 cikernel 在 12.0 中已弃用。

如何同时使用顶点/片段金属着色器和 MSL cikernel?

0 投票
1 回答
802 浏览

ios - 带有自定义金属内核的核心图像过滤器不起作用

我已经CIFilter根据自定义内核进行了自定义,但无法使其正常工作,输出图像充满黑色,我不明白为什么。这是着色器:

第一个采样器是需要详细说明的图像,第二个图像是包含必须在该图像中使用的特定调色板的颜色的图像。
调色板图像是从一个值数组创建的RGBA,传递给Data使用此 CIImage 初始化程序创建的缓冲区init(bitmapData data: Data, bytesPerRow: Int, size: CGSize, format: CIFormat, colorSpace: CGColorSpace?)。图像高度为 1 像素,颜色宽度为 1 像素。正确获得了图像,看起来像这样: 尝试检查我发现的着色器:
调色板中的图像

  • 如果我返回color,我会得到原始图像,这意味着采样器image被正确传递
  • 如果我尝试palette_image从过滤器生成的图像中的任何像素返回颜色为黑色

我开始认为在palette_image某种程度上没有正确传递。这里图像是如何通过过滤器的:

0 投票
2 回答
737 浏览

swift - 来自多个 .metal 文件(计算内核和 CIKernel 实现)的一个默认 MTLLibrary?

在将自定义 Core Image 过滤器内核迁移到 Metal Shading Language 时,我在构建默认 Metal 库 (default.metallib) 时遇到错误:

我的印象是这些可能在单独的 .metal 文件中。尝试将它们合并到一个文件中会导致此错误:

命名空间以metal防止coreimage计算内核在默认库中显示为可用函数。

找到了这个 SO answer,它建议构建单独的库:

Metal:为 MSL cikernel 设置编译器和链接器选项后,.metal 文件中定义的 vertexFunction 变为 nil

0 投票
1 回答
171 浏览

kernel - iOS 和 Mac 上的 Metal 内核有什么不同吗?

iOS 和 Mac 上的 Metal Shader Language 之间有什么主要区别吗?我正在尝试从 iOS 移植我的 Metal cifilters,它们看起来完全不同

0 投票
1 回答
116 浏览

ios - GLSL 到金属。瓦

我正在尝试通过 shadertoy ( https://www.shadertoy.com/view/3llcRN ) 上的示例制作平铺效果。这是 GLSL 上的代码:

结果: 在此处输入图像描述

这是我在金属上的代码:

结果:

在此处输入图像描述

什么不见​​了?我需要与 shadertoy 相同的结果

0 投票
1 回答
212 浏览

ios - CIKernel 的意外行为

我做了这个例子来说明问题。它通过硬编码坐标从纹理中获取 1 个像素,并用作着色器中每个像素的结果。我希望所有图像都是相同的颜色。当图像很小时,它可以完美地工作,但是当我使用大图像时,它会产生奇怪的结果。例如,这里的图像大小为 7680x8580,您可以看到 4 个正方形:

这是我的代码

这是我初始化内核的方式:

此外,此代码正确显示图像,没有更改和正方形:

在公共文档中,它说“Core Image 自动将大图像分割成较小的图块进行渲染,因此您的回调可能会被多次调用。” 但我找不到如何处理这种情况的方法。我有万花筒效果,并且从任何这个图块中我也需要能够从另一个图块中获取像素......

0 投票
1 回答
101 浏览

swift - Simple Pass Thru cikernel 会扭曲颜色值

我写了一个 rgbToHSV cikernel 来转换图像中的像素;但是,它无法正常工作。我已将其范围缩小到 RGB 值在此过程中被扭曲的事实。

为了简化我的代码,我将其更改为一个简单的通过过滤器。

我已经传递了 1280 x 720 图像的图像,这些图像都是一种颜色,然后在它通过 cikernel 之前和之后在 (100, 100) v 位置采样像素颜色。

结果如下:

红色之前:pixelColor :: rgba:1.0:0.0:0.0:1.0 之后:pixelColor :: rgba:1.0:0.07450980392156863:0.0:1.0

之前的绿色:pixelColor :: rgba:0.0:1.0:0.0:1.0 之后:pixelColor :: rgba:0.0:0.984313725490196:0.0:1.0

蓝色之前:pixelColor :: rgba:0.0:0.0:1.0:1.0 之后:pixelColor :: rgba:0.0:0.1803921568627451:1.0:1.0

如您所见,红色和绿色略有失真,但蓝色严重失真。

我已经保存了输出文件并检查了颜色,过滤器肯定会改变颜色。

非常感谢任何关于为什么简单的直通会改变颜色的见解。

简化的直通滤波器:

这是使用 cikernel 的 CIFilter:

调用过滤器

CGPoint 设置为 (100, 100) 的 getPixelColor 方法。我认为这个问题可能在这里发生,因为打印出来的颜色可能存在误传,但我检查了实际的输出图像,并且过滤器正在改变图像颜色:

和 cgImage(已编辑):

0 投票
1 回答
80 浏览

ios - 自定义 Metal CIKernel 返回固定颜色产生不同的颜色

我有一个由 Metal 定制的 CIKernel,我发现一个奇怪的东西,着色器返回一个固定的颜色,但屏幕显示不同!我使用断点检查生成的 CIImage 对象,颜色确实不同。

有我的代码

这是断点的结果。

在此处输入图像描述

我想要(16,16,16)颜色,但它产生了(62,62,62)颜色。

我试了很多次,得到了这张图,(x轴是输入值(着色器返回),y轴是结果)

在此处输入图像描述

看起来有伽玛校正?如何解决这个问题?任何人都可以帮助

0 投票
1 回答
62 浏览

metal - 在 CIFilter 内核中使用归一化采样器坐标

我正在浏览有关自定义 CIFilter 的本教程:

https://medium.com/@m_tuzer/using-metal-shading-language-for-custom-cikernels-metal-swift-7bc8e7e913e6

除了采样器的坐标未标准化外,一切都运行良好。因此,例如这样的条件pos.y < 0.33不起作用,内核使用实际的图像坐标。

由于本教程较旧,因此 CIFilter 中可能发生了“破坏”此代码的更改。我浏览了CI 内核的手册,但找不到获取内核内部采样器的标准化坐标的方法。

这是内核的代码: