【问题标题】:Shader that arranges the texture horizontally水平排列纹理的着色器
【发布时间】: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


【解决方案1】:
  • 除非我完全弄错了,否则您只是将 UV 设置错了。

只需这样做:

  1. 暂时不要使用你的着色器。非常简单地将材质设置为某些现有材质(可能是“木头”或类似外观)

  2. 运行它,看看 UV 是否正确

您所描述的字面意思是“UV 是错误的”

UV 在这些部件上的运行方式错误,这是一个常见错误。

【讨论】:

猜你喜欢
  • 2011-09-22
  • 2013-09-17
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2012-02-07
  • 2017-03-28
  • 2020-09-06
  • 1970-01-01
相关资源
最近更新 更多