上面这个脚本不对吧,在URP渲染管线下可以使用UnityCG.cginc吗?
时间: 2024-03-22 10:42:22 浏览: 98
UnityCG.cginc
非常抱歉,我犯了一个错误。在Universal Render Pipeline (URP)中,需要使用SRP (Scriptable Render Pipeline)的shader API而不是UnityCG.cginc,我应该使用URP的shader API。下面是一个修改过的脚本:
``` shader
Shader "Custom/URP Blinking"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_BlinkSpeed ("Blink Speed", Range(0.1, 10)) = 1
}
SubShader
{
Tags {"Queue"="Transparent" "RenderType"="Opaque"}
Pass
{
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
CBUFFER_START(UnityPerMaterial)
UNITY_DEFINE_PER_MATERIAL_MAIN_LIGHT_SHADOW(UnityPerMaterialShadow)
float4 _Color;
float _BlinkSpeed;
float _Time;
float4 _MainTex_ST;
TEXTURE2D(_MainTex);
SAMPLER(sampler_MainTex);
CBUFFER_END
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
float4 tex = UnitySampleTexture(sampler_MainTex, _MainTex, i.uv * _MainTex_ST.xy + _MainTex_ST.zw);
float t = _Time * _BlinkSpeed;
float blink = sin(t) * 0.5 + 0.5;
fixed4 col = lerp(_Color, float4(1,1,1,1), blink);
return tex * col;
}
ENDHLSL
}
}
FallBack "Diffuse"
}
```
现在,这个shader使用了URP的shader API,并且支持闪烁效果。需要在Material中设置_MainTex和_Color属性,并且可以通过调整_BlinkSpeed属性来改变闪烁速度。
阅读全文