Summoners War: Chronicles US(WW) ו-KR של Com2uS משתמשות ב-Vulkan בלבד לעיבוד ב-Android, עם שיפורי ביצועים של עד 30%.
Vulkan הוא ממשק API מודרני של גרפיקה תלת-ממדית לפלטפורמות שונות, שנועד לצמצם את רמת ההפשטה בין חומרת הגרפיקה של המכשיר לבין המשחק. ל-Vulkan יש עלות עיבוד מרכזית נמוכה יותר בהשוואה ל-OpenGL ES, ו-Vulkan מציע מגוון רחב יותר של תכונות.

תכונות רינדור
חברת Com2uS פיתחה תכונות רינדור מתקדמות ל-Summoners War: Chronicles, כולל:
- מערכת עיבוד גרפי מותנה בהתאמה אישית עם סינון אור לפני העיבוד מראש ועד שש עשרה מקורות אור פעילים בחלל התצוגה בו-זמנית
- שיטת יצירת מופעים של רינדור עקיף (שנקראת
Clay
) לציור של הרבה רשתות, חומרים ומרקמים בבת אחת - שימוש נרחב ב-compute shaders למשימות של עיבוד מראש
- יכולת לשנות באופן דינמי את העיבוד של הצללים הפעילים ואת האפקטים של העיבוד לאחר העיבוד (post-processing) בהתאם לתנועת המצלמה, לאפשרויות הגרפיקה ולביצועים בסביבת זמן הריצה
התאמות לחומרה בנייד
ב-Summoners War: Chronicles נעשה שימוש באותו עיבוד גרפי במכשירי Android, במחשבים אישיים ובקונסולות משחקים ייעודיות. כדי להשיג ביצועים אופטימליים בחומרה לנייד, צוות Com2uS שינה את הגדרות הרינדור, כולל עומק וצפיפות הציור. כדי להתאים למכשירים מסוימים עם Android 11 (רמת API 30) וגרסאות קודמות, צוות Com2uS יצר גרסאות חלופיות של חלק מהשידרוגים והשתמש במספרים מופחתים של מכונות. ב-Summoners War: Chronicles נעשה גם שימוש בתכונות של ביצועים מותאמים ב-Android כדי לשנות באופן דינמי את אפשרויות הגרפיקה בהתאם לתנאים התרמו-פיזיים של המכשיר.
נימוקים לשימוש ב-Vulkan בלבד
חברת Com2uS השתמשה ב-Vulkan באופן בלעדי ב-Summoners War: Chronicles מכמה סיבות:
- דרישות המינימום למכשירים לא כללו מכשירי דור קודם חלשים יותר, חסרי תמיכה ב-Vulkan
- התאמה אישית של התכונות הנדרשות של צינור עיבוד התמונות המובנה (BiRP) של מנוע Unity, שזמינות רק בקצה העורפי של Vulkan במשחק
- אפשר להטמיע תכונות עיבוד באמצעות פלט של שגיאת מחשוב ואובייקטים של מאגרים של שגיאות (SSBOs) ב-Vulkan, אבל לא ב-OpenGL ES
עומסי עבודה של Compute
ב-Summoners War: Chronicles מתבצע שימוש משמעותי ב-compute shader כדי ליצור נתונים לעיבוד. משתמשים ב-Compute Shaders כדי:
- צמצום אובייקטים
- בדיקת תאונה
- משימות של אנימציה
- יצירת נתונים של עיבוד עקיף
נתוני המחשוב שמתקבלים נכתבים באובייקטים של RWBuffer במנוע Unity. כדי להשיג ביצועים אופטימליים, כל משימות המחשוב של Summoners War: Chronicles פועלות באמצעות שליחה אחת, שמחייבת שימוש בכמה RWBuffers בו-זמנית. אפשר היה להשתמש בגישה הזו רק באמצעות Vulkan, כי הקצה העורפי של Unity BiRP OpenGL ES תומך רק בשימוש ב-RWBuffer אחד בכל פעם.
בדרך כלל, מערכי הנתונים שנוצרים לצורך עיבוד הגרפי גדולים יותר ממגבלות הגודל של אובייקטים של מאגר אחסון אחיד (UBO) במכשיר. במקום זאת, המשחק Summoners War: Chronicles משתמש באובייקטים של מאגר אחסון של שגיאות (SSBOs) של Shader, שיש להם מגבלות קיבולת גדולות יותר. עם זאת, כדי לקשר SSBOs לפעולות בשלב הצמתים, נדרשת תמיכה ב-SSBO לקריאה בלבד. ב-OpenGL ES יש תמיכה רק ב-SSBOs לקריאה וכתיבה, בעוד שב-Vulkan אפשר לסמן SSBOs כקריאה בלבד.
עיבוד עקיף של מכונות באמצעות Clay
במשחק Summoners War: Chronicles, צוות Com2uS פיתח שיטה לארגון של כמה חומרים, רשתות וטקסטורות בקריאה אחת לציור. ב-Com2uS קוראים למערכת הזו Clay. Clay משפרת את ביצועי המשחק ב-30% כתוצאה מהפחתה משמעותית של קריאות לציור.
תהליך Clay מתחיל בשלב הסינון וההתנגשויות, כשיוצרים רשימה של אובייקטים תואמים שניתנים לעיבוד. לאחר מכן, Clay יוצר את נתוני הרינדור של כל אובייקט מזוהה ב-SSBOs. התהליך הזה מתבצע באמצעות שגיאות מחשוב, שמאפשרות להשתמש ברינדור נסיוני עקיף באמצעות הפונקציה DrawMeshInstancedIndirect של ה-renderer של Unity. כשמשתמשים ברינדור עקיף, פרטי המכונה והפרמטרים של מספר המכונות נוצרים ישירות ב-GPU. כשמציירים אובייקטים, במקום לקשר רשת אובייקטים רגילה, ב-Clay מקשרים רשת חרוט כפי שמוצג בתמונה:

לאחר מכן, Clay מבצע טרנספורמציה של רשת הפירמידה ב-vertex shader באמצעות SSBO מחויב של נתוני טרנספורמציה של קודקודים שנוצרו על ידי ה-compute shaders. כדי לקשר SSBOs לשלב הקודקודים צריך להשתמש ב-Vulkan. אפשר להשתמש ב-Clay בכמה חרוטות שעברו טרנספורמציה כדי ליצור עיבוד של אובייקט אחד. המורכבות של האובייקט קובעת את מספר הקודקודים.

נתוני החומרים של אובייקטים מקובצים במאגר אחר שנוצר על ידי שגיאות המחשוב. המאגר מקושר ל-fragment shader. הטקסטורות של האובייקטים שמצוירים מוגדרות במערך טקסטורות. אינדקסי המערעים של הטקסטורות של האובייקט כלולים בנתוני החומר של האובייקט. בתנאים אידיאליים, אפשר להשתמש ב-Clay כדי ליצור עיבוד באמצעות עד שבעה קריאות לציור:
- אובייקטים סטטיים
- אובייקטים מונפשים
- צללים (ארבעה מחזורים)
- רגעים מהחיים
Unity ו-Vulkan
המשחק Summoners War: Chronicles מוכיח שהשילוב החזק של מנוע המשחק Unity וממשק ה-API של הגרפיקה Vulkan מאפשר למפתחים להציג גרפיקה מתקדמת באיכות של קונסולה במכשירי Android.