Crearea unui umbritor de teren personalizat în Unity

În acest tutorial, vom crea un umbritor de teren personalizat în Unity pentru a oferi terenului dumneavoastră texturi și iluminare mai realiste. Această abordare permite o performanță și un control mai bun asupra modului în care terenul interacționează cu luminile, umbrele și alte efecte de mediu. Vom acoperi configurarea shaderului, folosirea acestuia cu sistemul de teren al Unity și efectuarea de ajustări pentru performanțe optime.

1. Amenajarea terenului

Înainte de a vă scufunda în crearea shaderului, să setăm mai întâi terenul în Unity:

  1. În Unity, accesați meniul GameObject și selectați 3D Object > Terrain.
  2. Acest lucru va adăuga un nou obiect Teren la scena ta. Puteți ajusta dimensiunea, înălțimea și alte setări în Terrain Inspector.
  3. Odată ce terenul este creat, puteți picta pe el folosind instrumentul Paint Texture din Inspector. Dar pentru moment, lăsați-l necompletat, deoarece vom aplica un shader personalizat.

2. Crearea Terrain Shader

Acum haideți să creăm umbrirea terenului personalizat. Urmați acești pași:

  1. Faceți clic dreapta în fereastra Project și alegeți Create > Shader > Standard Surface Shader.
  2. Denumiți shaderul CustomTerrainShader și deschideți-l în editorul de cod preferat.

Înlocuiți codul de shader implicit cu următorul:

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. Aplicarea Shader-ului pe teren

După crearea shader-ului, trebuie să-l aplicați pe materialul terenului:

  • Faceți clic dreapta în fereastra Proiect și selectați Creare > Material. Denumiți acest material TerrainMaterial.
  • În Material Inspector, faceți clic pe meniul derulant Shader și alegeți Custom > TerrainShader.
  • Atribuiți texturi pentru MainTex și BumpMap în Material Inspector.
  • Acum, atribuiți acest material terenului dvs. selectând obiectul Teren, mergând la Terrain Inspector și setând TerrainMaterial în secțiunea Materials.

4. Modificarea Shader-ului pentru performanță

Pentru a ne asigura că shaderul funcționează fără probleme, în special pe terenuri mari, putem modifica câteva setări:

  • Reduceți rezoluția hărții normale sau utilizați una simplificată pentru a reduce încărcarea GPU-ului.
  • Dezactivați orice caracteristică a shader-ului pe care nu le utilizați (cum ar fi maparea paralaxă sau efecte de iluminare suplimentare).
  • Utilizați sistemul încorporat Terrain LOD de la Unity pentru a regla dinamic nivelul de detaliu pe părți îndepărtate ale terenului.

5. Ajustări și testare finale

Odată ce shader-ul este aplicat și terenul este configurat, testați-l în diferite condiții de iluminare. Puteți ajusta proprietățile Specular și Smoothness ale umbritorului pentru a vedea cum acestea afectează aspectul general al terenului dvs. în diferite medii.

Concluzie

Cu un umbritor de teren personalizat, puteți îmbunătăți fidelitatea vizuală a terenurilor dvs., menținând în același timp controlul asupra performanței. Simțiți-vă liber să extindeți acest shader adăugând caracteristici suplimentare, cum ar fi texturi de detaliu, mapare triplanară sau teselare.