描边 Outline
Properties
{
_MainTex("MainTex", 2D) = "white"{}
_Diffuse("Color", Color) = (1,1,1,1)
_Outline("Outline", Range(-2, 2)) = 0.1
_OutlineColor("OutlineColor", Color) = (0,0,0,0)
}
SubShader
{
Tags {
"RenderType" = "Opaque"
}
LOD 100
Pass
{
Name "OutLine"
Cull Front
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _Outline;
fixed4 _OutlineColor;
struct v2f
{
float4 vertex : SV_POSITION;
};
v2f vert (appdata_base v)
{
v2f o;
v.vertex.xyz += v.normal * _Outline;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
float4 frag (v2f i) : SV_Target
{
return float4(_OutlineColor.xyz, 1);
}
ENDCG
}
Pass
{
Cull Back
//Blend Zero One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Diffuse;
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv: TEXCOORD0;
fixed3 worldNormal : TEXCOORD1;
float3 worldPos : TEXCOORD2;
};
v2f vert (appdata_base v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex); //转换坐标到裁剪空间
o.worldNormal = UnityObjectToWorldNormal(v.normal); //物体法线转世界法线
o.worldPos = mul(unity_ObjectToWorld,v.vertex); //顶点位置信息转世界位置信息
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; //环境光
fixed4 albedo = tex2D(_MainTex,i.uv);
//漫反射
fixed3 worldLightDir = UnityWorldSpaceLightDir(i.worldPos); //求光源方向
float difLight = dot(worldLightDir,i.worldNormal) * 0.5 + 0.5;
fixed3 diffuse = _LightColor0.rgb * albedo.rgb * _Diffuse.rgb * difLight;
//fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));
//fixed3 halfDir = normalize(worldLightDir + viewDir);
fixed3 color = diffuse + ambient ;
return fixed4(color,1);
}
ENDCG
}
}
描边效果 用了两段Pass 这是正常效果 但我的场景中却是红色这个效果
Outline值改为负的也不能出现带有贴图的渲染 我想知道问题出在哪
问题解决了 urp下得加tag
虽然不知道这行什么意思
{:1_235:} 从业不识微元素,做遍项目也枉然 {:1_236:} (⊙o⊙)…
(⊙o⊙)… 顶个贴 学习一波 感谢大佬分享{:1_236:}
页:
[1]