Michal Piatek: TGT Competition WIP

I really like this! Very well done!

Love it! Looks so good!

Good lord… this is so well done. My favorite. Amazing piece of vfx! :heart:

This really is great! I’m sure it’ll be one of the winning entries, kudos to creating this amazing effect! :smiley:

I promised I wasn’t going to comment on this (we work together!) but this is looking really, really nice Michal. Doskonały! :grinning:

Idea of the fake 3d bubbles seems straight forward but still looking forward to break down after it’s all done. Looks great!

Looking ace, love the extra touch of tea pot steam at the end.

Thank you all for your kind words! I will probably wrap this up and submit as my final version as I have no idea how to improve this any further. I wanted to add some tessellation to get better mesh distortion but there is this bug in Unity which makes this relatively simple task hard.

Yeah super work!

One thing might be to add a bit more punch to the burst by adding some larger embers on that initial explosion and perhaps peaking the light brightness here too (instead of a few frames later).

Yea, good point. I am just bit afraid that I will loose the “melt” feel. I guess this element is not clear enough if it is a source of confusion :stuck_out_tongue:

I created an executable for you guys to check out. If anyone of you could download it, run and tell me if it works and how performance is like I would be very grateful!
https://drive.google.com/file/d/0BwBSLUWrntTbRFpjVldYU0NpTEE/view?usp=sharing

2 Likes

Just launched it, it works perfectly and looks incredible. Awesome work!

1 Like

I made some slight adjustments here and there but nothing spectacular. Here is my final version which I am going to submit later today.

Some mighty slo-mo GIFs:


Unity build which you can download & run: https://drive.google.com/file/d/0BwBSLUWrntTbX0xyekxhbXFnVU0/view?usp=sharing

Thanks for all the feedback everyone. It is the very first VFX contest I ever participated in and it has been a great experience so far!

15 Likes

I so love watching this again and again! <3
Definitely my most favourite entry.

This is soooo gooood :slight_smile:

Ok, I think time is right to post my breakdown. Each week I’ll try to show you how I created each segment of the effect. Let me know if you want me to go into details about some specific part of the effect :slight_smile:

I’ll start with the melting torus knot. I made a shader which I use for both torus and teapot. It works any mesh out there as long as it has proper, tiled UV on which I can apply a noise texture. Here are all my exposed settings seen in the material inspector:

Basically, all these parameters are driven by a particle system. In the material itself I am only setting default values or some multipliers for particle-driven params. I won’t go through every single parameter but I made a short video showing some of them in action.

As you can see i can explode a mesh and apply fake gravity force to it. The shader is squashing a mesh the closer it gets to the ground. This is using a very naive implementation which is assuming that ground is flat. I could improve the shader by using terrain heightmap as ground level etc. But this was not needed for the contest.

Other parts of the shader shown on the video are very simple - texture based dissolve and noise texture sampled in vertex shader.

One thing you probably noticed is that distorted mesh is not very smooth. I tried implementing tessellation but Unity has a bug which prevented me from using tessellation while I was passing data from vertex to fragment program. I would have to re-write the whole shader and implement deferred rendering from grounds up to get it running. Obviously I skipped this step and simply subdivided the mesh in 3ds max.

Now we come to particle-driven data. I am using Size and Color to drive some shader parameters. I also made a custom module with few curves - this is driving mesh cutout, light emission strength multiplier, collapse strength (gravity) and allows me to reference specific mesh I want to modify.

For the final version I disabled particle rendering as they do not do anything except passing data to the shader. But for breakdown purposes I enabled rendering so you could see what’s happening:

Someone asked me how do I use particles to drive the material. Well, this is pretty easy. I am using Unity’s built-in function which allows me to read each particle’s params such as size, speed, position, color, alpha etc. I am simply passing selected param values into torus’ material. Material has a custom shader I mentioned earlier which is using these params to do things. In my case I am passing only two things:

  • Size (used to set how big the litup area is)
  • Alpha (used to set how strong mesh distortion is)
  • And all the custom curves which are sampled during Emitter’s Lifetime (cutoff, gravity, emission multiplier)

For the contest I used fixed amount of particles which is 8. This is because I use a shader function with a loop in it. Shaders are pretty bad at doing loops and making a loop with dynamic amount of cycles is more expensive and only works on newer hardware. I wanted the demo to work on all judges’ PCs so I decided to limit amount of particles which can drive the shader. This can be easily extended to any amount.

As you can see, the effect looks pretty bad without any postprocessing but HDR colors are making all the difference in the world and glow helps with binding all the elements together. I also used SSAO and motion blur to make the effect look more fluid and smooth.

That’s it for now! Next week I’ll focus on these small blobs which do all sorts of different things.

15 Likes

Thanks so much for this breakdown, and congratulations! This is brilliant work! You don’t by any chance know if there is a similar way to pass particle parameter values to a shader using UE4, do you?

Back in 4.11 days there was no way to do that via blueprint but I remember that they had some very hidden particle classes you could use in C++. Probably a lot have changed since then so your best bet is to either dig the c++ documentation or just look for particle functions/classes and see what autocompletion reveals.

Sounds good. Congrats again!

Congrats! Your contest work was really inspiring for me, I also asked about particles and using them to drive material. And, thx to breakdown, now I figured out how to make something similar. Here is a little gif :slight_smile:

PS: I’m also very interested in how you made those liquid bubbles. They look very realistic.

10 Likes

That’s a cool looking test! Reminds me of Andrew Kramer’s Element 3d commercial.

I’ll cover creation of these bubbles next week so stay tuned :wink: