Een aangepaste terreinshader maken in Unity
In deze tutorial maken we een aangepaste terreinshader in Unity om uw terrein realistischere texturen en belichting te geven. Deze aanpak zorgt voor betere prestaties en controle over hoe het terrein interageert met lichten, schaduwen en andere omgevingseffecten. We behandelen het instellen van de shader, het gebruiken ervan met Unity's terreinsysteem en het maken van aanpassingen voor optimale prestaties.
1. Het terrein opzetten
Voordat we beginnen met het maken van de shader, gaan we eerst het terrein in Unity instellen:
- Ga in Unity naar het menu GameObject en selecteer 3D Object > Terrain.
- Dit voegt een nieuw Terrain-object toe aan uw scène. U kunt de grootte, hoogte en andere instellingen aanpassen in de Terrain Inspector.
- Zodra het terrein is gemaakt, kunt u erop schilderen met de Paint Texture-tool in de Inspector. Maar laat het voor nu leeg, want we passen een aangepaste shader toe.
2. De terreinshader maken
Laten we nu de aangepaste terreinshader maken. Volg deze stappen:
- Klik met de rechtermuisknop in het Project-venster en kies Maken > Shader > Standaardoppervlakshader.
- Geef de shader de naam CustomTerrainShader en open deze in uw favoriete code-editor.
Vervang de standaard shadercode door het volgende:
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. De shader op het terrein toepassen
Nadat u de shader hebt gemaakt, moet u deze toepassen op het terreinmateriaal:
- Klik met de rechtermuisknop in het projectvenster en selecteer Maken > Materiaal. Noem dit materiaal TerreinMateriaal.
- Klik in de Materiaalinspector op de vervolgkeuzelijst Shader en kies Aangepast > TerrainShader.
- Wijs texturen toe voor MainTex en BumpMap in de Materiaalinspector.
- U kunt dit materiaal nu aan uw terrein toewijzen door het object Terrein te selecteren, naar Terrain Inspector te gaan en TerrainMaterial in te stellen onder de sectie Materials.
4. De shader aanpassen voor betere prestaties
Om ervoor te zorgen dat de shader soepel loopt, vooral op grote terreinen, kunnen we een paar instellingen aanpassen:
- Verlaag de resolutie van de normale kaart of gebruik een vereenvoudigde kaart om de GPU-belasting te verminderen.
- Schakel alle functies van de shader uit die u niet gebruikt (zoals parallax mapping of extra lichteffecten).
- Gebruik het ingebouwde Terrain LOD-systeem van Unity om het detailniveau van afgelegen delen van het terrein dynamisch aan te passen.
5. Laatste aanpassingen en testen
Zodra de shader is toegepast en het terrein is ingesteld, test u deze in verschillende lichtomstandigheden. U kunt de eigenschappen Specular en Smoothness van de shader aanpassen om te zien hoe ze de algehele look van uw terrein in verschillende omgevingen beïnvloeden.
Conclusie
Met een aangepaste terreinshader kunt u de visuele getrouwheid van uw terreinen verbeteren terwijl u de controle over de prestaties behoudt. U kunt deze shader gerust uitbreiden door extra functies toe te voegen, zoals detailtexturen, triplanaire mapping of tessellatie.