{"id":1643,"date":"2026-10-20T18:07:42","date_gmt":"2026-10-20T09:07:42","guid":{"rendered":"https:\/\/heyyocg.link\/?p=1643"},"modified":"2026-10-20T23:34:51","modified_gmt":"2026-10-20T14:34:51","slug":"ue5-fluid-dissolve-coloso","status":"publish","type":"post","link":"https:\/\/heyyocg.link\/en\/ue5-fluid-dissolve-coloso\/","title":{"rendered":"[UE5 Niagara] Skip the Heavy Cost: How a Game-Ready Pseudo-Fluid Dissolve Works with Curl Noise \u00d7 Advection"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Once you get a bit comfortable making effects, there&#8217;s one kind of expression everyone wants to try at least once: <strong>fluid<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Magic where a silhouette ripples and flows like liquid, or a character who collapses and drifts away like smoke\u2026 Have you ever looked at rich, organic effects like these and thought, &#8220;I want to make that for my own game!&#8221;?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The trouble is, the moment you actually try to build a fluid simulation, you tend to run straight into a big wall: the technical hurdles, and above all, the performance cost.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article, aimed at anyone who wants to take their effects up a level, I&#8217;ll explain the idea of a game-friendly &#8220;pseudo-fluid,&#8221; and the mechanism at its core: <strong>advection<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">One of the example effects from my Coloso course Mastering the Mechanics of Advanced Niagara &amp; Material VFX \u2192 <a href=\"https:\/\/t.co\/tUTQstjRxk\">https:\/\/t.co\/tUTQstjRxk<\/a><br><br>This one is a pseudo-fluid dissolve effect!<br><br>&#8211; Since the pseudo-fluid is processed in 2D, it\u2019s relatively lightweight<br>&#8211; I also introduce a\u2026 <a href=\"https:\/\/t.co\/4zXBMeT0j1\">pic.twitter.com\/4zXBMeT0j1<\/a><\/p>&mdash; HeyYo (@yo_hanashima) <a href=\"https:\/\/x.com\/yo_hanashima\/status\/2012510214818607130?ref_src=twsrc%5Etfw\">January 17, 2026<\/a><\/blockquote><script async src=\"https:\/\/platform.x.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Real-Time Fluids Today, and the &#8220;Pseudo-Fluid&#8221; Option<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the Unreal Engine world, there are more and more great features and tools for running full-blown fluid simulation in real time inside UE, such as Epic&#8217;s official Niagara Fluids plugin and FluidNinja Live.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With these, you really can create high-quality fluids in UE. It&#8217;s exciting to realize that fluids now run in real time!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But once you try to put them into an actual game, the story changes a little.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Running a proper grid-based fluid dynamics simulation in real time is still very expensive on the GPU, and it eats up a lot of memory at the same time. For games targeting high-end PCs or current-gen consoles like the PS5, that can be fine. But if you also need to support more modest hardware, such as typical PCs, it&#8217;s not something you can casually spawn whenever you like.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s where the approach in this article comes in: compared with true 3D fluid processing, it keeps the cost down while still producing something that <em>looks<\/em> convincingly fluid.<br>It relies on two tricks:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Compute in 2D space (a texture), not 3D space<\/strong><br>First, we write the character&#8217;s current appearance (its color and a silhouette mask) into a render target as a 2D image. Then we apply the fluid processing to that 2D image, much like a post-process.<\/li>\n\n\n\n<li><strong>Use curl noise instead of heavy physics<\/strong><br>Instead of rigorously computing the fluid&#8217;s complex velocity, we use Niagara&#8217;s Sample Noise Field (curl noise). The swirling curl-noise vectors stand in for &#8220;the direction and speed of the flow.&#8221;<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ad800e44f156&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ad800e44f156\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/heyyocg.link\/wp-content\/uploads\/2026\/10\/approach_a_render_to_2d.jpg\" alt=\"A screen-space region (Umin, Umax, Vmin) drawn around a character in the 3D viewport, next to the render target RT_FluidDissolve that the region is written into\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Compute in 2D, not 3D: write the character&#8217;s appearance into a 2D texture<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ad800e44f695&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ad800e44f695\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/heyyocg.link\/wp-content\/uploads\/2026\/10\/approach_b_curlnoise.jpg\" alt=\"Diagram: curl noise is used as velocity to get Frame 1's color from Frame 0's color\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Use curl noise instead of physics: treat the noise as velocity and move the color<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">This greatly reduces both the performance cost and the memory usage. So how do we use that noise to make the image distort in a fluid-like way?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Heart of Fluids: Understanding Advection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In fluid simulation, the way water or ink is carried along by the flow is called <strong>advection<\/strong>. This is the highlight of the whole article!<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ad800e44fa25&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ad800e44fa25\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/heyyocg.link\/wp-content\/uploads\/2026\/10\/03a_backtrace_velocity.jpg\" alt=\"Diagram: tracing a Frame 1 cell's velocity vector backward to find which Frame 0 cell it came from\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">1. Trace the current cell&#8217;s velocity backward<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ad800e44fc36&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ad800e44fc36\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/heyyocg.link\/wp-content\/uploads\/2026\/10\/03b_backtrace_fetch.jpg\" alt=\"Diagram: the color at the previous-frame position found in Frame 0 is brought into the Frame 1 cell\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">2. Fetch the color from the previous-frame position<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\">Backward tracking: work out not &#8220;where the color flows to,&#8221; but &#8220;where it flowed from&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Say we want to decide the color of a cell in the current frame.<br>The intuitive way to think about it is &#8220;push the color at this spot along the direction of the noise.&#8221; Fluid simulation, however, does the opposite.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">&#8220;Using the velocity (the noise) flowing through your current position, work backward to find where the color came from one frame ago, and take that color.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">This is called backward tracking.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Get the flow velocity at the cell you&#8217;re in (the direction and strength of the curl noise).<\/li>\n\n\n\n<li>Extend a line in the opposite direction of that velocity to calculate the position one frame ago.<\/li>\n\n\n\n<li>Read the color and mask at that previous-frame position, and write them into your current cell (advect them).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Repeat this for every cell on the screen, every frame, and the character&#8217;s colors get pulled into the swirls of the noise and warp beautifully, giving you a gorgeous fluid effect!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">From Theory to Implementation: Key Points for Building It in Niagara<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do you have a rough picture now of what &#8220;backward tracking&#8221; means, and of &#8220;taking the color from one frame ago&#8221;?<br>Of course, it&#8217;s hard to feel like you fully get it from text and diagrams alone. Fluids work in a slightly unusual way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On top of that, when you actually try to build this in Niagara, there&#8217;s one more hurdle to clear.<br>This kind of processing can&#8217;t really be built with the usual features for spawning and updating particles (such as Particle Update) alone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To run this calculation inside Niagara, you&#8217;ll use two features: <strong>Simulation Stages and the Grid 2D Collection<\/strong>.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ad800e45014b&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ad800e45014b\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/heyyocg.link\/wp-content\/uploads\/2026\/10\/04_pseudo_fluid_pipeline.jpg\" alt=\"Diagram: inside a Simulation Stage, a Grid 2D Collection uses Scene Color, Stencil Mask and Curl Noise to run the pseudo-fluid simulation, then passes the result through a Render Texture to a Material\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Overview of the pseudo-fluid pipeline built with Simulation Stages and a Grid 2D Collection<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>How do you accurately write the character&#8217;s appearance into a 2D grid?<\/li>\n\n\n\n<li>How do you use Simulation Stages to run per-pixel processing?<\/li>\n\n\n\n<li>How do you calculate screen UV coordinates so everything lines up?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Turning the theory into actual node setups means digging into some of Niagara&#8217;s more advanced features.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">If You Want to Learn the Implementation from Scratch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If this article made you think, &#8220;I want to be able to build this pseudo-fluid system with my own hands!&#8221; or &#8220;I want to master Simulation Stages and Grid 2D!&#8221;\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I walk through the implementation step by step in my online course on Coloso, so feel free to check it out!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd3d Coloso course: Mastering the Mechanics of Advanced Niagara &amp; Material VFX<br><a href=\"https:\/\/coloso.global\/en\/products\/vfxartist-heyyo-us\">https:\/\/coloso.global\/en\/products\/vfxartist-heyyo-us<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">The English subbed version of my class \u201cMastering the Mechanics of Advanced Niagara &amp; Material VFX&quot; is now up for pre-order on Coloso(<a href=\"https:\/\/x.com\/colosoglobal?ref_src=twsrc%5Etfw\">@colosoglobal<\/a>)<br><br>We&#39;ll learn how to enhance any gameplay experience with advanced, high-quality game VFX!<br><br>Link \u2192 <a href=\"https:\/\/t.co\/tUTQstjjHM\">https:\/\/t.co\/tUTQstjjHM<\/a><a href=\"https:\/\/x.com\/hashtag\/coloso?src=hash&amp;ref_src=twsrc%5Etfw\">#coloso<\/a> <a href=\"https:\/\/t.co\/ySXgSc75bQ\">pic.twitter.com\/ySXgSc75bQ<\/a><\/p>&mdash; HeyYo (@yo_hanashima) <a href=\"https:\/\/x.com\/yo_hanashima\/status\/2001834875842617482?ref_src=twsrc%5Etfw\">December 19, 2025<\/a><\/blockquote><script async src=\"https:\/\/platform.x.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(The fluid dissolve covered in this article is taught hands-on, from the basics, across <strong>Lessons 12\u201315<\/strong> of the course.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Building on the concept of advection from this article, the course covers calculating screen UVs, masking with stencils, updating data in a Grid 2D Collection, and more, checking together, one step at a time, <strong>why you connect each node the way you do<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The finished project data is included too, so you&#8217;re covered if you get stuck along the way.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Just Want to Look Inside the Finished Project?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;I don&#8217;t have time to sit through a whole course!&#8221; &#8220;I want to drop the finished system straight into my own project!&#8221; &#8220;If I can see the data, I can figure it out myself!&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For anyone in that camp, I also sell the project data on its own on Gumroad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd3d Gumroad: Dissolve Effect Project Data<br><a href=\"https:\/\/heyyohanashima.gumroad.com\/l\/iwfkbz\">https:\/\/heyyohanashima.gumroad.com\/l\/iwfkbz<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to go beyond simple effects and broaden your range, I hope you&#8217;ll explore this pseudo-fluid approach through the course or the project data!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Once you get a bit comfortable making effects, there&#8217;s one kind of expression everyone wants to try at least once: fluid. Magic where a silhouette ripples and flows like liquid, or a character who collapses and drifts away like smoke\u2026 Have you ever looked at rich, organic effects like these and thought, &#8220;I want to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1641,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_mi_skip_tracking":false,"_locale":"en_US","_original_post":"https:\/\/heyyocg.link\/?p=1639","footnotes":""},"categories":[20,17,31],"tags":[32,15,30],"class_list":["post-1643","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ue4-tutorial","category-ue","category-ue4-tech-info","tag-niagara","tag-vfx","tag-tech-info","en-US"],"modified_by":"yohanashima","_links":{"self":[{"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/posts\/1643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/comments?post=1643"}],"version-history":[{"count":6,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/posts\/1643\/revisions"}],"predecessor-version":[{"id":1692,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/posts\/1643\/revisions\/1692"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/media\/1641"}],"wp:attachment":[{"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/media?parent=1643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/categories?post=1643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/heyyocg.link\/wp-json\/wp\/v2\/tags?post=1643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}