首页 > 解决方案 > 水平排列纹理的着色器

问题描述

我有一个生成的楼梯网格(以编程方式)。网格很简单,不能再简单和漂亮了。

我想添加一个着色器,无论方向如何,都可以水平排列纹理。在这里,如您所见,它有时是垂直的,有时是水平的。

我有自动生成的 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"
}

在此处输入图像描述

标签: unity3d

解决方案


  • 除非我大错特错,否则您只是将 UV 设置错了。

只需这样做:

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

  2. 运行它并查看 UV 是否正确

您所描述的是,从字面上看,“紫外线是错误的”

你让紫外线在这些部分上以错误的方式运行,这是一个常见的错误。


推荐阅读