1. 3D 매트릭스 설계: 평면의 결정 조건

[도입부] 학습 목표 (Learning Objectives)

  • 2차원(종이)에 갇힌 기하학에서 벗어나, 현실 세계와 최신 3D 그래픽 엔진이 사용하는 3차원(공간) 매트릭스의 기초 세팅 룰을 익힙니다.
  • 텅 빈 우주 공간에서 허공에 떠드는 점과 선들을 이용해 흔들리지 않는 넓적한 판형(평면, Plane)을 정확히 고정시키기 위한 ‘평면의 결정 조건 4가지’를 마스터합니다.
  • 파이썬(Python) 3D matplotlib의 벡터 외적 시스템을 통해 허공에 떠 있는 점 3개로 평면을 생성하는 코어 로직을 엿봅니다.

1. 3D 디자이너의 가장 큰 숙제: “종이를 어디에 댈 것인가?”

당신이 3D 그래픽 모델러라고 상상해 봅시다. 허공에 선을 긋고 벽을 세우려면 가장 먼저 필요한 것이 기준이 되는 “바닥(평면)” 입니다. 노트북 화면은 평면이지만, 노트북 화면이 닫혀있느냐 열려있느냐에 따라 기울기가 다릅니다. 이처럼 끝없는 3D 공간 속에서 수백만 개의 평면 중 ‘정확히 딱 이 각도와 위치를 가진 유일한 평면!’ 이라고 하나로 고정(결정)시키려면 어떤 물리적 조건이 필요할까요?

2D 웹툰 사이버펑크 애니메이션 스타일: 어두운 메타버스 공간 안에서 떠다니는 빛나는 홀로그램 다면체들을 한쪽 팔이 사이보그인 해커가 제어하고 있는 모습. 투시도와 각도가 강조된 공간 기하학 컨셉.
허공에 떠 있는 점 3개, 혹은 직선과 점 등이 조합되어 하나의 홀로그램 평면(유리판)을 굳게 고정시키는 4가지 조건을 보여주는 SVG


2. 절대 흔들리지 않는 유리판: 평면의 결정 조건 4가지

카메라 삼각대를 세울 때 다리가 2개면 쓰러지지만, 다리가 3개면 어떤 울퉁불퉁한 바닥에 놓아도 절대 흔들리지 않고 한 평면을 이룹니다. 이처럼 평면을 ‘고정’ 시키는 수학적 하드웨어 조건은 다음 4가지 뿐입니다.

  1. 서로 다른 세 점 (가장 근본): 일직선 위에 있지 않은(Not collinear) 세 개의 핀을 허공에 꽂고 널빤지를 올리면, 그 널빤지는 딱 하나의 상태로 고정됩니다. 게임 엔진에서 삼각형(Polygon)이 3D 그래픽의 최소 그래픽 단위인 이유가 바로 이겁니다! 삼각형의 세 꼭짓점이 하나의 평면을 가장 완벽하게 도출해내기 때문입니다.
  2. 한 직선과 그 밖의 한 점: 꼬치에 끼워진 소시지(직선) 평행하게 허공에 두고, 그 옆에 포크 단일 스파이크(점)를 허공에 띄운 후 이 둘을 함께 덮는 유리판을 생각해보세요. 오직 단 1개의 유리판만이 이 둘을 동시에 머금고 지나갈 수 있습니다.
  3. 만나는 두 직선: 가위 모양으로 크로스(교차)된 두 개의 검을 바닥에 내려놓는다고 쳤을 때, 그 가위 전체를 바닥과 착 붙게 만들 수 있는 평면은 단 하나뿐입니다.
  4. 평행한 두 직선: 서로 나란히 달리는 기차 철로 두 가닥 위로 뚫리지 않은 유일한 넓은 철판 하나를 깔 수 있습니다.

🚨 [주의 예외] 서로 꼬인 위치(만나지도 평행하지도 않은 두 선)에 있는 두 직선으로는 죽었다 깨어나도 하나의 평면을 만들 수 없습니다! 유리판이 깨져버립니다.


3. 💻 파이썬(Python) 엔진: 3개의 점으로 평면 방정식 굽기

3D 그래픽에서 가장 많이 쓰이는 조건 1번 (세 점이 주어질 때)을 파이썬 스크립트가 어떻게 받아들여 ‘평면(방정식)’ 으로 조립해내는지 스캐닝합니다.

🐍 파이썬 예제: 세 점의 좌표로 평면 시스템 코딩하기

import sympy as sp

print("--- 🪐 3D 매트릭스 평면(Plane) 활성화 스캐너 ---")

# x, y, z 차원의 변수 선언
x, y, z = sp.symbols('x y z')

# 허공에 띄워둔 세 개의 데이터 픽셀 (포인트 좌표)
# P1(1, 0, 0), P2(0, 1, 0), P3(0, 0, 1) 이라는 삼각형 꼭짓점 3개
p1 = sp.Matrix([1, 0, 0])
p2 = sp.Matrix([0, 1, 0])
p3 = sp.Matrix([0, 0, 1])

print(f"[SYSTEM] 입력받은 3D 픽셀 좌표:")
print(f"  A {list(p1)},  B {list(p2)},  C {list(p3)}")

# [알고리즘] 평면을 만들려면 '법선 벡터(평면과 수직인 꼬챙이)'가 필요함
# 벡터 P1->P2 와 벡터 P1->P3 를 외적(Cross Product)하면 법선 벡터 획득!
vector_a = p2 - p1
vector_b = p3 - p1
normal_vector = vector_a.cross(vector_b)

print(f"👉 [물리 엔진] 이 3점을 받쳐줄 평면의 수직 꼬챙이(법선벡터) 방향: {list(normal_vector)}")

# 평면 방정식 공식: a(x - x1) + b(y - y1) + c(z - z1) = 0
# normal_vector 가 [a, b, c] 이고, 지나는 점은 p1 으로 픽스
plane_eq = normal_vector[0]*(x - p1[0]) + normal_vector[1]*(y - p1[1]) + normal_vector[2]*(z - p1[2])

print("-" * 50)
print("✅ [렌더링 완료] 도출된 평면 매트릭스 방정식:")
print(f" {sp.simplify(plane_eq)} = 0")
print(" 이 평면 식이야말로 우주상에서 방금 찍은 3개의 점을 동시에 통과하는 유일한 방어막입니다.")

# 결과창:
# --- 🪐 3D 매트릭스 평면(Plane) 활성화 스캐너 ---
# [SYSTEM] 입력받은 3D 픽셀 좌표:
#   A [1, 0, 0],  B [0, 1, 0],  C [0, 0, 1]
# 👉 [물리 엔진] 이 3점을 받쳐줄 평면의 수직 꼬챙이(법선벡터) 방향: [1, 1, 1]
# --------------------------------------------------
# ✅ [렌더링 완료] 도출된 평면 매트릭스 방정식:
#  x + y + z - 1 = 0
#  이 평면 식이야말로 우주상에서 방금 찍은 3개의 점을 동시에 통과하는 유일한 방어막입니다.

이렇게 세 점만 있으면 컴퓨터 게임엔진은 내부적으로 ‘평면 방정식($x+y+z=1$)’을 계산해 내어 그 위치에 거대한 벽이나 바닥 텍스처를 발라주는 시스템 원리를 알아냈습니다.


[결론] 학습 정리 (Summary)

  1. 3D 그래픽의 폴리곤(Polygon): 왜 3D 게임 캐릭터의 모든 표면은 네모나 동그라미가 아니라 미세한 ‘삼각형’ 들로 이뤄져 있을까요? 3개의 꼭짓점이 평면이 깨지지 않고 완벽하게 세팅되는 가장 최소 단위(결정 조건 1번)이기 때문입니다. 네 점 이상부터는 공간상에서 구부러지거나 어긋날 확률이 큽니다.
  2. 다리가 3개인 의자: 원형 식탁 의자 다리가 4개면 식당 바닥이 약간만 기울어져도 덜컹거립니다. 하지만 다리가 3개인 삼각대는 바닥이 아무리 울퉁불퉁해도 점 3개가 하나의 평면을 스스로 결정해버리기 때문에 절대 덜컹거리지 않습니다.
  3. 4가지 무적 조건: 세 점, 한 직선과 외부의 한 점, 만나는 두 직선, 평행한 두 직선. 이 시각적 덩어리들이 허공에 등장하는 순간, 우리는 ‘거대한 무한 확장 평면’이 우주를 반으로 가르며 꽂혀있다고 상상해야만 합니다.
서브목차