问题标签 [scnmaterial]

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 投票
2 回答
810 浏览

swift3 - 图像仅在 ARKit 中显示为黑色和红色

我们正在尝试使用 ARKit 框架在 ARSCNView 中创建具有 SCNMaterial 的 SCNNode,该 SCNMaterial 具有图像(.png 扩展名)。问题是图像渲染存在图像仅显示为黑色和红色的问题,它不能正确渲染图像。 该问题仅存在于 iOS 11.2 版本中。iOS 11.0、11.1 和 11.3 beta 版本没有问题。

我们的代码如下;

有人有想法吗?

0 投票
1 回答
668 浏览

ios - 自定义 SCNGeometry 不将漫反射内容显示为纹理

我正在创建一个自定义 SCNGeometry。首先,我将其开发为平面。它会显示,我可以将颜色应用到它的漫反射内容,但如果我尝试应用任何东西,例如 UIImage 或 CALayer,它会显示为白色。

代码:

0 投票
1 回答
365 浏览

xcode - SceneKit PBR 渲染 - 置换贴图变得疯狂

我正在使用置换贴图来处理细微的织物皱纹。它应该给出顺利的结果,但相反它会变得疯狂。

贝娄是一个完美的球体,完全被位移弄乱了。

在此处输入图像描述

应该像下图一样,给人细微的皱纹

在此处输入图像描述

这是我的设置:

在此处输入图像描述

知道有什么问题吗?

0 投票
0 回答
123 浏览

scenekit - SceneKit PBR - 倍增反照率

我需要在反照率/漫反射上乘以位图。我正在使用 PBR 着色。

例如:在皮肤(反照率/漫反射)上应用纹身(位图),并进行复制,这样您就可以看到纹身覆盖在皮肤上。

问题:这个纹身(位图)应该是第二个反照率/漫反射?还是设置为另一种材质?如果是,什么样的材料?

谢谢!

0 投票
1 回答
254 浏览

shader - 隐藏 SCNMaterial 的区域

我正在使用 SceneKit 和 ARKit 1.5,一旦映射了表面,我就会对其应用材质。

我只想显示具有 alpha 效果的特定半径内相机下方的内容。我想保持材质静态,这意味着当相机移动时它不会移动,只有半径形状会移动。

我可以使用什么样的技术?

谷歌的 ArCore 完美地做到了这一点。

实际渲染: 在此处输入图像描述

所需的渲染: 在此处输入图像描述

ARCore 示例:(点击查看 GIF)

在此处输入图像描述

谢谢!

0 投票
0 回答
296 浏览

objective-c - SKVideoNode 不考虑纵横比

我正在将带有 SKVideoNode 的 SKScene 映射到 SCNBox 的一侧。我正在努力使视频的宽高比正确。这是代码:

它忽略了任何纵横比设置,例如适合和填充。它只是将其压扁以适合边界框。将边界框设置得更大似乎没有帮助。即使在相对于视频的固定尺寸下,纵横比也会被忽略。

0 投票
1 回答
450 浏览

ios - Scenekit:使用着色器重新着色漫反射纹理

我想写一些着色器(表面/片段/...)来用一些新的颜色重新着色我的漫反射纹理。目前我有这个版本的着色器(我正在尝试实时重新着色纹理):

这是 OpenCV 中的代码(我只是事先重新着色纹理并将其用作新的漫反射纹理):

对于这个测试,我只想减少颜色的 R 分量。结果:

OpenCV(正确

opencv 图像

SceneKit(不正确

SceneKit 图像

漫反射纹理包含 Alpha 通道。

(由 mnuages 解决) 此外,似乎在重新着色着色器 alpha 通道后被破坏。使用此着色器:

我的结果是:场景包

代替:opencv

原始质地:原来的

我怎样才能像在openCV中一样重新着色漫反射纹理?


更新: 这是 SceneKit 着色器和 OpenCV 的结果(我已经从图像中删除了所有透明像素):

开放式简历: 开放式CV

场景套件: 场景套件

着色器:

和 OpenCV 代码:


一些更奇怪的事情:我已将我的 OpenCV 代码更改为此以生成新纹理

如果我像这样改变这个纹理:

我收到这样的消息:

opencv

使用这个 SceneKit 着色器应该是一样的:

但我收到这个:

在此处输入图像描述

有一些白色的条纹,但太细了。

我可以通过将条件更改为 tinted.b > 0.85 来增加它们,但这已经是一个错误,因为 _surface.diffuse 中的颜色与纹理中的颜色不同。似乎 SceneKit 会插入纹理或类似的东西。


更新2:

我已经为这个问题添加了源代码(1.5Mb)。有3个球体:

1 顶部)具有原始纹理

2 左)使用着色器重新着色的纹理(newR = r - 0.2)(浮点数)

3 右)使用 OpenCV 重新着色的纹理(newR = r - 51)(uint8)

他们是不同的!场景不包含任何灯光/环境/...只有 3 个球体。

0 投票
1 回答
434 浏览

ios - SceneKit 通过特定索引选择性地为面部着色

我的目标:给定一些 indexi和 some UIColor c,使该索引处的脸变成该颜色。

我的 3D 对象渲染正确。正如预期的那样,它全是白色。然而,那张红脸并没有出现。我看到一丝红色,但看起来 SceneKit 正在尝试在顶点周围着色,而不是那些顶点形成的面。如何强制它只为这些顶点创建的面/多边形着色?

0 投票
1 回答
512 浏览

swift - 在 SceneKit 中渲染具有半透明纹理的 3D 模型(头发)?

我正在尝试在 SceneKit 中渲染 3D 模型,但它看起来不正确。例如这个模型(它是一个带有纹理的 SCN 文件,您可以在 Xcode 中重现它):

在 Xcode 场景编辑器中,它呈现如下:

在此处输入图像描述

如果我关闭“写入深度”选项,它将如下所示: 但也有一些问题,因为我只看到“最底层”的理发。

在此处输入图像描述

我认为这应该是可能的。怎么做才对?

0 投票
1 回答
71 浏览

arkit - 如何在 ARKit 中调整米的纹理大小

我需要使用更新几何(地板填充)在平面上平铺纹理,并且我需要缩放纹理以适应以厘米为单位的实际尺寸。它是一块50cm的方形地砖,纹理大小为1024像素。如何将像素转换为米ARKit?我知道我必须使用SCNMatrix4MakeScaleSCNMaterial diffuse.contentsTransform不确定要设置哪些属性才能使其准确。