ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NFT 상호운용을 게임에서 사용할 수 있을까?
    게임 컬럼, 정보 2022. 1. 11. 13:56

     

     

    라미 이스마일이 트윗으로 엮은 NFT 상호운용에 대한 설명을 번역한 글입니다.

     


     

    사위 게임 제작을 상상해 봅시다.

    처음에는 아무것도 없습니다. 주사위부터 만들어 볼까요? 우선 주사위의 "크기"를 결정해 봅시다. 크기는 10으로 하겠습니다. 특별한 이유는 없습니다. 제가 5의 배수로 계산하는 걸 좋아하거든요. 주사위의 크기는 가로세로 각각 10입니다.

    완성된 주사위는 사각형이지만, 게임의 렌더링은 삼각형으로 구현됩니다. 따라서 주사위의 한 면은 두 개의 삼각형으로 구성되며, 6개의 면은 12개의 삼각형으로 이루어져 있습니다. 이걸로 회색의 정육면체가 완성되었습니다.

    이번에는 주사위에 색을 입혀 봅시다. 색을 입히기 위해서는 뭉친 삼각형을 펼쳐야 합니다. 종이 주사위를 펼쳐본 적이 있다면 어떤 모양이지 감이 올 겁니다! 납작하게 펼친 주사위를 UV-MAP이라는 이미지로 변환합니다.

    이제 아티스트가 위에서 만든 UV-MAP을 이미지 편집기에서 열어서 주사위에 필요한 점을 찍습니다. 이미지의 포맷은 간단하게 PNG로 결정했습니다. 이제 모델러가 "텍스쳐"를 회색의 정육면체에 다시 입히면... 제대로 점이 찍힌 주사위가 완성!

    그럼 주사위를 던져봅시다! 아차, 바닥을 만들어야겠네요. 한 번 더 회색의 정육면체를 만들고 사방으로 늘린 다음 납작하게 눌러줍니다. 그럼 바닥이 준비됩니다. 그러나 이 상태에서는 게임을 실행시켜도 아무 일도 일어나지 않을 겁니다. 중력이 없으니까요!

    중력을 만듭시다! 우선 중력이 작용하는 방향과 힘의 크기를 정의해야 합니다. 우리가 만드는 게임 엔진에서 중력은 Y-축의 네거티브 값으로 작동하고, 크기 10의 주사위를 1씩 30프레임 동안 떨어트립니다. 그러니 입력하는 값은 ”Y -= 0.33“입니다.
     
    이제 게임을 실행하면 어떤 일이 벌어질까요? 당연히 주사위가 아래로 떨어지지요. 아차, 바닥도 같이 떨어지네요. 바닥을 움직이지 않게 고정합시다. 다시 시도해 보면? 우리가 사용하는 엔진에 따라서 주사위가 바닥을 통과하여 내려갈 수도 있고, 아닐 수도 있습니다. 주사위가 바닥을 통과 했나요? 그럼 엔진에서 충돌 판정을 켜야 합니다.
     
    좋아요. 이제 주사위가 바닥에 떨어집니다. 하지만 수직으로 떨어지니 조금 지루하네요. 주사위가 여러 방향으로 움직이게 만듭시다. 임의의 각도로 꺾이면서 떨어지게 하는 겁니다. 어느 정도로 할까요? 50으로 하죠. 주사위의 다섯 배네요. 아, 너무 멀리 날아가 버렸네요. 주사위를 조금 더 무겁게 조절합시다.
     
    이걸로 우리는 멋지게 춤추는 주사위를 만들었습니다. 이쯤에서 여러분은 주사위의 각진 모서리가 주사위 굴리는 맛을 해친다는 걸 눈치채셨을 겁니다. 모서리를 다듬어 볼까요? 주사위를 모델러에게 던져주죠. 모델러가 후다닥 주사위의 모서리를 다듬어 주었습니다. 단순한 주사위라 최적화 문제로 고민할 필요가 없으니까요. 자, 이제 새로운 UV-MAP을 생성해서 아티스트에게 텍스쳐를 부탁합시다. 이제 매끄러운 주사위가 손에 들어왔습니다.
     
    하지만 던져보니 주사위의 값이 너무 멋대로라 신경 쓰입니다. 테스트를 해보니 일곱 번 연속으로 1만 나왔어요. 게임의 흔한 트릭을 사용합시다. 재수 없음 방지 코드를 짜서 낮은 숫자가 나올 확률을 줄이는 거죠.
     
    면마다 나올 확률을 달리 하는 건 어떨까요? 별로 좋은 생각은 아닌 것 같지만, 다른 방법이 떠오르지 않으니 그렇게 합시다. 어떻게든 코드를 짜면 되겠지요. 마음에 드는 결과가 나올 때까지 확률과 중력을 고려해서 코드를 조절합니다.
     
    자! 다시 주사위를 던져봅시다. 제법 괜찮은 느낌이네요? 이제 사운드 엔지니어에게 주사위의 사운드를 녹음해 달라고 부탁합시다. 엔지니어가 여섯 개의 효과음을 완성했습니다. 이제 주사위가 바닥에 닿을 때마다, 여섯 가지 소리 중 하나가 들리도록 만듭시다.
     
    헛, 컴퓨터에서 무간지옥 같은 소리가 납니다. 주사위가 바닥에 충돌할 때마다 소리를 내게 했더니 초당 30번이나 소리를 재생했네요. 이것도 고쳐봅시다. 주사위가 바닥에 충돌하는 순간이 아니라, 충돌후 약간 시간이 지난 다음에 소리가 들리도록 고쳤습니다.
     
    완벽해요. 이번에는 주사위의 값이 6이 나올 때마다 멋진 이펙트가 나오게 만들어 봅시다. 별이 쏟아지는 간단한 파티클 이펙트를 만들어 볼까요? 좋은 생각 같아요. 게임이 너무 심심하니 10,000개의 별을 집어넣도록 합시다. 시작은 좀 과한 게 좋아요.
     
    아니, 잠깐. 게임에 주사위의 값을 저장하는 걸 깜박했네요. 이래서는 주사위를 굴리는 의미가 없죠. 주사위의 값이 무슨 뜻인지 또는 얼마나 중요한지 게임이 알 길이 없습니다. 그러니 파티클 이펙트도 작동시킬 수가 없네요.
     
    주사위가 멈추면 어떤 면이 "윗면"인지 체크할 수 있도록 코드를 짭시다. 그리고 주사위가 멈추면 화면에 주사위 윗면의 숫자를 출력시키는 겁니다. 그러나 테스트해 보니 우리의 물리 엔진에서는 주사위가 영원히 멈추지 않는 거로 판명되었습니다.
     
    자... 이번에는 주사위의 속도가 천천히 떨어지다 멈추게 만듭시다. 중력이 프레임당 0.33이고 주사위의 크기는 10이었으니까, 주사위 크기의 1:13 비율로 주사위의 "움직임"을 정의해 봅시다.
     
    이야, 완벽해요. 이제 우리의 주사위는 중력과 힘의 작용으로 아름답게 바닥을 굴러갑니다. 그리고 주사위가 멈추면 게임이 어떤 면이 윗면인지 알아내서, 6이 나오면 멋진 파티클 이펙트를 보여줍니다. 대충 도 아니면 모인 대장정이었지만, 해냈으니 장땡이죠.

    그러면 여기서 질문. 대체 NFT로 어떻게 이 주사위를 다른 게임에 옮길까요? 이 주사위는 모서리를 어색하게 깎아낸 정육면체 덩어리에 불과합니다. 딱 맞게 만들어진 텍스쳐와 이 게임에서만 텍스쳐로 읽히는 파일이 있어야 비로소 주사위가 되는 겁니다.

    주사위의 크기 또한 우리의 게임을 위한 커스텀 값입니다. 다른 게임에서는 사람의 크기가 1로 정의되어 있을 수도 있습니다. 그러면 별안간 사람보다 열 배나 거대한 주사위가 등장하겠네요. 그러고 보니 중력 또한 이 게임의 물리 엔진에서만 통용되는 값이지요. 엔진에 따라 중력의 값이 "위"로 작동할 수도, "아래"로 작동할 수도 있습니다.

    프레임당 "0.33" 중력을 기반으로 설정한 힘의 값 "50"은 프레임당 중력값이 "9.81"인 게임에서는 전혀 작동하지 않을 겁니다. 그리고 30FPS를 기준으로 게임을 제작했기 때문에 60FPS에서는 작동하는 게임에서는 코드에 따라 주사위가 두 배의 속도로 떨어질 수도 있습니다.

    주사위가 평면이 아닌 곳에 충돌할 때는 어떻게 되는지 테스트해 본 적도 없습니다. 언덕을 굴러 내려갈 때도 마찬가지입니다. 혹 주사위가 모서리로 서서, 두 개의 면이 같은 위치에 놓이게 되면 어떻게 될까요? 어떤 면이 윗면일까요?

    게임의 사운드 이펙트는 6개의 .wav 파일입니다. 우리가 짠 기이한 "정지" 시스템 덕분에 기괴하게 코딩되어 있고, 이 또한 우리 게임에서만 작동하는 커스텀 값입니다. 우리는 이 게임의 코드를 복사해다 다른 게임에 붙여넣을 수 없습니다. 그랬다가는 수상쩍은 모바일 게임을 아득히 초월하는 수많은 악용과 도용에 시달릴 테니까요. 따라서 주사위를 여러 종류 게임에서 통용(cross)하는 건 불가능합니다. 

    그렇다면 이제 사람들이 말하는 가장 일반적인 "상호운용성(interoperability)"을 되짚어 봅시다. 생각해 낼 수 있는 가장 간단한 형태인 주사위조차, 그 주사위의 텍스쳐를 통용하는 길은 함정이 가득합니다. 서로 다른 게임의 모델과 맵이 정확히 일치할 리가 없기 때문입니다.

    그러니 일어날 수 없는 일입니다. 만에 하나 상호운용성이 가능하다 가정합시다. 셔츠를 예로 들어 볼까요? 복잡한 물리 엔진을 통해 당신 캐릭터가 딱 맞게 입고 있는 그 셔츠요. 업계가 "T-셔츠"가 무엇인지 합의한다는 뜻은 모델, 물리 엔진, 형태 그리고 움직임을 똑같이 통일한다는 뜻입니다.

    커스텀 물리엔진이나 다양한 형태요? 못해요. 그러니 AAA 게임은 벌써 탈락입니다. 여러분이 좋아하는 슈터 게임의 영웅들에게 옷을 입히기 위해 옷마다 UV-MAP을 전부 따로 제작해야 하니까요. 일찌감치 포기하세요.

    EA 게임에서 프로스트 바이트 엔진을 강요했을 때 개발자들이 고생한 사건 기억하시나요? 프로스트 바이트 엔진에서는 모든 캐릭터가 "무기"를 들고 있어야 했습니다. 축구 선수나 자동차같은 캐릭터 까지 "무기"를 들고 있어야 했다니까요. 엔진이 그냥 그렇게 짜여 있었습니다.

    위의 모든 예는 실제로 일어날 문제에 비하면 애들 장난에 불과합니다.

    그냥 실현할 수 없습니다. 업계는 아직 "위"의 정의조차 합의하지 못했습니다. Y-축이 전진인지, 위인지 아니면 아래인지 또는 옆걸음인지 우리는 모릅니다. "프로듀서"가 뭘 하는 사람인지조차 합의하지 못한 업계입니다. 게임 크레딧에 누가 들어가는 게 타당한지 리스트 작성조차 하지 못한 상태입니다. 게임의 심의는 여러 국가에서 위협을 당하고 난 뒤에야 생겼습니다. 심지어 디지털과 오프라인 마켓의 차이에 따른 심의 기준이나, 국가에 따라 서로 다른 나이 기준은 아직도 합의되지 않았습니다.

    상호운용성을 지원하기 위해서는 수백만 가지를 일치시켜야 합니다. 게임에서 사용되는 중력, 힘, 크기, 크기에 따른 비례, 좌표, 빛, 렌더링 등. 그리고 일치시킨다 해도 서로 같은 기준으로 마리오와 갓 오브 워를 만들 수는 없습니다. 안타까운 일이지요.

    문제는 아직도 남아 있습니다. NFT가 탈중앙화되어 있다면 누가 게임의 콘텐츠를 관리할까요? 주사위의 텍스쳐에 누군가 범죄 행위나 성인물을 집어넣으면요? 그런 텍스쳐를 사용한 셔츠가 13세의 어린이가 하는 포트나이트에 나오게 된다면 책임은 누가 질까요?

    그리고 대체 누가 데이터를 호스팅할까요? 블록체인 자체적으로 데이터를 저장할 수는 없습니다. 오직 링크만 담고 있으니까요. 그럼 데이터는 어디에 있을까요? 게임 서버에? 그건 또 다른 문제를 만듭니다. 만약 게임이 서비스를 종료한다면 모든 데이터를 잃어버릴 테니까요.

    피어 투 피어? 그렇다면 게임을 하는 모두가 NFT 데이터를 전부 내려받아야 합니다. 외부 서버? 서버 비용은 누가 낼까요? 해킹이라도 당해서 NFT의 링크 지점에 불법 데이터가 심어진다면?

    따라서 NFT는 텍스쳐의 상호운용에 사용할 수 없습니다. 같은 이유로 모델에도 사용할 수 없고 사운드에도 사용할 수 없습니다. 게임 코드도 안됩니다. 데스티니 1편의 엠블럼을 2편에서 사용할 수 없는 데에는 다 이유가 있습니다. 메스 이펙트 1,2,3에서 똑같은 아머를 고루 사용한 것은 각 작품에 알맞게 리터칭을 거쳤기 때문입니다.

    "NFT를 다른 게임으로 가져가기"는 불가능합니다. 같은 유통사가 내놓은 같은 시리즈 사이에서조차 말입니다. NFT를 사용하기 위해서는 무수히 얽힌 수많은 사양을 일치시켜야 하므로 게임 개발 환경이 심각하게 제약받습니다.

    만약 그런 일이 가능하다고 가정해도 그렇게 완성된 아이템은 잘 해봐야 서로 비슷하게 생긴 카피에 지나지 않을 겁니다. 아이템의 크기에 따라 전부 다른 조건이 필요하기 때문입니다. 하나의 게임에 맞게 짜인 코드를 다른 게임에 붙여넣는 건 보안 문제나 버그를 만들 게 뻔합니다. 혹 붙여넣는다고 해도 제대로 작동하지 않을 겁니다.

    물리 엔진에 따른 힘의 작용이나 기타 게임에 필요한 구성까지 생각해 볼까요? 끔찍하게 혼란스러울 겁니다. 수백억짜리 게임을 만드는 재능있는 개발자조차 간신히 게임을 돌아가게 만드는 것이 고작입니다. 그런데 그걸 전혀 다른 구조의 게임에 붙여넣는다고요? 게임 개발은 상상 이상의 난관입니다. 엄청나게 복잡한 상상 이상의 난장판입니다. 앞서 설명한 형편없는 주사위 만들기조차 제작에 몇 시간을 쏟아야 합니다. 그리고 오직 그 프로젝트의 코드와 사양에서만 작동됩니다.

    저는 세상에 불가능은 없다는 말을 진심으로 믿습니다. 그러나 "NFT의 상호운용성"이 사람들이 말하는 것처럼 이루어지는 일은 하프라이프3가 닌텐도 스위치 독점으로 나오는 그것만큼이나 요원한 일입니다.

    사실 가장 중요한 이유는 이겁니다. NFT 상호운용으로 득을 볼 사람이 아무도 없습니다. NFT를 구매할 플레이어도 이득을 보지 못할 겁니다. 그들이 살 수 있는 가장 좋은 상품이 저질 카피일 테니까요. 더 나쁜 소식을 알려 드릴까요? “여러분의 아이템은 게임 서버에서 관리됩니다."

    NFT가 제한할 창작의 자유와 NFT 때문에 추가되는 개발 비용에 비추어 생각해 볼 때, NFT를 지지할 이들은 단기 수익을 노리는 자들뿐입니다. 당신이 가지고 있는 녹색의 산타 모자를 위해 들이기에는 너무나 많은 호환작업과 비용을 들여야 하는 것. 그것이 바로 NFT 상호운용입니다.

     


     

    댓글

Designed by black7375.