Unity在Quadtree Shaderforge上重复UV坐标

时间:2017-03-01 18:30:41

标签: unity3d textures coordinates shader quadtree

正如你在图像中看到的那样,在较大的瓷砖上(n> 1),纹理应该重复,只要当前的矩形尺寸..我不知道我怎么能实现这个!

仅供参考,我使用顶点颜色的alpha值获取tile纹理id。

enter image description here

这里着色器使用..

enter image description here

[UPDATE]

感谢您澄清紫外线坐标,遗憾的是,这并没有回答我的问题。看看以下pixture ...

enter image description here

2 个答案:

答案 0 :(得分:1)

你的着色器很好;它实际上是问题的顶点UV:

  

因此对于所有矩形,uv坐标如下[0,0] / [0,rect.height] / [rect.width,0] / [rect.width,rect.height]。所以uv超过1

您的着色器旨在支持标准UV空间,在这种情况下,您应将rect.widthrect.height替换为1

通过使用大于1的UV坐标,您可以有效地询问指定纹理之外的纹素。当与纹理图集一起使用时,这意味着您要求指定图块之外的纹素 - 在这种情况下,那些恰好是白色的,并且这是您在渲染中看到的内容输出

使用图集纹理平铺

更新,因为我错过了一个重要的细节:你想要一个平铺材料。

通常,UV线性插值:

linear UV plot

对于平铺,你基本上想要更多的"锯齿"输出:

sawtooth UV plot

对于非地图集纹理,您可以调整材质比例/换行设置并完成调用。对于地图集纹理,它是可能的,但您最终会得到一个非常标准的着色器和/或几何体。

最标准的"解决方案是,如果你的较大的四边形与较小的四边形在一个单独的网格上:

  • 添加名为float的{​​{1}}素材参数或其他
  • 添加uv_scale节点,按Multiply
  • 缩放传入的UV
  • 将输出传递到uv_scale节点
  • 将输出传递到Frac节点

伪代码大致为:UV Tile

如果你需要所有的四边形都在同一个网格中,你最终需要非标准的几何体:

  • 再次更改UV(返回uv = frac(uv * uv_scale)rect.width
  • rect.height节点
  • 之前添加Frac节点

这是一个更简单的着色器更改,但其缺点是您的几何图形将不再在其他着色器中得到干净的支持。

答案 1 :(得分:0)

谢谢rutter!

我已将您的解决方案实施到我的着色器中,现在它完美无缺! 所以对于每个在这里寻找这个的人都是现在使用的着色器

干杯,M

enter image description here