Import Unity 3D多UV集

Import Unity 3D多UV集,import,unity3d,maya,Import,Unity3d,Maya,我创建了一个具有纹理和AO的对象,它们位于具有分层纹理的Mayaw中的不同UV集上,在maya中,mash看起来不错 如何在Unity3D中实现相同的效果 我不能让unity使用第二个UV集。您需要编写一个着色器来实现这一点。这里有一个非常简单的例子,但是你可能需要有一个更精细的设置,比如镜面反射等等 Shader "Custom/twotex" { Properties { _MainTex ("Base (RGB)", 2D) = "white

我创建了一个具有纹理和AO的对象,它们位于具有分层纹理的Mayaw中的不同UV集上,在maya中,mash看起来不错

如何在Unity3D中实现相同的效果


我不能让unity使用第二个UV集。

您需要编写一个着色器来实现这一点。这里有一个非常简单的例子,但是你可能需要有一个更精细的设置,比如镜面反射等等

    Shader "Custom/twotex" {
        Properties {
            _MainTex ("Base (RGB)", 2D) = "white" {}
            _AoTex ("AO (RGB)", 2D) = "white" {}

        }
        SubShader {
            Tags { "RenderType"="Opaque" }
            LOD 200

            CGPROGRAM
            #pragma surface surf Lambert

            sampler2D _MainTex;
            sampler2D _AoTex;


            struct Input {
                float2 uv_MainTex : TEXCOORD0;
                float2 uv_AoTex :   TEXCOORD1;
            };

            void surf (Input IN, inout SurfaceOutput o) {
                half4 c = tex2D (_MainTex, IN.uv_MainTex.xy);
                half4 ao = tex2D (_AoTex, IN.uv_AoTex.xy);
                o.Albedo = c.rgb * ao.rgb;
                o.Alpha = c.a;
            }
            ENDCG
        } 
        FallBack "Diffuse"
    }

您需要编写一个着色器来实现这一点。这里有一个非常简单的例子,但是你可能需要有一个更精细的设置,比如镜面反射等等

    Shader "Custom/twotex" {
        Properties {
            _MainTex ("Base (RGB)", 2D) = "white" {}
            _AoTex ("AO (RGB)", 2D) = "white" {}

        }
        SubShader {
            Tags { "RenderType"="Opaque" }
            LOD 200

            CGPROGRAM
            #pragma surface surf Lambert

            sampler2D _MainTex;
            sampler2D _AoTex;


            struct Input {
                float2 uv_MainTex : TEXCOORD0;
                float2 uv_AoTex :   TEXCOORD1;
            };

            void surf (Input IN, inout SurfaceOutput o) {
                half4 c = tex2D (_MainTex, IN.uv_MainTex.xy);
                half4 ao = tex2D (_AoTex, IN.uv_AoTex.xy);
                o.Albedo = c.rgb * ao.rgb;
                o.Alpha = c.a;
            }
            ENDCG
        } 
        FallBack "Diffuse"
    }

Unity的内置着色器除了光照贴图之外,没有一个使用UV2。您需要编写自己的着色器。Unity Asset Store中有很多可用的着色器。有可能已经有一个使用UV2治疗AO了。可能会花费一点,但可能比花几天时间学习着色器编程更便宜。这一个提到顶点AO支持。可能可以联系他们确认它是否符合您的要求。Unity的内置着色器除了光照贴图之外,没有一个使用UV2。您需要编写自己的着色器。Unity Asset Store中有很多可用的着色器。有可能已经有一个使用UV2治疗AO了。可能会花费一点,但可能比花几天时间学习着色器编程更便宜。这一个提到顶点AO支持。可能可以联系他们以确认它是否符合您的要求。对于那些需要更多信息的人,我刚刚更改了它,以便它使用网格中的第二个UV集,并添加了一个滑块来控制强度更改了下面的float2 UV\u AoTex:TEXCOORD1;->浮动2 uv2_AoTex:TEXCOORD1;和half4 ao=tex2D_AoTex,IN.uv_AoTex.xy;->half4 ao=tex2D_AoTex,IN.uv2_AoTex.xy;顺便说一句,我刚刚注意到它没有读取Alpha通道,我修改了它,使其成为pragma surf Lambert Alpha,但是整个网格是半透明的,这里有一个链接,右边的图像没有Ao。你想要Alpha透明度吗?如果pragma行包括alpha,则上面的示例应该有效;但是你得到的取决于主通道的阿尔法通道。如果您不想要透明度,请使用o.Alpha=1;你的alpha通道是否可能反转?这不仅仅发生在透明度上,没有alpha贴图或透明度的简单漫反射纹理也会产生同样的效果,到目前为止,我可以通过使用剪切透明度来解决它,但现在这个着色器无法像那样绕过它。@eblue它肯定是uv2_AoTex之后的2使它工作,没有它,它只使用uv通道1。。。非常奇怪。对于那些需要更多信息的人,我刚刚更改了它,以便它使用网格中的第二个UV集,并添加了一个滑块来控制强度。更改了以下浮动2 UV\u AoTex:TEXCOORD1;->浮动2 uv2_AoTex:TEXCOORD1;和half4 ao=tex2D_AoTex,IN.uv_AoTex.xy;->half4 ao=tex2D_AoTex,IN.uv2_AoTex.xy;顺便说一句,我刚刚注意到它没有读取Alpha通道,我修改了它,使其成为pragma surf Lambert Alpha,但是整个网格是半透明的,这里有一个链接,右边的图像没有Ao。你想要Alpha透明度吗?如果pragma行包括alpha,则上面的示例应该有效;但是你得到的取决于主通道的阿尔法通道。如果您不想要透明度,请使用o.Alpha=1;你的alpha通道是否可能反转?这不仅仅发生在透明度上,没有alpha贴图或透明度的简单漫反射纹理也会产生同样的效果,到目前为止,我可以通过使用剪切透明度来解决它,但现在这个着色器无法像那样绕过它。@eblue它肯定是uv2_AoTex之后的2使它工作,没有它,它只使用uv通道1。。。很奇怪。