Bloom
מימשתי אפקט Bloom כמו ב Unity במנוע רינדור שאני מפתח.
אפקט Bloom הוא אפקט טבעי שנראה כאשר יש עצם בוהק מאוד ונוצרת הילה סביבו (למשל השמש) . אפשר לראות Bloom בתמונות כאשר יש חשיפת יתר ומקור אור שכשהוא פוגע במלצמה הוא “שורף” את התמונה.
במשחקי מחשב האפקט נעשה בדרך כלל ב - Post processing, כלומר אחרי שעיבדנו את הסצנה מוסיפים לה האפקט. האפקט קיים במשחקי מחשב מתחילת שנות ה 2000 בערך, ולמרות שלאפקט יש פוטנציאל גדול להפוך כל סנצה למרהיבה וראליסטית אם ממשים אותו בצורה שלומיאלית או משתמשים בו בהגזמה הוא יכול להפוך גם את הסצנה היפה ביותר לאסון לעניים. ( Bloom Disasters - The Quixotic Engineer)
את המימוש של האפקט עשיתי בדומה לצורה שבה הוא ממומש ב Unity Engine ובעוד הרבה מקומות. את המקור למימוש ניתן למצוא במצגת מאת היוצרים של המשחק Call of Duty Advanced Warfare בה הם מספרים איך מימשו את אפקטי ה Post processing במשחק, ובין היתר Bloom.
המימוש נעשה ב 3 שלבים תהליך Downsampling בו דוגמים את התמונה ומורידים את הרזולוציה שלה כמה פעמים. תהליך Upsampling בו דוגמים את התמונה שעשינו לה Downsampling ומעלים את הרזולוציה שלה לרזולוציה המקורית. שילוב של התמונה המקורית והתמונה שקיבלנו בתהליך הקודם.
בפירוט התהליך הוא כזה - לוקחים את התמונה המקורית, מורידים את הרזולוציה שלה בחצי וחוזרים על התהליך מספר פעמים, כאשר בכל פעם שאנחנו מורידים את הרזולוציה אנחנו דוגמים את התמונה ומטשטשים אותה מעצם הורדת הרזולוציה.
המימוש המדויק נעשה עם משקולות בהן ניתן משקל יותר גדול לפיקסלים שקרובים לפיקסל אותו אנו דוגמים במעבר מהרזולוציה המקורית לרזולוציה הנמוכה ממנה, כאשר המטרה היא לדגום מפיקסלים שליד פיקסל מסוים בשביל להעריך מה יהיה הצבע שלו.
לאחר שסיימנו לבצע את תהליך הורדת האיכות של התמונה מספר פעמים נבצע Upsampling בשביל להחזיר אותה לרזולוציה המקורית, אך לא נקפוץ ישר לתמונה המקורית אלא נעלה בהדרגה את כמות הפיקסלים כמספר הפעמים שבהן הורדנו את הפיקסלים, עד לקבלת התמונה ברזולוציה המקורית.
גם בתהליך ה Upsampling אנחנו נדגום את הפיקסלים ונעריך מה יהיה צבע הפיקסל שעליו אנחנו עובדים.
אם לפשט בתהליך אנחנו מאבדים פיקסלים ומעריכים איך התמונה היתה נראה ברזולוציה נמוכה יותר, ולכן אנחנו מקבלים טשטוש מסוים (כי זה קירוב), ובכיוון ההפוך הדבר זהה, אנחנו מעריכים איך התמונה היתה נראת אם היו לה יותר פיקסלים כאשר את המעבר ליותר פקסלים אנחנו מבצעים מהתמונה המטושטשת.
בסיום התהליך נקבל תמונה מטושטשת ואותה נשלב עם התמונה המקורית כאשר יהיה משקל גדול באופן ניכר לתמונה המקורית במיזוג בניהן.
במימוש שלי הוספתי שלב נוסף שקודם לשלבים שתיארתי ובו אני מחשב איזורים בתמונה שעוברים סף מסוים על מנת להקנות רק לאזורים שבאמת בוהקים בתמונה את האפקט.
הסצנה לאחר הפעלת threshold
התוצאה מוצגת בסרטון, אפשר לראות בו קסדה שמחזירה אור ובאזורים מסוימים היא בוהקת יותר כאשר קרן אור פוגעת בה ומקבלים הילה או זוהר. הסביבה מתחלפת ובכל אחת מהסביבות יש תאורה היקיפית קצת שונה.
בחלק הבא בסרטון נטען מודל שנקרא Sponza (זה מדול של ארמון אמיתי שנמצא בקרואטיה Sponza Palace - Wikipedia). ואפשר לראות בצד ימין אינדיקטורים לחלקים בוהקים בסצנה ולתמונה במצבי טשטוש שונים (רזולציות שונות). בהמשך אני משחק עם ההגדרות ומציג עוד דוגמאות של האפקט.
מוזיקה בסרטון:
Stream Paradox by JNATHYN | Listen online for free on SoundCloud
את המצגת של Call of duty אפשר למצוא פה:
Jorge Jimenez – Next Generation Post Processing in Call of Duty: Advanced Warfare