
Web3 게임 분석 시리즈(2): 산업화된 제작과 제작(기술 및 아트)
글: Jake @Antalpha Ventures, Blake @Akedo Games, Jawker @Cipherwave Capital
서론
다양한 개발사들이 채택하는 아키텍처(프로젝트 + 중앙 플랫폼 조직 구조)가 서로 다르고, 프로젝트와 중앙 플랫폼 조직에 대한 중점이 달라 일부는 강력한 프로젝트 중심, 약한 중앙 플랫폼을 지향하고, 다른 일부는 강력한 중앙 플랫폼과 약한 프로젝트를 추구한다. 따라서 본 시리즈는 게임 개발과 관련된 기능 및 프로세스를 기반으로 분석을 진행한다. 이에 따라 본 시리즈 두 번째 글은 Web3 게이밍의 산업화된 제작 및 생산(미술 및 기술) 측면을 다룬다. 게임 기획이 확정된 후, 기획자는 핵심 게임플레이, 재미 요소, 캐릭터 성장, 사용자 행동 유도, 맵 및 스토리 등 세부사항을 결정하게 된다. 따라서 기획팀은 미술 및 기술 팀과 긴밀히 소통하여 Web3 게임 개발을 설계 및 개발 단계로 진입시켜야 한다.

출처: 공개 시장 정보

출처: 불명 기술
산업화된 생산 및 제작: 기술 부문 개요
기획이 요구 사항을 명확히 하면, 프런트엔드 및 백엔드 등의 기술 팀은 기획 부서에서 제안한 게임 디자인을 구현하고 코드를 작성하여 기술적인 실현 가능성을 보장해야 한다. 구체적인 실행 과정에서는 프런트엔드 프로그래밍과 백엔드 프로그래밍으로 나뉜다. 주요 엔지니어는 주요 기술 실행 방안 결정, 다양한 성능 최적화, 저수준 프레임워크 구축 지도 등을 포함한 전반적인 기술 프로세스를 관리해야 한다.
-
프런트엔드 프로그래밍: 표시, 최적화, 로직 처리 등을 포함하며, 음성 파일, 이미지 파일, 텍스트 파일 처리를 포함한다.
-
백엔드 프로그래밍: 서버 측을 포함하며, 데이터베이스 구조, 데이터 전송, 검증, 저장, 통신 방식 등을 포함한다.
아래 이미지는 Web3 게이밍의 프런트엔드 및 백엔드 구성 요소를 보여준다. 이후 섹션에서 각 부분을 자세히 분석할 것이다.

출처: 유샤표 게임 커뮤니티; Jake 정리
산업화된 생산 및 제작: 기술 프런트엔드
게임 프런트엔드 프로그래밍 개발은 인터페이스, 상호작용 및 사용자 경험(UX)에 집중한다. 상호작용성과 UX 측면에서는 게임 인터페이스(UI) 설계 및 구현, 사용자 인터랙션(UI) 시스템 개발, 애니메이션 및 시각 효과 생성에 주목해야 한다. 또한 프런트엔드 엔지니어는 데스크톱 및 모바일 장치 등 다양한 플랫폼에서 일관된 사용자 경험을 제공해야 한다. 게임 로직 구현 면에서는 캐릭터 행동, 게임 규칙 실행, 점수 및 진행 관리, 게임 내 이벤트 반응 메커니즘 등을 고려해야 하며, 원활하고 공정하며 도전적인 게임 플레이를 보장하기 위해 효율적이고 매끄러운 코드 작성이 필요하다.
따라서 위 목표에 따라 프런트엔드 개발자는 C#, C++ 등의 관련 프로그래밍 언어를 활용하고, Unreal, Unity, Source, CryEngine 등의 게임 엔진을 사용해 게임 인터페이스를 만들고, 애니메이션 효과와 사운드 표현 등을 조정해야 한다. 시장에는 다양한 게임 엔진 도구가 있으며, 개발자의 구체적인 요구에 따라 적절한 엔진을 선택해야 한다. 각 게임 엔진은 개발자 커뮤니티 지원에 다른 중점을 두므로, 다음은 게임 기술 개발자가 엔진 선택 시 고려하는 선호도 및 요구사항이다:
-
프로젝트 요구사항: 게임 종류에 따라 엔진 선택 기준이 다르다. 예를 들어, 시각적 효과를 중시하는 AAA급 게임에는 Unreal Engine 또는 CryEngine이 더 적합할 수 있고, 모바일 플랫폼용 소규모 게임에는 Unity가 더 좋은 선택일 수 있다.
-
학습 곡선 및 커뮤니티 지원: 쉽게 배우고 사용할 수 있는 엔진은 개발 난이도를 크게 줄일 수 있다. 또한 활발한 커뮤니티는 풍부한 리소스와 지원을 제공하여 문제 발생 시 신속히 해결책을 찾을 수 있도록 돕는다.
-
성능 및 최적화: 엔진의 성능과 최적화 능력은 게임 실행 효과에 매우 중요하다.
-
비용 및 라이선스: 일부 엔진은 유료 사용 또는 특정 라이선스 조건이 있을 수 있으므로, 예산과 프로젝트 요구사항에 따라 균형을 맞춰야 한다.
-
확장성 및 맞춤화 가능성: 게임 산업의 발전에 따라 게임 엔진은 새로운 기술 트렌드와 요구사항에 적응할 수 있어야 한다. 엔진의 확장성과 맞춤화 능력을 이해하면 개발자가 미래 변화에 더 잘 대응할 수 있다.
위 요구사항 분석을 바탕으로, Unity와 Unreal Engine이라는 두 가지 대표적인 게임 엔진에 대해 간략히 소개하고 분석하겠다.
-
Unity는 Windows, Mac, iOS, Android 등 여러 주요 플랫폼을 지원하는 게임 엔진이다. Unity는 높은 수준의 맞춤화가 가능하며, 개발자는
C#또는JavaScript를 사용해 스크립트를 작성할 수 있다. 또한 Unity는 풍부한 리소스 스토어를 제공하여 개발자가 다양한 플러그인, 모델, 음향 등을 구매하거나 다운로드할 수 있다. Unity의 주요 장점은 활발한 커뮤니티, 우수한 크로스플랫폼 호환성, 비교적 쉬운 개발 환경, 그리고 방대한 타사 패키지 수 등이다. 개발자는 직접 기능 패키지를 만들어 Unity 공식 스토어에 판매할 수도 있다. 현재 매달 150만 명 이상의 개발자가 스토어를 방문하며, 사용 가능한 패키지가 56,000개 이상이다. 상업화 및 수익화 측면에서 Unity는 다양성을 추구하며, Monetization SDK, Unity 게임 클라우드 원스톱 네트워크 서비스, Vivox 게임 음성 서비스, Multiplay 해외 서버 호스팅 서비스, Unity 콘텐츠 배포 플랫폼(UDP), Unity 클라우드 빌드 등 다양한 서비스를 통해 수익을 창출한다. 특히 Monetization SDK는 개발자가 광고를 연결할 수 있게 하고, Unity가 직접 광고 게이트웨이 역할을 하여 수익을 분배하는데, 현재 이 서비스가 엔진 라이선스 수익을 대체하여 Unity의 주요 수익원이 되었다. 「탈출 타르코프」, 「Temtem」, 「콜 오브 듀티 모바일」, 「하스스톤」 등 세계적으로 유명한 게임들이 Unity가 시장에서 가장 우수한 게임 엔진 중 하나임을 입증하고 있다. 그러나 Unity의 성능 최적화 능력은 다소 부족하며, 대규모 씬이나 고정밀 모델 처리에 한계가 있다. UI 체험도 Unreal보다 열세이며, 개발자는 많은 타사 패키지를 추가해 기능을 보완해야 한다. 또한 Unity는C#과JavaScript를 사용함에 따라 개발 과정에서 일부 적응 문제가 발생할 수 있다. 2020년 3월 Unity는 최신 버전2019.3을 정식 출시하였으며, HD 렌더링 파이프라인(HDRP, High Definition Render Pipeline)과 범용 렌더링 파이프라인(URP, Universal Render Pipeline) 기능을 포함하여 시각 효과 및 최적화 능력을 강화했다. 동시에 특수 효과 뷰 편집기, 실시간 레이 트레이싱 시스템 등을 추가하여 현재 시장의 요구에 더욱 부합하고 대규모 게임 제작에도 적용할 수 있게 되었다. -
Unreal Engine은 완전 오픈소스 고성능 게임 엔진으로, 뛰어난 그래픽 효과와 물리 엔진으로 유명하다. C++과 블루프린트 시각 프로그래밍을 지원하며, 강력한 머티리얼 에디터와 조명 시스템을 제공하여 현실감 있는 게임 화면을 구현할 수 있다. 개발자를 위한 Unreal은 무료 사용뿐 아니라 코드 연구를 통해 개발 효율을 더욱 높일 수 있다. 또한 Unreal 엔진은 블루프린트를 기본 제공하므로 기술 개발자가 아니더라도 포인트-투-포인트 시각 인터페이스를 통해 게임 디자인을 완성할 수 있다. 더불어 Unreal Engine은 크로스플랫폼 호환성과 높은 수준의 맞춤형 UI 시스템을 갖추고 있다. 수익 모델 측면에서 Unreal은 전통적인 엔진 비즈니스 모델을 따르고 있다. 첫 번째 방식은 게임 총 수익이 100만 달러를 초과하는 부분에 대해 5%의 고정 로열티를 부과하는 것이며, 두 번째는 스토어에서 공식 또는 제3자 자산을 판매하고 그 수익의 12%를 수취하는 방식이다. 작품 생산 및 인지도 측면에서 「보더랜드」, 「배트맨: 아캄 어사이럼」, 「파이널판타지 7 리메이크」 등 세계적으로 유명한 게임들이 Unreal 엔진을 사용하였다. 그러나 Unreal Engine은 학습 곡선이 가팔라 초보자가 시작하기는 쉬워도 숙련되기까지는 시간과 경험이 필요하다.
Medium과 Jingke 데이터 분석에 따르면, 2021년 Unity의 글로벌 시장 점유율은 49.5%, Unreal은 9.7%로 양강 독점 경쟁 구도를 형성하고 있다. 또 다른 시장 보고서에 따르면 2023년 Unity와 Unreal Engine의 시장 점유율은 각각 48%와 13%이다. 아래 표는 두 엔진이 그래픽, 기능, 코드, 성능 등 측면에서의 비교 분석이다.

출처: Incredibuild; Jake 종합 분석
시각 및 이미지 효과 측면에서 Unreal Engine이 약간 우세하지만 차이는 극히 미세하다. 접근성 측면에서 Unity는 초보자에게 더 친숙하며, Unity가 요구하는 C#은 일반적으로 더 빠른 컴파일 속도와 짧은 반복 시간을 제공한다. 반면 Unreal Engine은 애니메이션 및 그래픽 처리에서 초보자에게 난이도가 높다. 실제 사용 시 Unreal Engine에서 원하는 효과는 Unity로도 동일하게 구현할 수 있다. 두 소프트웨어 모두 API나 도구 호출을 통해 더 우수하고 효율적인 그래픽 표현을 실현할 수 있다. 통계에 따르면 실제 작업에서 코드 엔지니어들은 Unity를 선호하고, 그래픽 및 표현 요구가 높은 테크니컬 아티스트들은 Unreal Engine을 더 선호한다.

Unity 실무 인터페이스 예시, 출처: 공개 시장 정보

Unreal Engine 실무 인터페이스 예시, 출처: 공개 시장 정보
또한 프런트엔드 기술 개발자들은 Unity와 Unreal 외에도 다른 게임 엔진을 선택할 수 있으며, 아래는 몇 가지 일반적인 게임 엔진을 프런트엔드 기술자들이 참고할 수 있도록 제시한다:
-
CryEngine은 고품질의 그래픽 효과와 강력한 물리 엔진으로 알려져 있다. 실시간 전역 조명과 고품질 모델 및 머티리얼을 제공하여 개발자가 현실 세계 수준의 게임을 제작할 수 있게 한다. 그러나 CryEngine의 문서 및 커뮤니티 리소스는 상대적으로 적어 초보자에게는 학습 난이도가 있을 수 있다.
-
GameMaker Studio 2는 2D 또는 3D 게임 제작에 사용되는 게임 개발 도구이다. 개발자의 아이디어를 실현할 수 있도록 다양한 도구와 에디터를 제공하며, 최종 프로젝트를 동일한 초기 리소스 기반에서 여러 플랫폼으로 이식할 수 있다. GameMaker Studio 2는 직관적이고 사용하기 쉬운 드래그 앤 드롭(Drag and Drop, DnD™) 액션 인터페이스 아이콘을 제공하여 가상 코드 로직으로 게임을 만들 수 있다. 또한 스크립트 언어 GML로 게임을 제작할 수 있으며, DnD™ 액션을 함수 호출과 결합할 수도 있다.
-
Godot Engine은 다기능, 크로스플랫폼 2D 및 3D 오픈소스 게임 엔진으로, Windows, macOS, Linux 등 다양한 운영체제에서 실행 가능하다. 제작된 게임은 PC, Android, iOS, HTML5 등 플랫폼에서 실행된다. 노드 기반 아키텍처로 게임을 설계하며, 3D 렌더러 설계는 3D 게임의 그래픽을 강화한다. 내장 도구를 활용한 2D 게임 기능은 픽셀 좌표 기반으로 작동하며, 2D 게임 효과를 정밀하게 제어할 수 있다.
어떤 게임 엔진을 선택하든 프런트엔드 기술 개발자는 실제 운영 상황을 고려해야 한다. Web3 게임은 소비재로서 다양한 게임 메커니즘(집중, 공감, 상상력)과 몰입형 감정 상호작용 경험(기쁨, 공포, 갈망, 성장, 여유, 놀라움 등)이 지속적인 소비의 중요한 전제조건이다. 아래에서는 게임 내 물리 시뮬레이션과 드로잉 시스템(렌더링 시스템 / 렌더러)을 예로 들어, 프런트엔드 기술자가 게임 엔진 사용 시 고려해야 할 기술적 세부사항 및 사용자 경험 문제를 분석하겠다.
정확한 물리 효과 시뮬레이션이 없다면, 아무리 화려한 게임이라도 정적이며 지루하고 무기력하게 느껴진다. 게임 내 다양한 씬은 모두 물리 원리와 물리 엔진을 포함한다. 물리 엔진은 게임 세계의 객체에 현실 세계의 물리적 속성(예: 질량, 형태 등)을 부여하고, 풀리, 로프 등을 포함한 강체 모델로 추상화하여, 힘의 작용 하에 게임 객체가 현실 세계의 운동 및 충돌 과정을 시뮬레이션할 수 있도록 하는 구성 요소이다. 즉, 뉴턴 고전 역학 모델을 기반으로 간단한 API를 통해 게임 객체의 움직임, 회전, 충돌을 계산하여 현실적인 운동 및 충돌 효과를 구현한다. 계산 과정에서는 운동학, 동역학 등 여러 학문의 이론과 계산이 적용된다.
-
운동학: 물체 자체의 물리적 성질이나 가해지는 힘을 고려하지 않고, 기하학적 관점에서 물체 위치의 시간에 따른 변화 법칙을 설명하고 연구하는 역학 분야이다. 점의 운동학은 점의 운동 방정식, 궤적, 변위, 속도, 가속도 등의 운동 특성과 다양한 공간에서의 변환을 연구한다. 운동학은 이론 역학의 한 분과로서 기하학적 방법을 이용해 물체의 운동을 연구한다. 작업 과정에서 프런트엔드 기술은 실제 물리 법칙에 가깝게 하면서 계산 복잡도를 낮출 수 있도록 가정 조건을 추가해야 한다. 일반적인 가정 조건에는 외부 힘의 작용을 고려하지 않는 것, 물체를 기하학적 부품으로 간주하고 질점 운동 모델로 추상화하는 것, 물체의 속성(위치, 속도, 각도 등)만 고려하는 것이 포함된다.
-
동역학: 물체에 작용하는 힘과 물체 운동 사이의 관계를 연구하는 분야이다. 동역학의 연구 대상은 빛의 속도보다 훨씬 느린 거시적 물체이다. 게임 물리 엔진에서는 주로 강체 동역학을 다루며, 질점계 동역학의 기본 정리인 운동량 정리, 운동량 모멘트 정리, 운동에너지 정리 및 이들로부터 유도된 다른 정리들을 포함한다. 여기서 운동량, 운동량 모멘트, 운동에너지는 질점, 질점계, 강체 운동을 설명하는 기본 물리량이다. 작업 및 계산 과정에서 고려해야 할 요소와 가정 조건에는 외부 힘의 물체 운동 영향, 중력, 저항, 마찰 등 힘의 작용(물체의 질량과 형태에 작용하며, 탄성 물체 포함), 강체 가정 조건, 게임 내 물체가 현실 세계 운동에 얼마나 가까운지 등이 포함된다.
물리 엔진을 사용하면 게임 개발자는 게임 객체에 형태(균일 분포 가정)와 힘만 부여하면, 게임 엔진이 자동으로 운동 및 충돌 계산을 수행한다. 또한 위 물리 엔진 분석에 따라 프런트엔드 기술 팀은 복잡한 운동학 지식 및 충돌 계산과 최적화를 연구할 필요 없이, 물리 엔진에 매개변수를 입력하기만 하면 된다. 그러나 물리 엔진을 효율적으로 활용하기 위해서는 프런트엔드 기술 팀이 기본적인 물리 운동 지식을 이해할 뿐 아니라, 게임 이산 시뮬레이션에서 발생하는 특수 현상을 통찰하여 게임 왜곡을 방지해야 한다. 숙련된 프런트엔드 기술자는 게임의 부드러움과 실행 성능 문제도 고려해야 한다.
게임 내 강체 운동 모델을 구성하기 전에 다음과 같은 여러 요소를 고려해야 한다:
-
설정된 모델이 강체인지, 힘 작용 후 탄성 변형 정도;
-
운동 중 또는 힘 작용 후 형태와 크기가 변화하는지;
-
운동 중 또는 힘 작용 후 물체 내부 각 점의 상대 위치가 변화하는지;
따라서 위 분석을 바탕으로 기술 프런트엔드 팀은 물체의 중심, 형태, 질량, 초기 운동 방향 및 궤적을 설정해야 한다. 또한 물체의 중력과 운동 상황에 대해서는 질량 중심을 중점적으로 설정하며, 물체 모델이 균질하고 중심이 질량 중심과 일치한다고 가정한다. 물체 운동 설정 시 물체에 작용하는 힘을 중심점에 작용하는 힘과 중심점을 중심으로 회전하는 모멘트로 분해해야 한다. 매개변수 설정은 사용자가 물체와 운동에 대한 인식에 부합해야 몰입감을 주며, 그렇지 않으면 플레이어가 게임에서 벗어나 감정 몰입이 어려워진다. 아래는 힘과 모멘트의 분해를 보여주는 그림이다:

출처: 공개 시장 정보
현실감 있는 물리 행동을 구현하기 위해 게임 내 물체는 올바르게 가속되어야 하며(즉, 인간의 인식에 부합), 충돌, 중력 등의 힘의 작용을 받아야 한다. 먼저, 3D 물체 모델 운동을 설정할 때 물체 모델이 볼록한지 판단해야 한다. 즉, 임의의 두 꼭짓점 사이에 선을 그었을 때 그 선이 물체 표면 밖으로 나가지 않는 것을 말한다. 대부분의 실제 물체는 볼록하지 않지만, 물리 시뮬레이션에서 볼록 물체는 이상적인 근사값이다. 물리 엔진이 충돌을 계산하고 시뮬레이션할 때, 볼록 물체는 충돌, 낙하 등의 수동적 행동을 더 정확하게 생성할 수 있다. 볼록 충돌 형상은 원본 충돌 형상과 오목 충돌 형상 사이에서 균형을 이루며, 어떤 복잡한 형상도 표현할 수 있다. 스크립트로 물리를 제어하면 차량, 기계, 심지어 천의 동적 특성을 부여할 수 있다. 물론 입력된 메시는 오목할 수 있으며, 물리 엔진이 그 볼록 부분을 계산한다. 객체의 복잡성에 따라 여러 볼록 형상을 사용하는 것이 오목 충돌 형상을 사용하는 것보다 일반적으로 더 나은 성능을 제공한다. Godot 엔진은 볼록 분해를 통해 중공 객체와 거의 일치하는 볼록 형상을 생성할 수 있지만, 볼록 형상 수가 너무 많아지면 이 성능 이점은 감소한다. 전체 레벨과 같은 대규모 복잡한 객체의 경우 오목 형상을 사용하는 것이 좋다. 물체 형상을 모델링할 때 일반적으로 사용되는 참조 유형에는 구(SPHERE), 육면체(BOX), 캡슐형(CAPSULE), 원통형(CYLINDER), 볼록 껍질(CONVEX_HULL) 등이 있으며, 중심점, 회전 각도, 크기 등의 매개변수를 추가하여 기술 프런트엔드가 사용할 수 있다.
물체 운동을 시뮬레이션할 때 추가적인 계산 과정이 필요하다. 모델을 가져올 때 물리 엔진을 추가하면 무효화될 수 있으므로, 물체에 간단한 메시를 감싸고 물체의 자세를 메시에 따라 움직이도록 할 수 있다. Babylon으로 생성된 메시는 직접 물리 속성을 추가하거나 사용자 정의 셰이더를 생성할 수 있다. 사용자 정의 셰이더는 복잡하지만 구현 효과가 더 좋다. 에디터에서 실제로 작업할 때, 메시 인스턴스를 선택하고 3D 뷰포트 상단의 메시 메뉴를 사용하여 하나 이상의 볼록 충돌 형상을 생성할 수 있다. 에디터는 두 가지 생성 모드를 제공한다:
-
단일 볼록 충돌 생성은
Quickhull알고리즘을 사용하며, 자동 생성된 볼록 충돌 형상을 사용해 CollisionShape 노드를 생성한다. 단일 형상만 생성하므로 성능이 좋으며 소형 물체 모델에 적합하다. -
다중 볼록 충돌 형제 생성(Create Multiple Convex Collision Siblings)은
V-HACD알고리즘을 사용하여 여러 개의 CollisionShape 노드를 생성하며, 각 노드는 볼록 형상을 가진다. 여러 형상을 생성하므로 성능을 희생하면서 오목 물체에 대해 더 정확하다. 중간 정도 복잡도의 객체의 경우 단일 오목 충돌 형상보다 더 빠를 수 있다.
오목 충돌 형상의 경우, 오목 형상은 Godot에서 가장 느리지만 가장 정확한 옵션이다. StaticBodies에서만 오목 형상을 사용할 수 있다. 강체 모드가 정적이지 않은 한 KinematicBodies나 RigidBody와 함께 사용할 수 없다. GridMaps를 사용하지 않고 레벨 디자인을 할 때 오목 형상은 레벨 충돌에 가장 적합한 방법이다. 또한 3D 모델러에서 간단한 충돌 메시를 구성하고 Godot이 자동으로 충돌 형상을 생성하도록 할 수 있다. MeshInstance를 선택하고 3D 뷰포트 상단의 메시 메뉴를 사용하여 에디터에서 오목 충돌 형상을 생성할 수 있다. 에디터는 두 가지 옵션을 제공한다:
-
Create Trimesh Static Body: 메시 기하학과 일치하는 오목 형상을 포함하는 StaticBody를 생성한다.
-
Create Trimesh Collision Sibling: 메시 기하학과 일치하는 오목 형상을 가진 CollisionShape 노드를 생성한다.
참고로, 성능 향상을 위해 형상 수를 최대한 적게 유지하는 것이 좋으며, 특히 RigidBodies 및 KinematicBodies와 같은 동적 객체의 경우 그렇다. 물리 엔진의 내부 최적화 혜택을 받기 위해 CollisionShapes의 이동, 회전, 스케일링을 피해야 한다. Single untransformed collision shape을 StaticBody에서 사용할 때 엔진의 광각 위상 알고리즘은 비활성 PhysicsBodies를 폐기할 수 있다. 성능 문제가 발생하면 정확성과 타협해야 한다. 대부분의 게임은 100% 정확한 충돌을 갖지 않으며, 정상적인 게임 플레이 중 눈에 띄지 않도록 숨기거나 다른 방법으로 처리하는 창의적인 방법을 찾는다.


출처: 공개 시장 정보
이상은 물리 시뮬레이션 부분을 사례로 프런트엔드 개발자가 수행하고 주의해야 할 내용을 분석한 것이다. 아래에서는 드로잉 시스템(렌더링 시스템 / 렌더러)을 예로 들어 프런트엔드 개발자가 수행해야 할 항목을 분석하겠다. 드로잉 시스템은 게임 엔진 전체에서도 가장 높고 어려운 부분 중 하나이다. 이론적으로 렌더링은 수학(수학, 물리, 알고리즘의 정확성)과 드로잉 효과(조명, 입체각, 산란, 굴절, 반사 등)의 정확성이라는 두 가지 문제를 해결해야 하며, 이를 통해 사용자에게 게임 몰입감을 제공한다. 실행 및 실천 과정에서는 다음 네 가지 실제 문제를 해결해야 한다:
-
씬의 복잡성: 단일 씬의 다물체를 다양한 각도에서 렌더링할 때, 매 프레임 게임 화면 생성 시 여러 번 연산을 반복해야 하며, 다수의 씬에서는 다물체의 다양한 각도 렌더링이 더욱 복잡하다.
-
하드웨어 심층 최적화: PC, 스마트폰 등의 하드웨어 능력은 알고리즘 실행 및 출력에 영향을 준다. 하드웨어를 위해 다양한 시간이 소요되는 텍스처 샘플링 작업과 사인, 코사인, 지수, 로그 등의 초월 함수 연산과 같은 비교적 복잡한 수학 계산을 처리해야 한다. 또한 하부 연산을 수행하는 하드웨어 유닛이 혼합 정밀도 연산을 지원하는지 여부도 하드웨어 심층 최적화의 중요한 고려 사항 중 하나이다.
-
성능 예산: 게임 화면 품질 요구가 아무리 높아도 게임 엔진은 매 프레임 게임 화면을 33밀리초(즉, 1/30초) 이내에 계산을 완료해야 한다. 대규모 몰입형 게임의 경우 짧은 시간 내에 게임 화면이 크게 변화할 수 있지만, 계산 시간 요구는 단축되지 않는다. 게임 산업의 발전에 따라 게임의 정교함 요구가 점점 높아지고 있으며, 프레임률과 화면 크기 요구도 증가하고 있다. 매 프레임 시간 예산은 점점 줄어들지만, 동시에 화질 요구는 점점 높아지고 있다.
-
매 프레임 게임 화면 시간 예산 배분: 그래픽카드 성능 비중 측면에서 GPU가 CPU보다 더 많은 비중을 차지할 수 있다. 그래픽 렌더링 알고리즘은 CPU 계산 리소스를 과도하게 차지해서는 안 되며, 계산 리소스는 시스템 내 다른 모듈에 배분되어야 한다.


출처: 불명 기술
위 분석에 따르면, 계산은 드로잉 및 렌더링 시스템의 가장 중요한 핵심 기능 중 하나로, 수천만 개의 정점과 픽셀, 논리 연산 유닛 및 텍스처에서 연산 작업을 수행한다. 간단히 말해, 구체적인 작업에서 여러 평면으로 구성된 삼각형이 투영 행렬을 거쳐 스크린 공간에 투영되며, 래스터화를 통해 정점 데이터를 프래그먼트로 변환하고, 각 프래그먼트 요소는 프레임 버퍼의 픽셀에 대응되며, 이 과정은 이미지를 래스터로 구성된 2차원 이미지로 변환한다. 셰이딩 및 드로잉 과정에서 각 작은 픽셀에 대해 해당材质 및 텍스처를 계산하여 픽셀을 해당 색상으로 렌더링한다. 또한 몰입감과 현실감을 높이기 위해 실제 상황에 따라 조명 및 물체 무늬 등의 정보를 조정하고 최종 효과를 렌더링한 후, 정점 버퍼와 인덱스 버퍼를 구성하고 메시 데이터를 그래픽카드에 전달한다. 위 '투영 - 래스터화 - 셰이딩 및 드로잉 - 후처리 및 조명 계산' 과정이 바로 드로잉 과정이다.

출처: 불명 기술
자세히 살펴보면, 렌더링할 물체와 씬은 다양한 기하학적 형체,材质, 무늬, 응용 씬 등을 가지므로 실제 렌더링 작업에서 구체적인 상황에 따라 분석이 필요하다. 일반적으로 모델 파일에는 정점 위치, 정점의 법선 방향, 정점의 UV 좌표 및 기타 속성 데이터를 포함하는 여러 정점을 저장해야 한다. 대부분의 경우 각 모델의 삼각형 방향을 계산한 후, 인접한 몇 개의 삼각형의 법선 벡터를 평균화하여 해당 정점의 법선 벡터 방향을 얻을 수 있다. 실제 실행 시 인덱스 데이터와 정점 데이터를 사용하여 모델 파일의 삼각형을 설명하고, 모든 정점을 배열에 배치하며, 세 정점의 인덱스 위치 정보만 저장하면 저장 용량을 원래의 1/6로 줄일 수 있다.
텍스처는材质 표현의 매우 중요한 방식이다.材质 유형에 대한 인식은 종종材质 매개변수에 의해 결정되지 않고, 주로 텍스처에 의해 결정된다. 예를 들어, 매끄러운 금속 표면과 녹슨 비금속 표면의 시각적 표현 차이는 거칠기 텍스처로 구분된다. 셰이딩 및 드로잉 과정에서 텍스처 샘플링의 성능 소모가 매우 크고 복잡하며, 한 번의 텍스처 샘플링에는 2 x 4, 총 8개의 픽셀 데이터를 샘플링하고, 7번의 보간 연산이 필요하다. 주목할 점은 텍스처 샘플링 시 앨리어싱(alising)과 관련된 문제를 피하고, 시야각 변화로 인한 화면 흔들림 및 오프셋 현상을 방지해야 한다는 것이다. 따라서 샘플링 시 네 점을 취하고 네 점을 보간하며, 두 개의 텍스처 레이어에서 비율에 따라 샘플링하는 것도 필수적이다.
셰이딩 및 드로잉 시 다양한 요소를 결합해야 하며, 이때 엔진이 생성한 Shader 코드는 이진 데이터 블록(Block)으로 컴파일되어 네트워크와 함께 저장된다. 다양한 메시와 Shader 코드 조합은 다양한 게임 세계를 형성한다. 동일한 모델에 대해 서로 다른材质은 각각의 서브메시 내에서 각자의材质, 텍스처, Shader 코드를 사용할 수 있다. 각 서브메시는 일부 데이터만 사용하므로 인덱스 버퍼의 시작 위치와 끝 위치 오프셋만 저장하면 된다. 또한 셰이딩 및 드로잉의 실제 작업에서 공간 절약을 위해 동일한 리소스 풀(메시 풀, 텍스처 풀 등)을 공유할 수 있다. 주목할 점은 인스턴싱 렌더링 과정에서 정점 데이터를 공유하면 비디오 메모리 사용률과 대역폭을 크게 줄일 수 있다는 것이다. 또한 높은 요구를 가진 게임의 경우 인스턴싱 사용을 위해 단일 객체 선택 작업 등 추가적인 기술 처리가 필요할 수 있다.
후처리 및 조명 계산 과정에서는 조명 강도, 조명 각도, 사용자 시야각, 산란 및 굴절,材质의 빛 흡수 정도 등 다차원적 문제를 고려해야 한다. 예를 들어 Unity의 Built-in 파이프라인에서 후처리 효과를 완성하려면 Post Processing Stack 플러그인을 사용하거나 OnRenderImage()와 Shader를 결합하는 방법으로 커스터마이징할 수 있다. 이 방법은 씬에 원하는 후처리 효과를 적용할 수 있으며 자유도가 높아 언제든지 수정하고 확장할 수 있다. 게임 엔진에서 조명 처리의 계산 과정은 비교적 복잡하며, 아래 조명 분석 및 방정식 표현을 참조할 수 있으며, 관심 있는 독자는 매개변수 조정을 직접 시도해볼 수 있다. 게임 산업의 정교화 발전에 따라 조명 표현은 게임 산업의 고차원적 표현이 되는 중요한 추세이며, 관련 렌더링 기술은 애니메이션, 영화, 가상현실 등 다양한 분야에도 활용될 수 있다.


출처: 불명 기술
추가로 언급하자면, 게임 엔진 드로잉 시스템은 컴퓨터 공학 과학의 한 분야로, 그래픽카드의 아키텍처, 성능, 에너지 소비, 속도 및 제한 등을 깊이 이해해야만 엔진의 효과를 완전히 발휘할 수 있다. 또한 GPU는 매우 강력한 고속 병렬 처리 능력을 가지고 있어 낮은 비용으로 일련의 장애물의 깊이도를 형성한 후 일부 모델 객체를 제거하여 복잡한 씬 처리 능력을 최적화할 수 있다.
산업화된 생산 및 제작: 기술 백엔드
백엔드의 주요 업무는 서버 측 로직과 데이터 처리, 네트워크 통신 및 동기화 등 기술 솔루션을 포함한다. 서버 로직 측면에서 백엔드 개발자는 서버 측 로직과 게임 데이터 저장을 담당하며, 플레이어 계정 관리, 게임 세계 상태 동기화, 다중 플레이어 상호작용 지원 등을 포함한다. 또한 개발자는 게임 진행 상황, 플레이어 성취, 가상 아이템 등의 정보를 저장하기 위한 효율적인 데이터베이스 아키텍처를 설계하고 구현해야 한다. 또한 백엔드 시스템은 게임 클라이언트로부터 요청을 처리해야 하며, 플레이어 간 상호작용, 플레이어 사용자 데이터, 캐릭터 레벨업, 자원 구매 등의 정보 요청을 포함한다. Web3 게임은 아래 게임 백엔드 아키텍처를 참고할 수 있다. 전송 속도, 정산 시간 등의 영향을 받아 현재의 통신 및 암호화 기술 수준을 기반으로, 현재 대규모 Web3 게임의 백엔드 아키텍처는 완전히 체인 상에 구축되지 못하고 있다.

출처: 공개 시장 정보
게임 백엔드 개발의 네트워크 통신 및 동기화 측면에서, 백엔드 개발자는 TCP/IP, HTTP, WebSocket 등의 다양한 네트워크 프로토콜을 사용하여 안정적인 클라이언트-서버 통신 링크를 구축한다. 이 개발 과정에서 고빈도 데이터 교환과 실시간 게임 상태 업데이트를 지원하기 위한 네트워크 프로토콜을 설계하고 구현해야 한다. 효과적인 네트워크 통신 전략과 동기화 메커니즘은 지연을 줄이고 모든 플레이어가 게임 세계에서 일관된 상태를 볼 수 있도록 보장한다. 특히 네트워크 게임에서 실시간 데이터 전송과 동기화는 우수한 사용자 경험을 보장하는 핵심이다.
백엔드 개발 시 전체 확장성, 안정성 및 성능을 향상시켜야 한다. 성능 측면에서 백엔드는 캐시에서 낮은 지연과 빠른 계산 피드백뿐만 아니라, HTTP 프로토콜에서 서버와 실시간 통신을 최대한 유지해야 한다. 안정성 및 효율성 측면에서 각 서버는 격리되어야 하며, 단일 서버의 문제가 전체 서버에 영향을 미치는 것을 방지해야 한다. 고확장성 측면에서 개발자는 계산 용량과 기능 확장을 고려해야 하며, 다수의 서브서버를 단일 서버로 연결하고 TCP, IPC 등의 채널을 통해 통신하여 서버의 피크 시간대 정보 및 요청 처리 능력을 향상시켜야 한다. 아래는 기술
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News










