מדריך · ספטמבר 2026 · 25 דקות, או תנו אותו לסוכן שלכם
איך בניתי את יאללה משלוח
משחק שליחויות על קורקינט בתל אביב שתל אביבים באמת מזהים. בניתי אותו עם סוכן קוד, נתוני מפה פתוחים, Blender ו-Three.js. ככה זה נעשה, כולל מה שהשתבש, ופרומפט שאפשר לתת לסוכן שלכם כדי שיתחיל מהנקודה שבה אני סיימתי.
אין זמן? כתבתי את זה תוך כדי הבנייה, לקח אחרי לקח. אפשר לקרוא, ואפשר לשלוח את הקישור (או את ה-Markdown למטה) ל-LLM שלכם ולהגיד לו איזו עיר ואיזה משחק יש לכם בראש. הוא יבין את השיטה, את מבנה הקבצים ואת הטעויות שכדאי לדלג עליהן. בכנות, ככה אני הייתי משתמש בזה.
כיכר דיזנגוף. פיסה מהנכסים האמיתיים של המשחק, מוארת לפי שעת היום. גררו כדי להסתכל מסביב.
מואר לפי השמש מעל תל אביב
יוצא ממקור ה-Blender של המשחק ב-9 בספטמבר 2026, חתוך ל-120 מטר סביב המזרקה, 237 אלף משולשים ב-1.2 MB. השמיים והחלונות המוארים הם של העמוד הזה, לא של המשחק.
אין פרומפט קסם. יש לולאה: נותנים לסוכן נתוני מפה אמיתיים ותמונות מתוארכות, מפרקים את הסצנה לחלקים עם שמות, שופטים את הרינדור האמיתי מול התמונה האמיתית, מתקנים את הפספוס הכי גדול, וחוזרים.
"AI ייצר עיר" לא אומר כלום על מי עשה מה, אז הנה החלוקה. אני בחרתי את ההיקף, את המשחקיות, מה חשוב ויזואלית, והסתכלתי על כל רינדור ואמרתי מה לא בסדר. הסוכן כתב את ה-Python ב-Blender שבונה את הגאומטריה, חיבר את Three.js, כתב את הבדיקות והריץ אותן. כשאמרתי שהוואו הוא בצורות הרחובות, בשלטים ובמכוניות ולא בעצים, הוא שינה כיוון. כשהוא אמר לי שמשהו גמור, ביקשתי את הרינדור.
אם ראיתם את הפוסט בלינקדאין ואתם רוצים את אותו הדבר לעיר שלכם: לא צריך להיות מהנדס משחקים. צריך שיטה שאפשר להעתיק, אבן דרך ראשונה קטנה מספיק כדי לסיים אותה, ופרומפטים להדבקה. שלושתם בעמוד הזה. אם אתם עצלנים מהסוג הטוב, קפצו לפרומפט הפתיחה, תנו את העמוד לסוכן שלכם, ותחזרו כשהוא ישאל אתכם משהו.
איך זה באמת הלך
התאריכים מיומן הבנייה, לא מהזיכרון. החלקים המכוערים הם החלקים השימושיים.
תחילת ספטמבר. משחק עם נושא, לא מקום. גרסה אחת הייתה ראנר קורקינט עם החלפת נתיבים לאורך "רוטשילד" גנרי שחזר על עצמו כל 100 מטר. אפשר לשחק, ורחוב של אף אחד. המשכתי לבקש רחובות אמיתיים ונקודות ציון אמיתיות.
הפינה הראשונה ברוטשילד נכשלת. בערך 105 מטר של חזיתות, שלטים ומדרכות, שמודלו לפני שלולאת המשחק וקנה המידה נסגרו. בודק טרי לא הצליח לנקוב בשם הרחוב. הכישלון הזה הוא הסיבה שכל שלב אחר כך מתחיל בראיות.
8 בספטמבר, ערב. התיקון. אמרתי לסוכן שהוואו הוא לא עצים, הוא צורות רחובות, בניינים, כבישים, שלטים, מכוניות. העצים הוקפאו. משכנו נתוני מפה לכיכר דיזנגוף, קבענו נקודת מוצא אחת משותפת, ומסרנו את מלון סינמה ואת ההיקף לעובדים נפרדים עם חוזה קואורדינטות אחד.
אותו לילה. שמות הקבצים שיקרו. כמה תמונות שהורדו מאתר של אדריכל בתור "אווירי" או "תוכנית" התבררו כצילומים היסטוריים וסצנות הריסה. מאז כל תמונה נבדקת לפני שמישהו סומך עליה, ויומן המקורות התחיל באמת. הייצוא הראשון גם נכשל על דגל מיושן במייצא. תוקן, יוצא, הרכבה ראשונה בדפדפן ב-20:40, ביקורת עצמאית ראשונה מיד אחרי.
הלילה אל תוך 9 בספטמבר. העיר מתחברת. פינת קפה בלי מותג ב-22:00. עולם רציף מהכיכר עד חוף פרישמן עד 23:00. כיכר האופרה ושוק הכרמל מחוברים, עם רכיבה חופשית, עד 05:00. בחירת רוכב, חיים על הטיילת ושלושה מחקרי נקודות ציון חדשים עד 08:30. עצירה ב-09:15 עם גיבוי מאומת, קו הרקיע של שרונה 2026 ומים זזים.
9 בספטמבר. ממודל למשחק שאפשר לסיים. שמונה תחנות משלוח על מסלול מאומת של 2 ק"מ. התאוששות GPS במקום תקיעה של 30 שניות. אוטובוסים עם מידות משלהם. 487 הולכי רגל ו-60 מכוניות דרך instancing. עמוד שחקן של 56 KB במקום 43 MB. דגימה אחת בדסקטופ בסביבות 104 FPS.
10 בספטמבר. מישהו אחר קרא את המדריך הזה. ביקורת עצמאית תפסה טענות שברחו קדימה מהעובדות: הכיתוב של הדמו, השטח המשחיק, שער הזיהוי. תיקנתי הכול בעמוד הזה מול רשומות השחרור באותו יום.
מה צריך
סוכן עם ידיים. הוא צריך את קובצי הפרויקט שלכם, טרמינל, Blender ודפדפן. אם כלי לא זמין, הוא חייב להגיד את זה במקום להעמיד פנים. שלי ידע להריץ Blender בלי ממשק, להרים שרת מקומי ולהפעיל דפדפן.
הכלים. Blender (אני עבדתי עם 4.5), Node.js 22 ומעלה, שרת HTTP מקומי, ודפדפן עם WebGL. כדי לשחק במשחק השמור צריך רק דפדפן. כדי לייצר גאומטריה מחדש צריך Blender.
נתוני מפה ותמונות מתוארכות לאזור קטן אחד. כבישים ושבילי אופניים מ-OpenStreetMap, קווי מתאר של בניינים מהנתונים הפתוחים של העירייה שלכם, ותמונות מגובה הרחוב עם תאריך שאפשר לעמוד מאחוריו. נהלו יומן: כתובת, תאריך הורדה, תאריך צילום, מזהי קווי מתאר וכבישים, ועמודה שאומרת נמדד או מוערך. היום שבו הורדתם מפה והיום שבו צולמה תמונה הם שני דברים שונים.
היקף קטן. קטע אחד של 100 עד 200 מטר או כיכר אחת, ומשימה אחת שחוזרת על עצמה. לי זה לקח כמה סשנים והרבה סבבי תיקון. לא אמציא משך או עלות, כי זה תלוי לגמרי בכמה אתם מוכנים לקבל.
תעשו את זה קודם
אנשים מערבבים שתי אבני דרך: לולאת המשחק הראשונה והרחוב האמיתי הראשון. הן נפרדות. קודם הלולאה על קוביות פשוטות. אחר כך הרחוב האמיתי. הנה הסדר, עם מה שצריך להיות לכם להראות בסוף כל שלב.
בחרו מטרה אחת. לאסוף הזמנה, להגיע ליעד, לקבל משוב ברור על הצלחה וכישלון. כתבו מה השחקן עושה כל שלושים שניות.יש לכם: בריף של עמוד אחד עם לולאה, שליטה, הצלחה, כישלון, התחלה מחדש, ומה מחוץ להיקף.
נעלו את האמת בשטח. נקודת מוצא אחת במפה (קו אורך, קו רוחב), מצלמת ייחוס אחת עם מיקום, כיוון ושדה ראייה, וקו המתאר של בניין אחד.יש לכם: תיקיית מקורות עם היומן, מזהי קווי המתאר ותמונת הייחוס המתוארכת.
בנו את המקום האמיתי מקוביות. קוביות פשוטות לכביש, למדרכה ולבניינים העיקריים בקנה מידה אמיתי. רכבו דרכו. קורקינט נכנס? המדרכות הגיוניות? הבלוק מרגיש באורך הנכון?יש לכם: צילום מסך של הקוביות מהמצלמה הנעולה, ליד התמונה.
מדלו נקודת ציון אחת ב-Blender. גאומטריה מקורית מהתמונות ומקו המתאר. שמרו את ה-Python שבונה אותה, את ה-.blend, את ה-.glb, רינדור תצוגה מקדימה והערה קצרה על מה הנחתם.יש לכם: חמישה קבצים עם אותו שם בסיס, פלוס מספר משולשים ומידות.
טענו ב-Three.js ורכבו משלוח אחד שלם. איסוף, רכיבה, מסירה, להיתקל במשהו, להתחיל מחדש. שום דבר אחר עדיין.יש לכם: הקלטת מסך של לולאה אחת שלמה בדפדפן.
השוו, תקנו דבר אחד, מדדו. אותה מצלמה כמו בתמונה, רשימת ההבדלים, תיקון של הגדול שבהם בלבד, ואז מדידה של הבילד האמיתי בדפדפן לפני שמרחיבים.יש לכם: לפני ואחרי מאותה מצלמה, ומספר אחד עם המכשיר והשיטה לידו.
הצינור
01
OpenStreetMap + נתונים עירוניים פתוחים
כבישים, שבילי אופניים, קווי מתאר של בניינים
02
קואורדינטות מקומיות משותפות
מטרים, נקודת מוצא אחת, חוזה צירים אחד
03
Python בתוך Blender
מודול אחד לכל נקודת ציון, ניתן לשחזור
04
ייצוא GLB
סטטי מאוחד, תפקידי חומרים וחלקים זזים נשמרים
05
Three.js בדפדפן
לולאת משחק, ניווט, בדיקות
איך העיר נבנית
קודם נתוני המפה
כבישים ושבילי אופניים מגיעים מ-OpenStreetMap. קווי מתאר של בניינים מהנתונים הפתוחים של עיריית תל אביב-יפו. זה השלד שהכול נתלה עליו. הוא לא יגיד לכם כמה רחבה מדרכה, כמה גבוהה אבן שפה או איך נראה שלט. את זה עושות התמונות.
נעלנו נקודת מוצא אחת: קו אורך 34.774207, קו רוחב 32.077963. ב-Blender, X מזרח, Y צפון, Z למעלה. Three.js מקבל [x, z, -y]: מזרח, למעלה, מינוס צפון. כל נכס חי על אותה רשת. זה קירוב מקומי שטוח, מצוין לרובע קומפקטי, לא ברמת מדידה, והוא נסחף אם מנסים למתוח אותו על עיר שלמה.
המפה במשחק, בנויה מאותן קואורדינטות כמו העולםמעברי חצייה ושלטים שמוקמו מנתוני מפה, ואז נבדקו מול תמונות
בלי נקודת מוצא אחת משותפת, כל נכס נוחת במקום קצת אחר ואף אחד לא מזהה את הרחוב.
התמונות מספקות את האדריכלות
לכל נקודת ציון מרכזית יש חבילת ייחוס: תמונות מתוארכות, זוויות המבט, הפרטים שהופכים אותה לבניין הזה ולא לאחר. השווינו צלליות, רוחב חלונות, קצב מרפסות, עומק חזית, צבעים וריצוף. בנייני רקע ופרטי חזית שחוזרים על עצמם הם הערכות, והיומן אומר את זה.
הנכסים הם גאומטריה מקורית. התמונות הנחו את המידול; שום דבר לא הודבק על חזית. זו הייתה הבחירה שלי, לא כלל. זה שמר על סגנון אחיד, וזה אומר שלא הפצנו מחדש צילומים של אף אחד.
מעבר ראשון ב-Blender על מלון סינמה, 14,660 משולשים. הכיתוב המסחרי ירד אחר כך; האדריכלות נשארה.הרכבה ראשונה של הכיכר בדפדפן
תמונה מתוארכת היא ראיה. תמונה בלי תאריך היא ניחוש עם תמונה מצורפת.
Blender בונה כל נכס
מודול Python אחד לכל נקודת ציון, עם פונקציית build(), נתוני המקור לידו, וחלקים עם שמות. רשתות סטטיות מקובצות בשביל המרנדר. שני דברים נשארים נפרדים בכוונה, והם לא אותו דבר: חלקים שזזים (מים, רמזורים, גפיים של דמויות) נשארים צמתים משלהם, וחומרים שיכולים להשתנות (צבע הקורקינט, גוון עור, זכוכית, מתכת, ריצוף) שומרים תפקיד חומר משלהם כדי שהמשחק יוכל להחליף אותם בלי לגעת בגאומטריה.
גם ה-.blend וגם ה-.glb נשמרים, עם רינדור תצוגה מקדימה והערת ההנחות. אם הסקריפט יכול לבנות את הנכס מאפס, הנכס אמיתי. אם לא, יש לכם צילום מסך.
מחקר נוףחצר שרונה, מודול אחד לכל בנייןמשחיקכיכר האופרה מורכבתמשחיקהטיילת מורכבת
חלקים עם שמות ותפקידי חומרים מאפשרים להגיד לסוכן בדיוק מה לשנות ושום דבר אחר.
Three.js מריץ את זה
GLTFLoader, מצלמה, תאורה, צללים, תנועת הקורקינט, אנימציית חלקים קלה לדמויות, ומים שמונפשים בשיידרים על ה-GPU. המים רצים על זמן שחלף, אז הם זזים אותו דבר בכל קצב פריימים וה-CPU אף פעם לא בונה מחדש את הרשת. זה עדיין עולה זמן GPU. "על ה-GPU" זה לא אותו דבר כמו בחינם.
אריזה, במילים פשוטות. לביקורת ולהעברה שמרתי קובץ HTML אחד עצמאי עם כל העולם מוטמע בתור GLB דחוס ב-gzip: קובץ אחד שאפשר לשלוח לכל אחד. לשחקנים, אותו צינור מפצל את זמן הריצה ואת הנכסים לקבצים נפרדים עם hash בשם, כדי שהדפדפן לא יצטרך לפענח מסמך אחד של 43 MB. עמוד השחקן הוא בערך 56 KB, כריכה פלוס זמן ריצה בערך 1.5 MB, נכסים בערך 29 MB. העולם עדיין צריך להיטען לפני ש-Play נדלק. GLB הוא פורמט המודל, gzip מכווץ את ההעברה, Draco מכווץ את הגאומטריה. שלוש בעיות שונות.
המזרקה, פריים A מהשיידרהמזרקה, פריים Bמי החוף, גלים על ה-GPU
אנימציית שיידר מבוססת זמן שומרת על תנועה חלקה בכל קצב פריימים. היא לא הופכת את המים לזולים.
הניווט והגרפיקה באים מאותה רשת
המשטחים שרוכבים עליהם הם הרשתות שהמרנדר מצייר, עם שאילתות גובה קרקע וחסימות מעליהן. מקור גאומטריה אחד שומר שמה שרואים ואיפה שאפשר לרכוב לא ייסחפו זה מזה. זה לא סוגר כל פער: בדיקות התנגשות וגובה תופסות את השאר, והן תפסו כמה.
נכון ל-10 בספטמבר 2026 יש שלושה דברים שונים, ואני שומר אותם נפרדים. רובע משחיק אזור המשימות הוא בערך 2 ק"מ: הגישה הצפונית לדיזנגוף, הכיכר, דיזנגוף סנטר, פרישמן, הטיילת וכיכר האופרה, שמונה תחנות משלוח. מחקר נוף מודל רחב יותר ממשיך דרך אלנבי לשוק הכרמל, ושרונה היא חצר נפרדת. אלה גאומטריה, לא משימות. בעבודה הרחובות הפנימיים נוצרים עכשיו ולא נשלחו כמשחקיות. בדקו את הערות השחרור לפני שאתם מצטטים מספר מכאן.
מחקר נוףשוק הכרמל מחובר למסלול הנוףמשחיקפרישמן פוגש את הטיילתניווט ברוחב טלפון. בדיקת פריסה, לא מדידת ביצועים על טלפון.
מקור גאומטריה אחד, פלוס בדיקות. לא מקור גאומטריה אחד במקום בדיקות.
לשאול "איפה זה?" לפני שמראים את התשובה
להשוות לתמונה, לרשום את ההבדלים, לשנות את המודל, לייצא, לבדוק במשחק. מה שגרם לזה לעבוד היה לפצל את הביקורת לשניים. קודם, בודק טרי שלא ראה כלום מקבל רינדור עם שם קובץ ניטרלי ושאלה אחת: איזה רחוב זה, ולאיזה כיוון מסתכלים? רק אחרי שהוא עונה מראים לו את התמונה התואמת ומבקשים את ההבדלים. תראו את התמונה קודם, וזיהמתם את המבחן.
הציון הכן. השער שקבעתי, שלושה זיהויים עיוורים ברצף, לא עבר. המבקר הראשון כן זיהה את דיזנגוף, בעזרת כיתוב המלון שמאז הוסר, ולא ידע להגיד לאיזה כיוון. מגדל האופרה זוהה בביטחון גבוה, הכניסה לכרמל בביטחון בינוני, פנים השוק בקושי. מבקר AI טרי הוא ראיה שימושית. הוא לא תל אביבי שמסתכל על המסך ואומר "אני עובר פה כל יום."
beforeafter
המזרקה לפני ואחרי סבב ביקורת אחד. גררו את הידית.הניסיון הראשון ברוטשילד. אף אחד לא ידע להגיד איזה רחוב זה. בגלל זה השיטה קיימת.
קודם שואלים "איפה זה?". אחר כך סופרים את הסימנים.
ההודעה ששינתה את הפרויקט. שלי, מילה במילה, כולל שגיאות ההקלדה:
“i think the wow factor is less from trees its more form street shapes building roads signs cars”
העצים נכנסו להמתנה והמאמץ עבר לגאומטריית הרחוב, לקווי המתאר, לשלטים ולמכוניות. זו הייתה נקודת המפנה, והיא לא הייתה טכנית. הסוכן משפר את מה שהוא יכול למדוד. אתם צריכים להגיד לו מה חשוב. תצפו לשלוח הודעה כזאת.
דיזנגוף, מההתחלה עד הסוף
במקום קטלוג כלים, רצף אמיתי אחד מהכיכר, קטן מספיק כדי לעקוב אחריו.
חבילת המקורות
קו המתאר העירוני של מלון סינמה (מזהה אחד ביומן), ה-ways מ-OSM של מסלול האופניים המעגלי והכבישים שנפגשים בכיכר, תמונה של אדריכל השימור של המזרקה והמלון, ותמונה מגובה הרחוב של פינת הקפה המפוספסת עם תאריך לא מאומת, מסומן ככזה. נמדד: קו המתאר, צירי הכבישים, לולאת האופניים. הוערך מתמונות: עומק מרפסות, גובה קומת קרקע, סוככים, ריהוט. הומצא: שום דבר שישנה זיהוי, וההערה אומרת אילו פרטים קטנים הושלמו.
המרת הקואורדינטות
כל מקור מומר לאותם מטרים מקומיים לפני שמשהו ממודל. פסאודו-קוד:
east = (longitude - originLongitude) * 111320 * cos(originLatitude in radians)
north = (latitude - originLatitude) * 111320
Blender position = (east, north, elevation) # X east, Y north, Z up
Three.js position = [east, elevation, -north] # X east, Y up, Z south
זה מה ששומר את הבניין, את שלט הרחוב, את משטח הרכיבה ואת הסמן במפה באותו מקום: כולם נולדו על אותה רשת. זו גם הסיבה שהתוכנית יכולה להיות נכונה והמשחק עדיין שבור. קפיצת גובה במדרכה, נורמל הפוך או טרנספורם ייצוא שגוי ישברו את הרכיבה גם כשכל קואורדינטה נכונה. מכאן הבדיקות למטה.
החלקים עם השמות
הייצוא של הכיכר מכיל, בין השאר: facade_cinema, facade_perimeter, fountain_metal, water_water, water_jet, dizengoff_world (הקרקע), פלוס נכסי רמזורים, מכוניות ודמויות נפרדים. כשהמזרקה נראתה לא נכון, ההוראה הייתה "שנה רק את fountain_metal ואת water_jet, תשאיר את המצלמה." הסוכן לא יכול היה לגעת במלון בטעות.
בדיקה אחת שנכשלה
אחרי הייצוא הראשון הכול בדפדפן נראה שטוח וגירי. הייצוא זרק את החספוס והמתכתיות, אז זכוכית, מתכת וריצוף רונדרו כאותו משטח עמום. תיקון: לשמור תפקידי חומרים בשלב הייצוא ולאמת את רשימת החומרים בסצנה הטעונה. בדיקה: סקריפט שקורא את ה-GLB המיוצא ומדפיס שמות ותכונות של חומרים, רץ אחרי כל ייצוא מאז. ניסיון נפרד להוסיף הצללת מגע יקרה במרחב המסך הוריד את קצב הפריימים ושיפר את המראה בקושי, אז הוא ירד. יותר אפקטים לא אמרו יותר זיהוי.
המשחק עצמו
הלולאה, בסדר שבו השחקן פוגש אותה:
קלטמקלדת או מגע: האצה, ספרינט, בלימה, רוורס, קפיצה
תנועהפיזיקת קורקינט, גובה קרקע, חסימות, התנגשויות עם מכוניות, אוטובוסים והולכי רגל
משלוחלהגיע למעגל של הלקוח לפני שהטיימר נגמר; הוא מגיב; מקבלים כסף
התקדמותכל שלושה משלוחים השלב מתקשה; קפה, בריאות ומגן עוזרים
סוףנגמרו הבריאות או הזמן: ציון סוף משמרת, התחלה מחדש
עברית ואנגלית עובדות לכל האורך, כיוון הטקסט מתהפך בזמן שהמפה נשארת עם הצפון למעלה, ויש שליטה במגע. זו עבודת שימושיות. היא לא אומרת כלום על דיוק גאוגרפי, ולכן אני מפריד אותה.
הניווט הוא לא מציאת מסלול בכל העיר. המשחק רץ על גרף של קטעי מסלול מאומתים עם שאילתות גובה קרקע וחסימות על העולם המורכב. מחוץ למסלול הוא מחזיר אתכם לשביל במקום להמציא קו דרך מכשולים. עשרים ושלוש נקודות מבוקרות מחוץ למסלול נשארו בכוונה בלי חיבור. מכוניות חונות ותנועה זזה הן מערכות נפרדות, ואוטובוסים היו צריכים מידות, מרווחים ומעטפות התנגשות משלהם, כי קופסה בגודל אוטובוס על מסלול של מכונית עברה דרך הכול.
מה נשבר, ומה שומר על המהירות
מה שומר על קצב הפריימים: אבות טיפוס משותפים מ-Blender עם instancing לאנשים ולרכבים שחוזרים על עצמם (מעבר חיי העיר האחרון הוסיף ככה 487 הולכי רגל ורוכבי אופניים ו-60 מכוניות), קיבוץ סטטי עם גבולות מרחביים כדי שה-culling ימשיך לעבוד, culling לפי מרחק ונראות, יחס פיקסלים מוגבל, צללים מוגבלים, ומים על ה-GPU. הלקח שעלה לנו: תאחדו עיר שלמה לאובייקט אחד וה-culling מת. איחוד צריך גבולות.
ארבעה סוגי ראיות, והם לא מתחלפים זה בזה:
בדיקות לוגיקה. 100 בדיקות יחידה, פלוס 13 בדיקות בקר על הנכסים האמיתיים: שמונה משלוחים מדומים שלמים, התנגשויות, איסופים, החלפת שפה, פקיעת זמן והתחלה מחדש.
בדיקות גאומטריה וניווט. סקריפטים שבודקים את ה-GLB המיוצא ואת גרף המסלול: 9 שבילים, 8 מפרצי עצירה, 90 יעדים מסודרים, 27 בדיקות פיזיות, ובדיקות hash שהנכסים הארוזים תואמים בדיוק לייצואי המקור.
רינדור ואינטראקציה בדפדפן. ביקורת ידנית של פתיחת המשחק, רכיבה, השהיה, סיום והתחלה מחדש בדסקטופ וב-390 על 844.
מכשירים פיזיים ובני אדם. לא נעשה. אין מדידה על טלפון, אין ציון פלייטסט אנושי. זה הפער לפני קישור ציבורי.
המספר היחיד שאצטט: דגימת רכיבה אחת בדסקטופ ב-9 בספטמבר 2026 דיווחה על בערך 104 פריימים בשנייה, 119 draw calls ובערך 1.05 מיליון משולשים מרונדרים, נמדדה כמה שניות ברחוב הפתיחה, בבילד פיתוח, על לפטופ. דגימה מקומית. לא מדידה מתמשכת, לא טלפון.
מצלמת המרדף הסתכלה הצידה מהמזרקהתסמיןסיור הפתיחה הראה את גב הכיכרסיבהאינטרפולציית המצלמה חצתה פינת בניין ובחרה כיוון שגויתיקוןנעילת נקודת המוקד של הפתיחה על המזרקה והגבלת האינטרפולציהבדיקהרינדור פתיחה שמור שמושווה לתצוגת הייחוס אחרי כל בילד
החומרים יצאו שטוחיםתסמיןזכוכית, מתכת וריצוף רונדרו כאותו משטח גיריסיבההחספוס והמתכתיות נזרקו בייצואתיקוןשמירת תפקידי חומרים בסקריפט הייצואבדיקההדפסת חומרים ותכונות מה-GLB הטעון
חיבור שנראה מחובר לא היהתסמיןה-GPS יכול היה להיתקע לבערך 30 שניות והקורקינט יכול היה ליפול מקצה טרסה בלי דרך חזרהסיבההטלת המסלול לא הייתה מוגבלת ולקצה טרסה אחד בטיילת לא היה חיבורתיקוןהטלה מוגבלת, חיתוך קטעים שכבר נרכבו, התאוששות מאומתת לשביל, נקודות "בלי חיבור" מפורשותבדיקהביקורת המסלול: 331 חיבורים בטוחים, 23 לא זמינים במפורש, 27 בדיקות פיזיות
עמוד הפתיחה שקל 43 MBתסמיןהדפדפן נחנק בפענוח מסמך HTML ענק אחדסיבהכל העולם היה מוטמע בעמוד, מצוין לביקורת, שגוי לשחקניםתיקוןמעטפת של 56 KB עם נכסים נפרדים עם hash בשם, אותו צינורבדיקהכל 17 המשאבים המוגשים מאומתים ב-hash, כותרות מטמון נבדקו; GLB ו-JSON דחוסים אסור שיקבלו gzip שני ב-HTTP
הז'רגון, פעם אחת
ENU זה מזרח, צפון, למעלה: מערכת קואורדינטות מקומית במטרים סביב נקודת מוצא אחת. GLB הוא הצורה הבינארית של glTF, קובץ המודל התלת-ממדי הסטנדרטי לרשת. Draco דוחס גאומטריה בתוך GLB; הדפדפן צריך מפענח כדי לפתוח אותו. Gzip דוחס בייטים בהעברה ולא יודע כלום על גאומטריה. draw call הוא הוראה אחת ל-GPU לצייר קבוצה; פחות זה זול יותר, ולכן רשתות סטטיות מאוחדות. שיידר הוא תוכנית קטנה שרצה על ה-GPU לכל פיקסל או קודקוד; המים חיים שם. Instancing מצייר הרבה עותקים של רשת אחת בקריאה אחת, וככה 487 הולכי רגל עולים בערך כמו כמה בודדים.
פרומפטים להדבקה
אלה גרסאות מנוקות של מה שבאמת השתמשתי בו, לא תמלולים. הפרומפטים באנגלית בכוונה, ככה הסוכן מבין אותם הכי טוב. החליפו את הסוגריים המרובעים במקום וברעיון שלכם.
לקבוע את לולאת המשחק01
לפני שיש בכלל עולם.
Build a browser-playable game about [local activity]. State the immediate objective, level objective, progression and lose condition. Keep the tone affectionate. Make the first playable loop coherent before adding content. Use an original, unbranded visual identity. List what the player does every 30 seconds and how they know they succeeded.
ייחוס למקום אמיתי לפני המידול02
לפני בניית הגאומטריה הראשונה.
Reconstruct [specific 100 to 200 m section] from real evidence. Gather street and bike-lane geometry, building footprints, dated street-level photos and a matching aerial. Record source URLs, IDs, retrieval dates and photo capture dates. Lock one hero camera with coordinates, heading and field of view. Distinguish measured geometry from photo estimates and invented detail. Do not start with a generic city and label it afterward.
להאציל נכס אחד מתוחם03
כשרוצים להוסיף נקודת ציון אחת.
Build only [named building] in Blender from the supplied photos and footprint. Return a reproducible Python module, .blend, preview and a short source/assumption report. Use metres and the provided geographic origin. Preserve the actual plan; match facade rhythm, balconies, ground floor and signs. Keep articulated parts as separate nodes and keep material roles separate. No downloaded 3D assets. Do not edit the parent project or deploy anything. Give the parent exact orientation, dimensions and triangle count.
ביקורת בהקשר טרי, בשני שלבים04
אחרי כל ייצוא שרוצים לשפוט. שולחים קודם את שלב אחד לבד.
Stage one. You are an independent critic. From this neutrally named render alone, identify the street or place and the viewing direction. State your confidence and what you based it on. Do not ask for hints.
Stage two, sent only after stage one is answered. Here is the dated reference photo from the same angle. List the differences in street geometry, scale, facade proportions, signs, cars, materials and lighting. Rank the three changes with the greatest recognition benefit. Do not reward labels for fixing incorrect geography.
לתקן את צוואר הבקבוק, לא הכול05
כשיש יותר מדי הבדלים.
Pick the highest-impact mismatch from the critique. Change only the responsible asset or system. Preserve coordinates and camera. Rebuild, capture the same view and have a different critic compare. Report the actual result even if the improvement is small. Measure performance using the same device and method as last time, and say what they were.
לשמור שובל ראיות שאפשר ללמוד ממנו06
בכל אבן דרך משמעותית.
After each meaningful milestone, save the exact prompt, sources, before/after render, script/build, validation result and one reusable lesson. Mark retrospective summaries as summaries. Keep concept art separate from actual screenshots. Never record a test as passed unless it ran.
פרומפט הפתיחה
רוצים גרסה משלכם? תנו את המדריך הזה לסוכן שלכם (ההורדה כ-Markdown מכילה הכול, כולל הפרומפט הזה ומבנה הקבצים), תגידו לו איזה מקום ואיזה רעיון יש לכם בראש, והדביקו את הפרומפט למטה. תתחילו מרחוב מזוהה אחד ומשימה אחת שאפשר לשחק, ותגדלו קטע בדוק אחד בכל פעם. זה לא ייגמר בקליק אחד ולא ייתן את אותה תוצאה פעמיים. זה יתחיל במקום הנכון.
פרומפט הפתיחהלהדביק כהודעה הראשונה
מלאו את הקלטים. אל תיגעו בכללים.
Use the attached guide as a workflow for building an original browser-playable 3D game. Adapt the method to my location and idea; do not copy Tel Aviv-specific coordinates, names or geometry.
My inputs:
- Place and small starting area: [city, street or square; about 100 to 200 m]
- Player activity and objective: [what the player does and how they succeed]
- Visual direction: [stylized, low-poly, realistic proportions, etc.]
- Target devices: [desktop, mobile, or both]
- Available reference photos and maps: [links or files]
- Time and compute constraints: [optional]
First read the guide and inspect the available project and tools. Identify the essential missing inputs. Check whether you can run Blender, Node.js and a browser. State any unavailable tools instead of pretending to use them.
Create a short implementation brief: first playable loop, controls, success, failure, restart, one small geographic boundary and explicit exclusions.
Before modeling the location, collect dated references, mapped roads and building footprints. Record source URLs and IDs and separate measured facts, photo estimates and invented detail. Pick one shared origin, units, axis conversion and a locked comparison camera. Do not substitute a generic street.
Build a graybox to check scale and clearance. Then create original geometry using reproducible Blender Python scripts. Save the source, .blend, .glb, preview and source/assumption notes. Preserve named articulated parts and material roles needed for animation and customization. If multiple workers are available and appropriate, give each one bounded asset ownership and the same coordinate and export contract.
Load the exports in Three.js. Implement one complete playable task before expanding the map. Derive navigation and blockers from the same assembled world, and test the actual exports. Keep the environment recognizable from the player's camera, not just from an aerial showcase.
Capture the locked view and compare it with the dated reference. For an independent recognition test, show a fresh reviewer only the neutral render first; reveal the reference afterward. Fix the highest-impact mismatch, rebuild and repeat. Do not claim recognition based only on your own review.
Use batching, instancing and culling where appropriate. Measure the real browser build and report the device, viewport, method and remaining limits. Verify controls, collisions, completion, failure, restart and loading. If mobile is a target, distinguish responsive layout from physical-phone tests.
Keep a progress log with prompts, sources, before/after views, validation and next steps. Work locally and make each milestone reviewable. Do not publish or connect external services without authorization. Never invent successful tests, precise geography, playtest scores, development costs or elapsed time.
Start now with the tool check, the brief and the reference packet for the first section. Continue through the first runnable, reviewable milestone; do not stop after giving me a plan.
מבנה הקבצים שהפרומפט מתייחס אליו
assets/<landmark>/build.py: בונה את הנכס מאפס, חושף build(), עובד במטרים ובנקודת המוצא המשותפת.
assets/<landmark>/<landmark>.blend ו-.glb: המקור לעריכה והייצוא לזמן ריצה, אותו שם בסיס.
docs/PROGRESS.md: רשומה אחת לכל אבן דרך עם פרומפט, תוצאה, אימות והצעד הבא.
גלריה
רינדורים מהבילדים של ספטמבר 2026. התוויות אומרות מה משחיק, מה מחקר נוף, ומה עדיין בעבודה.
משחיקפסל בן-גוריון על הטיילתמשחיקחזית ברחוב לויןמשחיקפינת פולישוקמשחיקרחוב אוסישקיןמשחיקהירקון 81משחיקמי האופרה בדפדפןמחקר נוףבריכת שרונה בדפדפןמחקר נוףקו הרקיע של שרונה, מקורות מינואר ויולי 2026מחקר נוףרכיבה חופשית בשוק הכרמלמשחיקמגיעים לחוף פרישמןמשחיקפנים בתי קפה בדיזנגוףמשחיקבית הקפה המפוספס בדיזנגוףבעבודהבחירת הרוכב, גרסה מוקדמתקונספט ארטלא צילום מסך מהמשחק
בדיקות פריסה לטלפון (פריסה בלבד, לא ביצועים על טלפון)
קוביות לפני יופי. מידלנו את החזיתות של רוטשילד לפני שהלולאה וקנה המידה היו נכונים, ואיבדנו את העבודה הזאת. קודם קוביות, אחר כך נקודות ציון, כל פעם.
להריץ את המבחן העיוור מהיום הראשון, בשני שלבים. הביקורות המוקדמות היו חסרות ערך כי כתבנו את שם המקום בפרומפט. הביקורת הדו-שלבית הייתה צריכה להיות הדבר הראשון שכתבנו, לא האחרון.
להתחיל את יומן המקורות עם ההורדה הראשונה. שמות הקבצים שיקרו וגילינו מאוחר. כל תמונה מקבלת תאריך וסטטוס ברגע שהיא נוחתת.
להחליט על אריזת השחקן מוקדם. הבילד של קובץ אחד היה מושלם לביקורת ושגוי לשחקנים. לדעת את זה ביום הראשון היה חוסך בנייה מחדש.
לתקן את סדר העדיפויות של הסוכן מוקדם יותר. עצים מול רחובות היה נקודת המפנה. זה יכול היה להגיע יומיים קודם אם הייתי מסתכל על הרינדור מהמצלמה של השחקן במקום מהמבט האווירי.
מה זה עדיין לא
לא שחזור 1:1. הרבה מידות של מדרכות, גבהים וחזיתות מוערכות מתמונות.
השטח המשחיק הוא בערך 2 ק"מ עם שמונה תחנות. אלנבי, שוק הכרמל, שרונה, רוטשילד ויפו הם מחקרי נוף או מסומנים "בקרוב". אין שם משימות.
הניווט עוקב אחרי קטעי מסלול מאומתים. הוא לא מוצא מסלולים בכל העיר.
שער הזיהוי העיוור, שלושה זיהויים טריים ברצף, לא עבר.
קו הרקיע משתמש במקורות מינואר ויולי 2026. הבנייה התקדמה מאז.
אין עדיין מדידה על טלפון ואין ציון פלייטסט אנושי. ה-104 FPS הם דגימה אחת בדסקטופ.