Isaac Sim은 하나의 프로그램이 아니었습니다
NVIDIA 문서에 적힌 최소 사양은 RTX 4080, VRAM 16GB였습니다. 제 책상 아래 컴퓨터에 꽂힌 것은 RTX 3060 Ti, 8GB. 정확히 절반이라 시작도 하지 말자는 쪽으로 기울었습니다. 그런데 설치해 보니 그냥 돌아가더군요.
그래서 이 글은 사양 이야기가 아닙니다. 겨우 켜 놓고 안을 들여다봤더니, Isaac Sim은 제가 생각하던 하나의 프로그램이 아니었거든요. 실행 파일부터 로봇 한 대까지, 열어 보는 곳마다 예상과 다른 물건이 나왔습니다. 이 글은 그 구조를 더듬어 본 기록입니다.
최소 사양의 절반짜리로 켜 봤습니다
공식 문서의 표는 세 단으로 되어 있습니다. 최소가 RTX 4080에 VRAM 16GB와 램 32GB, 권장이 RTX 5080에 램 64GB, 이상적 사양은 RTX PRO 6000 블랙웰에 VRAM 48GB. 맨 오른쪽 칸은 개인이 살 물건의 가격대가 아니죠.
제 사양을 그 표 옆에 나란히 적어 봤습니다. CPU는 i7-14700K 20코어, 램 32GB, 저장 공간은 넉넉했고요. 그러니까 세 항목은 기준을 넘고 GPU 하나만 절반이었습니다. 하필 그 하나가 가장 중요한 부품이라는 게 문제였죠.
그래도 한번 깔아 보기로 했습니다. 설치본을 풀어 놓고 용량을 재 보니 18.1GB, 버전은 6.0.1이더군요. 압축 푸는 데만 한참 걸렸습니다.
첫 실행이 길었습니다. 셰이더를 전부 컴파일하는 동안 창이 흰 화면으로 굳어 있어서 몇 번이나 강제 종료를 누를 뻔했고요. 여기서 끄면 캐시가 깨져 다음에 더 오래 걸린다는 걸 나중에 알았습니다. 두 번째 실행부터는 금방 떴습니다.
정직하게 덧붙일 것이 있습니다. 돌아간다는 것과 제대로 쓴다는 것은 다릅니다. 지금 확인한 건 화면이 뜨고 로봇이 움직인다는 사실까지예요. 강화학습으로 환경을 수천 개씩 동시에 굴리는 단계에서 8GB가 어디서 멈추는지는 아직 재 보지 않았습니다. 최소 사양이라는 표는 아마 그 지점을 염두에 두고 그어진 선일 겁니다. 언젠가 그 벽에 부딪히겠죠. 그때는 벽의 위치를 숫자로 재서 적어 둘 생각입니다.
바로가기가 없어서 실행 파일을 세어 봤습니다
설치를 마쳤는데 시작 메뉴에도 바탕 화면에도 아무것도 생기지 않았습니다. 압축 해제 방식으로 설치하면 바로가기를 만들어 주지 않더군요. 어쩔 수 없이 설치 폴더를 직접 열었습니다.
실행용 배치 파일이 열두 개 있었습니다. 기본 화면을 띄우는 것, 셰이더를 미리 굽는 것, 파이썬 스크립트를 돌리는 통로, 이 컴퓨터가 쓸 만한지 진단하는 것, 화면 없이 띄워 브라우저로 받아 보는 것. 심지어 뉴턴 물리 엔진으로 시작하는 파일도 따로 있었습니다. 예전에 이 블로그에서 다뤘던 그 엔진이 6.0에 실제로 들어와 있더군요.
왜 하나가 아니라 열두 개일까. 여기서 첫 번째 이해가 왔습니다. Isaac Sim은 하나의 프로그램이 아니라 확장 기능을 조립해 만든 앱이었습니다. 배치 파일들은 어떤 부품을 끼우고 시작할지가 다를 뿐 본체는 같은 것이죠. 설치 폴더 안에 확장 기능 폴더가 수백 개 들어 있는 이유도 같습니다.
일단 기본 실행 파일로 바탕 화면 바로가기를 하나 만들어 뒀습니다. 그리고 하나는 미리 적어 둘 만합니다. 실제 작업은 대부분 파이썬 스크립트로 돌아가는데, 평소 쓰던 파이썬으로는 Isaac 모듈을 아예 찾지 못합니다. 반드시 설치 폴더에 딸린 전용 실행기를 거쳐야 하고요. 이걸 모르면 첫 줄부터 막힙니다.
로봇이 어디 있는지 한참 찾았습니다
화면은 떴는데 로봇이 없었습니다. 예제를 눌러야 나타나더군요. 그 예제가 무엇을 하는지 거꾸로 따라가 보고 나서야 이 도구의 생김새가 잡혔습니다. 층이 다섯 개입니다.
가장 중요한 층은 아래에서 두 번째였습니다. 씬이 코드가 아니라 트리 구조의 데이터라는 것. 로봇도 조명도 바닥도 전부 경로를 가진 항목으로 그 트리에 꽂혀 있습니다. 화면 속 물체 하나하나가 /World/robot 같은 주소를 가진 셈이죠.
그래서 로봇을 만드는 코드가 생각과 달랐습니다. 로봇을 조립하는 게 아니라 파일 하나를 씬의 특정 경로에 참조로 붙이는 한 줄이 전부였거든요. 복사가 아니라 참조입니다. 그래서 백 대를 띄워도 원본 파일은 하나고요. 한 가지 더, 그 로봇 파일이 제 컴퓨터가 아니라 에셋 서버에 있을 수 있다는 점도 알게 됐습니다. 예제를 처음 눌렀을 때 한참 기다린 시간의 상당 부분이 사실은 내려받기였던 셈이죠.
거기에 재미있는 장치가 하나 더 있었습니다. 같은 파일 안에 여러 버전이 들어 있어서 그리퍼 종류와 메시 품질을 골라 쓸 수 있더군요. 제가 돌린 예제는 저해상도 쪽이 기본값으로 잡혀 있었습니다. VRAM 8GB에는 다행스러운 설정이었죠. 반대로 고품질로 바꾸면 얼마나 오르는지, 그게 다음에 재 볼 숫자입니다.
제어는 "움직여라"가 아니었습니다
로봇의 정체는 관절로 연결된 강체 트리입니다. 이걸 아티큘레이션이라고 부르더군요. 그리고 제어란 매 계산 단계마다 관절이 가야 할 목표값을 적어 넣는 일이었습니다. 그게 전부입니다.
예제 코드를 따라가 보면 목표값을 적는 줄에서 함수가 그냥 끝나 버립니다. 처음에는 뭔가 빠진 줄 알았어요. 팔을 실제로 움직이는 것은 그 코드가 아니라 물리 엔진이었습니다. 명령을 내리는 게 아니라 쪽지를 남기고 물러나는 쪽에 가깝죠.
이 지점에서 앞이 트였습니다. 역기구학으로 풀든, 강화학습으로 훈련한 신경망이 내놓든, 사람 말을 알아듣는 모델이 내놓든 전부 그 목표값을 무엇으로 계산하느냐의 차이일 뿐이라는 것. 로봇이 바뀌는 게 아니라 계산기가 바뀝니다. 앞으로 무엇을 배우든 제 코드를 끼워 넣을 자리는 늘 같은 한 곳이라는 뜻이고요.
도구를 익힌다는 게 메뉴 위치를 외우는 일인 줄 알았습니다. 실제로는 이런 문장 하나를 얻는 일이더군요. 금형 쪽에서 십수 년을 보내며 배운 것도 비슷했습니다. 기계 조작법은 며칠이면 익히지만, 그 기계가 무엇을 하는 물건인지 아는 데는 훨씬 오래 걸립니다.
맺음말
앞서 이어 오던 시뮬레이션 시리즈의 마지막 글 끝에 다음은 UR5e라고 적었습니다. 그 예고를 어겼습니다. 기종을 넓히기 전에 도구를 바꾸는 쪽이 먼저라고 판단했거든요.
안을 들여다보고 남은 것은 생각의 교정이었습니다. Isaac Sim을 하나의 프로그램으로 알고 열었는데, 실제로는 확장 기능을 조립해 만든 앱이었고, 씬은 코드가 아니라 주소를 가진 트리였으며, 제어는 명령이 아니라 목표값을 적어 두고 물러나는 일이었습니다. 층을 하나씩 벗겨야 보이는 구조였죠.
덧붙이면, 사양표에 발이 묶여 시작조차 안 했다면 이 구조도 영영 못 봤을 겁니다. 표는 제조사가 보수적으로 그어 둔 선이지 넘을 수 없는 벽은 아니었습니다. 한 번은 직접 켜 보고 안을 열어 볼 값어치가 있었던 셈이죠.
다음 글에서는 그 파란 블록을 집는 예제 코드를 열어 보겠습니다. 로봇 팔이 물건을 집어 옮기는 짧은 동작 안에 무엇이 들어 있는지, 한 줄씩 따라가 볼 참입니다.
참고 자료
- NVIDIA Isaac Sim 시스템 요구 사항(최소 · 권장 · 이상적 사양) — 공식 문서
- Isaac Sim 5.0 · Isaac Lab 2.2 정식 공개와 오픈소스 전환 발표 — NVIDIA 개발자 블로그
- OpenUSD — 씬을 트리 구조 데이터로 다루는 개방형 표준 — 공식 사이트