Oprettelse af en brugerdefineret terrænskygger i Unity

I denne tutorial vil vi skabe en brugerdefineret terrænskygge i Unity for at give dit terræn mere realistiske teksturer og belysning. Denne tilgang giver mulighed for bedre ydeevne og kontrol over, hvordan terrænet interagerer med lys, skygger og andre miljøpåvirkninger. Vi vil dække opsætningen af ​​shaderen, bruge den med Unitys terrænsystem og foretage justeringer for optimal ydeevne.

1. Opsætning af terrænet

Før vi dykker ned i shader-skabelsen, lad os først sætte terrænet op i Unity:

  1. I Unity skal du gå til menuen GameObject og vælge 3D Object > Terrain.
  2. Dette vil tilføje et nyt terrænobjekt til din scene. Du kan justere dens størrelse, højde og andre indstillinger i terræninspektøren.
  3. Når terrænet er oprettet, kan du male på det ved hjælp af Paint Texture-værktøjet i Inspector. Men for nu, lad det være tomt, da vi vil anvende en brugerdefineret shader.

2. Oprettelse af Terrain Shader

Lad os nu skabe den brugerdefinerede terrænskygger. Følg disse trin:

  1. Højreklik i vinduet Project og vælg Opret > Shader > Standard Surface Shader.
  2. Navngiv shaderen CustomTerrainShader og åbn den i din foretrukne kodeeditor.

Erstat standard shader-koden med følgende:

Shader "Custom/TerrainShader"
{
    Properties
    {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _BumpMap ("Normal Map", 2D) = "bump" {}
        _Specular ("Specular", Color) = (0.2, 0.2, 0.2, 1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows

        sampler2D _MainTex;
        sampler2D _BumpMap;
        fixed4 _Specular;

        struct Input
        {
            float2 uv_MainTex;
            float3 worldNormal;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
            o.Specular = _Specular;
            o.Smoothness = 0.5;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

3. Anvendelse af Shader på terrænet

Efter at have oprettet skyggen, skal du påføre den på terrænmaterialet:

  • Højreklik i projektvinduet og vælg Opret > Materiale. Navngiv dette materiale Terrænmateriale.
  • I Material Inspector skal du klikke på rullemenuen Shader og vælge Custom > TerrainShader.
  • Tildel teksturer til MainTex og BumpMap i Material Inspector.
  • Tildel nu dette materiale til dit terræn ved at vælge Terrain-objektet, gå til Terrain Inspector og indstille TerrainMaterial under Materials-sektionen.

4. Justering af Shader for ydeevne

For at sikre, at shaderen kører jævnt, især på store terræner, kan vi justere nogle få indstillinger:

  • Sænk opløsningen på det normale kort, eller brug et forenklet kort for at reducere GPU-belastningen.
  • Deaktiver alle funktioner i shaderen, som du ikke bruger (såsom parallaksekortlægning eller yderligere lyseffekter).
  • Brug Unitys indbyggede Terrain LOD system til dynamisk at justere detaljeniveauet på fjerne dele af terrænet.

5. Endelige justeringer og test

Når skyggen er påført og terrænet er sat op, test det under forskellige lysforhold. Du kan justere egenskaberne Specular og Smoothness for shaderen for at se, hvordan de påvirker det overordnede udseende af dit terræn i forskellige miljøer.

Konklusion

Med en brugerdefineret terrænskygge kan du forbedre den visuelle troskab af dine terræner, mens du bevarer kontrollen over ydeevnen. Du er velkommen til at udvide denne skygge ved at tilføje yderligere funktioner som detaljeteksturer, treplans kortlægning eller tessellation.