问题标签 [metal-performance-shaders]
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.
swift - 无法在 Metal 的片段着色器中正确访问结构对象?
我的问题有两个部分:
第一节
我有一个要求,我必须传递一个包含 3 个颜色 (RGB) 值的结构,这些值从 0 到 1 不等,但是当我测试对这些值进行硬编码的代码时,我收到的任何值都是不同的。
这是我的片段着色器方法
我的快速结构看起来像这样,
我像这样将缓冲区传递给片段,
但是,如果我像这样将参数颜色更改const device struct RGBColors *color [[ buffer(0) ]]
为 float3constant float3 *color [[ buffer(0) ]]
并通过rgb
值访问它可以正常工作。
第二节
正如您在我的代码中看到的那样
let colorBuffer = device.makeBuffer(bytes: colors, length: 16, options: [])
,长度为 16,但如果我将其更改为
它崩溃了,说
我无法弄清楚发生了什么。有人可以建议我。
谢谢。
xcode - Fox 应用程序中如何实现水着色器
Apple 有一个简单的 Fox 项目,它演示了基本的 SceneKit 功能。谁能解释瀑布纹理动画着色器在哪里/如何实现(还有带有熔岩的 Fox2)?我知道着色器可以从文件中加载并以编程方式进行绑定,但在这种情况下,着色器是集成在场景中的,到目前为止还没有运气。
ios - 如何在Metal中将一组float3值从CPU传递到GPU?
我需要将颜色值作为数组传递给着色器。现在我将它作为结构 RGBColors 传递并作为结构接收它,它工作正常。
但我想在着色器中将它作为 float3 值接收。但是,一旦我将其更改为 float3,它就会表现得很奇怪并且开始闪烁,它并没有给我正确的颜色。
这是我用来设置片段缓冲区的代码,
这是 RGBColors 的结构
从这个结构中,我将创建一个值数组Float
并将其设置为片段缓冲区。
我给出的代码let datasize = 16 * values.count / 3
值为 16,因为尽管 C++ 中的浮点数据类型是 4 字节,但 simd 中的 float3 是 16 字节。
在着色器中我正在实现该方法
最后我没有得到正确的输出颜色。
如何将float3 simd
数据类型与数据类型匹配swift Float
。有人可以建议我吗?
编辑:
我找到了一个关于如何从 float3 创建 MTLBuffer 的解决方案,代码如下:
这段代码工作得很好。但仍然在代码中,let bufferCreated = device.makeBuffer(length: MemoryLayout.size(ofValue: valueBuffer[0]) * 2 * valueBuffer.count , options: [])
您可以看到长度应乘以2以使代码正常工作。
为什么要有一个乘数来使它起作用?我不明白这一点。有人可以建议我吗?
xcode8 - Xcode Model I/O - 从 Marmoset 导入自定义着色器
Apple Model I/o 文档的手风琴:
块报价
您可以使用此框架从流行的创作工具和游戏引擎支持的各种行业标准文件格式导入和导出资产。
块报价
和
块报价
描述真实的渲染参数。MDLPhysicallyPlausibleScatteringFunction 类(描述与网格关联的 MDLMaterial 对象的表面外观的多种方法之一)定义了使用流行电影和高端游戏引擎中相同的基于物理的着色系统的表面的预期渲染。MDLPhotometricLight 和 MDLPhysicallyPlausibleLight 类描述了用于渲染的真实光照属性,并且 MDLCamera 类还支持基于物理的渲染参数。
块报价
那么,是否可以导入在 Marmoset 中创建的自定义 PBR 着色器?
如果是,我该怎么做?
谢谢
ios - Metal 或 OpenGLES 中片段着色器中的共享变量
这可能不太可能,但是是否存在共享全局变量的概念,可以在 Metal 和 OpenGLES 中的片段着色器的每次传递中更新?我想在处理每个像素后更新一些统计信息。我假设每个片段着色器并行运行时会出现很多并发问题。
ios - 金属色附件支持的像素格式
对于屏幕外缓冲区渲染(不在屏幕上绘制),iOS 上的 Metal 是否支持 MTLPixelFormatR32Uint 作为像素格式?换句话说,这样的事情应该起作用吗?
ios - 使用 Metal Performance Shader 转换 MPSNNImageNode
我目前正在使用 MPS 在 iOS(Swift4)上复制 YOLOv2(不是很小)。
一个问题是我很难实现 space_to_depth 函数(https://www.tensorflow.org/api_docs/python/tf/space_to_depth)和两个卷积结果的串联(13x13x256 + 13x13x1024 -> 13x13x1280)。你能给我一些关于制作这些零件的建议吗?我的代码如下。
swift - 使用深度数据应用 MPSImageGaussianBlur
我正在尝试在 Apple 的原生相机中模仿肖像模式。
问题是,对深度数据应用模糊效果CIImage
对于我想向用户显示的实时预览来说太慢了。
我的代码是任务是:
我想在 GPU 上应用模糊以获得更好的性能。对于这个任务,我在这里找到了 Apple 提供的这个实现。
所以在 Apple 的实现中,我们有这个代码片段:
如何通过 Metal blur 版本将深度数据应用到过滤中?或者换句话说 - 我怎样才能以第二个代码片段的性能速度实现第一个代码片段功能?
ios - iOS 上的金属原子操作性能
如果需要计算直方图等图像统计信息,是否使用原子操作(如原子加载和添加)与使用重复混合操作累积结果一样好?OpenGLES(如下所示)或 Metal 中的重复混合是否在内部使用原子操作?
ios - MTLBuffer分配+CPU/GPU同步
我正在使用金属性能着色器(MPSImageHistogram
)来计算MTLBuffer
我抓取的东西,执行计算,然后通过MTKView
. 着色器的MTLBuffer
输出很小(~4K 字节)。所以我MTLBuffer
为每个渲染通道分配一个新对象,每个视频帧每秒至少有 30 个渲染。
我的问题-
每次使用都可以创建一个新缓冲区
device.makeBuffer(..)
,还是更好地静态分配几个缓冲区并实现重用这些缓冲区?如果重用更好,我们如何在这些缓冲区上同步 CPU/GPU 数据写入/读取?另一个不相关的问题,可以在
MTKView
非主线程上绘制结果吗?还是MTKView
只能在主线程中进行绘制(即使我读到 Metal 是真正的多线程)?