【问题标题】:Atlas UV map vs. Local UV mapAtlas UV 贴图与局部 UV 贴图
【发布时间】:2017-03-29 17:37:22
【问题描述】:

我想使用 UV 坐标在我的精灵上发光,但问题是,如果精灵源自 Unity 的精灵打包程序创建的图集,那么 UV 不是从 0 标准化到 1,而是从和到两个任意价值观。如何规范化位于图集中的单个精灵的 UV 数据?我是否需要将其他信息解析到着色器中,或者我是否应该已经拥有执行此过程所需的信息?下图描述了这种情况:

左边的手不是来自地图集的精灵。右边的手是来自地图集的精灵。我希望右手看起来和左手一样。

我对着色器还不是很熟悉,所以我依赖于使用 shaderforge。我正在使用以下 shaderforge 布局:

【问题讨论】:

    标签: unity3d shader uv-mapping


    【解决方案1】:

    您可能已经知道这一点,但根本问题是“UV Coords”节点的输出。着色器中的其他节点期望归一化的 UV 范围为 0 到 1,但这不是您在使用纹理图集时得到的。

    我可以想出两种方法来解决这个问题。它们都是可行的,因此我建议您尝试任何一种更适合您的工作流程的方法。

    添加第二个 UV 通道

    将 UV0 视为唯一的 UV 通道很容易,但对于某些技术,为每个顶点添加多个 UV 坐标会很有帮助。

    例如,光照贴图是一种流行的功能,其中每个模型都有自己的单独纹理(漫反射/法线/等),但每个场景都有一个预烘焙的光照贴图纹理,该纹理在多个模型之间共享——有点像照明信息图集。这些 UV 将不匹配,因此光照贴图 UV 存储在第二个通道 (UV1) 上。

    以类似的方式,您可以将 UV0 用于图集 UV,将 UV1 用于局部 UV。这为您提供了在 [0,1] 范围内的干净输入,您可以将其用于该乘法效果。

    添加材质参数

    您可以scale and offset UV 以便它们被标准化。

    1. 在渲染之前,找到网格的 UV 坐标的 minmax
    2. 将这些值作为材料参数传入
    3. 添加着色器节点以缩放和偏移输入 UV,从而使范围标准化

    例如,您可以将 min 添加到每个 UV(偏移),然后除以 max - min(比例)。

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 1970-01-01
      • 2014-12-15
      • 2018-09-22
      • 2023-03-11
      • 2017-01-10
      • 2013-08-20
      • 2021-08-31
      • 1970-01-01
      相关资源
      最近更新 更多