포켓몬 트레이딩 카드 게임 (TCG)은 전 세계에서 30년 가까이 사랑받고 있습니다. 최근에 출시된 포켓몬 카드 게임 Pocket은 플레이어가 실물 카드 없이 언제 어디서나 포켓몬 컬렉션과 배틀을 즐길 수 있도록 설계되었습니다. 스마트폰에서 액세스할 수 있는 게임이라는 점이 사용자들 사이에서 널리 인기를 얻는 데 기여했습니다.
캐주얼한 카드 게임처럼 보이지만 포켓몬 카드 게임 Pocket은 복잡한 셰이더를 사용하므로 컴파일 시간을 줄이는 데 상당한 어려움이 있습니다. 이 문제를 해결하고 고품질 그래픽과 원활한 게임 환경을 제공하기 위해 Pokémon TCG Pocket의 Android 버전에서는 차세대 그래픽 API인 Vulkan을 채택했습니다.
이 문서에서는 Pokémon TCG Pocket 개발팀의 Vulkan 채택, 발생한 문제, Vulkan이 제공하는 이점을 자세히 살펴봅니다.
그림 1. 포켓몬 카드 게임 Pocket 게임 플레이 장면
Vulkan을 채택하는 이유
처음에 포켓몬 카드 게임 Pocket 개발팀은 OpenGL ES를 사용할 계획이었습니다.
하지만 미래가 유망한 그래픽 API인 Vulkan을 채택하기로 결정했습니다.
Vulkan을 선택한 주된 이유는 다음과 같습니다.
장기 앱 관리: Vulkan이 Android의 주요 그래픽 API가 되는 추세를 인식한 팀은 Vulkan이 장기 앱 관리에 최적의 선택이라고 판단했습니다.
낮은 사양 기기에서 안정적인 성능: 다양한 사용자에게 원활한 환경을 제공하려면 낮은 사양 기기에서 안정적인 성능을 제공하는 것이 필수적입니다. Vulkan의 CPU 부하 감소 기능은 프레임 속도와 배터리 소모량을 개선할 것으로 예상됩니다.
대규모 출시 후 변경사항 방지: 출시 후 OpenGL ES에서 Vulkan으로 전환하면 광범위한 수정이 필요하여 사용자 환경이 중단될 수 있습니다. 처음부터 Vulkan을 채택하여 이러한 큰 변화의 필요성을 완화했습니다.
Unity로 Vulkan 구현
Pokémon TCG Pocket은 Unity를 게임 엔진으로 사용합니다. Unity는 클릭 한 번으로 Vulkan을 구현하는 간소화된 프로세스를 제공합니다. 개발팀은 Unity를 사용하여 전문적인 교육 없이도 Vulkan을 원활하게 통합했습니다. 또한 개발 환경 및 도구에 맞는 Vulkan 관련 조정이 부족하여 비용 효율성이 떨어졌습니다.
그림 2. Unity의 Auto Graphics API
Vulkan 구현의 과제
Vulkan 구현은 비교적 간단했지만 그 후 개발팀은 몇 가지 문제에 직면했습니다.
기기별 문제: 일부 제조업체의 드라이버는 OpenGL ES에 비해 Vulkan에서 안정성이 낮아 기기별 문제가 발생했습니다.
미들웨어의 불완전한 Vulkan 지원: 일부 미들웨어는 완전한 Vulkan 지원이 없어 팀에서 미들웨어 업데이트를 기다려야 했습니다.
개발팀은 하위 수준 그래픽 API 또는 맞춤 엔진에 대한 경험이 풍부한 문제 해결을 위한 경험 많은 소비자 게임 개발자 팀을 구성하고 개별 문제 해결을 위해 Google 및 Unity팀과 협력하는 등 다양한 전략을 통해 이러한 문제를 해결했습니다. 기기 호환성을 확대하기 위해 테스트에 중급에서 오래된 고급 기기 (2~3년 전에 출시됨)를 포함하여 권장 기기 사양을 결정했습니다.
Vulkan의 이점
Vulkan을 채택하면 포켓몬 카드 게임 Pocket에 다음과 같은 여러 이점이 있습니다.
셰이더 컴파일 시간 감소: Vulkan은 다수의 셰이더에서도 셰이더 컴파일 시간을 크게 줄였습니다. 예를 들어 OpenGL ES 컴파일 시간은 1초를 초과할 수 있지만 Vulkan 렌더링에서는 더 이상 문제가 되지 않습니다.
지원되는 기기 범위 확대: 프레임 속도와 배터리 소모량이 개선되어 더 다양한 기기를 지원할 수 있게 되었으며, 더 많은 사용자에게 원활한 환경을 제공할 수 있게 되었습니다.
Vulkan 유효성 검사 계층을 통한 향상된 원격 분석: Vulkan 유효성 검사 계층은 Vitals ANR/비정상 종료 보고서에서 제공하는 데이터를 보완하여 문제의 근본 원인을 파악하는 데 매우 유용했습니다.
개발자를 위한 메시지
Pokémon TCG Pocket 개발팀은 프로젝트에 Vulkan을 고려하는 개발자에게 다음과 같은 조언을 제공합니다.
Vulkan은 셰이더 컴파일 시간 단축 외에도 상당한 성능 이점을 제공합니다.
vkQuality를 사용하여 OpenGL ES로 대체하면 Pokémon TCG Pocket에서 아직 사용하지 않더라도 기기 지원을 확장할 수 있습니다.
결론
포켓몬 TCG 포켓 개발팀은 Vulkan을 채택하여 다양한 기기에서 그래픽을 최적화하여 모든 플레이어에게 원활하고 몰입도 높은 환경을 제공할 수 있었습니다. 지속적인 기능 추가와 향후 발전 가능성으로 인해 Vulkan은 시간이 지남에 따라 더 많은 이점을 제공할 것으로 예상됩니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-05-16(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-05-16(UTC)"],[],[],null,["# Pokémon TCG Pocket: Adopting Vulkan-only development for casual games\n\nThe Pokémon Trading Card Game (TCG) has been enjoyed across the globe for nearly\n30 years. The recently released Pokémon TCG Pocket is designed to let players\nexperience Pokémon collections and battles anytime, anywhere, without the need\nfor physical cards. The game's accessibility on smartphones has contributed to\nits widespread popularity among users.\n\nWhile it may appear to be a casual trading card game, Pokemon TCG Pocket utilizes\ncomplex shaders, posing a significant challenge in reducing compilation time. To\naddress this and ensure high-quality graphics and a smooth gaming experience, the\nAndroid version of Pokémon TCG Pocket has embraced Vulkan, the next-generation\ngraphics API.\n\nThis document delves into the Pokémon TCG Pocket development team's adoption of\nVulkan, the challenges encountered, and the advantages Vulkan offers.\n**Figure 1.** Pokémon TCG Pocket game play scenes.\n\n#### Reasons for adopting Vulkan\n\nInitially, the Pokémon TCG Pocket development team planned to use OpenGL ES.\nHowever, they decided to adopt Vulkan, a graphics API with a promising future.\nThe primary reasons for choosing Vulkan were:\n\n- **Long-term app management**: Recognizing the trend of Vulkan becoming the dominant graphics API for Android, the team determined that Vulkan is the optimal choice for long-term app management.\n- **Stable performance on low-spec devices**: To provide a smooth experience for a wide range of users, stable performance on low-spec devices is essential. Vulkan's ability to reduce CPU load is expected to improve frame rates and battery consumption.\n- **Avoidance of large-scale post-release changes**: Switching from OpenGL ES to Vulkan after release would entail extensive modifications, potentially disrupting the user experience. Adopting Vulkan from the outset mitigated the need for such significant changes.\n\n#### Implement Vulkan with Unity\n\nPokémon TCG Pocket uses Unity as its game engine. Unity offers a streamlined\nprocess for implementing Vulkan with a single click. By using Unity, the\ndevelopment team seamlessly integrated Vulkan without requiring specialized\ntraining. Additionally, the lack of Vulkan-specific adaptations for development\nenvironments and tools contributed to cost-effectiveness.\n**Figure 2.** Auto Graphics API in Unity.\n\n#### Challenges in implementing Vulkan\n\nWhile Vulkan implementation was relatively straightforward, the development team\nencountered some challenges afterward:\n\n- **Device-specific issues**: Compared to OpenGL ES, some manufacturers' drivers exhibited lower stability with Vulkan, leading to device-specific issues.\n- **Incomplete Vulkan support in middleware**: Some middleware lacked full Vulkan support, requiring the team to wait for middleware updates.\n\nThe development team addressed these challenges through multiple strategies,\nincluding assembling a team of experienced consumer game developers for\ntroubleshooting (as they were well experienced in the low-level graphics API or\ncustom engine) and collaborating with Google and Unity teams for individual\nissue resolution. To expand device compatibility, testing included mid- to old\nhigh-end devices (released 2-3 years ago) to determine the\n[recommended device specifications](https://app-ptcgp.pokemon-support.com/hc/en-us/articles/39076135557145-What-is-the-recommended-smart-device-for-this-app \"Recommended device specifications\").\n\n#### Advantages of Vulkan\n\nAdopting Vulkan brought several benefits to Pokémon TCG Pocket:\n\n- **Reduced shader compilation time**: Vulkan significantly reduced shader compilation time, even for a large number of shaders. For example, the OpenGL ES compilation time could exceed 1 second, but this is no longer a concern with Vulkan rendering.\n- **Expanded range of supported devices**: Improvements in frame rate and battery consumption allowed for a wider range of supported devices, ensuring a smoother experience for more users.\n- **Better telemetry with Vulkan validation layers** : The [Vulkan validation layer](/ndk/guides/graphics/validation-layer) was very useful in identifying the root cause of problems, supplementing the data provided by Vitals ANR/Crash reports.\n\n#### Message to developers\n\nThe Pokémon TCG Pocket development team offers the following advice to\ndevelopers considering Vulkan for their projects:\n\n- Beyond shader compilation time reduction, Vulkan offers substantial performance benefits.\n- Using [vkQuality](/games/engines/unity/unity-vkquality) to fall back to OpenGL ES could potentially expand device support, even though Pokémon TCG Pocket is not using it yet.\n\n#### Conclusion\n\nBy embracing Vulkan, the Pokémon TCG Pocket development team was able to\noptimize graphics across a broad range of devices to ensure a smooth and\nengaging experience for every player. With ongoing feature additions and\nevolving future potential, Vulkan is expected to bring even more benefits\nover time."]]