씬 그래프: 물건을 가족처럼 묶어서 다루는 마법

씬 그래프: 물건을 가족처럼 묶어서 다루는 마법
게임이나 그림 프로그램 속에는 아주 많은 물건이 들어 있어요. 나무, 자동차, 사람, 하늘… 이걸 하나하나 따로 움직이면 정말 힘들겠죠? 그래서 똑똑한 방법이 생겼어요. 바로 씬 그래프예요.
씬 그래프가 뭐예요?
씬 그래프는 화면 속 물건들을 가족 나무처럼 묶어 놓은 지도예요. 여기서 '씬(scene)'은 '장면', '그래프(graph)'는 '연결된 그림'이라는 뜻이에요.
물건들을 하나하나 흩어 놓지 않고, 큰 상자 안에 작은 상자, 그 안에 또 물건… 이렇게 순서대로 담아 두는 거예요.
가족 나무를 떠올려 보세요
가족을 그림으로 그리면 이렇게 돼요. 할머니 아래에 엄마, 엄마 아래에 나와 동생이 있죠.
씬 그래프도 똑같아요. 맨 위에 부모(엄마)가 있고, 그 아래에 자식(아이들)이 매달려 있어요. 규칙은 딱 하나예요.
자식은 부모가 딱 한 명이에요. 하지만 부모는 자식을 여럿 가질 수 있어요.
이렇게 위아래로 이어진 모양을 어려운 말로 '나무 구조(트리)'라고 불러요.
부모가 움직이면 자식도 따라가요
이 나무 구조에는 아주 편리한 마법이 숨어 있어요. 부모에게 무언가를 하면, 그 아래 자식들에게 저절로 똑같이 적용돼요.
예를 들어 볼게요. 자동차를 오른쪽으로 쭉 밀면 어떻게 될까요? 몸통, 지붕, 바퀴를 하나씩 밀 필요가 없어요. 부모인 '자동차'만 움직이면 몸통도, 지붕도, 바퀴도 모두 함께 따라가요.
마치 엄마가 우산을 쓰면 엄마 손을 잡은 아이도 함께 비를 피하는 것과 같아요. 부모의 행동이 아래로 주르륵 흘러 내려가는 거예요.
여러 물건을 하나처럼 다뤄요
씬 그래프의 멋진 점은 여러 물건을 한 덩어리로 묶어서 하나처럼 다룰 수 있다는 것이에요.
레고 블록을 떠올려 보세요. 작은 블록 100개로 로봇을 만들었어요. 이 로봇을 옮길 때 블록 100개를 하나씩 옮기나요? 아니에요. 완성된 로봇을 통째로 번쩍 들면 되죠.
씬 그래프도 똑같아요. 관련된 모양과 물건을 하나로 묶어서 '합쳐진 큰 물건'으로 만들어요. 그러면 그 큰 물건을 딱 하나의 물건처럼 쉽게 옮기고 돌릴 수 있어요.
움직임을 기억하는 숫자표
그런데 컴퓨터는 '오른쪽으로 밀어'라는 말을 어떻게 알아들을까요? 컴퓨터는 숫자표를 써요. 이 숫자표에는 '얼마나 옮길지', '얼마나 돌릴지', '얼마나 커질지'가 적혀 있어요. 어려운 말로 이걸 '변환 행렬'이라고 불러요.
각 묶음마다 이런 숫자표를 하나씩 붙여 놓아요. 그리고 부모의 숫자표와 자식의 숫자표를 차곡차곡 이어 붙이면, 자식이 최종적으로 어디에 있어야 하는지 딱 계산돼요.
이 방법이 빠르고 자연스러워서 게임과 그림 프로그램이 즐겨 써요.
어디에 쓰이나요?
씬 그래프는 두 곳에서 많이 쓰여요.
첫째, 그림 그리는 프로그램이에요. 여러 도형을 그룹으로 묶어서 한꺼번에 옮기거나 색칠할 수 있죠.
둘째, 요즘 게임이에요. 게임 속 캐릭터, 배경, 물건이 모두 씬 그래프로 정리되어 있어요. 그래서 캐릭터가 움직이면 손에 쥔 칼도 함께 움직이는 거예요.
진짜 프로그램은 이렇게 생겼어요
씬 그래프를 도와주는 진짜 프로그램도 있어요. 아래 그림은 'OpenSceneGraph'라는 유명한 도구의 속 모습이에요. 복잡해 보이지만, 결국은 우리가 배운 나무 구조를 컴퓨터가 잘 다루도록 정리해 놓은 것이랍니다.
정리해요
오늘 배운 것을 다시 떠올려 볼까요?
씬 그래프는 화면 속 물건들을 가족 나무처럼 묶은 지도예요. 자식은 부모가 한 명, 부모는 자식이 여럿이에요. 부모가 움직이면 자식도 저절로 따라가고, 여러 물건을 하나처럼 통째로 다룰 수 있어요.
다음에 게임을 할 때, 캐릭터와 그가 든 물건이 함께 움직이는 걸 보면 이렇게 생각해 보세요. "아하, 이게 바로 씬 그래프의 마법이구나!"
출처
리깅 파이프라인 자동화 도구
반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.
리깅 도구 보기