ZX Spectrum Raytracer, בבסיס

ZX Spectrum Raytracer, בבסיס

צומת המקור: 3085593

[גבריאל גמבטה] יודע כמה דברים על מעקבי קרניים, בהיותו המחבר של Tiny Raytracer, מעקב קרינה שנכתב רק ב-912 בתים של JavaScript. בתור תקופה ארוכה בחור הסובל מה-ZX Spectrum שתוכנן בבריטניה, האם ניתן למזג את שני פרשיות האהבה הללו? האם ה-Tyny Raytracer יכול להתאים ל-ZX Spectrum? ב-BASIC? התשובה היא חיובי, אם כי עם מגבלותיו הרבות של המין האהוב שלנו.

<img decoding="async" data-attachment-id="661085" data-permalink="https://hackaday.com/2024/01/26/a-zx-spectrum-raytracer-in-basic/screenshot-from-2024-01-25-21-02-18/" data-orig-file="https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png" data-orig-size="940,648" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Screenshot from 2024-01-25 21-02-18" data-image-description="

https://gabrielgambetta.com/zx-raytracer.html

” data-image-caption data-medium-file=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” data-large-file=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?w=800″ class=”wp-image-661085 size-medium” src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt width=”400″ height=”276″ srcset=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png 940w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize=250,172 250w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize=400,276 400w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize=800,551 800w” sizes=”(max-width: 400px) 100vw, 400px”>

מעקב קרני עם 15 צבעי יסוד בלבד

הסיפור מתחיל עם זה של [גבריאל] גרפיקת מחשב מאפס (CGFS) אלגוריתמים של raytracer ובסיס קוד קיים שהועבר לדיאלקט ה-BASIC המצומצם מאוד של ה-ZX Spectrum, באמצעות VSCode לעריכה, BAS2TAP כדי ליצור קובץ תמונת קלטת (בעצם רצועת אודיו) ולבצע עם FUSE. כששרשרת הכלים ממוינת, [גבריאל] מוסיף בדיוק מספיק קוד כדי להתמודד עם משוואות חיתוך הקרניים של כדור, ומעבד סצנה של שלוש כדורים לתמונת צבע של 32×22 פיקסלים, תוך זמן ריצה של 15 דקות בלבד. סובלים אחרים יזכרו שלספקטרום היה מערך תכונות (או מערך צבע) בגודל 32×22 בלוקים עם שני ערכי צבע עבור פיקסלים קדמיים ורקע. כל בלוק תכונה מכיל 8×8 פיקסלים, שכל אחד מהם יכול להיות קדמי (מופעל) או רקע (כבוי). השלב הבא היה אז להרחיב את הקוד לטיפול בפיקסלים וגם בלוקים, פשוט על ידי הרחבת מעקב הקרניים ל-256 המלאים. רזולוציה ×176, ולכל בלוק פשוט קבע את שני הצבעים הנפוצים ביותר, והפעל עם אלה עבור הבלוק כולו. זה די עובד, בצורה מאוד מסוג 'התנגשות תכונות' של ספקטרום.

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

בשלב הבא [גבריאל] נוטש באומץ את דגם התאורה השטוחה, מדגמן מקור אור יחיד ומוציא את הטריק היחיד שנותר בעולם הספקטרום המונוכרום, זה של טשטוש ערכי עוצמה עבור כל בלוק, באמצעות שימוש פשוט 8×8 דפוס תנועות מסודר, זה לא נראה נורא, בהתחשב בכל הדברים. עצירה מהירה בדרך להשלמה, ל להוסיף צללים וזמן הריצה חזר ל-17 שעות, אבל זה שווה את זה. ברור שזה מותאם לסוג סצנה בודדת, כזו שבה כדורים מופיעים בעיקר, אבל העקרונות קיימים, והקוביות נמצאות במרחק של עוד כמה שורות קוד. יש מעוניינים?

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

בול זמן:

עוד מ האק ליום