【问题标题】:Texture not applying on .obj file in Unity纹理不适用于 Unity 中的 .obj 文件
【发布时间】:2021-02-06 03:04:38
【问题描述】:

我导出 .stl 文件并转换为 .obj 并导入 Unity。然后,我从资产商店导入了一些材料。然后,我尝试将材质应用于我导入的模型,但纹理不适用。

我尝试更改着色器选项,检查照明选项。但是,我可能检查错了

【问题讨论】:

  • 尝试将该材质拖放到对象本身上?
  • 是的,但它不起作用..
  • 使用 3D 软件将 UV 映射添加到网格。

标签: unity3d


【解决方案1】:

这里可能会发生一些事情,如另一个答案中所述,可能是您的平铺

无论您使用哪个坐标系,您的纹理的 UV 范围始终为 0 -> 1,但是根据系统,您的 UV 将是以下 2 之一:

0,0 在左下角,1,1 在右上角或

0,0 在左上角,1,1 在右下角。 (注意:这是指 UV 落在纹理上的位置,而不是与模型上的顶点相关的 UV。)

因此,当您的平铺设置为 0,0 时,您说的是 uv.x * 0 和 uv.y * 0,这将在着色器用于确定的数学计算之后将所有 UV 的值默认为 0该纹素使用哪种颜色,它总是相同的。

一个可能发生这种情况的简单示例是平铺,因为如果我们的顶点的值为 (0.73, 0.82),我们正在缩放 UV 值(当平铺 > 0 时会缩小纹理视图),并且我们正在缩放乘以 2,该值将变为 (1.46, 1.64)。

现在根据我们的示例,如果您使用 > 1 的值,则在纹理方面有两件事需要注意,它们是您的 UV 值和您的 TextureWrap 设置。由于所有纹理都基于 0 -> 1 范围,因此 1.46 的值更大。处理方式取决于纹理检查器中的 TextureWrapMode 设置。您可以在以下位置阅读更多信息:https://docs.unity3d.com/ScriptReference/TextureWrapMode.html

总而言之,如果你想要一个平铺纹理将其设置为重复,不这样做并使用钳制,会将你的 UV 钳制为 0 -> 1,任何大于 1 的东西都将设置为 1,你将面临与将平铺设置为 0 的情况相同。

简而言之,将平铺设置为 1,1,并确保针对用例正确设置纹理检查器设置。

我的方法是:设置纹理以在检查器中重复,然后调整平铺直到看起来不错(同时平铺太多也可以使其看起来都显示相同的颜色)。

这当然只有在您的模型确实分配了 UV 时才能解决问题。您可以查看OBJ格式规范,并用记事本查看文件以确定它是否有UV的设置。

【讨论】:

    【解决方案2】:

    在层次结构中,您的对象中应该有另一个元素。它有自己的网格渲染器,它覆盖了父对象的网格渲染器。如果您更改该嵌套元素的材质,它应该可以工作;)

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 2018-10-18
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多