
Inkwash: סימולטור צבעי מים בקובץ HTML אחד
האפליקציה של ג'ונו ויטאקר מדמה דיו ומים על נייר באמצעות פותר זרימה ומודל תצוגה של Beer–Lambert. כל התוכנה היא קובץ HTML אחד בלי תלויות ובלי שלב בנייה, והיא דורשת WebGL2 בלבד.
ג'ונו ויטאקר פרסם את Inkwash, אפליקציה לשרטוט בצבעי מים שרצה בדפדפן, ולצידה הסבר טכני ארוך על אופן פעולתה. האפליקציה היא קובץ HTML אחד בפחות מאלף שורות, בלי תלויות ובלי שלב בנייה; היא דורשת WebGL2 וטקסטורות half-float הניתנות לרינדור — תמיכה שהמחבר מתארך לחומרה שמשנת 2021 בערך והלאה.
ממברשת מים לפותֵר זרימה
הפרויקט החל כניסוי במודל Claude Fable 5 של Anthropic וגדל לניסיון לשחזר בדפדפן את שגרת רישום הטבע של המחבר. השגרה משלבת עט Pilot G2 עם מברשת מים — מברשת ניילון עם מאגר מים שנסחט בידית. ויטאקר כותב שהוא עצמו לא נגע בקוד: הוא יודע לקרוא את הקובץ, אבל המימוש נכתב על ידי המודל, וכך גם חלק ניכר מהטקסט של ההסבר, דבר שהוא מציין בגלוי.
מתחת לקנבס הציור אינו פיקסלים אלא מחסנית של טקסטורות בנקודה צפה — פיגמנט נייד, פיגמנט שקבע, מים, שדה מהירות ולחץ — שעוברות כל פריים בין כמעט תריסר שיידרים של WebGL2. תנועת הנוזל מבוססת על אלגוריתם Stable Fluids של ג'וס סטאם מ-1999, שדחיפתו החצי-לגרנז'ית עוקבת אחר כל תא אחורה לאורך שדה המהירות, כך שגם צעד זמן גדול לא מפוצץ את הסימולציה. הטלת לחץ בכ-22 איטרציות Jacobi הופכת את המים לבלתי דחיסים.
רטיבות כמערכת הרשאות
מה שגורם לתוצאה להיראות כמו נייר הוא שדה הרטיבות שמפעיל שערים על כל הסימולציה. המהירות מוכפלת ב-smoothstep של רטיבות, ולכן זרימה לא יכולה להתקיים על יבש, ושטיפה נעצרת בגבול של עצמה. גם ניידות הפיגמנט נמדדת כך: נייר לח מאפשר לדיו לזחול, נייר ספוג מאפשר לו לרוץ. המים עצמם נעים במהירות של 0.6 ממהירות הזרימה ומתייבשים באופן אקספוננציאלי, כשמחוון קובע את קבוע הזמן בין כ-2 לכ-18 שניות. דיו טרי של עט מוריד מעט רטיבות משל עצמו — ולכן מעבר מברשת מיד אחרי קו עט מפריע לקו ומעניק לו נוצה, בעוד קו ותיק מחזיק מעמד.
Beer–Lambert וההילה הכחולה
הפיגמנט נשמר כצפיפות אופטית לכל ערוץ ולא כצבע, ושיידר התצוגה ממיר אותה לפי חוק Beer–Lambert, כלומר מכפיל את צבע הנייר באקספוננט של הצפיפות. משיכות חופפות לכן מעמיקות במקום להישטח לאפור, כפי שמתנהגות שכבות צבע אמיתיות. אותה בחירה יוצרת גם את האפקט המזוהה עם האפליקציה: שלב הדימום רץ בקצב שונה לכל ערוץ, ולכן קצה רטוב מסתדר מעצמו לליבה כהה עם הילה כחולה-סגולה קרה — חיקוי של האופן שבו דיו שחור עובר כרומטוגרפיה על נייר רטוב.
שכבה שנייה של פיגמנט שקבע מספקת ריבוד: לחיצה על "fix" מפעילה מעבר של 1.2 שניות שמעביר פיגמנט נייד לשכבה המקובעת ומייבש את הנייר ברגע, בעוד גואש לבן נצרב בו כאטום. כל הצינור — שנים-עשר מעברי שיידר כולל איטרציות Jacobi — רץ ב-60 פריימים לשנייה על טלפון, כותב המחבר, מפני שהפתרון היקר מתבצע על רשת גסה.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.