Egna ShaderLab- och URP-HLSL-shaders
↑Hur det fungerar
Section titled “Hur det fungerar”ShaderLab beskriver strukturen med Shader, Properties, SubShader och Pass. HLSL-funktioner utför själva vertex- och fragmentberäkningarna. URP-shaders behöver normalt URP-taggar och URP-biblioteksfiler; ett exempel med Built-In Surface Shader kan inte kopieras direkt till URP.
Exemplet visar en obelyst URP-pass. Det transformerar punkter till clip space och returnerar en vald färg. Exemplet hanterar inte ljus, skuggor eller texturer, vilket gör det lättare att studera.
Exempel att prova
Section titled “Exempel att prova”Shader "HCSTech/UnlitColor"{ Properties { _BaseColor ("Base Color", Color) = (0.2, 0.8, 0.5, 1) } SubShader { Tags { "RenderPipeline" = "UniversalPipeline" "RenderType" = "Opaque" } Pass { HLSLPROGRAM #pragma vertex Vert #pragma fragment Frag #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes { float4 positionOS : POSITION; }; struct Varyings { float4 positionCS : SV_POSITION; }; CBUFFER_START(UnityPerMaterial) float4 _BaseColor; CBUFFER_END Varyings Vert(Attributes input) { Varyings output; output.positionCS = TransformObjectToHClip(input.positionOS.xyz); return output; } half4 Frag(Varyings input) : SV_Target { return (half4)_BaseColor; } ENDHLSL } }}När ska det användas och vad kan gå fel?
Section titled “När ska det användas och vad kan gå fel?”Varför constant buffer? Att lägga materialegenskaper i UnityPerMaterial följer URP:s layout för SRP Batcher. Mer avancerade shaders behöver pass-taggar och ljusbibliotek. Fallgrop: Testa på de faktiska målplattformarna, inte bara i Scene-vyn.
Öva: Skapa en Shader asset, ett material och ändra _BaseColor. Jämför med en belyst URP-shader.
