גרפיקה ממוחשבת

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

שיטות ייצוג נפוצות

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

מייצוג דיגיטלי לתצוגה חזותית

אחד הנושאים בהם המימוש נמצא בהתקדמות אינטנסיבית ומתמדת הוא יכולת המחשב להביא ייצוג דיגיטלי של גופים וצורות לידי תצוגה חזותית ב"זמן אמיתי". המטרה הטיפוסית היא לאפשר למשתמש לחזות בזירה (scene) תלת ממדית המאוחסנת במחשב בצורה דיגיטלית, תוך כדי השתנות אינטראקטיבית של הזירה ו/או נקודת המבט של הצופה.
הדרישות משתנות בהתאם לשימוש. לדוגמה: להצגת חלק מכני שתוכנן באמצעות מחשב חשובה יכולת הפירוט הגאומטרית. 
לתצוגה תוך כדי משחק מחשב חשובה הטקסטורה של החומר והתאורה המאפשרת דימוי מדויק ככל שניתן של המראה במציאות. אך באופן כללי ניתן לומר שהתצוגה צריכה להיות "חלקה" ו"אמיתית" (Realistic). תצוגה "חלקה" היא תצוגה עם קצב רענון גבוה, כלומר כל שינוי של הזירה ו/או של נקודת המבט של הצופה צריכה להיות מוצגת בשבריר השנייה. קצב רענון של 50 או 60 שינויים (frames) בשנייה הוא באיכות קולנועית עד כדי כך שהתצוגה נראית חלקה לגמרי.

ייצוג גופים תלת ממדים

כיוון שמראה אובייקט נקבע בעיקר על פי חלקו החיצוני שיטה מקובלת לייצוג אובייקטים היא באמצעות ייצוג גבולות (Boundary representation; B-rep). משטחים דו ממדיים יכולים לשמש היטב לייצוג אובייקטים שונים, אבל קיימים אובייקטים שאינם יריעה שלא ניתן לייצגם כך. מקובל לייצג את המשטחים באמצעות קירובים דיסקרטיים, כדוגמת מודל מצולעים (Polygonal mesh). 
ניתן לבצע עידון של המודלים המצולעים באמצעות חלוקות חוזרות ונשנות של המשטחים (Subdivision surface) ולקבל משטחים חלקים יותר, למשל באמצעות אלגוריתמים כמו קטמול-קלרק.
שיטה נוספת המאפשרת ייצוג אובייקטים היא ייצוג הרכבות גאומטריות (Constructive Solid Geometry). בשיטה זו מיוצגים אובייקטים מורכבים באמצעות אובייקטים פשוטים ופעולות בוליאניות ביניהם (איחוד, חיתוך והפרש).

ה"ספריה" הסטנדרטית והכרטיס הגרפי

למימוש יכולת זו פותחה חומרה ייעודית המכונה כרטיס גרפי. על מנת ליצור אחידות והפשטה פותחו ממשקי "ספריה" סטנדרטיים כמו OpenGL הפתוחה או Direct 3D של חברת מיקרוסופט. רוב האפליקציות המממשות תצוגה תלת ממדית אינטראקטיבית משתמשות באחד משני ממשקים אלו. באמצעותם מעבירה התוכנה האפליקטיבית לחומרה את המידע הנדרש לתצוגה כמו אפיון מקורות האור ומיקומם, מיקום ה"צופה" בסצנה, הגאומטריה של הסצנה, הטקסטורות ועוד. התוכנה האפליקטיבית מעבירה זאת בצורה סטנדרטית ללא תלות בסוג החומרה או יכולותיה, ובאמצעות פקודות כוללניות יחסית. 
לדוגמה: להצגת תיבה תדרש התוכנה האפליקטיבית להעביר ל"ספריה" הסטנדרטית את הקואורדינטות של 8 הקודקודים, את 12 המשולשים (כל אחד מצביע על 3 קודקודים שונים), את מיקום הצופה (למשל קורדיטות וכיוון מבט) ועוד כמה פרמטרים. ה"ספריה" הסטנדרטית אחראית להציג זאת. היא תפנה לחומרה הייעודית בהתאם לסוגה וליכולתיה ואף תבצע חלק מן החישובים באמצעות מעבד המחשב במקרה שהחומרה הייעודית אינה כוללת האצה לחישובי תלת מימד. העברת מידע זו, הכוללת לעיתים מיליוני פוליגונים (בדרך כלל משולשים) וטקסטורות מפורטות, צריכה להעשות בכל השתנות אינטראקטיבית של הזירה ו/או נקודת המבט של הצופה. כלומר עשרות פעמים בשנייה במקרה שדרושה תצוגה חלקה. מסיבה זו כולל הכרטיס הגרפי בדרך כלל זיכרון משלו בו מאוחסנים בחוצצים (buffers) רשימות קודקודים, רשימות משולשים וטקסטורות. התוכנה האפליקטיבית מעבירה לכרטיס, באמצעות ה"ספריה" הסטנדרטית, את הרשימות האלה במבנה סטנדרטי, ואחר כך רק פוקדת על הצגתן בהקשר המתאים. 
העיבוד הנעשה על ידי הכרטיס הגרפי לצורך הצגת מידע זה מתחלק ל"עיבוד קודקודים" (vertex processing) ול"עיבוד פיקסלים" (pixel processing). בראשון מומר מידע תלת ממדי לדו ממדי. לדוגמה: קואורדינטות הקודקודים הנתונות במרחב (x,y,z) מומרות לקואורדינטות מסך כתלות במיקום ה"צופה" ותוך התחשבות בפרמטרים של ההטלה הפרספקטיבית או האורתוגונלית.
בשלב השני, של עיבוד הפיקסלים, "נצבע" האזור במסך, המתאים לדוגמה למשולש מסוים, בצבע המשולש או בטקסטורה שלו. בשלב זה מבוצע גם חישוב ההסתרות (z-buffering) כך שפיקסל המגיע מקרוב "יסתיר" (כלומר יכתב על) פיקסל המגיע מרחוק (סדר הצגת המשולשים לא מבטיח זאת שכן הם יכולים לחצות זה את זה). גם אפקטים מורכבים יותר כמו צל או תנועת מים מתחלקים בדרך כלל לשני שלבים אלו.
כיום נהוג שעיבוד הקודקודים ועיבוד הפיקסלים מתוכנתים אף הם על ידי vertex shader ו pixel shader, בהתאם לשני שלבי העיבוד. תכנות shaders מאפשר ביצוע אפקטים מורכבים שלא מתוכנתים מראש כחלק מהממשק של ה"ספריה" הסטנדרטית.

תאוריה

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

היסטוריה


פריצת הדרך הראשונה בגרפיקה ממוחשבת הייתה תוכנת המחשב "Sketchpad" שפותחה בשנת 1962.