- Home /
 
Dematerialisation Effect
Firstly, sorry about the name, I can't think of a more suitable description for the effect.
Hi all, I have been looking for a way to achieve a specific visual effect in Unity3D. The effect would be of a model changing into "energy" and then that energy being drawn to a singular point in space. A similar effect to the capturing effect for Pokemon Origins; shown in the GIF below.

I've already tried using particle systems, but the amount required kills the frame rate. I was hoping to achieve this with some advanced shaders. Unless someone here can think of a better solution?
A Blendshape can do it in conjunction with a good shader.
Answer by Scribe · Jan 11, 2015 at 07:12 PM
As meat said, and animation or blendshape to make your geometry collapse to a point would be a good start, here's a little test shader I made to try the effect out, you can change 'Amount' from 0 to 1 to blend the effect:
 Shader "Custom/Dematerialize" {
     Properties {
         _MainTex ("Base (RGB)", 2D) = "white" {}
         _BumpMap ("Bumpmap", 2D) = "bump" {}
         _MainColor ("Main Color", Color) = (1.0,1.0,1.0,1.0)
         _RimColor ("Rim Color", Color) = (1.0,1.0,1.0,1.0)
         _Amount ("Amount", Range(0.0, 1.0)) = 0
     }
     SubShader {
         Tags { "RenderType"="Opaque" }
         LOD 200
         
         CGPROGRAM
         #pragma surface surf SimpleLambert
 
         sampler2D _MainTex;
         sampler2D _BumpMap;
         float4 _MainColor;
         float4 _RimColor;
         float _Amount;
         
         half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten) {
             half NdotL = dot (s.Normal, lightDir);
             half4 c;
             half t = (NdotL * atten * 2);
             t = lerp(t, 1, _Amount);
             c.rgb = s.Albedo * _LightColor0.rgb * t;
             c.a = s.Alpha;
             return c;
         }
 
         struct Input {
             float2 uv_MainTex;
             float2 uv_BumpMap;
             float3 viewDir;
         };
 
         void surf (Input IN, inout SurfaceOutput o) {
             half4 c = tex2D (_MainTex, IN.uv_MainTex);
             o.Albedo = c.rgb*(1-_Amount) + (_MainColor*_Amount);
             o.Alpha = c.a;
             o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
             half rim = 1.0 - saturate(dot(normalize(IN.viewDir), o.Normal));
             o.Emission = _RimColor.rgb * lerp(0, pow(rim, _Amount), _Amount);
         }
         ENDCG
     } 
     FallBack "Diffuse"
 }
 
              I didn't know unity had support for blendshapes, I had actually already built the effect using blendshapes + geometry cache in $$anonymous$$aya but wasn't able to export to Unity reading that it only supported rigging animation not vertex animation.
I also tested out the shader and it gives a pretty good effect using some random noise for the bumpmap, and as a plus it also works with my camera post effect.
Glad you got it working nicely :) I'm sure that you could make better effects than this shader but its a nice start! Thanks for marking as answered.
Answer by RetepTrun · Jan 11, 2015 at 06:38 PM
Maybe fade out using the alpha of Mu's texture while increasing its shininess and simultaniously do a particle effect for the green dots, and add some other shiny distracting particles. Also have Mu scrunch up into a ball as much as he can really fast.
I think actually morphing him into lightning or whatever would be really hard.
Thanks for the feedback, unfortunately I'm utilizing a custom TriangleDepthNormals edge detection post effect that doesn't play well with transparency.
Your answer
 
             Follow this Question
Related Questions
How on earth did they create Elizabeth's tears? 0 Answers
Losing image effects in build process 1 Answer
Trying to achieve this color effect 0 Answers
Vortex Image Effect 1 Answer
Subnautica like underwater effect / rays 0 Answers