Unity:将着色器应用于对象以使其纹理弯曲

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity:将着色器应用于对象以使其纹理弯曲相关的知识,希望对你有一定的参考价值。

我在Unity中制作了一个无尽的亚军游戏,我希望像在本教程中一样添加一个弯曲的着色器https://youtu.be/6_e_GoWlZOo

但是,当我将该材料添加到对象时,它将替换旧的材质。当我在网格渲染器中将其添加为第二个时,它不会影响第一个。 https://drive.google.com/open?id=1-kP4A0Xh3P9xVjrwjTiTPlh_WcHnBA1d

这是着色器代码:

Shader "PPP/BendWorld"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Curvature("Curvature", Float) = 0.001
    }
        SubShader
        {
            Tags { "RenderType" = "Opaque" }
            LOD 200

            CGPROGRAM
            #pragma surface surf Lambert vertex:vert addshadow
            uniform sampler2D _MainTex;
            uniform float _Curvature;

            struct Input 
            {
                float uv_MainTex;
            };

            void vert(inout appdata_full v) 
            {
                float4 worldSpace = mul(unity_ObjectToWorld, v.vertex);
                worldSpace.xyz -= _WorldSpaceCameraPos.xyz;
                worldSpace = float4(0.0f, (worldSpace.x * worldSpace.x) * -_Curvature, 0.0f, 0.0f);

                v.vertex += mul(unity_WorldToObject, worldSpace);
            }

            void surf(Input IN, inout SurfaceOutput o) 
            {
                half4 c = tex2D(_MainTex, IN.uv_MainTex);
                o.Albedo = c.rgb;
                o.Alpha = c.a;
            }

            ENDCG
    }
            Fallback "Mobile/Diffuse"
}

我想弯曲对象并在其上有纹理,有什么办法可以做到这一点吗?

答案

关于纹理问题:纹理看起来很破碎,因为你已经将uv_MainTex定义为float而不是float2。 UV坐标是二维的 - 如果将其定义为标量,它将仅使用UV的U轴。

以上是关于Unity:将着色器应用于对象以使其纹理弯曲的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D - 将在 iOS 设备上剪辑纹理的着色器

将对象的体积创建为雾

OpenGL 2D纹理单元&纹理翻转解决策略

[Unity] Shader(着色器)之纹理贴图

着色器图弄乱了纹理(Unity 2D)

Unity学习——纹理材质&着色器