我有一个纹理和一个网格,如果我在网格上应用纹理,它会像人们期望的那样连续地平铺它。每个图块的偏移量相等。
问题:
具有一些突出元素的非平铺纹理或纹理看起来重复且便宜。
例:
解决方案尝试
我的第一次尝试是以编程方式生成网格的纹理大小,每个图块具有随机偏移。当然纹理的大小成了问题,更不用说单个纹理最大尺寸的GPU限制了。
我想做什么
我想知道是否有一种方法可以制作Unity着色器或一种材料来加载单个纹理并使用随机偏移对每个图块进行平铺并仅执行一次以保持高性能?
基本上,具有一些突出元素的非可平铺纹理和纹理是不同的问题。
有两种解决方法:
这可以通过以下方式(或它们的结合)来解决:
不幸的是,我无法想到这两个问题(除了,可能是白色鼻子纹理)的任何情况,其中纹理坐标移位是一个解决方案。
你正在以错误的方式看待这个问题。所有游戏都面临这个问题。它们只是通过a)改变纹理而不是用相同的纹理纹理化大面积和b)通过关卡设计来隐藏它。想象一下,这架飞机上装满了谷仓,鹅肝,树木,栅栏等等 - 突然间,单层纹理表面与周围环境融为一体。摄像机角度也起着重要作用。尝试将相机位置更改为靠近地面,重复纹理不太明显。
你的飞机只是一个非常极端的例子。你不应该试图解决它,而是继续建立你的游戏。或者设计你的纹理重复得很好而不显示清晰的图案。极端的是平坦的纹理。但一般来说,大型户外地形纹理只有非常少的结构,几乎就像噪声一样,而且它们不使用任何对比度的颜色,只是相同颜色的阴影。
你的偏移想法是行不通的。也许它可能在技术上有效(尽管可能效率低下)。但是随机偏移不能掩盖模式,而是会产生新的模式,因为纹理不再平滑地插入其边缘,因此您可以清楚地看到正方形网格。我想这将更加丑陋,更加引人注目。
最后,您可以增加纹理大小或比例(可能需要覆盖模糊度,如上所述)。相对于相机角度,这将是最简单,最有效的修复。或者至少是改进。
我相信你可以尝试一下Inigo Quilez(http://www.iquilezles.org/www/articles/texturerepetition/texturerepetition.htm)发明的技术。
老线程,但我认为与许多相关。您可以在着色器中执行此操作,方法是根据坐标的世界空间随机化XZ平面上的顶点位置(或更好)UV坐标。纹理仍然会平铺....但不是直线...它将是一个随机的摆动线。这对于像地形,草等等的东西来说非常棒......但是如果你想在纹理中保持直线,那么显然没有好处。
第二个选项是漫反射细节着色器。它将一个纹理贴近相机,另一个纹理靠近相机(可以使其更柔和/更模糊)
第三个选项......将2个纹理混合在一起,每个纹理具有不同的UV平铺比例(不可分割,例如不是比例2和4,但是使用1和2.334556),因此模式更难看