Skapa en anpassad terrängskuggare i Unity
I den här handledningen kommer vi att skapa en anpassad terrängskuggning i Unity för att ge din terräng mer realistiska texturer och belysning. Detta tillvägagångssätt möjliggör bättre prestanda och kontroll över hur terrängen interagerar med ljus, skuggor och andra miljöeffekter. Vi kommer att täcka inställningen av shadern, använda den med Unitys terrängsystem och göra justeringar för optimal prestanda.
1. Sätta upp terrängen
Innan vi dyker in i shader-skapandet, låt oss först ställa in terrängen i Unity:
- I Unity, gå till GameObject-menyn och välj 3D Object > Terrain.
- Detta kommer att lägga till ett nytt terrängobjekt till din scen. Du kan justera dess storlek, höjd och andra inställningar i terränginspektören.
- När terrängen har skapats kan du måla på den med verktyget Paint Texture i Inspektören. Men för nu, lämna det tomt eftersom vi kommer att tillämpa en anpassad shader.
2. Skapa terrängskuggningen
Låt oss nu skapa den anpassade terrängskuggningen. Följ dessa steg:
- Högerklicka i Project-fönstret och välj Skapa > Shader > Standard Surface Shader.
- Namnge shadern CustomTerrainShader och öppna den i din föredragna kodredigerare.
Ersätt standardskuggningskoden med följande:
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. Applicera Shader på terrängen
Efter att ha skapat shadern måste du applicera den på terrängmaterialet:
- Högerklicka i projektfönstret och välj Skapa > Material. Namnge detta material TerrainMaterial.
- I materialinspektören klickar du på rullgardinsmenyn Shader och väljer Custom > TerrainShader.
- Tilldela texturer för MainTex och BumpMap i Material Inspector.
- Tilldela nu detta material till din terräng genom att välja terrängobjektet, gå till Terränginspektören och ställa in Terrängmaterial under avsnittet Material.
4. Tweaking Shader för prestanda
För att säkerställa att shadern går smidigt, särskilt i stora terränger, kan vi justera några inställningar:
- Sänk upplösningen på den normala kartan eller använd en förenklad för att minska GPU-belastningen.
- Inaktivera alla funktioner i shadern som du inte använder (som parallaxmappning eller ytterligare ljuseffekter).
- Använd Unitys inbyggda Terrain LOD-system för att dynamiskt justera detaljnivån på avlägsna delar av terrängen.
5. Slutliga justeringar och testning
När shadern är applicerad och terrängen är uppställd, testa den i olika ljusförhållanden. Du kan justera egenskaperna Specular och Smoothness för shadern för att se hur de påverkar det övergripande utseendet på din terräng i olika miljöer.
Slutsats
Med en anpassad terrängskuggare kan du förbättra den visuella troheten i dina terränger samtidigt som du behåller kontrollen över prestandan. Utvidga gärna den här shadern genom att lägga till ytterligare funktioner som detaljstrukturer, triplanar kartläggning eller tessellation.