למרות שכשמסתכלים עליו הוא נראה קצת חדגוני, לצל יש שלל יישומים מעניינים בעולם הפיזיקלי [1], למשל באסטרונומיה. יצרני משחקי מחשב מנסים להוסיף לעצמים במשחקי תלת־מימד צללים וליצור באמצעותם אפקטים מיוחדים. נספר כיצד עושים זאת, בהשראת בעיה מתמטית ברמה תיכונית. בסוף, נזכיר שיש גם ייצוג שונה ומרתק לצל.
אנו מתהלכים בחדר שבו יש מנורה אחת. במצב רגיל נראה בחדר גם מקומות מוארים וגם מקומות מוצלים. האם לדעתכם ישנו מצב שבו לא נראה בחדר אף צל? התשובה: אם נצמיד את מקור האור לעיניים, למשל נצמיד את המנורה למצח כמו שמחברים פנס של כורים, אזי בקירוב טוב לא נראה שום צל, שכן כל נקודה בחדר שנסתכל עליה תהייה מוארת על ידי הפנס.
אגב, מצאנו שישנם אנשים הטוענים בחצי רצינות שעובדה זו יכולה להסביר גם את התנהגותם של אנשים מסוימים, שרואים רק את האור ומכחישים את קיומו של הצל. הסיבה: הם משוכנעים שהם המקור הבלעדי של האור. אולם כל מי שמתבונן בהם מהצד, רואה את צילם. הפילוסוף הסיני לין יו־טאנג אמר פעם: "כשאנשים קטנים מטילים צל שהולך וגדל, זהו סימן שהשמש שוקעת והחושך מגיע".
התובנה שכאשר מקור התאורה צמוד לעין (או במצלמה שמאירה עם פלאש) לא רואים צל, שימשה בסיס לפיתוח טכנולוגיה בגרפיקה ממוחשבת [2] הקרויה "מיפוי צל" (shadow mapping") ומשמשת במשחקי תלת־מימד ליצירה של צל ושל אפקטים המשתמשים בו. לפני שנתאר את השיטה, נספר שאת ההשראה לפוסט קיבלנו מבעיה במתמטיקה תיכונית, שמזכירה בעקיפין את נושא הצל. נתונים קודקודי משולש שנמצא מעל ציר ה־X (נדמה עפיפון משולש שמרחף מעל הקרקע). ממקום גבוה מעליו (באנלוגיה: השמש) שולחים כלפי מטה קרניים המקבילות לציר Y (קרני שמש בצהריים). חלק מהקרניים יפגעו בציר ה־X (קרקע), אבל חלקם יפגע במשולש ולא ימשיכו למטה.
לפיכך, על ציר ה-X ייווצר קטע "מוצל" שהקרניים לא יפגעו בו. צריך לחשב: היכן נמצא הצל? ומה המיקום אם זווית הקרניים היא למשל 45 מעלות (ראו הדגמת גאוגברה [4])?
זוהי דוגמה לבעיה בגיאומטריה אנליטית, ענף במתמטיקה העוסק בחקר הגיאומטריה באמצעות כלים אלגבריים. מפתה לשלב את לימודיה עם העולם המקסים של גרפיקה ממוחשבת, ולתת עוד צבע והשראה ללמידה. אולם ישנם קשיים, למשל חלק נכבד מהפעולות שנעשות בגרפיקה ממוחשבת כוללות תהליך הקרוי טרנספורמציה של מערכות צירים, נושא טכני שלא נלמד בתיכון.
לפיכך אנו מסתפקים בדרך כלל בכתיבת טיפים על המתמטיקה בגרפיקה ממוחשבת (למשל [3]). בתהליך המרכזי – שנקרא rendering, צובעים את הפיקסלים בתמונת העולם של המשחק, כפי שהשחקן רואה אותה. נניח שאנו רוצים להציג במשחק מפלצת שמחזיקה עפיפון ביום שמש. הייצוג של המפלצת שמור בזיכרון המחשב באמצעות אלפי משולשים קטנים המחוברים ביניהם.
בשלב ראשון מעתיקים את הייצוג הזה למקום בזיכרון המכיל את תמונת העולם, מה שמצריך ביצוע של פעולות מתמטיות (הקרויות "טרנספורמציות של מערכות צירים"). לאחר מכן, צובעים כל משולש באמצעות הצבע הנתון של קודקודיו והמרקם (טקסטורה) שלו, המתאר למשל את העור המחוספס של המפלצת. אולם השלב המעניין הוא שילוב מקורות האור שבעולם המשחק (למשל: קרני השמש) בתהליך הצביעה. הצבע הסופי של כל פיקסל נקבע על ידי חישוב הכולל את מקורות האור, עוצמתם, זווית הפגיעה במשולש, צורת המשטח, השתקפויות, ערפילים ועוד. מתמטיקה מעניינת!
אולם מה בדבר הצל? בתהליך rendering, הצל הוא המקום שבו לא פגעה אף קרן אור, ולכן הוא ייצבע בצבע הרקע. אולם יצרני המשחקים רוצים להתייחס לצל כמו לאובייקט גרפי שניתן לעשות עליו עיבודים שונים. כיצד נמצא ונקבץ את כל הפיקסלים הנמצאים בצל?
שיטה שהיא די אינטואיטיבית הוצעה בשנת 1978, ונקראת Shadow mapping. היא מורכבת משני שלבים. בשלב הראשון מבצעים rendering ממבט של צופה שנמצא במקור האור: בדוגמה שלנו נדמיין שהצופה היא השמש שמסתכלת לכיוון הארץ. כמו שהזכרנו בהתחלה, השמש לא רואה את הצל של השמש אלא את קרניה שפוגעות בקרקע, בשערות ראשה של המפלצת ובחלק העליון של העפיפון. נוסף לכך, מכיוון שכמות הפיקסלים בתמונה מוגבלת, השמש שלנו יכולה להסתפק ולשלוח רק מספר מוגבל של קרניים היכולות להגיע לכל פיקסל בתמונה, ואז לצפות בפיקסלים. בשלב הראשון לא נציג את התמונה כפי שהשמש ראתה, אלא עבור כל קרן נשמור בזיכרון מיוחד (shadow-map) את המרחק שהיא עשתה עד שפגעה במשטח כלשהו. בשלב השני, נעשה rendering רגיל מנקודת המבט של המשחק שצופה מהצד, רואה את המפלצת והעפיפון ומצפה לראות את צילם על הקרקע. עבור כל פיקסל, נחשב מהי הקרן שאמורה לפגוע בו, ומה מרחקה מהשמש. אם המרחק גדול מהמרחק שנשמר בזיכרון, המסקנה היא שהקרן נחסמה בדרכה, והפיקסל שרוי בצל.
בשיטה זו קיבלנו את מקבץ הפיקסלים ששרויים בצל. אנשי הגרפיקה משתמשים במידע זה לביצוע אלגוריתמים מגוונים. למשל, אפשר להשחיר לגמרי את הצל (יותר מפחיד!). בנוסף, ניתן לדאוג שהמעבר בין הצל לאור יהיה הדרגתי ויראה יותר ריאליסטי, מה שקרוי "soft-shadowing", ויש עוד אלגוריתמים שונים שאפשר ליישם.
למרות השימוש שלו בטכניקות המתקדמות, הצל נותר די "משעמם". למושג הצל כמטאפורה נוספו עומק ומשמעות על ידי הפסיכואנליטיקאי קארל גוסטב יונג. לפי יונג [5], הצל מייצג את הצדדים באישיותו של האדם שאינם תואמים את ציפיות הסביבה ממנו, ולכן הוא מנסה להסוותם ודוחק אותם ל"צד האפל". יונג האמין שדווקא על ידי הכרה בצל של עצמך אפשר להכיר את האור שלך, וכך גם להתמודד עם הצל של אנשים אחרים.
לסיכום – גילינו שהצל יכול להיות מעניין מאוד, בעולם הפיזיקלי, בייצוג המתמטי, במשחקי המחשב וגם בנפשו של האדם.
פיתוח הדגמה בגאוגברה: אבי נתן
איור: מירי אורנשטיין באמצעות Dall-E 3
עריכה לשונית: יהונתן הופמן.
מקורות והרחבות