Skip to content
Skip to content
블로그로 돌아가기
Minecraft의 대체 C++ 클라이언트, Polymer 탐험

Minecraft의 대체 C++ 클라이언트, Polymer 탐험

Alexandru Maftei
Alexandru Maftei
@ice
Updated
3 조회수
TL;DR:Polymer는 오프라인 서버용 Vulkan 렌더링을 사용하는 C++ Minecraft 클라이언트로, 최적화된 칸크 로딩 및 관찰자 카메라를 제공합니다. 이 실험적 뷰어를 빌드, 설치, 사용하는 방법을 알아보세요.
🐙 오픈소스 Minecraft 프로젝트

atxi/Polymer

개발 중인 C++ 및 Vulkan을 사용하는 Minecraft 클라이언트

⭐ 135 stars💻 C++📜 MIT
GitHub에서 보기 →

Polymer는 Vulkan 렌더링을 사용하는 C++ Minecraft 클라이언트로, 오프라인 서버에서 월드를 시각화하는 데 적합합니다. 관찰자 카메라, 최적화된 칸크 로딩 및 Minecraft 1.21.4 지원을 제공합니다. 대규모 월드를 탐색하는 데 반응성이 떨어지는 기본 클라이언트를 사용하지 않으려는 경우 또는 대체 클라이언트의 렌더링 처리를 궁금히 생각한다면 시도할 가치가 있습니다.

이 프로젝트의 목적

주된 개념은 이다: Java 클라이언트를 실행하지 않고, 서버에 연결하여 Vulkan(현대 그래픽 API)을 사용해 월드를 렌더링하는 독립 실행형 실행 파일을 시작합니다. 프로젝트는 그래픽 최적화를 관심 있는 개발자가 완전히 C++로 작성했습니다. 원래 Minecraft 자산을 다운로드하여, 월드 기하학을 구축하고, 관찰자 관점에서 모든 것을 표시합니다 - 비행하며, 칸크가 로딩되는 것을 보는 것과 같습니다.

현재는 오프라인 서버만 지원합니다. 온라인 모드는 계획되었지만 아직 구현되지 않았습니다.

Polymer가 다른 점은 란치거나 모드가 아님을 보여줍니다. 이는 Minecraft 렌더링 방식의 기본 재작성입니다. 최신 버전(v0.0.5)은 Minecraft 1.21.4을 지원하며, 다음과 같은 인상적인 최적화를 포함합니다: 렌더링을 건너뛰기 위한 칸크 연결 그래프, 칸크가 보이는 시점까지 메시 빌드를 연기 및 4x 멀티 샘플링 안티 앨리어싱. 이 튜닝은 무거운 월드의 렌더링 성능을 개선하는 데 도움이 될 수 있습니다.


왜 이 클라이언트를 사용하는가?

직접적인 답변은 대부분의 플레이어가 Polymer를 필요로 하지 않는다는 것입니다. 이 클라이언트는 생존 모드 또는 창의적 모드를 플레이하는 데 기본 클라이언트의 대체품이 아닙니다. 블록을 파거나, đặt거나, 전통적인 의미에서 월드와 상호 작용할 수 없습니다. nhìn만 보는 것입니다.

그러나 대규모, 장기적인 SMP 월드(예: 수천 건의 커스텀 건물이 수십 개의 칸크에 걸쳐 있는 경우)를 열었다면 기본 클라이언트가 어려움을 겪는 것을 알 수 있습니다. 칸크 로딩이 중단되며, 렌더링이 미끄러집니다. 플레이는 불가능하지 않지만 매끄럽지 않습니다. Polymer는 다른 렌더링 파이프라인을 사용하여 일부 문제를 회피합니다. 또한 그래픽스 프로그래밍에 관심 있는 사람들에게도 매력적입니다: Minecraft의 렌더링이 완전히 재구현될 수 있음을 보여줍니다.

또 다른 관점: 서버를 운영하고 성능 문제 없이 시네마틱 스크린샷을 찍거나 월드 투어를 만들고 싶다면, Polymer의 관찰자 전용 설계는 가벼운 옵션이 될 수 있습니다. 월드를 로드하면, 비행하여, 스크린샷을 캡처한 다음 완료됩니다. 파일 수정이나 모드가 시각을 방해하지 않습니다.


Polymer 실행

여기서 학습 곡선이 시작됩니다. Polymer는 모드팩이나 란치가 아닙니다. 소스에서 빌드해야 합니다.

Windows에서 프로세스는 다음과 같습니다:

bash
git clone https://github.com/atxi/Polymer.git
cd Polymer
git submodule update --init
cmake -B build -S . --preset msvc

그런 다음 Visual Studio에서 생성된 `build/polymer.sln`을 열고 x64 Release 모드에서 컴파일합니다. MSVC 2022 또는 Clang 및 CMake 3.28 이상이 필요합니다. 최종 실행 파일은 `build/Release`에 있습니다.

셰이더 컴파일에는 Vulkan SDK(특히 `glslc`)가 필요합니다. LunarG에서 다운로드하여 `VULKAN_SDK` 환경 변수를 설정한 다음 `compile_shaders.bat`을 실행합니다. 그래픽스 개발에 익숙하지 않다면, 일반 게임 설정에 없는 추가 빌드 단계로 불편할 수 있습니다.

Linux는稍간 더 간단하지만, 시스템 종속성이 먼저 필요합니다:

bash
sudo apt-get install libglfw3 libglfw3-dev glslang-tools
git clone https://github.com/atxi/Polymer.git
cd Polymer
git submodule update --init
cmake -B build -S .
cd build && make

실행 파일은 `build/bin`에 있습니다. 셰이더 컴파일을 위해 `compile_shaders.sh`를 실행합니다.

런타임 전에 `blocks-1.21.4.json` 파일을 가져옵니다 - GitHub 릴리스 페이지 또는 Minecraft를 데이터 생성기와 함께 실행하여 생성할 수 있습니다. 클라이언트를 실행할 위치에 파일을 두십시오. 첫 번째 런타임 시, Polymer는 Minecraft의 공식 리소스 서버에서 게임 자산(텍스처, 사운드, 모델)을 다운로드하여 로컬에 캐시합니다(`~/.polymer/` - Linux 또는 `%appdata%/Polymer/` - Windows).

기본적으로, Polymer는 'polymer'라는 사용자 이름으로 로컬호스트에 연결을 시도합니다. 서버는 오프라인 모드여야 합니다. 명령줄 플래그를 사용하여 이 설정을 오버라이드합니다:

bash
polymer.exe -u YourUsername -s 192.168.1.100:25565

중요한 세부 정보: 서버에서 관찰자 모드로 설정되어야 칸크가 비행하는 동안 로딩됩니다. 생존 모드라면 이미 로딩된 칸크만 볼 수 있으므로 유용하지 않습니다. 서버 콘솔 또는 `/gamemode spectator`를 사용하여 수정하세요.


중요한 기능

칸크 연결 그래프가 이곳의 아웃스탠딩 최적화입니다. 전통적인 렌더러는 볼 수 없는 내부 면을 포함하여 모든 블록 면을 그리지만, Polymer는 실제로 보이는 칸크만을 계산하여 내부 면의 기하학을 건너뜁니다. 이는 GPU가 처리해야 하는 양을 줄입니다.

연기된 메시 빌딩도 지적할 만합니다. 칸크가 로딩되는 즉시 메시를 생성하는 대신, Polyer는 보이는 시점에만 메시를 생성합니다. 수천 개의 칸크가 있는 서버의 경우, 실제로 보지 못할 칸크에 대한 메모리 및 CPU 사이클을 절약합니다.

4x 멀티 샘플링 안티 앨리어싱은 기본 설정보다 더 나은 엣지 매끄럽기를 제공하지만, 하드웨어에 따라 성능 비용이 발생할 수 있습니다. 보정된 텍스처 및 애니메이션 타이밍은 물 애니메이션 및 텍스처 블렌딩이 선명하게 느껴지는 등 미묘하지만 주목할 만합니다.

성능은 하드웨어에 따라 크게 달라집니다. 개발자는 주로 Windows에서 테스트했으며, Linux는 작동하지만 잘 최적화되지 않았습니다. 최근幾년간의 중급 GPU를 사용하는 경우 잘 작동합니다. 오래된 통합 그래픽스는 높은 드로우 거리에 어려움을 겪을 수 있습니다.


유의할 점 및 제한사항

Polymer는 초기 단계 소프트웨어입니다. 버그 및 누락된 기능을 기대하십시오.

물리학, 충돌 감지, 플레이어 상호 작용이 없습니다. 블록을 파거나, 놓거나, 열거나, 전통적인 의미에서 월드와 상호 작용할 수 없습니다. 탐색 및 시각화만 가능합니다. 이 클라이언트는 실제 게임 플레이를 위한 대체 클라이언트가 아닙니다.

온라인 서버는 아직 작동하지 않습니다. 코드는 인증을 처리하지 않습니다. 다른 사람의 온라인 서버에 Polymer를 사용하면 연결이 끊길 수 있습니다. `server.properties`의 `online-mode=false`와 함께 오프라인 모드만 지원됩니다.

Windows가 주요 개발 플랫폼입니다. Linux 빌드는 작동하지만 테스트가 적습니다. Mac 지원은 문서화되지 않았습니다 (빌드 시스템은 macOS를 지원하는 GLFW를 대상으로 하지만, 작동하는지 확인된 사람은 없습니다).

빌드 프로세스 자체가 까다롭습니다. CMake, Visual Studio 프로젝트 파일 또는 셰이더 컴파일에 익숙하지 않은 경우, 환경 변수 및 누락된 종속성에 대한 디버깅에 시간을 소요할 수 있습니다. 이是一클릭 설치가 아닙니다.


第三方 클라이언트 및 반치트에 대한 정보

⚠️
중요 많은 멀티플레이어 서버는 수정된 클라이언트 또는 사용자 정의 Minecraft 빌드를 감지하거나 방금하는 반치트 시스템을 실행합니다. Polymer는 관찰자 전용이고 악의적인 행동을 할 수 없지만, 일부 서버는 모든 비밴일라 클라이언트를 위반으로 coi합니다. 다른 사람의 서버에 Polymer를 연결하기 전에 규칙을 확인하세요. 프로젝트에 대한 호기심으로 좋아하는 서버에서 밴당하는 것은 가치가 없습니다.

Polymer의卸載는 깨끗합니다. 실행 파일은 독립적이며, 자산은 로컬에 캐시됩니다. 실행 파일과 `~/.polymer/` 또는 `%appdata%/Polymer/` 폴더를 삭제하면 완료됩니다. 기본 Minecraft 설치에 아무 것도 주입되지 않습니다.


알아두면 유용한 다른 프로젝트

Polymer가 интерес에 있다면, 이 분야의 몇 가지 대체 옵션이 있습니다. Minetest는 Minecraft에서 영감을 받은 보스 게임 엔진이지만, 실제로 Minecraft 자체는 아닙니다 - 게임을 구축하는 샌드박스입니다. Chunky는 Minecraft 세계의 고품질 정적 이미지를 생성하는 렌더링 도구지만, 실시간이 아니며 클라이언트는 아닙니다. VoxelMap은 기본 클라이언트에 미니맵 및 웨이포인트 기능을 추가하는 모드지만, 오버레이만으로, 기본 재작성은 아닙니다.

Polymer는 근본적인 C++ 클라이언트로, 현대 그래픽 API를 사용하는 唯一의 프로젝트입니다. 이는 그 매력과 한계를 모두 나타냅니다 - 모드보다 기능이 적지만, 가능성은 더 나은 성능 및 더 실험적인 렌더링 기술을 제공합니다.

서버에 연결하기 전에 캐릭터 외관을 커스터마이즈하려면 Minecraft Skin Creator를 확인하세요 - 유일한 외관을 설계할 수 있습니다. 서버 커뮤니케이션 또는 빌딩 레이블을 계획하는 경우, Minecraft Text Generator가 형식화된 텍스트를 쉽게 작성합니다.


마이 테이크

Polymer는 기술적 관점에서 매력적입니다. 완전히 다른 파이프라인을 통해 Minecraft 세계가 렌더링되는 것을 보는 것은 흥미로울 수 있습니다. 특히 게임 엔진이 작동하는 방식을 관심 있게 생각한다면, 최적화는 실제로 있으며, 코드는 깨끈하고, Vulkan을 사용하는 Minecraft의 가능성을 증명하는 강력한 개념 증명입니다.

실제 사용에 대해서는 다음과 같이 말할 수 있습니다: 대규모 로컬 서버의 월드를 가지고 있는 경우 또는 렌더링 성능에 대한 호기심이 있다면, 한번 빌드하고 시도하는 것이 가치가 있습니다. 그러나 기본 클라이언트의 대체品으로 사용하지 마십시오. 이 클라이언트는 뷰어이며, 플레이어가 아닙니다. 현재 v0.0.5로,まだ粗い 점이 있습니다. 개발자는 온라인 모드 지원을 작업 중이나, 아직 그 단계에 도달하지 못했습니다.

빌드 및 셰이더 컴파일에 몇 시간을 투자할 수 있고, Minecraft에 대한 최신 그래픽 API의 능력을 궁금히 생각한다면, 진행하세요. 그러나 실험적인 소프트웨어를 테스트한다는 점을 기대하십시오. 완성된 대체 클라이언트를 사용하는 것이 아닙니다.

atxi/Polymer - MIT, ★135
About the author
Alexandru Maftei
Alexandru MafteiLead Writer

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Share with your friends!

Comments

No comments yet. Be the first to share your thoughts!

We use cookies to improve your experience. By continuing to use this site, you agree to our use of cookies. Read our Privacy Policy