unityzgy/Assets/ThirdPackages/VRPackage/VRTK/Scripts/Internal/Shaders/VRTK_OutlineBasic.shader
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

104 lines
2.9 KiB
GLSL

Shader "VRTK/OutlineBasic"
{
Properties
{
_OutlineColor("Outline Color", Color) = (1, 0, 0, 1)
_Thickness("Thickness", float) = 1
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
}
// Fill the stencil buffer
Pass
{
Stencil
{
Ref 1
Comp Always
Pass Replace
ZFail Replace
}
ColorMask 0
}
// Draw the outline
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off // On (default) = Ignore lights etc. Should this be a property?
Stencil
{
Ref 0
Comp Equal
}
CGPROGRAM
#pragma vertex vert
#pragma geometry geom
#pragma fragment frag
#include "UnityCG.cginc"
half4 _OutlineColor;
float _Thickness;
struct appdata
{
float4 vertex : POSITION;
};
struct v2g
{
float4 pos : SV_POSITION;
};
v2g vert(appdata IN)
{
v2g OUT;
OUT.pos = UnityObjectToClipPos(IN.vertex);
return OUT;
}
void geom2(v2g start, v2g end, inout TriangleStream<v2g> triStream)
{
float width = _Thickness / 100;
float4 parallel = (end.pos - start.pos) * width;
float4 perpendicular = normalize(float4(parallel.y, -parallel.x, 0, 0)) * width;
float4 v1 = start.pos - parallel;
float4 v2 = end.pos + parallel;
v2g OUT;
OUT.pos = v1 - perpendicular;
triStream.Append(OUT);
OUT.pos = v1 + perpendicular;
triStream.Append(OUT);
OUT.pos = v2 - perpendicular;
triStream.Append(OUT);
OUT.pos = v2 + perpendicular;
triStream.Append(OUT);
}
[maxvertexcount(12)]
void geom(triangle v2g IN[3], inout TriangleStream<v2g> triStream)
{
geom2(IN[0], IN[1], triStream);
geom2(IN[1], IN[2], triStream);
geom2(IN[2], IN[0], triStream);
}
half4 frag(v2g IN) : COLOR
{
_OutlineColor.a = 1;
return _OutlineColor;
}
ENDCG
}
}
FallBack "Diffuse"
}