Unity-URP学习笔记(四)赛璐珞高光
URP卡通赛璐璐高光
结果展示
Shader展示
Shader "MyURP/CharMainCellPlus"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_OutlineColor("OutlineColor", Color) = (0,0,0,1)
_Outlinewidth("Outlinewidth", Range(0, 10)) = 0.1
_ShoWrenderQueue("ShoWrenderQueue",Int)= -1
_CellWidth("CellWidth",Range(-1,1))=0.5
_CellColor("CellColor",Color) = (0,0,0,0)
_HighLightWidth("HighLightWidth",Range(-1,1))=0.5
_HighLightColor("HighLightColor",Color) = (1,1,1,1)
}
SubShader
{
Pass
{
Name "BASE"
Tags
{
"RenderType" = "Opaque"
"Queue" = "Geometry"
"lightmode" = "LightweightForward"
}
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
#pragma target 3.0
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
//传入顶点着色器的数据
struct a2v
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : norMAL;
};
//传入片元着色器的数据
struct v2f
{
float4 worldPos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 viewDir : TEXCOORD1;
float3 worldnormal : TEXCOORD2;
};
TEXTURE2D(_MainTex);
SAMPLER(sampler_MainTex);
CBUFFER_START(UnityPerMaterial)
float4 _Color;
float4 _MainTex_ST;
float4 _OutlineColor;
float _Outlinewidth;
int _ShoWrenderQueue;
float _HighLightWidth;
float4 _HighLightColor;
float _CellWidth;
float4 _CellColor;
CBUFFER_END
//顶点着色器
v2f vert(a2v v)
{
v2f o;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.worldPos = TransformObjectToHClip(v.vertex);
o.worldnormal = TransformObjectToWorldnormal(v.normal);
o.viewDir = normalize(_WorldspaceCameraPos.xyz-TransformObjectToWorld(v.vertex.xyz));
return o;
}
//片元着色器
half4 frag(v2f i) : SV_Target
{
Light mainLight = GetMainLight();
half LdotN = dot(mainLight.direction,i.worldnormal);
LdotN = saturate(step(0,LdotN-_CellWidth));
///
half3 halfAngle = normalize(normalize(mainLight.direction)+normalize(i.viewDir));
half HdotN = saturate(dot(halfAngle,i.worldnormal));
HdotN = saturate(ceil(HdotN-_HighLightWidth));
///
half4 Albedo = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
///
half4 BaseColor = lerp(_CellColor,_Color,LdotN)*Albedo;
half4 FinalColor= lerp(BaseColor,_HighLightColor*Albedo,HdotN);
return FinalColor;
}
ENdhlSL
}
UsePass "MyURP/Outline/OUTLINE"
//UsePass "MyURP/NewOutline/NEWOUTLINE"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。