W świecie tworzenia gier standardowe podejście do kontroli wersji, znane z projektów webowych, przestaje wystarczać. Kiedy kod gry to tylko kilka gigabajtów, a surowe zasoby zajmują kilkanaście terabajtów, Git staje się narzędziem niewydolnym. Mikołaj Kurcin wyjaśnia, dlaczego Perforce (P4) jest de facto standardem w GameDevie i jak system ten radzi sobie z wyzwaniami, które dla innych systemów kontroli wersji są barierą nie do przejścia. Dowiedz się, jak optymalizować pracę setek osób na jednym streamie i dlaczego w GameDevie historia plików zostaje na serwerze.
Architektura skali: dlaczego nie Git?
Głównym problemem Gita w GameDevie jest konieczność posiadania pełnej lokalnej historii repozytorium. Przy projektach osiągających rozmiary terabajtów, żaden dysk stacji roboczej nie byłby w stanie pomieścić wszystkich zmian z kilku lat produkcji. Perforce rozwiązuje ten problem poprzez centralizację – historia zmian spoczywa wyłącznie na serwerze, a użytkownik pobiera tylko aktualną wersję plików potrzebną do pracy. Aby uniknąć zapychania łącza przy synchronizacji terabajtów danych przez setki pracowników, Perforce wykorzystuje architekturę serwerów Proxy, które cache’ują najczęściej pobierane assety lokalnie w oddziałach firmy. Co więcej, P4 oferuje mechanizm blokowania plików (locking), co w przypadku nie-tekstowych zasobów binarnych, takich jak modele 3D czy pliki dźwiękowe, jest jedynym sposobem na uniknięcie konfliktów, których nie da się rozwiązać automatycznym mergem.
Optymalizacja przestrzeni i selektywne mapowanie
Praca z projektami o skali terabajtów wymaga precyzyjnego zarządzania tym, co trafia na dyski pracowników. Perforce umożliwia stosowanie mechanizmów takich jak exclude i import. Dzięki nim artysta 3D może wykluczyć z synchronizacji ogromne biblioteki audio, a programista może pracować bez pobierania ciężkich zasobów graficznych. Kolejnym poziomem optymalizacji są wirtualne streamy, które tworzą maski widoku dla konkretnych ról w zespole (np. projekt audio, projekt 3D). Pozwala to na automatyczne mapowanie tylko niezbędnych danych, co przyspiesza synchronizację i oszczędza cenne miejsce na dyskach SSD.
Integracja z Unreal Engine i automatyzacja workflow
W nowoczesnym GameDevie kontrola wersji jest głęboko zintegrowana z silnikiem gry. Unreal Engine, dzięki narzędziom takim jak Unreal Game Sync (UGS), pozwala nawet nietechnicznym członkom zespołu na płynną pracę z repozytorium. UGS automatyzuje proces pobierania skompilowanych binarek silnika i gry bezpośrednio z Perforce’a, eliminując potrzebę lokalnej kompilacji przez każdego pracownika. Całość uzupełnia system triggerów i integracja z narzędziami takimi jak Swarm (code review), które pozwalają na automatyczne testowanie zmian i walidację zasobów przed ich zatwierdzeniem do głównego nurtu produkcji. W przeciwieństwie do Gita, każda operacja submit w P4 jest grupowana w tzw. changelists, co gwarantuje atomowość zmian i pozwala na precyzyjne śledzenie, który zestaw plików binarnych i kodu trafił do danej wersji gry.
Chcesz zgłębić tajniki infrastruktury w IT?
Jeśli interesują Cię wyzwania związane ze skalowalnością, automatyzacją i niestandardowymi systemami kontroli wersji, dołącz do naszej społeczności!
- Szkolenia SO/DO: zdobądź praktyczną wiedzę od ekspertów, którzy na co dzień zarządzają systemami o krytycznym znaczeniu.
- Meetupy SysOps/DevOps Polska: wpadnij na nasze spotkania, by wymienić się doświadczeniami i poznać kulisy pracy w największych firmach technologicznych.
Sprawdź terminy najbliższych wydarzeń na: sysopspolska.pl/eventy.
Obejrzyj pełne nagranie z prelekcji: Projekt większy niż terabajty: kontrola wersji w GameDev – Mikołaj Kurcin