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

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

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

==מייצוג דיגיטלי לתצוגה חזותית==
אחד הנושאים בהם המימוש נמצא בהתקדמות אינטנסיבית ומתמדת הוא יכולת המחשב להביא ייצוג דיגיטלי של גופים וצורות לידי תצוגה חזותית ב"זמן אמיתי". המטרה הטיפוסית היא לאפשר למשתמש לחזות בזירה (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 מאפשר ביצוע אפקטים מורכבים שלא מתוכנתים מראש כחלק מהממשק של ה"ספרייה" הסטנדרטית.

==תוכנות לעריכה גרפית==

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

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

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

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

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

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

בעיבוד תמונה הבסיס הוא יצוג של תמונה כאות (סיגנל) דיסקרטי וביצוע מניפולציות שונות הלקוחות מתחום המכונה עיבוד אותות.

==היסטוריה==

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

==ראו גם==

* אפקטים מיוחדים בקולנוע
* CGI
*גרפיקת תלת-מימד
*הנפשה ממוחשבת

==לקריאה נוספת==
*

==קישורים חיצוניים==

*
* 
* 

*