Unity3d 四叉树着色器上的统一重复UV坐标

Unity3d 四叉树着色器上的统一重复UV坐标,unity3d,textures,coordinates,shader,quadtree,Unity3d,Textures,Coordinates,Shader,Quadtree,正如您在图像中看到的,在n>1的较大瓷砖上,纹理应该重复,只要当前矩形大小不变。。我不知道我怎样才能做到这一点 仅供参考,我正在使用顶点颜色的alpha值获取瓷砖纹理id 这里是我正在使用的着色器 [更新] 谢谢你澄清紫外线坐标,不幸的是这不能回答我的问题。看看下面的图片 你的着色器很好;实际上,问题在于顶点UV: 因此,对于所有矩形,uv坐标如下[0,0]/[0,rect.height]/[rect.width,0]/[rect.width,rect.height]。所以UV超过了1 着色器设

正如您在图像中看到的,在n>1的较大瓷砖上,纹理应该重复,只要当前矩形大小不变。。我不知道我怎样才能做到这一点

仅供参考,我正在使用顶点颜色的alpha值获取瓷砖纹理id

这里是我正在使用的着色器

[更新]

谢谢你澄清紫外线坐标,不幸的是这不能回答我的问题。看看下面的图片


你的着色器很好;实际上,问题在于顶点UV:


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

着色器设计为支持标准UV空间,在这种情况下,应将rect.width和rect.height替换为1

通过使用大于1的UV坐标,可以有效地请求指定纹理之外的纹理。当与纹理图集一起使用时,这意味着您需要指定平铺之外的纹理-在本例中,这些纹理恰好是白色的,这就是您在渲染输出中看到的

使用atlas纹理进行平铺 更新,因为我错过了一个重要的细节:你想要一个瓷砖材料

通常,UV会线性插值:

对于平铺,您基本上需要更多的锯齿输出:

对于非atlas纹理,可以调整材质比例/包裹设置并将其称为“完成”。对于atlas纹理,这是可能的,但最终将使用不太标准的着色器和/或几何体

最标准的解决方案是,如果较大的四边形与较小的四边形位于单独的网格上:

添加名为uv_scale的浮动材质参数或类似参数 添加一个按uv_比例缩放传入uv的乘法节点 将其输出传递到Frac节点 将其输出传递到UV平铺节点 伪代码大致为:uv=fracuv*uv_刻度

如果需要所有四边形位于同一网格中,则最终需要非标准几何体:

再次将UV更改为rect.width和rect.height 在UV平铺节点之前添加分形节点 这是一个更简单的着色器更改,但有一个缺点,即其他着色器将不再干净地支持您的几何体。

谢谢rutter

我已经在我的着色器中实现了你的解决方案,现在它可以完美地工作了! 因此,对于每个人寻找这是我现在使用的着色器

干杯,M


那些较大的三角帆上的UV是什么样的?如果UV范围超过[0,1],您可能会看到这样的效果,它可能会从图集中获取不属于请求的平铺的像素。因此,对于所有矩形,UV坐标如下[0,0]/[0,rect.height]/[rect.width,0]/[rect.width,rect.height]。因此uv超过1我已经更新了0到1之间的uv坐标,但是对于较大的矩形,我需要反复重复纹理,直到达到矩形大小。@Michael抱歉,我错过了这个细节。答案将更新为更多信息。