GLSL의 mat4 타입에 대한 정리

mat4는 4×4 행렬입니다. 열을 우선(Column major) 순서로 해서 각 요소가 저장됩니다. 아래처럼요.

그래서 행렬의 첫번째 열과 세번째 열은 다음처럼 vec4 로 얻을 수 있습니다.

vec4 col1 = m[0];
vec4 col4 = m[3];

반면 첫번째 행과 세번째 행은 다음처럼 얻을 수 있습니다.

vec4 row1 = vec4(m[0][0], m[1][0], m[2][0], m[3][0]);
vec4 row4 = vec4(m[0][3], m[1][3], m[2][3], m[3][3]);

행렬의 특정 요소의 접근은, 예를들어 3번째 열의 4번째 행 요소는 다음과 같습니다.

float e = m[2][3];

행렬의 연산은 벡터의 수학적인 곱으로 많이 사용되는데 일반적으로는 다음과 같습니다.

vec4 v = ...;
mat4 m = ...;
vec4 t = m * v;

행렬과 벡터의 곱 순서를 다음처럼 바꿀 수 있는데, 그 결과는 위와 다릅니다.

vec4 t2 = v * m;

위처럼 벡터에 행렬을 곱하면 행렬을 전치시킨 것으로써, 위의 코드는 아래의 코드와 동일합니다.

vec4 t2 = traverse(m) * v;

행렬의 각 요소별 곱은 matrixCompMult이며 함수 이름에서 알 수 있듯이 거의 사용되지 않습니다.

마지막으로 역행렬을 구하는 함수는 inverse 입니다.

Mix Color 노드의 Factor 인자의 역할

Blender의 쉐이더 노드 중 Mix Color 노드가 있습니다.

이 노드의 Factor 인자의 내용을 한가지 수식으로 정의하면 다음과 같습니다.

출력 색상=(1−Fac)×Color1 + Fac×블렌드함수(Color1, Color2)

위의 수식에서 블렌드함수에는 Mix, Darken, Multuply, Color Burn, Add, Screen 등이 있습니다. 이 중 Mix의 경우 블렌드함수는 단순히 Color2입니다. 즉, 다음과 같습니다.

블렌드함수 mix = Color2

또 다른 블렌드함수로써 screen은 다음과 같습니다.

블렌드함수 screen =1−(1−Color1)×(1−Color2)

사실 Mix Color 노드에서 블렌드함수에 대한 수학적인 내용보다는 그 목적과 용도에 집중하는 것이 좋습니다. 즉, mix의 경우는 2개의 색상을 섞는다거나, screen의 경우는 2개의 색상을 섞어 더 밝은 색상을 만들어낸다는 등의 실제 결과가 어떻게 표현되는지를 이해하는 것에 더 집중하는 것이 좋습니다. 물론 수학적인 이해가 이런 실제 결과에 대한 표현을 이해하는데 큰 도움이 될 수도 있습니다.