Math for Artists - November 21 - Live from HQ

Join us for an afternoon of math… for artists! Bill Kladis and Wyeth Johnson, senior VFX artists at Epic, and David Hill, our Principal Mathematician, will walk us through examples such as Derivatives, Cross Product, Vector Transforms, Sobel Edge and calculating gradients around distance fields. Feel free to ask your questions prior to the stream here on our forums, and they could be featured on the Q&A portion of the stream.

Thursday, November 21 @ 2:00PM ET - Countdown


Bill Kladis - Senior FX Artist
Wyeth Johnson - Technical Art Director, VFX - @SirWyeth](
David Hill - Principal Mathematician
Victor Brodin - Community Manager - @victor1erp](

David’s Slide Deck

Math for Artists | Live from HQ | Inside Unreal - YouTube

Victor, will you talk about fractal creation?

Hi! What is the price? Or it’s free?

The streams are free, and I believe everything shown will just use the base UE4 package which is also free.
Just head to either the Twitch or Youtube link from the first post once the timer hits zero (2 PM ET, every thursday usually).

Well, artists also poke at Blueprints that also require math… Is this stream only going to cover math in materials ?

I Often get Dot Product and Cross Product confused/mixed. I know one is an angle and one is a normal but I usually have to look up which is which. Any clever pneumonic or trick to keep them straight?

One rough math thing that I just never got through in materials… is how to replicate the math that goes into a vertex offset… to feed into a fresnel. Any tips here would be very helpful.

can you show how to rotate a world normal in shader? or a world position in shader? as to rotate a tri planar projection?
like spin a worldalignedtexture node by a vector?

can you show how to spin an object with world position offset?

or maybe go deeper into the math of pivot painter 2 vs pivot painter 1?

HI my question is how we can shift zero-point (centre) UE4 . for example, if we want to work with a Real Coordinate system like this numbers x 52363706.0m y 5622207.0m z 54.257m its far from the center and its make problem. any way to shift centre to specified coordinate?

Can you post link to a sample project demonstrated in the stream?

yes please! D:

I’ve shared David’s slide deck under “Resources” in the OP, but the projects were for visual reference only, and will unfortunately not be shared. However, similar examples to Wyeth’s Niagara particles will be released as part of our Content Examples for Niagara in the future.

Bill Kladis said the laser examples would be shared at 30:20 in the video.

Bill Kladis 30:19

I specifically need this example to see how his laser locations were being updated and /or stored and how they were being drawn

The laser graphics is just a plane (or ribbon particle) with gradient map on masked glowing material.
You set ribbon’s origin to raycast origin and ribbon end to hit location in world space…

Then you get the hit surface’s normal and do the math he shows to find vector for the next raycast.
I’m pretty sure it’s a For(x) loop, at least in C++ I just run a loop for the amount of rays I want to test.

Oh there’s builtin function in engine for that btw:…tor/index.html

Use case:

for (int32 i=0; i < MyReflectionLimit; i++) {

            const FVector Reflection = FMath::GetReflectionVector( REF_Location, REF_LastHit.ImpactNormal );


            FHitResult REF_Hit;
            if ( RayTrace(Channel, REF_Hit, REF_Location, Reflection, TraceParameters) ) {
                REF_LastHit = REF_Hit;
                REF_Location = REF_LastHit.Normal + REF_LastHit.ImpactPoint;

bool RayTrace(const TEnumAsByte<ECollisionChannel> &TraceChannel, FHitResult &Hit, const FVector &Start, const FVector &End, FCollisionQueryParams &Parameters) {

           Hit = FHitResult(ForceInit);
           GetWorld()->LineTraceSingleByChannel(Hit, Start, End, TraceChannel, Parameters);

           return ( Hit.GetActor() != nullptr );

Does anyone know how the gizmo controls were setup during the laser demo? It looked like the default editor widget was in the runtime. Curious to know how they did that

Is there an ETA on this or is it already in the examples and i missed it

@VictorLerp it was mentioned in the stream that we would get access to the project files. Would you guys mind updating the post and adding the project files? That would be awesome!

We mentioned that some of the examples shown would be built into the Content Examples Project. You can find it in the Learn Tab on the Launcher for all engine versions. Take a look at the Niagara examples!

Do you know if the laser example is also included? Good to know though. Thanks!