3 คะแนน โดย GN⁺ 2024-03-05 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การทดลองนี้ผลักดัน motion blur ไปจนถึง “ขีดจำกัดเชิงตรรกะ” โดยนิยามความพร่าใหม่ในแบบที่ลดความแตกต่างระหว่าง motion smear ของการมองเห็นมนุษย์กับการรีเฟรชภาพบนหน้าจอ แล้วนำไปใช้กับแอนิเมชันแบบ procedural ที่ทำงานแบบเรียลไทม์
  • ในฉากธรรมชาติ เซลล์รูปกรวยบนจอประสาทตาจะรวมสัญญาณแสงตามเวลา ทำให้เกิด ความพร่าในระดับตัวรับแสง แต่บนหน้าจอที่มีเฟรมเรตต่ำ วิดีโอที่ไม่มี blur จะดูเหมือนเฟรมซ้อนกันมากกว่า smear ที่เป็นธรรมชาติ
  • motion blur แบบดั้งเดิมทำให้ใกล้เคียงฉากธรรมชาติขึ้นด้วยการเฉลี่ยช่วงเวลาของหนึ่งเฟรม แต่ในวัตถุที่เคลื่อนที่เร็วอาจยังมีความไม่ต่อเนื่องหลงเหลืออยู่ ดังนั้น shutter function ที่ลดน้ำหนักช่วงต้นและท้ายจึงให้ผลลัพธ์ที่เป็นธรรมชาติกว่า
  • การทำ shader แบบเรียลไทม์หลีกเลี่ยง multisampling และ ray tracing เชิงวิเคราะห์ โดยแทนวัตถุเคลื่อนที่เป็น ฟังก์ชันความหนาแน่น ในพิกัดที่รวมเวลาไว้ด้วย จากนั้นเรนเดอร์ค่าปริพันธ์ตามเวลาด้วย volume ray casting
  • “Torusphere Accelerator” ขั้นสุดท้ายทำ motion blur ให้กับทรงกลมที่โคจรและ torus ที่หมุนได้จนแทบถึงความเร็วอนันต์ และเพราะไม่มี “normal ที่ถูก motion blur” จึงจัดการ surface normal ด้วยการ interpolate แยกต่างหาก

ความแตกต่างระหว่างการเคลื่อนไหวในฉากธรรมชาติกับการแสดงผลบนหน้าจอ

  • เดิมที motion blur เป็น artifact บนฟิล์ม ที่เกิดจากวัตถุเคลื่อนไหวระหว่างที่ชัตเตอร์กล้องเปิดอยู่ แต่กลับมีประโยชน์เพราะทำให้วิดีโอดูใกล้เคียงฉากธรรมชาติในเชิงการรับรู้มากขึ้น
  • ใน 3D และแอนิเมชัน “การจำลองกล้อง” กับ “การทำให้ดูเป็นธรรมชาติ” อาจไม่ใช่เป้าหมายเดียวกันเสมอไป
  • หากต้องการ motion blur ที่เป็นธรรมชาติ จำเป็นต้องตอบคำถาม 4 ข้อ
    • เรารับรู้การเคลื่อนไหวในฉากธรรมชาติอย่างไร
    • เรารับรู้ฉากที่เล่นซ้ำบนหน้าจออย่างไร
    • ความแตกต่างด้านการรับรู้ระหว่างสองกรณีนี้คืออะไร
    • video motion blur จะช่วยลดความแตกต่างนั้นได้อย่างไร

การรวมสัญญาณตามเวลาของเซลล์รูปกรวยและ motion smear

  • ในสภาพแวดล้อมสว่าง การประมวลผลช่วงแรกของการมองเห็นมนุษย์รับผิดชอบโดยเซลล์รูปกรวย และ phototransduction ไม่ได้เกิดขึ้นทันที
  • ความหน่วงของสัญญาณแสงสามารถจำลองได้เป็นการทำให้สิ่งเร้าเรียบเนียนขึ้นตามแกนเวลา
  • ตัวอย่างเซลล์รูปกรวยของปลาทองใน Howlett et al. (2017) แสดงจำนวนโฟตอนที่เข้าสู่ photoreceptor, ฟังก์ชันถ่วงน้ำหนัก และ “effective stimulus” ที่เป็นผลลัพธ์
  • เมื่อนำรูปทรงของฟังก์ชันถ่วงน้ำหนักนี้มารวมกับเวลาตอบสนองของเซลล์รูปกรวยมนุษย์ที่ทราบอยู่แล้ว ก็สามารถจำลอง ภาพที่ถูกรับรู้ จากฉากอินพุตได้
  • ผลคือแม้แต่ในฉากธรรมชาติก็มี motion smear ซึ่งเป็นความพร่าตามธรรมชาติในระดับ photoreceptor อยู่แล้ว
  • ตัวอย่างการจำลองตั้งสมมติฐานว่าผู้สังเกตไม่ได้ใช้ตาติดตามวัตถุ แต่มองไปยังจุดคงที่

สิ่งที่ motion blur แบบดั้งเดิมทำกับวิดีโอบนหน้าจอ

  • เมื่อดูหน้าจอที่มีจำนวนเฟรมต่อวินาทีจำกัด ภาพที่รับรู้จากวิดีโอที่ไม่มี motion blur จะไม่ใช่ motion smear ตามที่คาดหวัง แต่ดูเหมือน เฟรมที่ซ้อนทับกัน
  • วิดีโอที่ใช้ motion blur จะไม่แสดงแต่ละเฟรมเป็นเพียงชั่วขณะหนึ่ง แต่เฉลี่ยทุกชั่วขณะในช่วงเวลาที่เฟรมนั้นครอบคลุม
  • วิธีนี้คล้ายกับภาพที่สร้างด้วยกล้องซึ่งชัตเตอร์เปิดอยู่ตลอดเวลาหนึ่งเฟรม
  • ภาพที่รับรู้จากวิธีนี้จึงใกล้เคียงกับกรณีของฉากธรรมชาติมากขึ้นอย่างมาก

ลดความไม่ต่อเนื่องด้วย shutter function

  • แม้ใน motion blur แบบดั้งเดิม วัตถุบางความเร็วยังอาจเหลือ artifact ความไม่ต่อเนื่อง ใน motion smear ได้
  • shutter function ไม่ได้เฉลี่ยเท่า ๆ กันตลอดช่วงเฟรม แต่ให้น้ำหนักต่ำกับช่วงต้นและท้ายของเฟรม และให้น้ำหนักสูงกว่าในช่วงกลาง
  • ชื่อนี้มาจากการเปรียบเทียบกับประสิทธิภาพของชัตเตอร์ในกล้องไดอะแฟรม แต่ในที่นี้เป้าหมายคือการเลือกฟังก์ชันเพื่อลดความแตกต่างด้านการรับรู้ระหว่างหน้าจอกับฉากธรรมชาติ มากกว่าการจำลองกล้อง
  • ปัญหานี้คล้ายกับการสร้าง window function ในงานประมวลผลสัญญาณมาก และ window function ยอดนิยมหลายแบบให้ผลลัพธ์ที่ดี
  • ตามเกณฑ์การทดสอบเชิงอัตวิสัย shutter function จะมีประโยชน์เมื่อระยะที่วัตถุเคลื่อนที่ในหนึ่งเฟรมมีขนาดพอ ๆ กับความกว้างของวัตถุ
  • ที่ความเร็วต่ำอาจไม่จำเป็นมากนัก แต่สำหรับวัตถุที่เคลื่อนที่เร็ว จะดูเป็นธรรมชาติกว่า และเฟรมหยุดนิ่งก็ดูนุ่มนวลกว่า
  • แนวทางนี้ไม่ใช่วิธีจำลองกล้องตามปกติ และช่วงเวลาของเฟรมต่อเนื่องอาจซ้อนทับกันได้
    • การจำลองกล้องทั่วไปไม่มีช่วงเวลาซ้อนทับระหว่างเฟรม และมักทิ้งชั่วขณะระหว่างเฟรมไป

สร้าง “motion blur อนันต์” ด้วย shader แบบเรียลไทม์

  • แอนิเมชันเป้าหมายผสาน ทรงกลมที่โคจร กับ torus ที่หมุน และทำ motion blur ให้ทั้งคู่ได้จนแทบถึงความเร็วอนันต์
  • เพื่อให้ผลงานสุดท้ายโต้ตอบได้ จึงทำด้วย shader แบบเรียลไทม์
  • multisampling คือวิธีเรนเดอร์ฉาก ณ หลายจุดเวลาในแต่ละเฟรม
    • ยิ่งวัตถุมีความเร็วสูง จำนวน sample ที่ต้องใช้ก็ยิ่งเพิ่มขึ้นตามสัดส่วน
    • จึงไม่เหมาะกับแอนิเมชัน “ความเร็วอนันต์”
  • ray tracing motion blur เชิงวิเคราะห์ก็อาจเป็นอีกทางเลือกหนึ่ง
    • สำหรับ mesh มีวิธีเปลี่ยนสามเหลี่ยมเป็น prism
    • วิธีเชิงวิเคราะห์ล้วนก็เป็นไปได้ แต่ในที่นี้อาจกลายเป็นวิธีที่หนักกว่า
    • ทั้งสองวิธียังคงต้องใช้ multisampling เพื่อจัดการวัสดุ
  • การทำงานที่เลือกใช้เป็นวิธีเชิงแฮ็กที่อาจเรียกว่า “integrated volume motion blur”
    • แทนวัตถุที่เคลื่อนที่เป็นฟังก์ชันที่รับพิกัดซึ่งรวมเวลาไว้ด้วย แล้วคืนค่า ความหนาแน่น เป็น 1 สำหรับภายในวัตถุ และ 0 สำหรับส่วนอื่น
    • เมื่ออินทิเกรตฟังก์ชันความหนาแน่นนี้ตามเวลา จะได้ความหนาแน่นที่ผ่าน motion blur สำหรับช่วงเวลาใด ๆ
    • ผลลัพธ์ถูกเรนเดอร์ด้วย volume ray casting
    • ไม่ใช่วิธีที่ถูกต้องเหมือนภาพถ่ายจริง แต่สามารถจัดการเส้นทางที่ยาวมากได้ด้วยประสิทธิภาพแบบเรียลไทม์

ความหนาแน่น motion blur ของทรงกลมที่โคจร

  • ทรงกลมที่โคจรสามารถลดรูปเป็นปัญหาของ วงกลมที่โคจร ในภาพตัดขวาง 2D ได้
  • ให้จุดศูนย์กลางของวงกลมอยู่ห่างจากจุดกำเนิดเป็นระยะ R และรัศมีของวงกลมเป็น a
  • ในพิกัดเชิงขั้ว เมื่อหาระยะรัศมี r ที่กำหนดแล้วคำนวณมุม θ ของพื้นผิววัตถุ ก็สามารถคำนวณเวลาที่จุดหนึ่งเริ่มเข้าไปในวัตถุและเวลาที่ออกจากวัตถุได้
  • หากวัตถุโคจรด้วยความเร็ว v จะเขียนได้ในรูปที่ลบพจน์เวลา vt ออกจากพิกัดมุม
  • สำหรับจุดใดจุดหนึ่งในอวกาศ ความยาวของส่วนตัดกันระหว่างช่วงเวลา I ที่วัตถุมีอยู่กับช่วงเวลาเฟรมปัจจุบัน F จะกลายเป็น ความหนาแน่นที่ถูก motion blur
  • เมื่อใช้ shutter function s จะอินทิเกรตโดยคูณความหนาแน่นกับ s(t) และถ้ามีปริพันธ์ไม่จำกัดเขต S ของ s ก็สามารถคำนวณในรูป S(max I) - S(min I) ได้
  • shutter function ที่อิง sine ซึ่งใช้ในแอนิเมชันถูกออกแบบให้ค่าปริพันธ์เป็น 1 และแม้จะซ้อนทับกันบนแกนเวลา ผลรวม ณ เวลาใด ๆ ก็ยังเป็น 1 เสมอ

torus ที่หมุนและ spiric section

  • torus ที่หมุนก็จัดการด้วยขั้นตอนเดียวกับทรงกลม
  • ภาพตัดขวางแนวตั้ง 2D ของ torus เรียกว่า spiric section หรือ Spiric of Perseus
  • เมื่อกำหนด minor radius ของ torus เป็น a, major radius เป็น b และตัดภาพที่ตำแหน่งเฉพาะ c จะสามารถแสดงพื้นที่ภายใน torus ด้วยสมการพิกัดเชิงขั้วได้
  • แก้มุมพื้นผิว θ เพื่อให้ได้ทั้งกรณีบวกและลบ แล้วใช้พื้นที่ระหว่างขอบเขตทั้งสองเป็นความหนาแน่นของ solid torus
  • ขั้นตอนหลังจากนั้นเหมือนกับทรงกลมที่โคจร คือหาช่วงเวลาและใช้ปริพันธ์ของ shutter function

Torusphere Accelerator ขั้นสุดท้าย

  • ฉากสุดท้ายผสานทรงกลมกับ torus และเรนเดอร์ด้วย volume ray casting มาตรฐาน
  • Surface normals ต้องมีการจัดการเพิ่มเติม
    • เพราะไม่มีแนวคิดที่เรียกว่า “surface normal ที่ถูก motion blur” ในการทำงานจึงใช้การผสม normal
  • แอนิเมชันสดรองรับการโต้ตอบพื้นฐานด้วยเมาส์และการสัมผัส
  • เนื่องจากอาจทำงานได้ไม่ดีบนทุกอุปกรณ์ จึงมีวิดีโอที่เรนเดอร์ไว้ล่วงหน้าที่ส่วนบนของหน้า
  • shader ขั้นสุดท้ายดูได้บน Shadertoy เช่นกัน

ประเด็นต่อเนื่องจากการสนทนาใน HN

  • ในการสนทนาบน Hacker News มีมุมมองว่า คุณภาพของ motion blur เป็น ทางเลือกเชิงศิลปะ
  • ยังมีการพูดถึงความสำคัญของการแปลง color space ด้วย
  • มีการอภิปรายด้วยว่า motion blur ใน VFX ภาพยนตร์พัฒนามาอย่างไรในเชิงประวัติศาสตร์
    • Jurassic Park ซึ่งเป็นภาพยนตร์ CG ยุคแรก ถูกยกเป็นกรณีที่ใช้ box shutter function ซึ่งเป็นไปไม่ได้ในเชิงฟิสิกส์
  • motion blur ในเกมยังคงเป็นหัวข้อที่ถกเถียงกันอยู่

1 ความคิดเห็น

 
GN⁺ 2024-03-05
ความคิดเห็นจาก Hacker News
  • จุดแลกเปลี่ยนเมื่อต้องเรนเดอร์หรือถ่ายภาพ motion blur ภายใต้ อัตรารีเฟรชของหน้าจอ ที่มีขีดจำกัด คือผู้ชมสามารถใช้สายตาตามวัตถุที่กำลังเคลื่อนที่บนหน้าจอได้
    ในโลกจริง เมื่อทำแบบนั้นวัตถุจะคมชัดขึ้น ดังนั้นจึงต้องติดตามการเคลื่อนไหวของดวงตาแล้วใส่ blur ให้สอดคล้องกับการเคลื่อนที่สัมพัทธ์ หรือไม่ก็ต้องตัด motion blur ออกไปเลยในสภาพแวดล้อมที่มีอัตรารีเฟรชเป็นอนันต์ ซึ่งทั้งสองอย่างยังไม่ใช่สิ่งที่ใช้ได้จริงด้วยเทคโนโลยีปัจจุบัน จึงเลี่ยงไม่ได้ที่จะดูแปลกอยู่บ้างเสมอ ผู้กำกับหรือเกมดีไซเนอร์ที่เก่งจะคาดการณ์ได้ว่าสายตาของผู้ชมจะเคลื่อนไหวอย่างไร แล้วเลือกความเร็วชัตเตอร์หรือ rendering blur ให้เหมาะ

    • อย่างไรก็ตาม ผู้ชมก็ยอมรับ shutter angle ว่าเป็นส่วนหนึ่งของภาษาภาพอยู่แล้ว ตัวอย่างเช่น shutter angle แคบให้ความรู้สึกแบบมิวสิกวิดีโอแร็ปที่คมกริบ ส่วน shutter angle ยาวให้ความรู้สึกย้อนยุคชวนฝัน
      ถ้าคอนเทนต์ที่เรนเดอร์ไม่สามารถใช้ภาษาภาพแบบเดียวกันได้ ก็เท่ากับขาดเครื่องมือไปชิ้นหนึ่ง ไม่ว่าอัตรารีเฟรชจะเป็นเท่าไรก็ตาม แน่นอนว่าย่อมมีข้อจำกัดอยู่บ้าง และถ้ามองเห็นความแตกต่างได้ชัดจริงที่ 400Hz ก็น่าจะน่าทึ่งมาก
      สิ่งที่น่าสนใจในคอนเทนต์ที่เรนเดอร์คือสามารถต่อยอดเรื่องนี้ได้อีก เช่น เล่นกับแนวคิดที่เราคิดว่าเข้าใจแล้ว อย่าง shutter angle ที่ยาวเกินระยะเวลาของหนึ่งเฟรม
    • ทางเลือกแทนอัตรารีเฟรชแบบอนันต์คือแสดงแต่ละเฟรมเพียงช่วงเวลาสั้น ๆ ของเวลาเฟรมปกติ กล่าวคือแสดงแต่ละเฟรมแบบ กะพริบเป็นแฟลช อย่างรวดเร็ว แล้วปล่อยช่วงที่เหลือเป็นหน้าจอดำ
      วิธีนี้ทำให้ความสว่างสูงสุดของหน้าจอลดลง และต้องมีอัตราเฟรมขั้นต่ำเพื่อหลีกเลี่ยงการกะพริบ แต่ก็ช่วยลด persistence blur ซึ่งเป็น blur จากการติดตามด้วยสายตาที่ไม่มีอยู่ในโลกจริง พูดให้แม่นยำคือ ถ้าจะกำจัด tracking blur ให้หมดจริง ๆ ก็ต้องแสดงแต่ละเฟรมเป็นช่วงเวลาที่สั้นเป็นอนันต์ ซึ่งไม่สมจริง ถึงอย่างนั้นเฮดเซ็ต VR ก็ใช้วิธีแฟลช/สโตรบลักษณะนี้อยู่
      นี่เองคือเหตุผลที่หน้าจอ CRT และพลาสมามีความคมชัดขณะเคลื่อนไหวดีกว่า LCD หรือ OLED มาก โดยแบบแรกจะแสดงแต่ละเฟรมเป็นการวาบสั้น ๆ ส่วนแบบหลังเป็น sample-and-hold ที่คงเฟรมเดิมไว้ตลอดช่วงเวลาของเฟรมนั้น เช่น ที่ 60Hz จะคงไว้เป็นเวลา 1/60 วินาที 60FPS บน CRT อาจดูไหลลื่นกว่า 120FPS บน OLED ก็ได้
      ในเกมยังมีวิธีเพิ่มเฟรมจำนวนมากด้วย เทคนิคการ reproject ซึ่งช่วยประมาณการเคลื่อนไหวของกล้องจริงได้โดยไม่ต้องให้เอนจินเรนเดอร์เฟรมราคาแพงจำนวนมาก วิธีนี้ก็ถูกใช้ใน VR อยู่แล้ว แต่ยังไม่ถึงอัตราเฟรมที่สูงมากนัก บทความนี้อธิบายไว้ดี:
      https://blurbusters.com/frame-generation-essentials-interpol...
      มีการบอกว่าด้วยการ reproject การไปถึงราว 1000FPS ค่อนข้างเป็นไปได้จริง จึงอาจแก้ปัญหา tracking blur ได้โดยไม่ต้องลดความสว่างของหน้าจอ
    • วัตถุที่เคลื่อนไหวสามารถคมชัดขึ้นได้ถ้าแสดงแต่ละเฟรมในตำแหน่งคงที่เป็นเวลาที่สั้นลง กล่าวคือการลด MPRT เพื่อป้องกันไม่ให้เฟรมที่แสดงเกิดการ smear เมื่อสายตาตามการเคลื่อนไหว
      สิ่งนี้ทำได้ผ่านการส่งสัญญาณสแกนของ CRT/OLED ซึ่งมักเป็นแบบ rolling หรือการสโตรบแบ็กไลต์ของ LCD ซึ่งโดยมากเป็นแบบทั้งเฟรม อย่างไรก็ตาม หากแสดงแต่ละเฟรมเป็นเวลาสั้นมากที่ 24Hz จะเกิดการกะพริบจนแทบทนไม่ได้ จึงเป็นเหตุให้เครื่องฉายภาพยนตร์ฉายเฟรมฟิล์มเดิมซ้ำ 2~3 ครั้ง ที่ 50Hz ถือว่าพอทนได้แบบเฉียด ๆ ทีวี CRT บางรุ่นในยุโรปจึงใช้ frame doubling กับวิดีโอ 50Hz ให้เป็น 100Hz และผลคือบางครั้งวัตถุที่เคลื่อนไหวดูเหมือนมีสองภาพ เพื่อให้การเคลื่อนไหวลื่นที่สุดและล้าตาน้อยที่สุด อย่างเหมาะสมควรเกิน 70~75Hz แต่ถ้าเป็นเช่นนั้นก็จะแสดงวิดีโอที่บันทึกมาที่ 60FPS โดยไม่มี judder หรือ tearing ได้ยาก
    • ใช่ ตอนหาข้อมูลพื้นหลังเพื่อเขียนบทความนี้ ฉันได้อ่านงานวิจัยที่ยอดเยี่ยมพอสมควร ซึ่งอธิบายสิ่งที่คุณพูดถึงตอนนี้และเสนอวิธีแก้โดยคาดการณ์การเคลื่อนไหวของดวงตาผู้ชม: Temporal Video Filtering and Exposure Control for Perceptual Motion Blur (Stengel et al., 2015)
    • ภายใต้อัตรารีเฟรชที่มีขีดจำกัด เราไม่สามารถทำให้ภาพเคลื่อนไหวคมชัดได้อย่างแท้จริง ที่อัตรารีเฟรชสูงมากอาจเข้าใกล้ได้ แต่ก็ยังติดที่วัตถุเคลื่อนที่ได้เพียงตาม เส้นทางที่กระตุกเป็นช่วง ๆ ตามเวลา จึงไม่สอดคล้องกับการเคลื่อนไหวของดวงตา
  • ตรงกันข้ามกับความคาดหวังว่ามันจะทำให้สื่อภาพดูสมจริงขึ้น ในเกมมันกลับให้ความรู้สึกเหมือนทำให้วิดีโอเกมดูเป็น ของเลียนแบบหนังที่ตัดต่อจนเกินเหตุราคาถูก
    มันพอสมเหตุสมผลกับการเคลื่อนไหวที่เร็วมาก เคลื่อนผ่านใกล้มาก หรือโดยเฉพาะการเคลื่อนไหวที่ไม่ใช่มุมมองของตัวเอง แต่กลับถูกใช้พร่ำเพรื่อเกินไปกับสถานการณ์อย่าง “ตัวละครหมุนเร็ว”
    เวลาคุณหันหัวหรือกรอกตาอย่างรวดเร็ว คุณไม่ได้เห็นภาพเบลอ แต่เห็นภาพใหม่ แล้วสมองทิ้งข้อมูลระหว่างกลางไป ลองมองตาข้างหนึ่งในกระจกแล้วเปลี่ยนโฟกัสไปอีกข้างก็จะเข้าใจ คุณเห็นตาหรือใบหน้าเบลอไหม?
    การใส่ blur ตอนขยับมุมมองในเกมมีแต่จะทำให้การแสดงภาพมุมมองใหม่ช้าลงเท่านั้น มันทั้งรบกวนสายตาและไม่สมจริง

    • การทดสอบนี้ไม่ใช่วิธีที่ดีที่สุด เพราะสมองจะชดเชย saccade พร้อมกับคัดกรองอินพุตชั่วคราว และยังมีระบบรักษาเสถียรภาพการเคลื่อนไหวตามธรรมชาติที่ช่วยให้เราอ่านป้ายถนนได้ตอนเดิน
      การทดสอบที่ดีกว่าคือมองนิ้วหรือมือของตัวเองตอนแกว่งเร็วมาก คุณจะเห็น motion blur ตอนนิ้วกำลังเคลื่อนที่ และในบางกรณีก็อาจเห็นเป็น “เฟรม” แยกกันได้ด้วย ตัวอย่างเช่น ไฟท้ายรถสมัยใหม่ไม่ได้ติดค้างตลอด แต่กะพริบเร็วมากด้วย PWM ดังนั้นถ้ามองไฟท้ายตอนกลางคืนแล้วขยับตา คุณจะไม่เห็นภาพเบลอ แต่เห็นเป็นจุดต่อเนื่องกัน พอรู้เทคนิคนี้แล้ว คุณจะใช้แยกแสงแบบอนาล็อกกับ PWM ได้จากการดูว่ามันเบลอหรือเป็นจุดขาด ๆ
    • ผมรู้สึกว่าควรใช้ motion blur แบบเดียวกับ mouse acceleration อย่างที่พูดไป เวลาหันหัวเร็ว ๆ ภาพควรคมชัดและปรากฏทันที
      แต่ถ้าคุณอยู่ในรถหรือกำลังบินอยู่ในเกม ภาพอาจบิดเบี้ยวได้ระหว่างการเหลือบมอง สิ่งที่คาดหวังคือ blur แบบเหมือนถูกลากมากขึ้นตามความเร่ง และเอฟเฟกต์แบบนี้สามารถทำให้ฉากเร็ว ๆ น่าสนใจขึ้นมาก ปัญหาคือ motion blur แทบทุกที่มักถูกทำออกมาได้แย่มาก
    • เหตุผลที่ motion blur เป็นประเด็นถกเถียงในเกม ส่วนใหญ่เพราะการนำไปใช้แย่มาก
      บาปใหญ่ที่สุดสามข้อคือทำให้วัตถุเบลอไกลเกินไป ทำให้สิ่งที่ไม่ควรเบลอถูกเบลอ และทำให้ทั้งฉากเบลอ ข้อที่สามสุดท้ายก็ย้อนกลับไปเป็นข้อที่สอง ดังนั้นจริง ๆ อาจมีแค่สองข้อ สิ่งสำคัญที่สุดคือ motion blur ต้อง ละเอียดอ่อน motion blur ที่ทำถูกต้องไม่ได้ทำให้เกมมัว แต่ทำให้มันดูสมจริงและลื่นไหลขึ้น
      ถ้าวัตถุเคลื่อนที่ 50 พิกเซลระหว่างเฟรม ความกว้างของ blur ไม่ควรเกิน 50 พิกเซล จริง ๆ แล้วถ้าอยากให้ดูนุ่มกว่านี้ ราว 25 พิกเซลน่าจะเหมาะกว่า แต่ไม่รู้ทำไม เกมแข่งรถถึงชอบใส่ radial blur หนัก ๆ ทั้งฉากเวลาวิ่งเร็ว ซึ่งสำหรับผมมันทำลายภาพนั้นเลย
      เช่นเดียวกัน วัตถุที่ไม่ได้เคลื่อนที่สัมพัทธ์กับกล้องไม่ควรมี motion blur หลายเกมพลาดตรงนี้ พอหมุนกล้องก็ใช้ post-process เบลอทั้งฉาก ถ้าเป็นฉากนิ่งสนิททั้งหมดก็พอเข้าใจได้ และยังคุ้มต้นทุนการคำนวณมาก แต่ถ้าคุณกำลังหมุนกล้องเพื่อตามวัตถุบางชิ้น วัตถุที่กำลังตามอยู่ไม่ควรเบลอ ถ้าในเกมแข่งรถมีรถคันข้าง ๆ วิ่งด้วยความเร็วเท่ากับผม รถคันนั้นก็ไม่ควรถูกเบลอ
      วิธีที่แน่นอนในการได้ motion blur ที่ถูกต้องคือเรนเดอร์ทั้งเฟรมหลาย ๆ เฟรมต่อเนื่องกันแล้วนำมาผสม แต่ถ้าจะให้ดูดีต้องใช้จำนวน sample มากมาก ไม่อย่างนั้นเวลาของอย่างเส้นแนวตั้งพุ่งผ่านหน้าจอ มันจะดูไม่ใช่ blur ที่ลื่น แต่เป็นแถบแนวตั้งต่อ ๆ กัน
      บางทีทางที่ดีที่สุดน่าจะเป็น hybrid approach คือเรนเดอร์วัตถุแต่ละชิ้นในฉากแยกกัน แล้วใช้ post-process blur รายวัตถุตามทิศทางการเคลื่อนที่สัมพัทธ์กับกล้อง แต่การจัดการลำดับ Z อาจเป็นปัญหาใหญ่
    • ในวิดีโอเกม motion blur ช่วยชดเชยเฟรมเรตต่ำได้ โดยเฉพาะที่ 30FPS แทบจะจำเป็น และที่ 60FPS ก็ยังโอเค
      ตอนที่เคยเล่นได้ถึง 120FPS ในบางครั้ง แม้โปรเจ็กเตอร์จะน่าเสียดายที่ถูกจำกัดไว้ที่ 60Hz ผมก็ยังชอบเล่นแบบไม่มี motion blur มากกว่า
    • อันที่จริงแล้วเราไม่ได้เห็นภาพใหม่ตรง ๆ แต่เห็นรายละเอียดปริมาณหนึ่ง แล้วสมองเขียนประวัติของสิ่งที่เห็นใหม่ให้ดูเหมือนมี ความต่อเนื่อง
  • มีบทสรุปภาพรวมที่ดีอยู่ใน [1]
    ที่น่าสนใจคือ จนกระทั่งมีบทความคลาสสิก [2] เกี่ยวกับการทำโมเดล shutter efficiency ออกมาในปี 2005 เรนเดอเรอร์ทั้งหมดที่ใช้ในงาน VFX ต่างใช้ box shutter กันหมด กล่าวคือ shutter เปิดทันที ค้างเปิดตามช่วงเวลาที่กำหนด แล้วปิดทันที
    ถ้าคุณดูฉาก motion blur สุดโต่งในหนังอย่าง “Jurassic Park” หรือ “The Mask” นั่นคือ PhotoRealistic RenderMan ที่ใช้ box shutter
    การนำ parameterization จาก [2] ไปใช้แบบ 1:1 ในงานโปรดักชันครั้งแรกเกิดขึ้นใน [3] ในปีเดียวกับที่บทความออก และก็ไม่เปลี่ยนมาจนถึงทุกวันนี้ ผลงานแรกที่ใช้คือ “Charlotte's Web” และถูกใช้เฉพาะกับตัวละครแมงมุมที่ Rising Sun Pictures สร้างด้วย [3]
    Pixar ก็เพิ่มตามมาในอีกหลายปีให้หลัง แต่ใน [4] ดันไปค่อนข้างแรง ทุกวันนี้ offline renderer ส่วนใหญ่มีฟีเจอร์นี้ และเรียกมันว่า shutter curve
    [1] O. Navarro et al.: Motion Blur Rendering: State of the Art (https://citeseerx.ist.psu.edu/doc_view/pid/fc23fb525cafa8fe6...)
    [2] Stephenson, Ian: Improving Motion Blur: Shutter Efficiency and Temporal Sampling (https://staffprofiles.bournemouth.ac.uk/display/journal-arti...)
    [3] https://www.3delight.com/, โดยเฉพาะดู https://nsi.readthedocs.io/en/latest/nodes.html
    [4] https://renderman.pixar.com/resources/RenderMan_20/cameramod...

  • เดโมดูเหมือนจะคำนวณในพื้นที่ sRGB กล่าวคือใช้ค่าความสว่างแบบไม่เชิงเส้น เลยดูเหมือนว่านี่น่าจะเป็นสาเหตุหลักที่ทำให้การเบลอดูไม่เป็นธรรมชาติ
    ถ้าจะจำลองปรากฏการณ์ทางกายภาพ ควรประมวลผลด้วยค่าความสว่างแบบเชิงเส้น แล้วค่อยแปลงเป็น sRGB เฉพาะตอนสุดท้าย
    ถ้าผลไม่เชิงเส้นของการรับรู้ทางสายตามนุษย์หักล้างสิ่งนี้ทั้งหมดได้ก็อาจเป็นอีกเรื่องหนึ่ง แต่ถึงอย่างนั้นก็ควรกล่าวถึงจุดนี้อย่างน้อยด้วย

    • ขอบคุณที่ชี้ให้เห็นนะ เคยลองแปลงพื้นที่สีในแอปกราฟิกอื่น ๆ มาแล้ว แต่เห็นได้ชัดว่ายังไม่ได้ซึมซับบทเรียนนี้จริง ๆ
      จะกลับไปตรวจอีกที และถ้าถูกต้องก็จะอัปเดตรูปแบบอินเทอร์แอกทีฟกับเนื้อหาบทความ ส่วนเชดเดอร์ “torusphere” หลักน่าจะไม่เป็นไร เพราะ motion blur ตรงนั้นไม่สมจริงและปรับด้วยมือไว้ แต่รูปอินเทอร์แอกทีฟช่วงต้น ๆ ใช้ทฤษฎีนี้โดยตรง คำทักท้วงนี้จึงมีผลกับส่วนนั้น ถึงอย่างไรโดยรวมแล้วผมยังไม่คิดว่ามันทำให้แนวคิดหลักของบทความใช้ไม่ได้
    • ดูออกเลยว่าแกมมาผิดเต็ม ๆ เพราะมันไม่ให้ motion blur ที่รับรู้ได้ว่านุ่มนวลในภาพ ซึ่งเท่ากับบ่อนทำลายจุดประสงค์ของบทความเอง มันน่าจะทำได้ดีกว่านี้มาก
    • น่าแปลกใจที่ผู้เขียนพลาดประเด็นสำคัญแบบนี้ ทั้งที่เป็นเรื่องของพื้นที่เชิงเส้น แต่ก็ไม่ใช่เรื่องแปลกเสียทีเดียว เพราะแม้แต่ Adobe เองในปี 2024 ก็ยังเพิ่งรองรับการประมวลผลแบบเชิงเส้นได้เพียงพอเท่านั้น
  • เดโม torus เจ๋งมาก น่าสนใจดีว่าค่าเฟรมเรตสูงเปลี่ยนการรับรู้เรื่องเบลออย่างไร
    ผมใช้จอ 240Hz อยู่ และในรูปที่ 5 จนถึงราว 12rad/s ก็ยังมองไม่เห็นวงกลมที่แยกจากกัน ที่ 40rad/s ระหว่างกำลังเคลื่อนไหวก็ยังไม่รู้สึกถึงความต่างระหว่างชัตเตอร์แบบดั้งเดิมกับตัวเลือก sine shutter
    แค่ความลื่นของการขยับเมาส์กับค่าหน่วงต่ำก็ทำให้ผมแนะนำ 240Hz อย่างแรงแล้ว กลับไปใช้เมาส์พอยน์เตอร์ 60Hz นี่ยากมากจริง ๆ

    • ผมเคยใช้ทั้งจอ 4K 24 นิ้ว อยู่ฝั่ง “ใช้เรติน่าแล้วกลับไปไม่ได้” และเคยใช้จอ 144Hz ด้วย แต่ก็ยังไม่รู้สึกอยากอัปเกรดสภาพแวดล้อมหลักที่เป็นจอเก่า 24 นิ้ว 1920x1200 60Hz สามจอ
      บางคนไม่แคร์เรื่องนี้จริง ๆ ผมเองก็ไม่ค่อยเข้าใจการถกเถียงเรื่อง input lag หรือสงครามศาสนาเรื่อง terminal emulator ด้วยซ้ำ แทบไม่รู้สึกต่างระหว่างทำงานบน framebuffer console กับทำงานผ่าน ssh ที่มีดีเลย์เพิ่ม 50ms
      ผมดูออกนะว่าเกม 30FPS กับ 60FPS ต่างกัน แต่ก็เฉพาะเวลาตั้งใจสังเกตเท่านั้น ถ้ามันนิ่งและไม่แกว่งไปมาระหว่างสองค่านี้ ผมก็แทบไม่สน
    • สำหรับผมก็เห็นด้วยว่าเคอร์เซอร์ 144Hz ให้ความรู้สึกที่ลื่นกว่า แต่ถึงอย่างนั้นกลับไปใช้เคอร์เซอร์ 60FPS ก็ไม่มีปัญหาอะไร
      แค่อินเทอร์เฟซที่มีการเปลี่ยนผ่านนุ่มนวลกว่าน่าจะให้ความรู้สึกมั่นคงกว่า และผมก็สงสัยว่ารีเฟรชเรตสูงอาจส่งผลต่อสภาวะจิตใจเมื่อใช้ไปนาน ๆ ได้ไหม
  • ถ้า torus กับทรงกลมด้านหลังถูกสร้างขึ้นด้วย motion blur แบบนี้ มันไม่น่าจะต้องโปร่งใสบางส่วนเหรอ? มันดูแปลกตรงที่เหมือนกลับมาทึบอีกครั้งในบางจังหวะ

    • ใช่แล้ว แนวคิด torusphere นั้นเป็นไปไม่ได้ในเชิงกายภาพ ทั้งหมดเป็นลูปอยู่แล้ว ดังนั้นตัววัตถุเองไม่มีแม้แต่สถานะเชิงทฤษฎี และประกอบขึ้นจากmotion blurที่ทำให้หนาขึ้นแบบประดิษฐ์ทั้งหมด
      เพราะงั้นชื่อถึงเป็น motion blur all the way down
    • ชัดเจนว่ามีการ blend ระหว่างทรงกลมกับ torus แล้วก็กลับจาก torus ไปเป็นทรงกลม ไม่อย่างนั้นมันคงค่อย ๆ จางลงเรื่อย ๆ ตามเวลา
    • แสงเป็นแบบไม่ต่อเนื่องหรือเป็นแบบต่อเนื่องกันแน่?
    • วัตถุที่เคลื่อนที่เร็วไม่สิ้นสุดหรือกระโดดตำแหน่งไม่น่าจะโปร่งใสได้ เพราะมันย่อมบังลำแสงทุกเส้นที่ตัดผ่านเส้นทางนั้น
      แต่แสงที่วัตถุเคลื่อนที่ปล่อยออกมาควรน้อยกว่าวัตถุที่หยุดนิ่ง ดังนั้นยิ่งระยะทางมากขึ้น วัตถุก็ควรจะยิ่งมืดลง
  • นี่เป็นความพยายามที่จะก้าวพ้นจากการจำลองกล้องฟิล์ม ไปสู่การจำลองระบบการมองเห็นของมนุษย์ ซึ่งเป็นทิศทางที่มีประโยชน์
    มันคือการขยับเข้าใกล้ความจริงขึ้นอีกก้าว แทนที่จะมัวแต่เลียนแบบเทคโนโลยีเก่า motion blur แบบชัตเตอร์อาจหายไปได้เหมือนภาพพิมพ์โทนซีเปีย หนังขาวดำ 16FPS หรือวงล้อทรงรีที่เกิดจากชัตเตอร์เชิงกล

    • ถ้ามีเทคโนโลยีที่เรนเดอร์กำลังส่องสว่างของดวงอาทิตย์จริงบนหน้าจอทีวีได้เมื่อไร ก็บอกผมด้วย
      เป้าหมายไม่ใช่การจำลองความจริง เพราะมันทำไม่ได้อยู่แล้ว
  • ดูเหมือนว่า ambient.garden เพิ่งขึ้นหน้าแรกไป เลยทำให้บทความนี้ถูกดันขึ้นมาด้วย พอกลับมาอ่านอีกครั้งก็รู้สึกว่าจริง ๆ แล้วมันควรเป็นสองบทความ
    ช่วงแรกผมยังชอบอยู่ มันลงลึกเรื่องว่า motion blur คืออะไร และในทางทฤษฎีมันควรเป็นอย่างไรได้ดีพอเหมาะ แต่ช่วงหลังเป็นคำอธิบายแบบอัดแน่นจนเกือบบ้าของการทำงานของเชดเดอร์สำหรับแอนิเมชัน “torusphere” แบบเฉพาะทางที่อาศัย motion blur ส่วนนั้น อย่างน้อยสำหรับผม ประโยชน์หลักคือช่วยให้โค้ดยังไม่กลายเป็นสิ่งที่เข้าใจไม่ได้โดยสิ้นเชิงในอนาคต พอย้อนมองแล้ว การเปลี่ยนผ่านระหว่างสองส่วนนี้ให้ความรู้สึกเหมือนกระโดดลงทะเลสาบที่กลายเป็นน้ำแข็ง ขอโทษด้วย

    • ตอนอ่านผมก็รู้สึกว่า มันอธิบาย motion blur ผ่านฟังก์ชันของช่วงเวลาเปิดรับแสงอย่างshutter angleได้อย่างเรียบร้อยดี แล้วจู่ ๆ ก็พุ่งเข้าสู่ดินแดนแห่งความบ้าคลั่งของกรณีพิเศษที่ประหลาดมาก
      โล่งใจที่มันไม่ได้เป็นเพราะไวน์แก้วที่เพิ่งดื่มไปอย่างเดียว
      ผมเคยลองเล่นกับ motion blur ในฐานะฟังก์ชันฉายภาพของการยื่นออกในสี่มิติอยู่สองสามครั้ง แต่ในบริบทจริงอย่างวิดีโอและเท็กซ์เจอร์ มันกลับไม่คุ้มใช้งานเมื่อเทียบกับการ sampling บนฮาร์ดแวร์ที่มี caching ถึงอย่างนั้นพอเห็นบทความนี้ก็ทำให้นึกว่า “เอาอีกสักครั้งดีไหม”
  • เดโมเปรียบเทียบแบบเรียลไทม์นี่สุดยอดมาก ตอนตามอ่านมาถึงตรงนั้นในหัวผมรู้สึกว่า “เข้าใจแล้ว” แต่พอได้ลองสลับเปิด/ปิด motion blurเอง ความแตกต่างมันชัดเจนขึ้นมาทันที

  • พอได้เห็น motion blur all the way down แล้ว somehow ก็ชวนให้นึกไปถึงทฤษฎีสตริง อะตอม ไปจนถึงการกำเนิดของจักรวาล

    • เป็นอุปมาที่น่าสนใจนะ บางครั้งเปลือกอิเล็กตรอนก็ถูกอธิบายเป็นเมฆความหนาแน่นของความน่าจะเป็น การแรเงาก็คือการบอกความน่าจะเป็นที่จะพบอิเล็กตรอน ณ จุดนั้นถ้าหยุดเวลาไว้
      แน่นอนว่ายิ่งลงลึกไปก็ยิ่งประหลาดขึ้นเรื่อย ๆ