https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@10.3/manual/shading-model.html
https://gist.github.com/phi-lira/225cd7c5e8545be602dca4eb5ed111ba 模板
本例 用了一个Point Light 加 DirectionLight, Bakedlit这个模型需要设置物体为static 并且light模式设为mix 或者 baked
Physically Based Shading
- Lit
- Particles Lit
这里用的是Lit,相当于老的standard,shader可以在package文件夹找到,一般用于PBR风格的PC机,高性能的平台。支持部分高单机,不支持低端手机。
Simple Lit Shading
- Simple Lit
- Particles Simple Lit
可以用于风格化的渲染(如卡渲),材质可能并不是那么的真实,diffuse和高光没啥关联,主要是基于Blinn-Phong model,并且光的衰减只会收到光intensity影响,高光反射可能会大于总入射光。
Baked Lit Shading
- 物体需要勾选static
- 灯光需要勾选 mix 或 baked
- 打开灯光选项,点击生成
Materials can receive baked lighting from either lightmaps or Light Probes
第二个还没试,第一个是可以的,据说可以有更少的花费,是专为烘培做准备的
Shaders with no lighting
- Unlit
- Particles Unlit
没光呗,不接受任何光照, 但是可以写shader自己实现,一般用于不受光照影响的物体。或者自定义shader
URP最基本的单色Shader
URP简单代码模板
Shader "MyURP/URPUnlitShaderBasic"
{
Properties
{
// _BaseColor("Base Color", Color) = (1, 1, 1, 1)
_BaseMap("Base Map", 2D) = "white"
}
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
Pass
{
Tags
{
"LightMode" = "UniversalForward"
}
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float2 uv : TEXCOORD0;
};
TEXTURE2D(_BaseMap);
SAMPLER(sampler_BaseMap);
// 不加会导致不能合批 就会画三次
CBUFFER_START(UnityPerMaterial)
// half4 _BaseColor;
float4 _BaseMap_ST;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv);
return color;
}
ENDHLSL
}
}
}
URP透明度物体模板
Tags{
"RenderPipeline"="UniversalRenderPipeline"
"RenderType"="Transparent"
"IgnoreProjector"="True"
"Queue"="Transparent"
}
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
........
}
初始化结构体
// 初始化变量
ZERO_INITIALIZE(Varyings, i);