这里主要是使用一个对常规Standard Shader 外包一层的加入了消融效果的shader。效果如下:
dissolve_vertical_image_01

使用介绍:

  1. 最佳应用场景:在桌子或者地面上放置模型的AR场景。
  2. 模型的材质使用 I3d Framework/Dissolve Vertical Standard的shader。实现模型自下向上消融出现的特效。
  3. shader中Dissolve Current Height是用来设置当前模型要显示出来的高度,可以对它在unity中k动画,以实现消融出现的特效,下面提供的案例即是如此。
  4. shader中Dissolve Scale等是用来设置消融边缘的幅度等属性,需要自定义的话,可以自己调整。
  5. shader中Dissolve Noise Sample Mode提供了两种实现消融边缘的方式。默认的一种是基于模型的UV对NoiseTex进行采样,第二种是基于模型的X方向对NoiseTex进行采样(这一种适用于模型的UV切得不好时导致消融边缘能看到明显断层接缝的情况)。大多数情况使用默认的 0 = use uv即可。

主要代码:

 


void surf( Input i , inout SurfaceOutputStandard o )
{
// 前面这部分是使用 amplify 连线自动产生的代码。
float2 sampleXY = lerp( i.uv_texcoord.xy, float2(i.objectSpacePos.x, 0.5), step( 0.5, _DissolveNoiseTexSampleMode ) );
half dissolveValue = tex2D(_DissolveNoiseTex, sampleXY * _DissolveNoiseTex_ST.xy + _DissolveNoiseTex_ST.zw ).x;
// half dissolveValue = tex2D(_DissolveNoiseTex, i.uv_texcoord.xy * _DissolveNoiseTex_ST.xy + _DissolveNoiseTex_ST.zw ).x;
half deltaHeight = _CurrentHeight - i.worldPos.y + dissolveValue * _DissolveScale;
clip( deltaHeight );

float2 uv_BumpMap = i.uv_texcoord * _BumpMap_ST.xy + _BumpMap_ST.zw;
o.Normal = ( _BumpScale * UnpackNormal( tex2D( _BumpMap, uv_BumpMap ) ) );
float2 uv_MainTex = i.uv_texcoord * _MainTex_ST.xy + _MainTex_ST.zw;
o.Albedo = ( _Color * tex2D( _MainTex, uv_MainTex ) ).rgb;
float2 uv_EmissionMap = i.uv_texcoord * _EmissionMap_ST.xy + _EmissionMap_ST.zw;
o.Emission = ( tex2D( _EmissionMap, uv_EmissionMap ) * _EmissionColor ).xyz;
float2 uv_MetallicGlossMap = i.uv_texcoord * _MetallicGlossMap_ST.xy + _MetallicGlossMap_ST.zw;
float4 tex2DNode19 = tex2D( _MetallicGlossMap, uv_MetallicGlossMap );
o.Metallic = ( tex2DNode19.r * _Metallic );
o.Smoothness = ( tex2DNode19.a * _GlossMapScale );
float2 uv_OcclusionMap = i.uv_texcoord * _OcclusionMap_ST.xy + _OcclusionMap_ST.zw;
o.Occlusion = ( ( tex2D( _OcclusionMap, uv_OcclusionMap ).g * _OcclusionStrength ) + ( 1.0 - _OcclusionStrength ) );
o.Alpha = 1;

// Dissolve 这里是增加的消融效果的部分
fixed colorLerpAlpha = smoothstep( _DissolveEdgeWidth, abs(_DissolveEdgeFadeWidth) + abs(_DissolveEdgeWidth), deltaHeight );
o.Albedo = lerp( fixed3( 0.0, 0.0, 0.0), o.Albedo.rgb, colorLerpAlpha );
o.Emission = lerp( _DissolveEdgeColor.rgb, fixed3( 0.0, 0.0, 0.0 ), colorLerpAlpha );

}

 

使用时对参数的设置:

dissolve_vertical_image_02

 

附件下载:

dissolve_vertical_standard.shader

AR的“放置场景”中常用的自下而上出现模型的特效

发表评论

电子邮件地址不会被公开。 必填项已用*标注

浙公网安备 33010602005964号