Opprette en tilpasset terrengskyggelegging i Unity

I denne opplæringen vil vi lage en egendefinert terrengskyggelegging i Unity for å gi terrenget ditt mer realistiske teksturer og belysning. Denne tilnærmingen gir bedre ytelse og kontroll over hvordan terrenget samhandler med lys, skygger og andre miljøeffekter. Vi vil dekke oppsett av shader, bruk av den med Unitys terrengsystem, og foreta justeringer for optimal ytelse.

1. Sette opp terrenget

Før vi dykker inn i shader-skapelsen, la oss først sette opp terrenget i Unity:

  1. I Unity, gå til GameObject-menyen og velg 3D Object > Terreng.
  2. Dette vil legge til et nytt terrengobjekt til scenen din. Du kan justere størrelsen, høyden og andre innstillinger i terrenginspektøren.
  3. Når terrenget er opprettet, kan du male på det ved å bruke Paint Texture-verktøyet i Inspektøren. Men foreløpig la det stå tomt da vi vil bruke en tilpasset skyggelegging.

2. Opprette terrengskyggeren

La oss nå lage den tilpassede terrengskyggeren. Følg disse trinnene:

  1. Høyreklikk i Project-vinduet og velg Create > Shader > Standard Surface Shader.
  2. Gi skyggen navnet CustomTerrainShader og åpne den i ditt foretrukne koderedigeringsprogram.

Erstatt standard shader-kode 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. Bruke Shader på terrenget

Etter å ha laget skyggen, må du bruke den på terrengmaterialet:

  • Høyreklikk i prosjektvinduet og velg Opprett > Materiale. Gi dette materialet et navn Terrengmateriale.
  • I materialinspektøren klikker du på rullegardinmenyen Shader og velger Custom > TerrainShader.
  • Tilordne teksturer for MainTex og BumpMap i Material Inspector.
  • Nå, tilordne dette materialet til ditt terreng ved å velge Terreng-objektet, gå til Terrenginspektør, og angi TerrengMaterial under Materials-delen.

4. Tweaking Shader for ytelse

For å sikre at skyggen går jevnt, spesielt i store terreng, kan vi justere noen innstillinger:

  • Senk oppløsningen til det vanlige kartet eller bruk et forenklet kart for å redusere GPU-belastningen.
  • Deaktiver alle funksjoner i skyggeskjermen som du ikke bruker (som parallakse-kartlegging eller ekstra lyseffekter).
  • Bruk Unitys innebygde Terreng LOD-system for dynamisk å justere detaljnivået på fjerne deler av terrenget.

5. Endelige justeringer og testing

Når skyggen er påført og terrenget er satt opp, test den under forskjellige lysforhold. Du kan justere egenskapene Specular og Smoothness til shaderen for å se hvordan de påvirker det generelle utseendet til terrenget ditt i ulike miljøer.

Konklusjon

Med en tilpasset terrengskyggelegging kan du forbedre den visuelle troverdigheten til terrengene dine samtidig som du beholder kontrollen over ytelsen. Utvid gjerne denne skyggen ved å legge til tilleggsfunksjoner som detaljteksturer, triplanar kartlegging eller tessellasjon.