משחקי 3D למתחילים

brodighost

New member
משחקי 3D למתחילים

שלום! הייתי רוצה לבנות משחק בתלת מימד. יש לי קצת ידע תכנותי, בC# ובVB ו-C. ואני יודע קצת פיסיקה ומטמתיקה(מקיסמום משלימים דברים על הדרך) האם תוכלו להמליץ לי על דרך טובה ונכונה להתחיל? איך לגשת למנוע שמישהו אחר בנה? איך אני משתמש בו? איזה מנוע כדאי לקחת? האם כדאי ללמוד C++ או איזו שפה אחרת כדי לעבוד ביתר יעילות? תודה וחג שמח!
 

De-Panther

New member
אם אתה רוצה לפתח משחק, תשתמש במנוע שמיועד לזה

כמו נניח unity3d.com אם אתה רוצה לפתוח מנוע, זה סיפור אחר.
 

brodighost

New member
קודם כל תודה רבה!

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

De-Panther

New member
מן הסתם, תהיה צריך גם לכתוב קוד, אבל במקום...

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

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

somebodddy

New member
מנוע - צריך לכתוב קוד

מחולל - לא צריך לכתוב קוד - לפחות בשביל דברים בסיסיים. אם תרצה לעשות דברים קצת יותר מסובכים שמפתחי המחולל לא טרחו לכלול אז מין הסתם תאלץ לעשות זאת בעצמך - או בעזרת קוד או בעזרת בלוקים(תלוי במחולל ובמורכבות של מה שאתה רוצה לעשות). הקוד במחוללים הוא מאוד פשוט יחסית לשפות תכנות רגילות. בכל מקרה, גם אם תוכל לעבוד עם בלוקים, חשוב לדעת אלגוריתמיקה, כי בלוקים זה פשוט גישה יותר ויזואלית לקוד - במקום לכתוב if (x>7) then (השימוש בגירסה של VB/פסקל למשפט התנאי נעשה רק בשביל לסדר את הכיוון של הטקסט ללא צורך בהוספת אות אנגלית כמו עילג. אין שום כוונה לעודד שימוש בשפות האלה!) אתה גורר בלוק של תנאי לאיפה שאתה רוצה לשים את התנאי, ומגדיר לו במאפיינים שהוא צריך לבחור את המשתנה x ולבדוק אותו מול הקבוע 7 לפי התנאי "גדול מ". עדיין צריך ראש של מתכנת בשביל לעבוד עם זה - אבל אם אתה עושה דברים ממש פשוטים אתה יכול להסתדר בלי זה(או עם בלוקים ממש ממש ממש פשוטים, שלא צריכים ראש של מתכנת).
 

voguemaster

New member
יש עוד הרבה מנועים, לא רק יוניטי

למרות שהוא כבר די מבוסס. עשיתי לא מזמן חיפוש על פלטפורמות פיתוח ל-INDIE DEVS וגיליתי יותר מנועים נוסח יוניטי ממה שהיה נדמה לי שיש.
 

De-Panther

New member
ברור שיש הרבה, ואני בטוח שיש גם טובים יותר...

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

adambunim

New member
אני בשלבי כתיבת משחק תלת מימד

אני כותב ב java ומשתמש ב jmonkey ו jmephysics. הגרסה הנוכחית נמצאת כאן: http://www.barvaz.net/balsawings.html אם תחליט ללכת בדרך הזאת, אני אשמח לתרום ממה שלמדתי בינתיים. חג שמח, אדם
 
אם אתה רציני...

ובאמת רוצה ללמוד את הנושא לעומק ובאופן מקצועי, הייתי מציע להתחיל עם שפת C. ללמוד הכל אודות פוינטרים, אריתמטיקה של פוינטרים וכו' וכו'. אחרי שאתה מרגיש סגור על הנושא, אפשר לעבור לC++ ולהתמקד בתכנות מונחה אובייקטים. ללמוד קצת Design Patterns ואיך לממש אותם ביעילות בC++. אחרי כל זה, כשתוכל לקרוא לעצמך מתכנת מתחיל, הייתי מתחיל ללמוד אלגברה לינארית ולנסות להתעסק קצת עם המפלצת שנקראית Opengl ... זה אולי נראה לך קצת כמו Overkill, אבל רכישת הידע של 'איך לבנות משחק' לא נעשית בשניה וגם לא בשנה. זה הוא תהליך ארוך ולפעמים מייגע.. לא הייתי ממליץ להתחיל ממנוע מוכן מבלי שאתה מכיר את היסודות והבסיס. אם אתה צריך המלצות לספרים, שלח מסר ...
 

De-Panther

New member
קודם כל, ברוך הבא../images/Emo9.gif אני לא חושב ככה. אבל אני

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

אבל תסכים איתי שתמיד אפשר לעבור מהLow Level למעלה. אם תרצה להוסיף פיצ'ר מסויים שאתה ממש רוצה במנוע פיסיקלי קיים בלי הידע הנ"ל, יהיה לך הרבה יותר קשה ..
 

De-Panther

New member
נכון. אבל כאן כבר אפשר להכנס להרבה התפלספויות

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