math for artists

live training summary

game engine Unreal Engine 4.21
project template TPS
project repo ....

Summary of Math for Artists discussion from Epic Games youtube.

vector fundamental (David Hill slide)

direction

definition math case example
math C++ example
defining vector \(\overrightarrow{a}\) $$ \overrightarrow{a} = (\color{red}{a_x}, \color{green}{a_y}, \color{blue}{a_z}) $$ $$ \overrightarrow{a} = (\color{red}{0}, \color{green}{1}, \color{blue}{2}) $$ FVector A = FVector(0.f, 1.f, 2.f);
vector length of \(\overrightarrow{a}\) $$ ||a|| = \sqrt{\color{red}{a_x}^2 + \color{green}{a_y}^2 + \color{blue}{a_z}^2} $$ $$ ||a|| = \sqrt{\color{red}{0}^2 + \color{green}{1}^2 + \color{blue}{2}^2} $$ $$ ||a|| = \sqrt 5 $$ float ALength;

ALength = A.Size(); //
normal / direction of \(\overrightarrow{a}\) $$ \overrightarrow{n_a} = \frac{\overrightarrow{a}}{||a||} $$ $$ \overrightarrow{n_a} = \frac{(\color{red}{0} , \color{green}{1} , \color{blue}{2})}{\sqrt 5} $$ $$ \overrightarrow{n_a} = (\color{red}{0} , \color{green}{\frac{1}{\sqrt 5}} , \color{blue}{\frac{2}{\sqrt 5}}) $$ FVector ANormal;

ANormal = A.GetUnsafeNormal();
normal vector
will always have
1 vector length
$$ ||n_a|| = \sqrt{\color{red}{n_x}^2 + \color{green}{n_y}^2 + \color{blue}{n_z}^2} = 1 $$ $$ ||n_a|| = \sqrt{\color{red}{0}^2 + (\color{green}{\frac{1}{\sqrt 5}})^2 + (\color{blue}{\frac{2}{\sqrt 5}})^2 } $$ $$ ||n_a|| = \sqrt{ \color{red}{0} + \color{green}{\frac{1}{5}} + \color{blue}{\frac{4}{5}} } $$ $$ ||n_a|| = 1 $$ ANormal.Size(); // 1.f
so vector contains normal and length $$ \overrightarrow{a} = (\color{red}{n_x}, \color{green}{n_y}, \color{blue}{n_z}) . ||a||$$
example:

direction and magnitude

$$ \overrightarrow{a} = (\color{red}{a_x}, \color{green}{a_y}, \color{blue}{a_z}) $$ $$ ||a|| = \sqrt{\color{red}{a_x}^2 + \color{green}{a_y}^2 + \color{blue}{a_z}^2} $$ $$ \overrightarrow{n_a} = \frac{\overrightarrow{a}}{||a||} $$ $$ \overrightarrow{n_a} = (\frac{\color{red}{a_x}}{||a||}, \frac{\color{green}{a_y}}{||a||}, \frac{\color{blue}{a_z}}{||a||}) = (\color{red}{n_x}, \color{green}{n_y}, \color{blue}{n_z})$$ $$ ||n_a|| = 1 $$ $$ \overrightarrow{a} = (\color{red}{n_x}, \color{green}{n_y}, \color{blue}{n_z}) ||a||$$ FVector a, n_a;
a = FVector(0.0f, 1.0f, 2.0f);
n_a = a / a.VectorLength();

addition

$$ \overrightarrow{a} = (\color{red}{a_x}, \color{green}{a_y}, \color{blue}{a_z})$$ $$ \overrightarrow{b} = (\color{red}{b_x}, \color{green}{b_y}, \color{blue}{b_z})$$ $$ \overrightarrow{c} = \overrightarrow{a} + \overrightarrow{b} $$ $$ \overrightarrow{c} = \overrightarrow{a} + \overrightarrow{b} = (\color{red}{a_x} + \color{red}{b_x}, \color{green}{a_y} + \color{green}{b_y}, \color{blue}{a_z} + \color{blue}{b_z})$$
example:

substraction

$$ \overrightarrow{a} = (\color{red}{a_x}, \color{green}{a_y}, \color{blue}{a_z})$$ $$ \overrightarrow{b} = (\color{red}{b_x}, \color{green}{b_y}, \color{blue}{b_z})$$ $$ \overrightarrow{c} = \overrightarrow{a} - \overrightarrow{b} $$ $$ \overrightarrow{c} = \overrightarrow{a} - \overrightarrow{b} = (\color{red}{a_x} - \color{red}{b_x}, \color{green}{a_y} - \color{green}{b_y}, \color{blue}{a_z} - \color{blue}{b_z})$$
example:

reflection vector

Wyeth method

dot product trick

$$ ||\overrightarrow{n}|| = 1$$ $$ \overrightarrow{n} = (\color{red}{n_x}, \color{green}{n_y}, \color{blue}{n_z}) $$ $$ \overrightarrow{v} . \overrightarrow{n} = \color{red}{v_x n_x} + \color{green}{v_y n_y} + \color{blue}{v_z n_z}$$ $$ \textrm{length of this side} = \overrightarrow{v} . \overrightarrow{n}$$ $$ (\overrightarrow{v} . \overrightarrow{n}) \overrightarrow{n} $$ tegak lurus di arah normal: $$ \overrightarrow{v} - (\overrightarrow{v} . \overrightarrow{n}) \overrightarrow{n} $$
reflection vector: $$ \overrightarrow{v} - 2 (\overrightarrow{v} . \overrightarrow{n}) \overrightarrow{n} $$

reflection example

transform

transform

visualization

visualization