【问题标题】:SceneKit texture mapping issue on material材质上的 SceneKit 纹理映射问题
【发布时间】:2019-04-06 22:45:13
【问题描述】:

我正在尝试使用 SceneKit 绘制一组简单的 4 个盒子,它们彼此相邻,每个盒子都应用了纹理(Minecraft 风格):

纹理是这样的(png文件):

我想避免盒子之间的小蓝线(不在纹理中),但无论我尝试什么设置,这些人工制品都会保留。

知道如何避免它们吗?

在scenekit编辑器中设置材质(每个盒子完全一样,除了漫反射部分是指正确的纹理文件)

scenekit 编辑器中的问题也出现在设备上运行的应用程序中。

奇怪的是,如果我只是做一个全黑(或任何颜色)的纹理(里面有或没有任何东西),这些人工制品就不会出现,如下例:

【问题讨论】:

  • 看起来这些边缘上的纹理坐标略微低于 0.0 或高于 1.0,这会调用通过材质属性的 wrapSwrapT 属性配置的任何采样行为。您可以尝试将每个立方体每个面的每个材质的每个材质属性的每个轴的包裹模式设置为.clamp,但由于这是默认设置,它可能没有效果,也没有真正解决精度不足的问题在纹理坐标中。我不知道如何在 Xcode 中使用 SceneKit 编辑器来配置这些属性,但也许可以这样做。
  • 我自己复制了这个,我可以确认纹理采样器的包裹行为是这里的罪魁祸首。似乎从 .scn 文件加载的材料实际上具有.repeat 而不是.clamp 的默认环绕模式。以编程方式将它们设置为 .clamp 解决了我的测试中的问题。

标签: scenekit metal texture-mapping material-swift


【解决方案1】:

当我放大你的纹理 png 文件时,它实际上看起来四面都有一个细蓝色边框:

您是否确认这些线在您的实际纹理文件中不存在,即使是几个像素宽?

如果你确定你的原始纹理是完美的,那可能是你的纹理环绕设置有问题,正如 warrenm 评论的那样。即分配给material.diffuse.wrapSmaterial.diffuse.wrapTSCNWrapMode设置为SCNWrapMode.repeat。我会将您的换行模式设置为SCNWrapMode.clamp。我不确定如何在 Xcode 编辑器中编辑它,但如果你的纹理位于 Assets.xcassets 文件夹中,它会以编程方式看起来像这样:

...
material.diffuse.contents = UIImage(named: "your_texture")!
material.diffuse.wrapS = SCNWrapMode.clamp
material.diffuse.wrapT = SCNWrapMode.clamp
...

或者,您可以使用SCNWrapMode.clampToBorder 并将材质的borderColor 属性设置为黑色。

但我真的会查看您的原始 png 文件,以确保纹理本身中不存在蓝色边框。祝你好运!

【讨论】:

    【解决方案2】:

    您似乎需要以编程方式设置每个材质属性的环绕模式,以避免这种“环绕”行为。配置已分配纹理的每个材质属性,使其wrapSwrapT 属性为.clamp,而不是.repeat,这似乎是从.scn 文件加载材质时的默认设置。

    let nodes = scene.rootNode.childNodes // get a list of relevant nodes
    for node in nodes {
        guard let materials = node.geometry?.materials else { continue }
        for material in materials {
            material.diffuse.wrapS = .clamp
            material.diffuse.wrapT = .clamp
            // ...confgure other material properties as necessary...
        }
    }
    

    【讨论】:

    • 确实是正确的解决方案。您还可以在Xcode编辑器中访问这些属性时,当您选择漫反射属性(或者选择纹理文件而不是颜色时)。谢谢!
    • 请注意,如果您希望在场景文件中配置所有内容,这也可以在 SceneKit 场景编辑器中完成。在您的屏幕截图中,单击“漫反射”材质属性左侧的显示三角形。在那里你可以配置包装、mipmapping、UV 变换等。
    • 很好,我没有意识到关于材料属性的披露三角形背后的选项会根据内容类型而变化,但这是有道理的。
    猜你喜欢
    • 2016-11-23
    • 2018-07-06
    • 2014-10-04
    • 2021-08-20
    • 2016-01-19
    • 2011-08-30
    • 1970-01-01
    • 2017-01-25
    • 2021-06-24
    相关资源
    最近更新 更多