רינדור מבוסס פיזיקה
תוכן עניינים
Engine - This article is part of a series.
בהמשך לפוסטים הקודמים על המנוע רינדור שאני מפתח:
הוספתי את הפיצ’רים הבאים
- רינדור PBR
- תמיכה באנימציות של מודלים
- תאורה מבוססת תמונה (IBL)
- מערכת טקסטורות
ניתן לקרוא על חלק מהפיצ’רים האלה בקצרה כאן פיצ’רים
בפסוט זה אתמקד ב PBR .
דוגמאות לרינדור ב PBR




היא טכניקת רינדור שמדמה בצורה יותר טובה את המציאות והתנהגות עצמים בעולם האמיתי, המטרה של הטכניקה היא להשיג Photorealism והיא עושה את זה על ידי עקרונות פיזיקלים, למשל שימור אנרגיה - אובייקט יחזיר כמות אור שווה או פחותה לכמות האור שפגעה בו(ולא יחזיר יותר אור), במודלים יותר פשוטים אין התייחסות כזאת וכתוצאה מכך התמונות יכולות להיראות פחות ראליסטיות.
הטכניקה מבוססת על עקרונות פיזיקלים כמו
- שימור אנרגיה.
- כל אובייקט נמצא בסקאלה שבין חומר מוליך למבודד, למשל מתכת היא חומר מוליך וכתוצאה מכך תחזיר אור בצורה שונה מאשר פלסטיק.
- לכל אובייקט יש ערך עבור רמת החספוס שלו לעמות כמה הוא חלק.
באמצעות התייחסות לכל הפרמטרים האלה אפשר ליצור תמונה יותר ראלית ואיכותית.
חשוב לציין שקיימות טכניקות כדוגמת Ray tracing ואחרות שיכולות להגיע לביצועים יותר טובים מבחינת איכות וראליזם של סצנה, אבל טכניקות אלה אינן מיועדות ל real time rendering (אם כי ככל שמשתפרים המעבדים הגרפיים טכניקות אלה נהיות יותר ישימות).
יישום הטכניקה #
היישום של הטכניקה הזאת כולל הרבה מתמטיקה מורכבת, ומשוואה לא מי יודע מה סימפטית שכוללת אינטגרל ונקראת The Rendering Equation (מקורי), אחסוך את כתיבת המשוואה אבל אתאר שהמשוואה כוללת פונקציית פיזור שבהינתן ערכים כמו רמת החספוס של אובייקט אפשר להעריך איך יתנהג אור שיפגע באובייקט.
חלק אחר במשוואה מעריך את כמות האור שחוזר בהתאם לזווית שהאור פוגע באובייקט ומיקום הצופה, למשל משטח פרקט יחזיר אור כאשר הוא נצפה בזווית גדולה, אבל אם נצפה בו בזווית של 90 מעלות כמות “ההברקה שלו” (האור שחוזר) תהיה יותר קטנה.
קיימים עוד חלקים במשוואה שאחסוך את תיאורם.
טקסטורות #
ההיתרון של הטכניקה הזאת מבחינת המשתמש הוא לא רק בכך שהיא מספקת תמונה ראליסטית אלא שהיא גם מאפשרת לשחק עם הערכים של אובייקט מסוים בצורה נוחה יותר מאשר טכניקות ישנות ועל ידה אפשר להגיע לתוצאה רצויה מבחינת מראה האובייקט בצורה פשוטה יותר.
את הערכים שהזכרתי קודם(מתכתיות, רמת חספוס ועוד) של אובייקט מייצגים באמצעות טקסטורה, טקסטורה היא תמונה רגילה, דו-ממדית שעוטפים את האובייקט באמצעותה.
עושים את זה על ידי מיפוי של הטקסטורה לאובייקט, אם נדמיין למשל קובייה עם 6 פאות ונביט בפאה מסוימת אז לאותה פאה יש אזור בטקסטורה שהוא ממפוה אליה, ניקח את הצבע (או ערך אחר)שמופיע בקטסטורה ונציג אותו במקום הרצוי באובייקט בהתאם למיפוי.
בטכניקת PBR מראה של אובייקט מורכב לרוב מ - 5 טקסטורות בסיסיות
- Color/Albedo
- Normal
- Metallic
- Roughness
- Ambient occlusion
הרעיון הכללי הוא שנקודד מידע בצורה מוסכמת מראש על גבי הטקסטורה והמידע הזה ישמש אותנו להציג את האובייקט.
נסתכל למשל על הטקסטורה השלישית, היא הטקסטורה שקובעת את ערך המתכתיות של האובייקט, הסיבה שהצבעים שלה מאוד שונים מהטקסטורות Albedo/Normal היא שערך המתכתיות הוא ערך שנע בין 0 ל 1, כאשר 1 הוא לבן ו 0 שחור בתמונה. באובייקט שיש לנו בתמונה(כדור המתכת) הוא או מאוד מתכתי בנקודות שאין בהן חלודה, או שהוא כמעט ולא בנקודות החלודות, לכן הערכים התואמים נצבעים בערכים שקרובים ל 0 או 1.
בטקסטורה הזאת(המתכתית) בדרך כלל אין טעם לשמור ערכים בכל ערוצי הצבע הקיימים בתמונה
לכן הערך נשמר רק בערוץ הראשון, RED ואילו בשאר הטקסטורות יש טעם לקודד יותר מידע, ושאר הערוצים בתמונה נמצאים בשימוש מה שנותן לטקסטורות מראה אחר.
הטקסטורות הראשונה Albedo היא טקסטורה שמיועדת להציג את הצבעים של האובייקט ולכן יש הרבה דימיון בינה לבין איך שהאובייקט נראה, היא משתמשת בכל 3 הערוצים של התמונה.
הטקסטורה הבאה ה Normal זוהי טקסטורה שנועדה לתת תחושה שלאובייקט יש יותר עומק ממה שיש לו, התמונה הבאה ממחישה את ההבדל שעושה הטקסטורה הזאת
אפשר לשים לב שבצד שמאל יש לנו משטח חלק ואחיד מה שחוסך לנו כוח עיבוד בהצגתו, ועדיין באמצעות שימוש בטקסטורה נוכל לתת תחושה שהמשטח עמוק ובעל פני שטח לא אחידים כמו בצד ימין.
הטקסטורה מייצגת ווקטורים עבור כל נקודה בתמונה, באמצעות הווקטורים האלה נדע איך האור יתפזר על האובייקט, ואיפה העומק שלו.
כנראה שמתם לב שהטקסטורה בצבע סגלגל והיא שונה מכל שאר הטקסטורות, הסיבה שהיא בצבע כזה היא הצורה שבה אנו ממפים את המידע.
אנחנו משתמשים בכל הערוצים של התמונה RGB וממפים אותם לקורדינאטות של וקטור XYZ, מכיוון שכיוון הווקטור על פני המשטח תמיד ילך קדימה ולא לאחור שכן הווקטור מיועד לצופה, ערך ה Z יהיה חיובי ובדרך כלל 1, מה שיתן לתמונה צבע כחול כפי שמומחש בתמונה
הטקסטורה של הכדור המתכתי חלקה מכיוון שהכדור חלק, בתמונה הבאה אפשר לראות את הדפוס שטקסטורה אחרת יוצרת עבור אובייקט אחר.
הטקסטורות Albedo/Normal משתמשות בכל ערוצי התמונה על מנת לקודד את המידע בעוד שאר הטקסטורות משתמשות רק בערוץ אחד. אם נרצה לחסוך במספר הטקסטורות שנטען למנוע ובכך לחסוך זיכרון וזמן עיבוד נוכל לאחד את כל 3 הטקסטורות לטקסטורה אחת שנקראת ARM -Ambient Roughness Metallic והיא תראה כך
סיכום #
PBR היא טכניקה מורכבת שנותנת תחושה הרבה יותר ראליסטית לעומת טכניקות אחרות, היא מאפשרת למעצב הגרפי שמעצב את האובייקטים בסצנה חופש יותר גדול בעיצוב וכן אפשרות לקסטם את המאפיינים של האובייקט בצורה נוחה. בטכניקות אחרות כדוגמת Blinn-Phong הראליזם פחות מאשר PBR וגם קיימים פחות פרמטרים אשר קובעים את המראה דבר המקשה על מעצבים להגיע לתוצאה רצויה.
בתמונות הבאות אפשר לראות את התוצאה במנוע



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