正如你在图像中看到的那样,在较大的瓷砖上(n> 1),纹理应该重复,只要当前的矩形尺寸..我不知道我怎么能实现这个!
仅供参考,我使用顶点颜色的alpha值获取tile纹理id。
这里着色器使用..
[UPDATE]
感谢您澄清紫外线坐标,遗憾的是,这并没有回答我的问题。看看以下pixture ...
答案 0 :(得分:1)
你的着色器很好;它实际上是问题的顶点UV:
因此对于所有矩形,uv坐标如下[0,0] / [0,rect.height] / [rect.width,0] / [rect.width,rect.height]。所以uv超过1
您的着色器旨在支持标准UV空间,在这种情况下,您应将rect.width
和rect.height
替换为1
。
通过使用大于1的UV坐标,您可以有效地询问指定纹理之外的纹素。当与纹理图集一起使用时,这意味着您要求指定图块之外的纹素 - 在这种情况下,那些恰好是白色的,并且这是您在渲染中看到的内容输出
更新,因为我错过了一个重要的细节:你想要一个平铺材料。
通常,UV线性插值:
对于平铺,你基本上想要更多的"锯齿"输出:
对于非地图集纹理,您可以调整材质比例/换行设置并完成调用。对于地图集纹理,它是可能的,但您最终会得到一个非常标准的着色器和/或几何体。
最标准的"解决方案是,如果你的较大的四边形与较小的四边形在一个单独的网格上:
float
的{{1}}素材参数或其他uv_scale
节点,按Multiply
uv_scale
节点Frac
节点伪代码大致为:UV Tile
如果你需要所有的四边形都在同一个网格中,你最终需要非标准的几何体:
uv = frac(uv * uv_scale)
和rect.width
)rect.height
节点Frac
节点
这是一个更简单的着色器更改,但其缺点是您的几何图形将不再在其他着色器中得到干净的支持。
答案 1 :(得分:0)