2021年4月
开发新功能
帮助团队新成员熟悉项目
ignore 无效
清空缓存 git rm -rf --cached .
重新添加 git add .
Shader "Custom/AvatarMask" { Properties { // 纹理 [PerRendererData]_MainTex ("MainTex", 2D) = "white" {} _Offset ("Offset", Vector) = (0.5,0.5,0,0) // 羽化范围 从中心点 向外扩散 _FeatherRange ("Feather Range", Range(0, 1)) = 0.3418804 // 羽化强度 _FeatherIntensity ("Feather Intensity", Range(0, 200)) = 1 [MaterialToggle] _EnableMaskClip ("Enable MaskClip", Float ) = 0.3418804 _ClipRange ("Clip Range", Range(0, 1)) = 0.3773913 [MaterialToggle] _EnableMultiple ("Enable Multiple", Float ) = -1 // 是否开启遮罩 [MaterialToggle] _EnableCustomMask ("Enable Custom Mask", Float ) = 0 [NoScaleOffset]_Mask ("Mask", 2D) = "white" {} // _ScaleandOffset ("Scale and Offset", Vector) = (1,1,1,1) [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 } SubShader { Tags { "IgnoreProjector"="True" "Queue"="Transparent" "RenderType"="Transparent" } Pass { Name "FORWARD" Tags { "LightMode"="ForwardBase" } Blend SrcAlpha OneMinusSrcAlpha ZWrite Off CGPROGRAM #pragma vertex vert #pragma fragment frag // #define UNITY_PASS_FORWARDBASE // redefinition #include "UnityCG.cginc" #pragma multi_compile_fwdbase #pragma only_renderers d3d9 d3d11 glcore gles gles3 metal #pragma target 3.0 uniform sampler2D _MainTex; uniform float4 _MainTex_ST; uniform float _FeatherIntensity; uniform float _ClipRange; uniform fixed _EnableMaskClip; uniform float4 _Offset; uniform float _FeatherRange; uniform fixed _EnableCustomMask; uniform sampler2D _Mask; uniform float4 _Mask_ST; uniform fixed _EnableMultiple; uniform float4 _ScaleandOffset; // vert函数 接收的 输入的顶点数据 struct VertexInput { float4 vertex : POSITION; // local 坐标 x, y, z, w // 纹理坐标和 图片相关, 不一定是 0 - 1 // x uv0 range [0.425, 0567] 从左往右 // y uv0 range [0.724, 0.852] 从下往上 float2 texcoord0 : TEXCOORD0; float4 vertexColor : COLOR; // 顶点颜色 r, g, b, a }; // frag函数 接收的 顶点数据 转换后的 数据 struct VertexOutput { float4 pos : SV_POSITION; // 坐标 float2 uv0 : TEXCOORD0; // UV 纹理坐标和 图片相关 float4 vertexColor : COLOR; // 顶点经过插值后的颜色 }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; // 插值 纹理坐标 o.uv0 = v.texcoord0; // 插值 颜色 o.vertexColor = v.vertexColor; // o.pos = UnityObjectToClipPos( v.vertex ); return o; } float4 frag(VertexOutput i) : COLOR { // #define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw) // tex2D(sampler2D tex, float2 s) // 采样 Image 上的图片 float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex)); // Image 上的图片 乘 颜色 float3 emissive = (_MainTex_var.rgb * i.vertexColor.rgb); float3 finalColor = emissive; // _EnableMultiple = 1 // 使用 float2(((i.uv0.r-_ScaleandOffset.b)/_ScaleandOffset.r),((i.uv0.g-_ScaleandOffset.a)/_ScaleandOffset.g)) // _EnableMultiple = 0, // 使用 i.uv0 float2 _EnableMultiple_var = lerp( i.uv0, // (原图x - x轴偏移) / x轴比例, e.g. (1 - 0.5 / 2) // (原图y - y轴偏移) / y轴比例 float2( ((i.uv0.r - _ScaleandOffset.b) / _ScaleandOffset.r), ((i.uv0.g - _ScaleandOffset.a) / _ScaleandOffset.g) ), _EnableMultiple); float node_1483 = pow( // clamp(x, min, max) clamp( ( (1.0 - // 限制结果 [0 - 1] saturate( // 获取 两点 之间的距离 distance(_EnableMultiple_var, float2(_Offset.r, _Offset.g)) ) ) + _FeatherRange ) ,0,1), _FeatherIntensity); // 采样 遮罩 float4 _Mask_var = tex2D(_Mask,_EnableMultiple_var); // return float4(1, 1, 1, 1); // 为每个 fragment 输出颜色 // return float4(i.uv0.x, 0, 0, 1); // x轴 插值 // return float4(i.uv0.y, 0, 0, 1); // y轴 插值, 方向向下 // return float4(i.vertexColor.rgb, 1); // return tex2D(_MainTex, float2(0.4, 0.3)); // 采样原图某个点 // return tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex)); // 采样原图 // return tex2D(_Mask, TRANSFORM_TEX(i.uv0, _Mask)); // return tex2D(_Mask, i.uv0); // return float4(i.uv0.r, 0, 0, 1); // e.g. _Offset 在中心点, 整个区域 形成一个到 中心点的 圆 // return float4(distance(_EnableMultiple_var, float2(_Offset.r, _Offset.g)), 0, 0, 1); // range 决定圆的大小, intensity 决定 圆周围的模糊外圈大小 //return float4(pow(clamp((1.0 -saturate(distance(_EnableMultiple_var, float2(_Offset.r, _Offset.g))) + _FeatherRange), 0, 1), _FeatherIntensity), 0, 0, 1); return fixed4(finalColor, (_MainTex_var.a * i.vertexColor.a * lerp( lerp(node_1483, (1.0 - step(node_1483,_ClipRange)), _EnableMaskClip ) , _Mask_var.r, _EnableCustomMask ) ) ); } ENDCG } } FallBack "Diffuse" }
https://blog.csdn.net/jeff_yaojie/article/details/103507959
https://hooray.github.io/posts/cbb1760/