纹理平铺与连续随机偏移?

时间:2014-06-20 04:13:31

标签: opengl unity3d shader

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

问题:

具有一些优秀元素的不可用纹理或纹理看起来重复且便宜。

示例:

enter image description here

解决方案尝试

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

我想做什么

我想知道是否有办法制作一个Unity着色器或一个可以加载单个纹理的材质,并为每个图块添加随机偏移量并只进行一次以保持高性能?

4 个答案:

答案 0 :(得分:1)

你正在以错误的方式看待这个问题。所有游戏都面临这个问题。它们只是通过a)改变纹理而不是用相同的纹理纹理化大面积和b)通过关卡设计来隐藏它。想象一下,这架飞机上装满了谷仓,鹅肝,树木,栅栏等等 - 突然间,单层纹理表面与周围环境融为一体。摄像机角度也起着重要作用。尝试将相机位置改为靠近地面,重复纹理不太明显。

你的飞机只是一个非常极端的例子。你不应该试图解决它,而是继续建立你的游戏。或者设计你的纹理重复得很好而不显示清晰的图案。极端的是平坦的纹理。但一般来说,大型户外地形纹理的结构非常少,几乎就像噪音一样,而且它们不会使用任何对比度的颜色,只有相同颜色的阴影。

你的偏移想法不起作用。也许它可能在技术上有效(尽管可能效率低下)。但是随机偏移不能掩盖模式,而是会创建新模式,因为纹理不再在边缘平滑插值,因此您可以清楚地看到正方形网格。我想这将更加丑陋,更加引人注目。

最后,您可以增加纹理大小或比例(可能需要覆盖模糊度,如上所述)。相对于相机角度,这将是最简单,最有效的修复。或者至少是一种改进。

答案 1 :(得分:1)

基本上,具有一些优秀元素的不可用纹理和纹理是不同的问题。

不可用的纹理

有两种解决方法:

  1. 修复纹理本身;
  2. 在某些情况下可以使用镜像重复(请参阅GL_MIRRORED_REPEAT)texture wrap modes
  3. 具有一些优秀元素的纹理

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

    1. 修改纹理(这也包括放大);
    2. 使用多重纹理;
    3. 嗯,在某些情况下也可以使用镜像重复。
    4. 随机移动纹理坐标

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

答案 2 :(得分:1)

enter image description here

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

答案 3 :(得分:0)

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

第二个选项是漫反射细节着色器。它将一个纹理贴近相机,另一个纹理靠近相机(可以使其更柔和/更模糊

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