שאלה - מה עדיף?

eranegrin

New member
שאלה - מה עדיף?

במשחקים גדולים (אבל לא גדולים מידיי...) מה עדיף? לטעון את כל האובייקטים בתחילת משחק ולהציג תמונה עם הכיתוב Loading או פשוט להעלות את המשחק במינימום זמן ואז לטעון את האובייקטים הרלוונטיים לכל שלב. עיקר הזמן מתבזבז לי בטעינת טקסטורות, אבל יש רמת איכות שאני לא מוכן לרדת ממנה - שאלת מיליון הדולר... איכות או ביצועים?
 

De-Panther

New member
תלוי במשחק. אם הרצף שלו חשוב, אז אולי כדאי...

לטעון הכל מראש. בנוסף, יש פעמים שטעינת אובייקטים מסוימים גורמת לקפיצות בקצב הריצה של המשחק(ואז פתאום באמצע משהו המשחק נתקע לך לחצי שניה וחוזר לרוץ). גם תלוי במקום שבו אתה רוצה לטעון את האובייקטים. אם נניח עשית משחק רשת עם חנות, והתוכן של החנות משתנה באופן דינאמי. זה יכול להיות בסדר לטעון את התמונות בחנות בנפרד, מאשר בתחילת הטעינה של המשחק. ואמנם זה מעצבן לחכות, אבל אני שם לב שיש מספיק משחקי פלאש קז'ואליים שלוקח להם להטען, ובכלזאת יש להם מלא שחקנים. זמן ההמתנה הוא חשוב, אבל הוא לא כזה קריטי. יותר מפריע לאנשים להוריד משהו למחשב ולהריץ אותו, מאשר לחכות שהוא יטען בדפדפן, ככה לפחות נראה לי.
 

voguemaster

New member
כעיקרון, ככל שהמשחק גדול יותר

כך טוענים כמה שפחות בהתחלה. אם פעם יכלת לטעון שלב שלם לתוך הזיכרון במשחקים הגדולים והרציניים, היום זה ממש לא ריאלי. היום הולכים יותר לכיוונים של STREAMING WORLDS, שהתוכן שאתה עתיד לעבור דרכו ולשחק אותו נטען בזמן שאתה משחק ובנקודות ידועות מראש. במשחקים קצת יותר קטנים שבהם כן אפשר לטעון הכל לזיכרון בד"כ עושים את זה, אלא אם כן כמובן מדובר בזמני המתנה לא ריאליים, אז חושבים על שיטות להאיץ את זה. תלוי במשחק, תלוי בזמנים שאתה מקבל, וכמובן גם תלוי בקוד שלך שטוען. צריך לפעמים לבצע PROFILING כדי להבין מה בדיוק לוקח כ"כ הרבה זמן...
 

eranegrin

New member
המשחק לא כל כך גדול

מדובר במירוץ מכוניות (משחק ל PC) שבשלב הזה יש בו מסלול אחד, זמן הטעינה כרגע (במחשבים חלשים) הוא בערך 10 שניות אבל אני מעריך שבסוף התהליך הוא יגדל ב 5 שניות נוספות כאשר נוסיף טקסטורות ואובייקטים לסביבה של 6 דקות מירוץ. יש בעיה לטעון טקסטורות לא ב thread הראשי ב OpenGL ולכן המשתמש חייב להמתין בתהליך זה. 15 שניות טעינה למשחק זה זמן לגיטימי?
 

voguemaster

New member
15 שניות זה לגיטימי

אבל בטוח יש פיתרון לבעית ה-OGL שאתה מדבר עליה, אין מצב שלא.
 

eranegrin

New member
לא מצאתי...

חיפשתי המון. אני מחשיב עצמי מומחה ל openGL ועדיין אני לא מצליח לרינדר ב thread ראשי ולטעון טקסטורות ב thread מישני... יותר מזה, גם בלי רינדור אני לא מצליח לטעון טקסטורות ב thread מישני, הן פשוט לא מייצרות Mipmaps אין לי זמן לחפור בזה כרגע אבל אם למישהו יש פתרון, אני אשמח לשמוע.
 

voguemaster

New member
תראה אני לא מכיר את ה-API של OGL מספיק לעומק

ברמה של נואנסים וכד', אז אין לי מושג גם למה זה ככה, אבל דבר אחד אני יודע - טקסטורות נוצרות מתמונות שאתה טוען מהדיסק. לפחות את כל הנושא של טעינת ה-RESOURCEים מהדיסק אתה יכול לעשות ב-THREAD משני ואז כשכל המשאבים נטענו זה כבר טריויאלי להעביר אותם אל ה-THREAD הראשי וליצור מהם טקסטורות ש-OGL יכול להשתמש בהן. אני בטוח שהתהליך האחרון זול יותר משמעותית מהתהליך של לקרוא את ה-BITMAPים מהדיסק.
 
למעלה