【发布时间】:2021-05-18 01:01:29
【问题描述】:
我有一个生成的楼梯网格(以编程方式)。网格很简单,再简单不过了。
我想添加一个着色器,无论方向如何,都可以水平排列纹理。在这里,如您所见,它有时是垂直的,有时是水平的。
我有自动生成的 UV
Shader "Custom/WallShader"
{
Properties{
_MainTex("Texture", 2D) = "white" {}
_Scale("Scale", float) = 1.0
}
SubShader{
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
struct Input {
float3 worldNormal;
float3 worldPos;
float2 uv_MainTex;
};
fixed4 _Color;
float _Scale;
void surf(Input IN, inout SurfaceOutputStandard o) {
if (abs(IN.worldNormal.x) > 0.5)
{
o.Albedo = tex2D(_MainTex, IN.worldPos.zy * _Scale);
}
if (abs(IN.worldNormal.y) > 0.5)
{
o.Albedo = tex2D(_MainTex, IN.worldPos.xz * _Scale);
}
if (abs(IN.worldNormal.z) > 0.5)
{
o.Albedo = tex2D(_MainTex, IN.worldPos.xy * _Scale);
}
float2 flippedUVs = IN.uv_MainTex;
flippedUVs.x = flippedUVs.x;
flippedUVs.y = 1.0 - flippedUVs.y;
fixed4 c = tex2D(_MainTex, flippedUVs) * _Color;
o.Emission = o.Albedo;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
【问题讨论】:
-
在我看来,在生成网格时,您必须在网格中分配适当的纹理坐标,可能会根据它们所属的三角形复制应该具有不同 UV 的顶点。我不明白这是一个着色器问题,除非我错过了你的观点。
-
只是UV错了,就这么简单。如果您希望纹理以另一种方式运行.. 这样做。 (即,更改 UV,使其以另一种方式运行)
-
请注意,完全不可能“在着色器中”修复此问题。您告诉着色器以哪种方式运行纹理的方式是...... UVs !!!
标签: unity3d