描边shader outline shader

how to use

  • duplicate origin material and check outline checkbox
  • add SkeletonRendererCustomMaterials component to gameobject with SkeletonAnimation(or SkeletonMecanim)
  • set custom material overrides for every material, and uncheck override disabled checkbox
  • enable SkeletonRendererCustomMaterials component to enable outline

参考

official outline shader Spine Official Blog

Unity的描边Shader可以通过以下步骤实现: 1. 创建一个新的Shader文件并将其命名为"Outlined/CustomOutline"。 2. 在Shader文件中,定义一个新的Pass,该Pass将渲染目标对象的轮廓。在Pass中,可以使用自定义的顶点和片段着色器来创建轮廓。 3. 在顶点着色器中,可以使用顶点法线来确定物体表面的方向,并将其传递到片段着色器中。然后,在片段着色器中,可以使用该法线来计算每个片段的边缘距离,然后使用此距离来创建轮廓。 4. 最后,在Pass中,将轮廓渲染到目标对象上,并在渲染完成后将其与原始渲染结果混合。 下面是一个基本的实现示例: ``` Shader "Outlined/CustomOutline" { Properties { _MainTex("Texture", 2D) = "white" {} _OutlineColor("Outline Color", Color) = (0,0,0,1) _OutlineWidth("Outline Width", Range(0.0, 0.1)) = 0.01 } SubShader { Tags { "RenderType"="Opaque" } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // Define input structure struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; }; // Define output structure struct v2f { float4 vertex : SV_POSITION; float3 normal : TEXCOORD0; }; // Vertex shader v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.normal = mul(unity_ObjectToWorld, float4(v.normal, 0)).xyz; return o; } // Fragment shader fixed4 frag(v2f i) : SV_Target { // Calculate edge distance using normal float edge = 1 - dot(i.normal, _WorldSpaceCameraPos.xyz - mul(unity_WorldToObject, i.vertex).xyz); // Create outline using edge distance fixed4 col = tex2D(_MainTex, i.uv); col.rgb = lerp(col.rgb, _OutlineColor.rgb, edge * _OutlineWidth); return col; } ENDCG } } FallBack "Diffuse" } ``` 这里的顶点着色器将物体表面的法线转换为世界空间,并将其存储在“normal”变量中。在片段着色器中,使用法线计算每个片段的边缘距离,并将其保存在“edge”变量中。最后,使用“lerp”函数将轮廓颜色与原始颜色进行混合,以便在渲染完成后将轮廓渲染到目标对象上。 希望这可以帮助你实现描边Shader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值