本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~
其实和BuildIn Shader差不多,但是也有区别如下:
1.需要在Tags 内加 “RenderPipeline”=“UniversalPipeline”
2.Include 从 UnityCG.cginc 改成Packge内的文件
#include “Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl”
3.CG语法,变成了HLSL语法
TransformObjectToWorld
4.片断着色器返回half4,URP内没有fixed了
代码:
Shader "Custom/TA_URP/SimplestUnlitCopy"
{
Properties {}
SubShader
{
Tags
{
//标识SubShader URP
//对应C#代码的 Shader.globalRenderPipeline
"RenderPipeline"="UniversalPipeline"
"RenderType"="Opaque"
"Queue"="Geometry"
}
Pass
{
Blend One Zero
Cull Back
ZTest LEqual
ZWrite On
//CGPROGRAM
//换成 HLSL语法了
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
//内置渲染管线
//#include "UnityCg.cginc"
//URP种引用的都是 Packages里面的
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl"
//对应BuildIn的 appdata
//顶点着色器输入(模型的数据信息)
struct Attributes
{
//OS = Object Space 模型空间
float3 positionOS : POSITION;
};
//对应BuildIn的v2f
struct Varyings
{
float4 positionCS : SV_POSITION;
};
//顶点着色器
Varyings vert(Attributes v)
{
Varyings o = (Varyings)0;
float3 positionWS = TransformObjectToWorld(v.positionOS);
o.positionCS = TransformWorldToHClip(positionWS);
return o;
}
//URP下 没有 fixed了
half4 frag(Varyings i) : SV_Target
{
half4 c = 1;
return c;
}
ENDHLSL
}
}
//URP 比较特殊,Fallback就是这个
// 没有报错,但就是粉色
FallBack "Hidden/Shader Graph/FallbackError"
}