ข้ามไปยังเนื้อหา← ห้องทดลองทั้งหมดทดลองอะไร
รันสมการของภาพ Active Volcano ที่ Hamid Naderi Yeganeh เผยแพร่ไว้ด้วยตัวเอง แล้ววัดว่าได้ใกล้ต้นฉบับแค่ไหน ต่อจาก LAB.06 ที่ทำแบบเดียวกันกับภาพ Sea Wave ของเขา · สมการเขียนอยู่บนตัวภาพ จึงซูมอ่านทีละบรรทัดแล้วเขียนเป็นสคริปต์ numpy เรนเดอร์ 2000×1200 ตามพิกัดเดิม · สีของพิกเซลคือผลบวกของสี่พจน์ ได้แก่ ท้องฟ้า ภูเขา ฟ้าผ่า และเมฆ ส่วนเนื้อของเมฆกับลายบนผิวภูเขามาจากผลรวมคลื่น cosine 50 ชั้น · ตัวที่เล่นได้ในใบนี้คือ shader ที่แปลสมการชุดเดียวกันไปวาดบนการ์ดจอของเครื่องที่เปิดหน้า เปิด-ปิดทีละพจน์ได้ หมุนทิศและยืดระยะของผลต่างที่ทำให้เกิดแสงเงาได้ ปรับความชันของขั้นแสงเงาได้ และลดจำนวนพจน์ของผลรวมได้ · ภาพต้นฉบับเป็นงานของเขาจึงไม่ได้ลงไว้ที่นี่ ภาพทุกภาพในใบนี้วาดจากสมการชุดนี้
สมการเต็ม
ถอดจากสมการที่ Hamid Naderi Yeganeh เขียนไว้บนภาพ Active Volcano เรียงตามภาพต้นฉบับ จากสีของพิกเซลลงไปถึงชิ้นส่วนเล็กสุด ทุกตัวเป็นฟังก์ชันของ (x, y) จึงละ (x, y) ไว้ · เปลี่ยนแค่รูปการเขียนบางตัวให้อ่านง่าย เช่น 17^s/20^s เขียนเป็น (17/20)^s ค่าไม่เปลี่ยน
ภาพ 2000×1200 · m = 1…2000 คือคอลัมน์ n = 1…1200 คือแถว · สามช่องสีคือสมการเดียวกันที่ v = 0, 1, 2
ตัวเดียวกับ F ตามภาพของ LAB.06 — ใบนี้ใช้ตัวนี้ตรง ๆ ทั้งในสคริปต์และในตัวที่เล่นได้
สี่พจน์เรียงตามบรรทัด: ท้องฟ้า · ภูเขา · ฟ้าผ่า · เมฆ · W, T, C, B ถูกใช้แค่ที่ v = 0 กับ 1 แล้วใช้ร่วมกันทั้งสามช่องสี · T₁ − T₀ กับ C₁ − C₀ คือผลต่างระหว่างจุดที่ห่างกันนิดเดียว = แสงเงาของภูเขาและเมฆ
หน้ากากของเมฆ: 1 ในเมฆ 0 นอกเมฆ · แกนของเมฆคือเส้น Q + P/2 = 0 ที่เอนไปทางซ้ายเมื่อสูงขึ้น ขอบขรุขระมาจาก A กับ B
ลายของผิวภูเขา — ภาพแสดงเฉพาะผลต่าง T₁ − T₀ ไม่เห็น T ตรง ๆ
ความสูงสมมติของเมฆ — นิพจน์ใต้รากคือนิพจน์เดียวกับใน R (ไม่มี B) ผลต่าง C₁ − C₀ จึงให้แสงเงาที่ตามรูปทรงของเมฆ
K กับ L คือคลื่น cosine ที่หมุนทิศทุกชั้นและถี่ขึ้นชั้นละ 15% — ผลรวม 50 ชั้นของมันคือเนื้อของเมฆ
หน้ากากของภูเขา · |Q_v|^(2/5) ทำยอดแหลมที่ x = 0 · พจน์ (7 + 800|20Q_v − 7|^(3/2) 20^(−3/2))^(−1) คือยอดเล็กอีกยอดทางขวาที่ x = 0.35
โตไม่จำกัดเมื่อ 5V + 2 เข้าใกล้ 0 · เส้นที่ Q·M คงที่ทุกเส้นวิ่งเข้าหาจุด Q = 0, V = −0.4 ตรงยอดภูเขาไฟ ลายของ T จึงลู่เข้าหายอด
ช่อง v = 1 เลื่อนจุดไป (Δx, Δy) = (0.002, 0.001) — ระยะนี้คือต้นทางของแสงเงาทั้งภาพ
ค่าที่เผยแพร่
LAB.08 — shader แปลสมการชุดเดียวกับ render.py มารันบนการ์ดจอของเครื่องที่เปิดหน้านี้ · เปิดมาที่ค่าที่เผยแพร่ทุกตัว · วัดบนการ์ดจอในตัวของเครื่องที่เขียน: ที่ 2000×1200 ค่าสีตรงกับ render.py เป๊ะ 99.62% ของพิกเซล ที่เหลือต่างไม่เกิน 1 ต่อช่องสี · ภาพต้นฉบับไม่ได้อยู่ในหน้านี้ จึงไม่มีตัวเลขว่าเหมือนต้นฉบับกี่ % แบบสดได้เรียนรู้อะไร
ข้อที่ได้คือกลไกของแสงเงา ไม่ใช่ตัวเลข · ในสมการไม่มีแหล่งแสงและไม่มีเวกเตอร์แนวฉาก (normal) สักตัว มีแค่ช่อง v = 1 ที่เลื่อนจุด (x, y) ไป (0.002, 0.001) ผลต่าง T₁ − T₀ กับ C₁ − C₀ จึงเป็นความชันของพื้นผิวตามทิศนั้นแบบผลต่างจำกัด แล้ว e^(−e^(kx)) แปลงความชันเป็นด้านสว่างกับด้านมืด · ยันด้วยการเล่นกับมันตรง ๆ: ตั้งระยะเป็น 0 แล้วลายบนภูเขาหายทั้งผืนเหลือสีเรียบสีเดียว แปลว่าลายทั้งหมดบนภูเขาคือแสงเงาของพื้นผิว T ที่ภาพไม่เคยวาดออกมาตรง ๆ · หมุนทิศ 180° แล้วด้านสว่างกับด้านมืดสลับกัน · และขั้นนี้ไม่ได้คมแบบขั้นบันไดของ LAB.06: ค่ากลางของ |k · ผลต่าง| อยู่ราว 0.9 บนภูเขาและ 2.9 ในเมฆ ตกอยู่ช่วงโค้งของ e^(−e^z) ไม่ใช่หน้าผา แสงเงาจึงไล่น้ำหนักได้ ไม่ได้ออกมาเป็นขาวกับดำ · ย้ายขึ้นการ์ดจอแล้ว ที่ 2000×1200 ค่าสีตรงกับ numpy เป๊ะ 99.62% ของพิกเซล ที่เหลือต่างไม่เกิน 1 ต่อช่องสี ใช้เวลาราว 30–40 ms ต่อภาพบนการ์ดจอในตัวของเครื่องที่เขียน (ภาพแรกราว 165 ms · numpy ใช้ 65 วินาที) · ค่าคงที่ที่ขึ้นกับ s ล้วน ๆ คำนวณไว้ก่อนฝั่ง JavaScript ด้วย float64 แล้วส่งเข้าไปเป็นตาราง การ์ดจอจึงไม่ต้องคิด cos ของมุมใหญ่อย่าง 7s² ที่ s = 50 (คือ cos(17,500)) ด้วย float32 เอง
ที่ยังไม่ถึง
เทียบกับต้นฉบับพิกเซลต่อพิกเซลด้วยเกณฑ์เดียวกับ LAB.06 (ต่างรวมสามช่องสีไม่เกิน 60 จาก 765) ตรงกัน 94.1% อีก 5.9% ไม่ตรง ความต่างเฉลี่ย 16 จาก 765 · ท้องฟ้าตรง 99.7% แต่เนื้อเมฆตรง 88.9% ผิวภูเขา 88.5% และฟ้าผ่า 72.3% · ส่วนที่ไม่ตรงอยู่ที่ระดับ 1–2 พิกเซลทั้งหมด: ย่อทั้งสองภาพลงสองเท่าตรงกัน 99.49% ย่อสี่เท่าตรงกัน 99.99% และเลื่อนภาพไปหนึ่งพิกเซลในทิศใดก็ตรงน้อยลงเหลือไม่เกิน 87.8% แปลว่าตำแหน่งตรงกันแล้ว · แต่ยังแยกไม่ได้ว่าส่วนที่ต่างมาจากอะไร: ภาพต้นฉบับที่มีคือ JPEG ที่ถูกขยายมา 1.024 เท่า และแค่เอาภาพที่รันได้เองผ่านทางเดียวกันแบบเดาเอา (ขยาย 1.024 เท่าแล้วบีบเป็น JPEG) ก็ทำให้พิกเซลของตัวเองหลุดเกณฑ์ไปแล้ว 0.8–2.9% แล้วแต่วิธีขยายที่เดา ส่วนที่เหลืออาจมาจากวิธีขยายจริงหรือโปรแกรมที่เขาใช้คิดเลข ซึ่งไม่รู้ทั้งคู่ · ตัวที่เล่นได้วัดบนการ์ดจอเครื่องเดียว มือถือกับการ์ดจอยี่ห้ออื่นยังไม่ได้วัดทั้งความตรงและความเร็ว · และไม่ได้ดัดค่าคงที่ให้ภาพเหมือนขึ้น เพราะใบนี้วัดสมการที่เผยแพร่ ไม่ใช่ฟิตภาพ