This was absolutely fantastic. I'm just getting started in UE. Nearly every tutorial I come across that's "beginner" is just a paint-by-numbers with no technical explanation of why each decision is being made. I appreciated this video soooo much. I hope to catch a stream soon! Cheers
You can do that by using XY coords to sample 2D noise. It can be a texture (e.g. Clouds from Photoshop or anything from Substance Designer). If pure randomness is okay, you can use a cheap 2D noise instead: ua-cam.com/video/jtABrURpEc8/v-deo.html
Actually yes, thanks. And there's the perspective correction (unlike the PlayStation 1) stackoverflow.com/a/24460895 "the depth of the fragment is not linear in window coordinates, but the depth inverse (1/gl_Position.w) is. Accordingly the attributes and the clip-space barycentric coordinates, when weighted by the depth inverse, vary linearly in window coordinates."
Right now, i am working on worldaligned uvs. I am dividing the Y of the absolute world position with the X of the vertex normals to neutralize the scaling when projecting the textures on a flat surface. This works great, but at a specific angle the world position is divided by 0 and unreal does not like this :). Normally a mask and another projection from another axis would solve this problem. I had the idea to offset the worldspace (and vertex normals) by a few degrees, so you would never notice the scaling issue while working with the grid. This would allow me to half the amount of texture samplers for a XY projection. My only problem is I do not know how or if this is even possible in the shader editor. And thank you for the videos. They are awsome! :)
@@TechArtAid Thank you, great idea! I tried it.... and came to the conclusion that I have nothing to divide it with (because of the projection). So there was this cheap rotate function in unreal (yes the "cheap" function you liked so much in one of your streams :)). I took and modified what i needed from it and now the shader works like a charm :).
hrm.. in the 'burning ghost' example, what happens when you have more than one? is there any smart way to handle multiple ghosts contributing their own radius/position to this effect?
If you need a few, pass them as separate parameters, calculate their radial masks then combine it via Max nodes (the greater of 2 masks always "wins" - which is nicer than Add). If you have dozens, you can generate a little 32-bit (HDR) texture, with their positions written as pixel values. Then HLSL to loop over that
I'm so happy to see you uploading videos again after such a long time.
I've learned a lot from you, excited to learn more!
Thank you
You just cant imagine how happy I am to see your videos again. Right now I cant watch because of work, but I am watching little by little.
Fantastic! I found the joy of it again. Streaming every Thursday, talking to others in the chat, added spontaneous energy :)
This was absolutely fantastic. I'm just getting started in UE. Nearly every tutorial I come across that's "beginner" is just a paint-by-numbers with no technical explanation of why each decision is being made. I appreciated this video soooo much. I hope to catch a stream soon! Cheers
Awesome stuff, helped me understand position materials better and gave me some new ideas.
Great video man. You are such a honest and talented man. Thank you so much
Thank you for the tutorial. Found exactly what i needed (planar mapping).
Cheers!
thanks!
This helped alot, thanks!
Dzięki 👏
cool
51:20 Would it be possible to make this work horizontally? I want to make buildings with different colors by moving them in x/y
You can do that by using XY coords to sample 2D noise. It can be a texture (e.g. Clouds from Photoshop or anything from Substance Designer). If pure randomness is okay, you can use a cheap 2D noise instead: ua-cam.com/video/jtABrURpEc8/v-deo.html
12:00 Isn't it actually barycentric interpolation between the triangle's vertices? (It would be linear if we were only rendering lines)
Actually yes, thanks. And there's the perspective correction (unlike the PlayStation 1)
stackoverflow.com/a/24460895
"the depth of the fragment is not linear in window coordinates, but the depth inverse (1/gl_Position.w) is. Accordingly the attributes and the clip-space barycentric coordinates, when weighted by the depth inverse, vary linearly in window coordinates."
Right now, i am working on worldaligned uvs. I am dividing the Y of the absolute world position with the X of the vertex normals to neutralize the scaling when projecting the textures on a flat surface. This works great, but at a specific angle the world position is divided by 0 and unreal does not like this :). Normally a mask and another projection from another axis would solve this problem. I had the idea to offset the worldspace (and vertex normals) by a few degrees, so you would never notice the scaling issue while working with the grid. This would allow me to half the amount of texture samplers for a XY projection.
My only problem is I do not know how or if this is even possible in the shader editor.
And thank you for the videos. They are awsome! :)
Thx :) Hmm. Maybe remap the normal X so that it never reaches zero? Lerp (0.2, 1.0, normalX) for example
@@TechArtAid Thank you, great idea! I tried it.... and came to the conclusion that I have nothing to divide it with (because of the projection). So there was this cheap rotate function in unreal (yes the "cheap" function you liked so much in one of your streams :)). I took and modified what i needed from it and now the shader works like a charm :).
Great :D
hrm.. in the 'burning ghost' example, what happens when you have more than one? is there any smart way to handle multiple ghosts contributing their own radius/position to this effect?
If you need a few, pass them as separate parameters, calculate their radial masks then combine it via Max nodes (the greater of 2 masks always "wins" - which is nicer than Add).
If you have dozens, you can generate a little 32-bit (HDR) texture, with their positions written as pixel values. Then HLSL to loop over that
I have tried a few tutorials and none of them and same with. I have tried all the RBG colors in the mask and only one axis works.
saturate is not clamp -> Values less than 0 are raised to 0; values greater than 1 are lowered to 1;
Yup? therefore it's Clamp(x, 0, 1)
why not use fmod instead of frac ?
fmod(x, 1)? Why should I?