【问题标题】:Texture tiling with continuous random offset?具有连续随机偏移的纹理平铺?
【发布时间】:2018-09-10 22:01:32
【问题描述】:

我有一个纹理和一个网格,如果我在网格上应用纹理,它会像预期的那样连续平铺它。每个图块的偏移量是相等的。

问题:

不可平铺的纹理或带有一些突出元素的纹理看起来重复且廉价。

例子:

解决方案尝试

我的第一次尝试是以编程方式生成网格的纹理大小,每个图块具有随机偏移。当然,纹理的大小成了一个问题,更不用说单个纹理最大尺寸的 GPU 限制了。

我想做的事

我想知道是否有办法制作 Unity 着色器或材质来加载单个纹理并为每个图块使用随机偏移平铺它,并且只执行一次以保持高性能?

【问题讨论】:

    标签: opengl unity3d shader


    【解决方案1】:

    我相信您可能会尝试 Inigo Quilez (http://www.iquilezles.org/www/articles/texturerepetition/texturerepetition.htm) 发明的一种技术。

    【讨论】:

      【解决方案2】:

      基本上,不可平铺纹理和带有一些突出元素的纹理是不同的问题。

      不可平铺的纹理

      有两种解决方法:

      1. 修复纹理本身;
      2. 在某些情况下可以使用镜像重复(参见 GL_MIRRORED_REPEAT)

      具有一些出色元素的纹理

      这可以通过以下方式(或它们的结合)来解决:

      1. 修改纹理(这也包括放大);
      2. 使用多重纹理;
      3. 好吧,也许在某些情况下也可以使用镜像重复。

      随机移动纹理坐标

      不幸的是,我想不出纹理坐标移动是解决方案的这两个问题(可能除了白鼻子纹理)的任何情况。

      【讨论】:

      • HLSL有这样的选择吗?
      • 哪一个?镜像重复?
      • 是的 GL_MIRRORED_REPEAT,我找不到等价物。
      • 不幸的是,Unity 不允许为纹理包装指定这样的选项。不过,它可以在着色器中模拟。
      • 如果你愿意,我可以帮助你使用着色器
      【解决方案3】:

      您以错误的方式看待这个问题。所有游戏都面临这个问题。他们只是通过 a) 大量改变纹理而不是使用相同纹理的大面积纹理和 b) 通过关卡设计来隐藏它。想象一下这架飞机上布满了谷仓、草地、树木、栅栏等等——突然间,单一纹理的表面与周围环境融为一体。相机角度在这方面也起着巨大的作用。尝试将您的相机位置更改为靠近地面,这样重复的纹理就不那么明显了。

      你的飞机只是一个非常极端的例子。您此时不应尝试修复它,而应继续构建您的游戏。或者设计你的纹理以很好地重复而不显示清晰的图案。极端将是纯色纹理。但一般来说,大型户外地形纹理几乎没有结构,几乎就像噪点一样,而且它们不使用具有任何对比度的颜色,只是使用相同颜色的阴影。

      你的抵消想法行不通。也许它可能在技术上起作用(虽然它可能效率低下)。但是随机偏移不能掩盖图案,而是会创建新的图案,因为纹理不会在边缘平滑地插值,所以你可以清楚地看到一个正方形网格。我想那会更丑更引人注目。

      最后,您可以增加纹理大小或比例(模糊可能需要像上面解释的那样被掩盖)。就摄像机角度而言,这将是最简单、最有效的解决方法。或者至少是一种改进。

      【讨论】:

      • 感谢您的出色回答。你是对的,飞机只是一个极端的例子,我的游戏使用了更好的纹理,从第一人称角度看不太明显。我的问题更具理论性,以了解某事是如何完成的以及是否可能。
      【解决方案4】:

      旧线程,但我认为与许多人相关。您可以在着色器中执行此操作,方法是根据坐标的世界空间随机化 XZ 平面上的顶点位置(或更好)UV 坐标。 纹理仍然会平铺......但不是在一条直线上......它将是一条随机的摆动线。这对于地形、草地等东西非常有用……但如果您想在纹理中保持直线,显然就没有用了。

      第二个选项是漫反射细节着色器。它将一种纹理平铺在靠近相机的位置,而另一种则在更远的地方平铺(您可以使其更柔和/更模糊

      第三个选项...将 2 个纹理混合在一起,每个纹理具有不同的 UV 平铺比例(不可分割。例如,不是比例 2 和 4,但使用 1 和 2.334556),因此图案更难看到

      【讨论】:

        猜你喜欢
        • 2023-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 2011-11-08
        相关资源
        最近更新 更多