Posts Tagged ‘DirectX’

למה אתם צריכים לפתח עם OpenGL ולא עם DirectX

שיחה שהייתה לי עם אנשים רבים וחזרה על עצמה התחילה בוידוי שלי: "אני לומד פיתוח גרפיקה תלת-מימדית עם OpenGL"', התגובה של רבים מהאנשים הייתה "לא באמת, למה? DirectX טובה יותר. היא העתיד." אני מאמין שברוב המקרים התגובה נובעת מבורות ולאו דווקא מעמדות מוצקות ומבוססת של אותו אדם.

אז לפני שאני אפתח במלחמת הDirectX vs. OpenGL הנה הסבר קצר על כל אחד מהטכנולוגיות:

מהאודות של OpenGL באתר הרשמי כתוב כך: "..מאז נוסדה ב1992 הפכה OpenGL לפלטפורמת פיתוח הגרפיקה ב2D וב3D הנפוצה בעולם, כשהיא תומכת במגוון רחב של פלטפרמות (מערכות הפעלה)…". על פי ויקיפדיה לOpenGL שתי מטרות עיקריות, האחת היא לחסוך מהמשתמש את הכתיבה הכל כך קשה של קוד למנועי 3D שונים על ידי הצגת API יחיד שתואם לכולם, המטרה השניה היא לחסוך מהמפתח את כאב הראש שבהתחשבות ביכולות שונות של חומרות שונות על ידי תמיכה אחידה של החומרות בממשק הOpenGL. כיום, OpenGL מנוהל על ידי Khorons Group, מלכ"ר שעושה את עבודתו נאמנה. חשוב לציין, OpenGL תומכת בכל פלטפורמת משחקים קיימים, החל בווינדוס, מק, לינוקס, BSD, וגם בWII ובPLAYSTATION, באייפון ובמכשירי האנדרואיד והMaemo וכו' וכו'.. ובכן, היא תומכת כמעט בכל הפלטפורמות הקיימות, מלבד XBox שהסיבה לכך לדעתי ברורה, וזה מוביל לנושא הDirectX:

כבר מאז ימי הMS-DOS הותיקים הבינה מיקרוסופט שמשחקים על מחשב הוא אחד הדברים היותר חשובים למשתמשי המיינסטרים, לפיכך ב1995, עם יציאת מערכת ההפעלה הראשונה שלהם ב32BIT, הווינדוס 95, הם יצרו מערך ספריות שסייע ודירבן מפתחים לכתוב משחקים במיוחד למערכת הווינדוס 95 שלהם. הספריות הללו כללו את Direct3D, DirectInput וDirectSound, כאשר כל החבילה כאחד נקראה DirectX. כאשר מיקרוסופט נכנסה בכוחות עצמה לשוק הקונסולות היא קראה לקונסולה שלה DirectX BOX או בקיצור XBox.

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

למה לDirectX שימוש נרחב מאוד בקרב חברות פיתוח המשחקים?

כולם משתמשים בDirectX בגלל מעין לולאה של שימוש שהמשתמשים נכבלו אליה עקב כמה יתרונות לDirectX. הAPI יצא לווינדוס ולXBOX ואנשים החלו להשתמש בו, בעבר הפיתוח באמצעותו לווינדוס היה קל יותר מאשר פיתוח עם OPENGL (אני מאמין שהמצב משתנה היום), כך קרה שמחזור אחד השתמש בDirectX בגלל יתרונות אלו ומאז הוא צמח, אדם שלמד את הAPI הזה לא יטרח וילמד API אחר, מכיוון שהAPI היה מוכוון מערכת יחידה הרבה חברות חומרה האיצו את התמיכה שלהם בDirectX מתוך אמונה שזהו העתיד היחידי בעולם המשחקים וכך נכנסו לאותה לולאה ארורה, חברות החומרה ושאר חברות התמיכה בגרפיקה למשחקים מעדיפים לתמוך בDirectX, המשתמשים מעדיפים את DirectX כי כולם משתמשים בה וככה הולכת וגדלה הקהילה, שצמחה מתוך נקודה בזמן בה DirectX ליבלב, תקופה קצרה מאוד שהאיצה אותו קדימה, מעין מזל של הנסיבות הייתי אומר. כמובן, תוסיפו לזה את העוצמה האדירה שיש לחברה מסחרית חזקה כל כך כמו מיקרוסופט אל מול ארגון מלכ"רי ולא מסחרי וזאת התוצאה. מעין מצב שהיום לדעתי, מקיים מצב אבסורדי שמוצר נחות ממוצר אחר מצליח יותר בגלל שהוא מוכר יותר, מפורסם יותר ומקודם בעוצמה חזקה הרבה יותר. מעטים האנשים שיבחינו לבד במלכוד, שלמעשה המוצר האחר עדיף. גם מעורבים לדעתי מניעים פסיכולוגיים, אנשים מעדיפים להאמין שחברה מסחרית גדולה מסוגלת לפתח מוצר טוב יותר בכל מקרה מאשר ארגון מלכ"רי, וזה פשוט לא נכון, קחו את זה כסוג של "תימחור איכות", כשתלכו לקופת החולים ותוצע לכם תרופה ב10 שקל ותרופה ב60 שקל, אתם תלכו על זאת שב60 שקל, כי המניע הפסיכולוגי שלכם אומר שעל תרופות לא מתפשרים ולא קונים משהוא "בזול", למרות שיתכן שהוא זהה לחלוטין ואין לכם שום הבנה בתחום, זה לדעתי בדיוק מה שקורה כאן.

אז… למה OpenGL עדיף?

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

OpenGL חזקה יותר

זה ידוע שOpenGL מהירה וטובה יותר ברינדור גרפיקה בזמן אמת, (הסתכלו במצגת שלNvidia אם אתם לא מאמינים), יש לה גישה לכל הפיצ'רים החדשים ביותר שקיימים בכל GPU דרך Vendor Extention. כלומר OpenGL מספקת לך גישה ישירה לכל הפיצ'רים הגרפיים בכל מערכת ופלטפורמה בעוד DirectX מספק רק את הגרסאות האחרונות כפי שהן נתמכות בווינדוס, כלומר יתכן שתחזיק חומרה חזקה מאוד אך היא לא תנוצל מכיוון שגרסת הDirectX שלך לא הכי עדכנית, או שבאופן כללי DirectX לא תומך באותו הפיצ'ר בגרסתו החדשה ביותר, בעוד שOpenGL מספק גישה ישירה ובכך מאפשר תמיד גישה לכל יכולות החומרה שבידי המשתמש.

מיקרוסופט אמנם עבדה קשה על DirectX בגירסאות 10 ו11 והם כמעט מהירות כמו OpenGL ואולי אף כמעט מציעות את כל הפיצ'רים שזאת מציעה, אך אפילו אם לא נתייחס לכך שDirectX מוגבל רק לפלטפורמות מיקרוסופט, גם בתוך הפלטפורמות האלו יש מלכוד, שהגרסאות החדשות לא עובדות עם Windows XP ולהזכירכם חצי מהגיימרים עדיין במערכת הזאת. אז פיתוח עם הגרסאות החדשות לא באות בחשבון מבחינת רוב המפתחים, כי פיתוח בDirectX כבר אין משמעות הריגת כל השוק הפוטנציאלי של שאר המערכות, אלא הריגת עוד חצי מהשוק הפוטנציאלי בווינדוס.

OpenGL חוצה פלטפורמותחוצה פלטפורמות

מיקרוסופט לבדה אכן מחזיקה אחוז נכבד מפלטפורמות המשחקים, הווינדוס והXBOX, אבל משמעותי יותר הוא הנתון שחלק נכבד מפלטפורמת המשחקים היא לא מחזיקה. ואפילו אם תיקח אותם בחשבון, אני אחזור ואומר מה שכבר אמרתי, חצי מהשחקנים בווינדוס הם משתמשי ווינדוס XP כך שתאבד אחוז אדיר מהשוק בשימוש בגרסאות הDirectX האחרונות, אז בדיעבד גם תפסיד פיצ'רים וחדשנות וגם תפסיד את כל הפלטפורמות הפוטנציאליות אליהן אתה לא מפתח. זהו מצב של הפסד משתי הכיוונים, אבל באמצעות OpenGL תוכל להנות מהפיצ'רים החדשים והעדכניים ביותר ולא להשאר מאחור טכנולוגית, וגם להצליח לפנות לכל פלג שוק אפשרי. מצב של ניצחון מכל הכיוונים. חשבו על זה, האם אתם באמת רוצים לקצור את הענף עליו אתם יושבים? האם אתם באמת רוצים לכבול את עצמכם לחברה מסחרית? מה יהיה אם המגמה הנוכחית תמשיך ומיקרוסופט תמשיך לאבד נתח שוק, גם בתחום הקונסולות וגם בתחום מערכות ההפעלה? ההחלטה הנבונה לטעמי היא ברורה, OpenGL מספקת את הטכנולוגיה החדישה ביותר על כל מערכת ועובדת על כל מערכת, DirectX עובדת רק על מערכות מיקרוסופט ובכך מצמצמת את נתח השוק באופן דרמטי, ואם זה לא מספיק על מנת לקבל תמיכה בטכנולוגיה החדישה ביותר עליך לוותר על עוד חצי מנתח השוק המסורס ממילא, או להתפשר על טכנולוגיה מיושנת.

OpenGL היא טכנולוגיה שעדיף להשען עליה, היא טובה לעתיד

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

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

לסיכום…

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

אמנם לא נגעתי בעובדה הזאת במאמר אבל אני חייב להתייחס אליה בסיכום, מיקרוסופט מאמנת כיום מאין צבא של מתכנתים הכבולים לה, בעיקר באמצעות C#, אני לא אומר שC# היא לא שפה מעולה, אבל שימו לב לכבילה שהיא גורמת לכם. ובכלל זאת, רוב בתי הספר בארץ מלמדים C#, ולמיטב הבנתי רוב הסטודנטים למדעי המחשב בארץ מתחילים בC# ורק אחר כך מתעסקים בC++ ושאר השפות. תלמיד מוכשר שמגלה עניין, או סטונדנט שרוצה להמשיך ללמוד בעצמו, או סתם אדם שנכבל לC# יבחר באופן אוטומתי לפתח עם DirectX וXNA. אני רק מנסה להגיד לכם, תפקחו עיניים, תראו מה קורה מסביבכם לפני שתישאבו לאותו הכלא שלא יאפשר לכם יציאה, שתהיו בו כל כך עמוק שכל נסיון בריחה יעלה לכם הרבה יותר מכפי שאתם מסוגלים או רוצים לשלם.

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

הערות:

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