Hoppa till innehåll

Egna ShaderLab- och URP-HLSL-shaders

↑

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.

HCSTechUnlit.shader
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.