首页 文章
  • 3 votes
     answers
     views

    如何在SceneKit中每帧绘制动态线条或曲线

    我有一个Metal支持的SceneKit项目,我想在每帧画一条在CPU上修改过的曲线 . 这似乎应该是一项简单的任务;我多次在OpenGL中完成的一个 . 就像是: array_of_points[0].x = 25 array_of_points[0].y = 35 upload_array_to_gpu() render_frame() 似乎无法修改SCNNode的SCNGeometrySo...
  • 1 votes
     answers
     views

    ARKit SceneKit金属集成

    我试图将ARKit中的对象创建与SceneKit和Metal集成 . 有些东西我可以用SeneKit轻松创建,有些用Metal创建,所以我希望能够并排使用 . 例如,使用sceneKit模板创建一个ArKit项目会通过SceneKit节点将太空船作为演示放置 . 另一方面,使用Metal模板在ARKit中创建一个立方体,并使用锚点进行挖掘 . 我怎样才能在同一个项目中使用它们?例如,通过Metal...
  • 2 votes
     answers
     views

    金属渲染真的很慢 - 如何加快速度

    我有一个非常慢的工作金属应用程序,需要运行得更快 . 我相信问题是我创建了太多的MTLCommandBuffer对象 . 我创建这么多MTLCommandBuffer对象的原因是我需要向像素着色器发送不同的统一值 . 我粘贴了一些代码来说明下面的问题 . for (int obj_i = 0 ; obj_i < n ; ++obj_i) { // I create one re...
  • 4 votes
     answers
     views

    如何在Metal中的片段着色器中获取片段坐标?

    这个最小的金属着色器对基于顶点的颜色属性在屏幕上呈现简单的插值渐变(当提供顶点四边形/三角形时): #include <metal_stdlib> using namespace metal; typedef struct { float4 position [[position]]; float4 color; } vertex_t; vertex verte...
  • 1 votes
     answers
     views

    iOS Metal缓冲区不符合步幅值

    我有一个每实例统一缓冲区,其中缓冲区中的每个元素都是64字节,但我只使用顶点着色器中每个元素的前16个字节(float3) . 我把步伐向上描述了这一点 . 问题是它没有超过其他48个字节 unless 我在着色器中向结构添加填充,以便它也是64个字节 . // Particle Instance Position vertexDescriptor.attributes[2].format = ....
  • 5 votes
     answers
     views

    将Metal缓冲区传递给SceneKit着色器

    我想使用Metal计算着色器来计算一些位置,然后将其输入到金属着色器中 . 听起来很直接,但我无法将我的MTLBuffer数据输入基于金属的SCNProgram . 计算内核如下,在这个设计的例子中,它接收三个3D向量(在两个缓冲区中) . kernel void doSimple(const device float3 *inVector [[ buffer(0) ]], ...
  • 7 votes
     answers
     views

    金属中的大块渲染

    我正在尝试使用Metal创建一个程序游戏,我正在使用基于八叉树的块方法来实现Level of Detail . 我正在使用的方法涉及CPU为地形创建八叉树节点,然后使用计算着色器在GPU上创建其网格 . 此网格存储在块对象中的顶点缓冲区和索引缓冲区中以进行渲染 . 所有这些看起来都运行得相当不错,但是在渲染块时我很早就遇到了性能问题 . 目前我收集了一个数组来绘制,然后将其提交给我的渲染器,这将创...
  • 2 votes
     answers
     views

    iOS上的金属:使用顶点实例是否有些浪费?

    我在Metal中实现了Bezier曲线,希望实现卓越的性能 . 虽然速度非常好,但我看到数字低于预期的性能(相对于各种设备的三角形/秒规格) . 具体来说,当我更改某些参数时,我对GPU的行为感到困惑 . 我正在使用 drawIndexedPrimitives() 渲染数千条贝塞尔曲线 . 每个实例表示一条曲线,每个实例的顶点数表示每条曲线使用的三角形数 . 我传递给顶点着色器的唯一缓冲区是每个...
  • 2 votes
     answers
     views

    通过改变紫外线坐标,金属意外受到影响

    下面是 metal 中的一个简单的顶点和片段着色器组合,它渲染了64个相同的2D四边形 . vertex VertexOut vertexMain(uint k [[ vertex_id ]], uint ii [[instance_id]], device float2* tex [[...
  • 0 votes
     answers
     views

    从金属中的顶点缓冲区渲染四边形

    我正在尝试使用Metal渲染像素对齐的2D四边形,但似乎无法使其正确 . 我的顶点缓冲区的内容(在创建时从CPU端记录)是: Vertex(position: float4(0.0, 0.0, 0.5, 1.0), textureCoordinate: float2(0.0, 0.0)) Vertex(position: float4(0.0, 64.0, 0.5, 1.0), textureCo...
  • 1 votes
     answers
     views

    金属newBufferWithBytes用法

    我有一个关于分配新的Metal设备缓冲区的基本问题 . 我看到的大多数示例代码在设置时创建MTLBuffer而不进行修改 . 但我想知道顶点数据是否在每次渲染调用时都在变化,是否可以每次创建一个新的MTLBuffer(使用 - [MTLBuffer newBufferWithBytes:length:option])将数据发送到在GPU上运行的着色器,或者,应该是MTLBuffer给定大小创建一...
  • 1 votes
     answers
     views

    使用Metal扭曲iOS中的视图

    Question: 如何在Metal中捕获要修改的视图? 我的(可能是不完整的)理解是我需要将视图捕获为纹理,将其移动到设备内存中,使用着色器对其进行处理,然后将其渲染回视图中 . 我目前停留在捕获视图的第一步 . 这个问题的范围仅取决于将纹理捕获到Metal中,如果我遇到着色器的问题,我将为此打开一个单独的问题 . 如果有一种更简单的方法来做到这一点而不是下降到GPU级别,我愿意接受建议 . B...
  • 27 votes
     answers
     views

    为什么在Metal中不允许的片段着色器中写入缓冲区?

    如_1291529中所述: 片段函数不允许写入缓冲区或纹理 . 我明白这是事实,但我很好奇为什么 . 能够从片段着色器中写入缓冲区是非常有用的;我知道在硬件端可能更复杂的是不提前知道特定线程的内存写入的结束位置,这对于原始缓冲区写入并不总是知道,但这是在Metal计算中公开的一种能力着色器,为什么不在片段着色器中呢? 附录 我应该澄清为什么我认为来自片段函数的缓冲区写入是有用的 . 在光栅化管...
  • 1 votes
     answers
     views

    用金属索引绘图

    我正在尝试加载模型(表单.OBJ)并使用MetalKit将其绘制到iOS上的屏幕上 . 问题是,我得到了一些随机多边形而不是我的模型......以下是倾向于加载模型的代码(代码基于来自raywenderlich.com的教程: let allocator = MTKMeshBufferAllocator(device: device) let verte...
  • 2 votes
     answers
     views

    金属中的二次渲染 - 这很容易吗?

    我是Metal的新手,我很困惑...... 我有一组顶点,我正在从主纹理中“平铺” . 我正在使用顶点着色器和片段采样着色器来执行此操作 . 我想使用不同的纹理覆盖第一个绘图过程和另一个绘图过程 . 我对于必须执行加载/存储操作等问题感到非常紧张 . 唉,不 - 下面是我在Swift的渲染循环中所做的 . 我应该说,覆盖层中的绘图量消失的次数少于第一遍中的5% . 这有效 . Is it re...
  • 4 votes
     answers
     views

    Metal使用计算着色器模拟几何着色器

    我正在尝试在Metal中实现体素锥跟踪 . 算法中的一个步骤是使用几何着色器对几何体素进行体素化 . Metal没有几何着色器,因此我正在研究使用计算着色器模拟它们 . 我将顶点缓冲区传入计算着色器,执行几何着色器通常会执行的操作,并将结果写入输出缓冲区 . 我还向间接缓冲区添加了绘图命令 . 我使用输出缓冲区作为顶点着色器的顶点缓冲区 . 这工作正常,但我的顶点需要两倍的内存,一个用于顶点缓冲...
  • 1 votes
     answers
     views

    金属防护设备地址模式

    我正在创建一个使用Metal来渲染所有内容的图形应用程序 . 当我在所有绘制调用的管道统计信息下进行帧调试时,有一个!! Headers 为“预防设备地址模式加载”的优先级警报,详细信息如下: Indexing using unsigned int for offset prevents addressing calculation in device. To prevent this extra...
  • 1 votes
     answers
     views

    Swift包含金属着色器到库中[使用swift包管理器]

    我一直在使用Xcode项目,但现在我正在启动一个我希望将来在其他平台上运行的项目,所以我使用Swift Package Manager来生成项目,但是我遇到了一个问题,我的库需要包含一个金属着色器文件(也是一个openGL着色器文件),但我对如何实现这一点毫无头绪 . 我的项目有2个部分,包含图形内容的库和可执行文件是我的实际应用程序,所以我想将我的图形库导入到我的应用程序中,但问题是Xcode项...
  • 11 votes
     answers
     views

    newComputePipelineStateWithFunction失败

    我试图让一个神经网络在金属上运行 . 基本思想是数据重复 . 每个gpu线程为随机数据点运行一个网络版本 . 我写过其他着色器工作正常 . 我还在c命令行应用程序中尝试了我的代码 . 没有错误 . 也没有编译错误 . 我使用apple文档转换为metal c,因为不支持c 11中的所有内容 . 它在加载内核函数后以及在尝试将 newComputePipelineStateWithFunction ...
  • 0 votes
     answers
     views

    iOS Metal需要片段函数中的常量

    我正在尝试了解Apple的Metal并转换一些旧的opengl着色器 . 我陷入了一个只出现在一个项目而不是其他项目中的错误 . 我想询问是否存在编译器选项或类似的东西,我不知道并且可能导致此错误 . 所以...我有一个音乐播放器的音频可视化器,我之前在Android的ndk上使用opengl写的 . 我在一个空项目中将着色器转换为金属 . 片段方法签名是这样的: fragment float4 ...
  • 2 votes
     answers
     views

    如何有效地复合 Quartz 和 OpenGL/Metal 绘图?

    我有一个游戏需要一些高级绘图结构,比如复杂的贝塞尔曲线和填充(随每一帧变化),我想用 OpenGL 或 Metal 绘制的一些更原始的东西进行复合/叠加。是否有一种有效(高性能)的方法来做到这一点? 我可以在 OpenGL 图层上简单地使用石英绘图层,还是会遭受巨大的性能损失? 我应该将我的 Quartz 绘图捕获到位图并将其作为纹理推入 OpenGL 吗?或者在每一帧上这样做会非常慢? ...
  • 1 votes
     answers
     views

    如何在 SCNScene/SCNView 中连续动画 SCNProgram 着色器?

    在 MacOS 应用程序中,我有一个由 SCNProgram 定义的模式,映射到 SCNPlane。 它看起来像这样: 着色器应该使三角形行移动,就像在这个视频中一样。该视频是在 MTKview 内部运行的同一着色器的屏幕抓取。 动画纹理 在此着色器的 SceneKit 版本中,着色器仅在我单击视图中的平面时动画。 如何让 SceneKit 视图(或 Scene?)一直为着色器设置动画?这个应用...
  • 6 votes
     answers
     views

    如何在 SceneKit 中移动旋转的 SCNNode?

    下图显示了一个旋转的框,应该在 X 和 Z 轴上水平移动。 Y 应该不受影响以简化方案。盒子也可以是相机的 SCNNode,所以我猜这个投影在这一点上没有意义。 所以我们要说我们想要沿着红色箭头的方向移动盒子。如何使用 SceneKit 实现这一目标? 红色箭头表示方框的-Z 方向。它还向我们展示了它与摄像机的投影或与网格显示为深灰色线条的全局轴不平行。 我的最后一种方法是平移矩阵和旋转矩阵的乘积...
  • 3 votes
     answers
     views

    用金属渲染四边形性能

    我是'm trying to render a large number of very small 2D quads as fast as possible on an Apple A7 GPU using the Metal API. Researching that GPU'的三角形吞吐量数字,例如here,并且在他们的主题演示期间,Apple在屏幕上引用了> 1M三角形,我认为GPU...
  • 9 votes
     answers
     views

    金属中的多个模型 . 怎么样?

    这是一个绝对的初学者问题 . 背景:我不是真正的游戏开发者,但我正在努力学习低级3D编程的基础知识,因为这是一个有趣而有趣的话题 . 我选择Apple的Metal作为图形框架 . 我了解SceneKit和其他更高级别的框架,但我有意尝试学习低级别的部分 . 不幸的是,我已经走出了我的深度,并且网上似乎很少有面向初学者的金属资源 . 通过阅读Apple文档并按照我能找到的教程,我设法实现了一个简单的...
  • 3 votes
     answers
     views

    是否可以在.metal文件中包含标准c库?

    我目前正在研究iOS中的图像处理应用程序的金属内核(在.metal文件中) . 我想要包含一些标准的C库(例如或),但Xcode似乎不允许它(我在编译时遇到“找不到文件”错误 . 以前有人遇到过这类问题吗?在不使用某些基本库的情况下有能力在金属中编写自定义内核似乎很荒谬,这让我觉得必须有答案 .
  • 0 votes
     answers
     views

    金属函数无法使用Xcode 8进行编译

    自从迁移到Xcode 8和iOS10后,我的基于金属的应用程序根本无法运行 . 在启动时,我收到错误:“编译器因XPC_ERROR_CONNECTION_INTERRUPTED而失败” 由于 MTLComputePipelineState 未成功创建并在调用 MTLDevice 函数 makeComputePipelineState(function:) 时抛出错误,因此在崩溃之前在控制台中出现两...
  • 1 votes
     answers
     views

    金属着色器中更宽,更平滑的线条

    我正在为SceneKit应用程序将一些glsl / opengl代码转换为Metal,因此它可以由Metal渲染 . 我有一个用原始类型SCNGeometryPrimitiveTypePolygon创建的SCNNode(solidNode)和一个用原始类型SCNGeometryPrimitiveTypeLine创建的childNode(wireframeNode) . 子节点具有相同的顶点,即 ....
  • 1 votes
     answers
     views

    为什么我启用了Metal API,但我的Coreml自定义层仍在CPU上运行

    我是Coreml和Metal的新手 . 现在我正在研究Core Ml模型的项目测试性能 . 我实现了一个基于张量流的CNN模型,并使用tf-coreml工具将此模型转换为.mlmodel . 但在我的CNN模型中,它有一个名为'equal'的操作,Coreml不支持 . 它转换为.mlmodel的自定义层my .mlmodel file screen shot 然后我跟着Hollemans惊人的博...
  • 1 votes
     answers
     views

    在金属中初始化MTLPixelFormatR32Float的纹理

    我有一个缓冲区初始化单通道浮点图像,我需要进入浮点格式纹理(MTLPixelFormatR32Float) . 我尝试使用该格式创建纹理并执行以下操作: float *rawData = (float*)malloc(sizeof(float) * img.cols * img.rows); for(int i = 0; i < img.rows; i++){ for(int j = ...

热门问题