Just looking for a little insight; How do you approach creating effects like this? Do you see other shaders and try and experiment with the concepts it utilizes, or do you go in knowing what effect you're out to achieve, and work backwards from there?
Again, very awesome stuff.
....and I'm about to read the crap out of all of your breakdowns.
Just looking for a little insight; How do you approach creating effects like this? Do you see other shaders and try and experiment with the concepts it utilizes, or do you go in knowing what effect you're out to achieve, and work backwards from there?
Again, very awesome stuff.
....and I'm about to read the crap out of all of your breakdowns.
Thanks! It really depends, sometimes it just comes from something in my head, sometimes I get inspired by something someone else made. Sometimes it's just me repurposing something I made previously to see what else I can do with it.
For example, I wanted to do the Fog of War thing after I saw this cool effect on twitter https://twitter.com/phi6/status/989638191949975552 So, i basically tried to create my own version of "Fog of War", and the character teleportation effect is the same Fog of War shader just being used in a different context with some aesthetic changes.
@DeepSpaceBanana Out of curiosity, are you planning on doing the write up for the ue4 vertex deformations experiments? I have a lot of interest in that piece and haven't been able to achieve a similar effect myself.
@DeepSpaceBanana Out of curiosity, are you planning on doing the write up for the ue4 vertex deformations experiments? I have a lot of interest in that piece and haven't been able to achieve a similar effect myself.
@Jack M. I'll get to it eventually, but it's pretty straightforward, you just generate a spherical normal Vector from the Blueprint Location and multiply it with a sphere mask and a scalar parameter to control deformation, and you have the option of combining it with some noise to get the fractured look. That being said I haven't resolved the surface normal, so there are a lot of lighting errors.
That's a really interesting technique. I think I'll give it a few goes. I feel like there might be something there for dynamic terrain deformation (craters and such).
Test render for a location-based foliage growth shader, Meshes are just scaled in the shader atm. I still need to bring my growth vertex animations out of Houdini, unfortunately, I’m only using an apprentice license atm, so i don’t think I can export that. All assets are from the free samples in megascans.
The basic Idea is to scale instances based on a sphere mask
@DeepSpaceBanana As always thank you for the excellent breakdown information, you're doing everyone a great service when you do them. I'm curious as to what the differences are between your method for the char and burn areas and say an IF node or 2? I imagine some level of greater control, any performance gain or is IF just utilized better in other situations?
@DeepSpaceBanana As always thank you for the excellent breakdown information, you're doing everyone a great service when you do them. I'm curious as to what the differences are between your method for the char and burn areas and say an IF node or 2? I imagine some level of greater control, any performance gain or is IF just utilized better in other situations?
Thanks guys, appreciate it.
@zachagreg Generally, at least from my understanding, with shaders, you want to try and avoid conditional statements whenever possible as they are computationally a little expensive, same with inverse Trignometry functions. Which is why I'm using the gradient sampling technique instead. I also feel it is a lot more elegant than having a bunch of If statements. And the gradient is actually easy to control, you can control where it's sampled as well as the width of the gradient.
Basically with if statements, both conditions, true and false operations have to be processed regardless of what the actual boolean result is, which leads to more instructions, that being said, I haven't done a hard comparison between my technique and using if conditions yet.
Thanks for the clarification. I doubt a hard comparison would be needed if that's the case of processing the IF statement. Also like you mentioned the elegance of your method no doubt adds another layer of control and variation that IF statements wouldn't allow. Thanks again for the info!
conditionals are 'expensive' in the sense that they aren't hard branching code, they execute all code regardless of whether or not a conditional is matched. if the logic going into a conditional is relatively effective, they are generally okay. math operations are 'cheap' on current gen hardware. texture fetches are not.
Hey there @DeepSpaceBanana I really love that burning shader you did and thanks a ton for the breakdown! I got one question tho, if you don't mind.
*In the sphere mask section of your breakdown you have those Parameters Collection Nodes Can you explain what actually is in them and how they work?
Hey, @Pryme_XIII , I highly recommend you read through my Wormhole Shader Breakdown first before following along with the Burn shader, as I explain how collection parameters work and how I've used them.
I made a quick version of Klemen Lozar's Fake RBD Fracture shader. I used houdini to store pivot locations for each chunk in additional UV channels and then controlled the fracture in the shader, you'll find the setup below.
Finally started playing around with render Targets, some R&D for interactive snow, that I'm going to use for my Dynamic weather system in UE4, My Grad School FInal Project.
Something I’ve been experimenting with for my MA Project, Analytic Simulated Shaders with distance fields for Interactive Ambient weather effects (Blowing leaves etc).i.e the sprites are not particles but a single static mesh. Based on @ ShaderBits 17 talk from GDC.
Starting to put together some Post FX to go with my Weather System, Made this wet screen effect last night. Fully parameterized to control speed, no of drips etc, and some condensation.
Rain effect using analytic shaders (bugged sprite rotation at the end was me trying to get the sprites to conform to the global wind turbulance the weather system uses, trying to create proper whipping effect of rain when it's windy)
The staticmesh used for the effect, it's a stack of 200 cards.
Replies
Just looking for a little insight; How do you approach creating effects like this? Do you see other shaders and try and experiment with the concepts it utilizes, or do you go in knowing what effect you're out to achieve, and work backwards from there?
Again, very awesome stuff.
....and I'm about to read the crap out of all of your breakdowns.
For example, I wanted to do the Fog of War thing after I saw this cool effect on twitter https://twitter.com/phi6/status/989638191949975552
So, i basically tried to create my own version of "Fog of War", and the character teleportation effect is the same Fog of War shader just being used in a different context with some aesthetic changes.
Thank you. Wasn't planning on doing anything with it, mostly just experiments which I eventually add to my blog
I'll get to it eventually, but it's pretty straightforward, you just generate a spherical normal Vector from the Blueprint Location and multiply it with a sphere mask and a scalar parameter to control deformation, and you have the option of combining it with some noise to get the fractured look. That being said I haven't resolved the surface normal, so there are a lot of lighting errors.
The basic Idea is to scale instances based on a sphere mask
The nodes:
Scaling the Radius of the spheremask to make it look like it's burning through the material.
Red channel of the Flow mapped noise visualized:
And the sphere mask is driven by blueprint location:
Thanks guys!
I had reworked the glitch shader a bit last weekend, added a pixellation layer, feels more glitch-like now.
Cool shaders man!
@zachagreg
Generally, at least from my understanding, with shaders, you want to try and avoid conditional statements whenever possible as they are computationally a little expensive, same with inverse Trignometry functions. Which is why I'm using the gradient sampling technique instead. I also feel it is a lot more elegant than having a bunch of If statements. And the gradient is actually easy to control, you can control where it's sampled as well as the width of the gradient.
Basically with if statements, both conditions, true and false operations have to be processed regardless of what the actual boolean result is, which leads to more instructions, that being said, I haven't done a hard comparison between my technique and using if conditions yet.
I really love that burning shader you did and thanks a ton for the breakdown!
I got one question tho, if you don't mind.
*In the sphere mask section of your breakdown you have those Parameters Collection Nodes
Can you explain what actually is in them and how they work?
If you are completely new to Unreal Be sure to read up on documentation https://docs.unrealengine.com/en-us/Engine/Rendering/Materials/ParameterCollections . You can find a lot of answers there.
Houdini Export Setup:
Point Wrangle Code:
Mesh Pre-Fracture:
Shader in Unreal using Pivot Painter Data: