mathe/Library/PackageCache/com.unity.shadergraph@14.0.8/Documentation~/Matrix-Construction-Node.md
2024-09-20 20:30:10 +02:00

2.4 KiB

Matrix Construction Node

Description

Constructs square matrices from the four input vectors M0, M1, M2 and M3. This node can be used to generate matrices of types Matrix 2x2, Matrix 3x3 and Matrix 4x4.

The dropdown on the node can be used to select whether the inputs values specify the matrix rows or columns.

  • Row : Input vectors specify matrix rows from top to bottom.
  • Column : Input vectors specify matrix columns from left to right.

Matrix outputs are taken from the top left corner of the construction of the inputs. This can be used to generate different dimension square matrices from different dimension vectors.

For example, connecting Vector 2 type values to inputs M0 and M1 will generate the desired matrix from the output 2x2.

Ports

Name Direction Type Description
M0 Input Vector 4 First row or column
M1 Input Vector 4 Second row or column
M2 Input Vector 4 Third row or column
M3 Input Vector 4 Fourth row or column
4x4 Output Matrix 4x4 Output as Matrix 4x4
3x3 Output Matrix 3x3 Output as Matrix 3x3
2x2 Output Matrix 2x2 Output as Matrix 2x2

Controls

Name Type Options Description
Dropdown Row, Column Selects how the output matrix should be filled

Generated Code Example

The following example code represents one possible outcome of this node per mode.

Row

void Unity_MatrixConstruction_Row_float(float4 M0, float4 M1, float4 M2, float3 M3, out float4x4 Out4x4, out float3x3 Out3x3, out float2x2 Out2x2)
{
    Out4x4 = float4x4(M0.x, M0.y, M0.z, M0.w, M1.x, M1.y, M1.z, M1.w, M2.x, M2.y, M2.z, M2.w, M3.x, M3.y, M3.z, M3.w);
    Out3x3 = float3x3(M0.x, M0.y, M0.z, M1.x, M1.y, M1.z, M2.x, M2.y, M2.z);
    Out2x2 = float2x2(M0.x, M0.y, M1.x, M1.y);
}

Column

void Unity_MatrixConstruction_Column_float(float4 M0, float4 M1, float4 M2, float3 M3, out float4x4 Out4x4, out float3x3 Out3x3, out float2x2 Out2x2)
{
    Out4x4 = float4x4(M0.x, M1.x, M2.x, M3.x, M0.y, M1.y, M2.y, M3.y, M0.z, M1.z, M2.z, M3.z, M0.w, M1.w, M2.w, M3.w);
    Out3x3 = float3x3(M0.x, M1.x, M2.x, M0.y, M1.y, M2.y, M0.z, M1.z, M2.z);
    Out2x2 = float2x2(M0.x, M1.x, M0.y, M1.y);
}