- การทดลองนี้ผลักดัน 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
จุดแลกเปลี่ยนเมื่อต้องเรนเดอร์หรือถ่ายภาพ motion blur ภายใต้ อัตรารีเฟรชของหน้าจอ ที่มีขีดจำกัด คือผู้ชมสามารถใช้สายตาตามวัตถุที่กำลังเคลื่อนที่บนหน้าจอได้
ในโลกจริง เมื่อทำแบบนั้นวัตถุจะคมชัดขึ้น ดังนั้นจึงต้องติดตามการเคลื่อนไหวของดวงตาแล้วใส่ blur ให้สอดคล้องกับการเคลื่อนที่สัมพัทธ์ หรือไม่ก็ต้องตัด motion blur ออกไปเลยในสภาพแวดล้อมที่มีอัตรารีเฟรชเป็นอนันต์ ซึ่งทั้งสองอย่างยังไม่ใช่สิ่งที่ใช้ได้จริงด้วยเทคโนโลยีปัจจุบัน จึงเลี่ยงไม่ได้ที่จะดูแปลกอยู่บ้างเสมอ ผู้กำกับหรือเกมดีไซเนอร์ที่เก่งจะคาดการณ์ได้ว่าสายตาของผู้ชมจะเคลื่อนไหวอย่างไร แล้วเลือกความเร็วชัตเตอร์หรือ rendering blur ให้เหมาะ
ถ้าคอนเทนต์ที่เรนเดอร์ไม่สามารถใช้ภาษาภาพแบบเดียวกันได้ ก็เท่ากับขาดเครื่องมือไปชิ้นหนึ่ง ไม่ว่าอัตรารีเฟรชจะเป็นเท่าไรก็ตาม แน่นอนว่าย่อมมีข้อจำกัดอยู่บ้าง และถ้ามองเห็นความแตกต่างได้ชัดจริงที่ 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 ได้โดยไม่ต้องลดความสว่างของหน้าจอ
สิ่งนี้ทำได้ผ่านการส่งสัญญาณสแกนของ CRT/OLED ซึ่งมักเป็นแบบ rolling หรือการสโตรบแบ็กไลต์ของ LCD ซึ่งโดยมากเป็นแบบทั้งเฟรม อย่างไรก็ตาม หากแสดงแต่ละเฟรมเป็นเวลาสั้นมากที่ 24Hz จะเกิดการกะพริบจนแทบทนไม่ได้ จึงเป็นเหตุให้เครื่องฉายภาพยนตร์ฉายเฟรมฟิล์มเดิมซ้ำ 2~3 ครั้ง ที่ 50Hz ถือว่าพอทนได้แบบเฉียด ๆ ทีวี CRT บางรุ่นในยุโรปจึงใช้ frame doubling กับวิดีโอ 50Hz ให้เป็น 100Hz และผลคือบางครั้งวัตถุที่เคลื่อนไหวดูเหมือนมีสองภาพ เพื่อให้การเคลื่อนไหวลื่นที่สุดและล้าตาน้อยที่สุด อย่างเหมาะสมควรเกิน 70~75Hz แต่ถ้าเป็นเช่นนั้นก็จะแสดงวิดีโอที่บันทึกมาที่ 60FPS โดยไม่มี judder หรือ tearing ได้ยาก
ตรงกันข้ามกับความคาดหวังว่ามันจะทำให้สื่อภาพดูสมจริงขึ้น ในเกมมันกลับให้ความรู้สึกเหมือนทำให้วิดีโอเกมดูเป็น ของเลียนแบบหนังที่ตัดต่อจนเกินเหตุราคาถูก
มันพอสมเหตุสมผลกับการเคลื่อนไหวที่เร็วมาก เคลื่อนผ่านใกล้มาก หรือโดยเฉพาะการเคลื่อนไหวที่ไม่ใช่มุมมองของตัวเอง แต่กลับถูกใช้พร่ำเพรื่อเกินไปกับสถานการณ์อย่าง “ตัวละครหมุนเร็ว”
เวลาคุณหันหัวหรือกรอกตาอย่างรวดเร็ว คุณไม่ได้เห็นภาพเบลอ แต่เห็นภาพใหม่ แล้วสมองทิ้งข้อมูลระหว่างกลางไป ลองมองตาข้างหนึ่งในกระจกแล้วเปลี่ยนโฟกัสไปอีกข้างก็จะเข้าใจ คุณเห็นตาหรือใบหน้าเบลอไหม?
การใส่ blur ตอนขยับมุมมองในเกมมีแต่จะทำให้การแสดงภาพมุมมองใหม่ช้าลงเท่านั้น มันทั้งรบกวนสายตาและไม่สมจริง
การทดสอบที่ดีกว่าคือมองนิ้วหรือมือของตัวเองตอนแกว่งเร็วมาก คุณจะเห็น motion blur ตอนนิ้วกำลังเคลื่อนที่ และในบางกรณีก็อาจเห็นเป็น “เฟรม” แยกกันได้ด้วย ตัวอย่างเช่น ไฟท้ายรถสมัยใหม่ไม่ได้ติดค้างตลอด แต่กะพริบเร็วมากด้วย PWM ดังนั้นถ้ามองไฟท้ายตอนกลางคืนแล้วขยับตา คุณจะไม่เห็นภาพเบลอ แต่เห็นเป็นจุดต่อเนื่องกัน พอรู้เทคนิคนี้แล้ว คุณจะใช้แยกแสงแบบอนาล็อกกับ PWM ได้จากการดูว่ามันเบลอหรือเป็นจุดขาด ๆ
แต่ถ้าคุณอยู่ในรถหรือกำลังบินอยู่ในเกม ภาพอาจบิดเบี้ยวได้ระหว่างการเหลือบมอง สิ่งที่คาดหวังคือ 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 อาจเป็นปัญหาใหญ่
ตอนที่เคยเล่นได้ถึง 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 ตรงนั้นไม่สมจริงและปรับด้วยมือไว้ แต่รูปอินเทอร์แอกทีฟช่วงต้น ๆ ใช้ทฤษฎีนี้โดยตรง คำทักท้วงนี้จึงมีผลกับส่วนนั้น ถึงอย่างไรโดยรวมแล้วผมยังไม่คิดว่ามันทำให้แนวคิดหลักของบทความใช้ไม่ได้
เดโม torus เจ๋งมาก น่าสนใจดีว่าค่าเฟรมเรตสูงเปลี่ยนการรับรู้เรื่องเบลออย่างไร
ผมใช้จอ 240Hz อยู่ และในรูปที่ 5 จนถึงราว 12rad/s ก็ยังมองไม่เห็นวงกลมที่แยกจากกัน ที่ 40rad/s ระหว่างกำลังเคลื่อนไหวก็ยังไม่รู้สึกถึงความต่างระหว่างชัตเตอร์แบบดั้งเดิมกับตัวเลือก sine shutter
แค่ความลื่นของการขยับเมาส์กับค่าหน่วงต่ำก็ทำให้ผมแนะนำ 240Hz อย่างแรงแล้ว กลับไปใช้เมาส์พอยน์เตอร์ 60Hz นี่ยากมากจริง ๆ
บางคนไม่แคร์เรื่องนี้จริง ๆ ผมเองก็ไม่ค่อยเข้าใจการถกเถียงเรื่อง input lag หรือสงครามศาสนาเรื่อง terminal emulator ด้วยซ้ำ แทบไม่รู้สึกต่างระหว่างทำงานบน framebuffer console กับทำงานผ่าน ssh ที่มีดีเลย์เพิ่ม 50ms
ผมดูออกนะว่าเกม 30FPS กับ 60FPS ต่างกัน แต่ก็เฉพาะเวลาตั้งใจสังเกตเท่านั้น ถ้ามันนิ่งและไม่แกว่งไปมาระหว่างสองค่านี้ ผมก็แทบไม่สน
แค่อินเทอร์เฟซที่มีการเปลี่ยนผ่านนุ่มนวลกว่าน่าจะให้ความรู้สึกมั่นคงกว่า และผมก็สงสัยว่ารีเฟรชเรตสูงอาจส่งผลต่อสภาวะจิตใจเมื่อใช้ไปนาน ๆ ได้ไหม
ถ้า torus กับทรงกลมด้านหลังถูกสร้างขึ้นด้วย motion blur แบบนี้ มันไม่น่าจะต้องโปร่งใสบางส่วนเหรอ? มันดูแปลกตรงที่เหมือนกลับมาทึบอีกครั้งในบางจังหวะ
เพราะงั้นชื่อถึงเป็น motion blur all the way down
แต่แสงที่วัตถุเคลื่อนที่ปล่อยออกมาควรน้อยกว่าวัตถุที่หยุดนิ่ง ดังนั้นยิ่งระยะทางมากขึ้น วัตถุก็ควรจะยิ่งมืดลง
นี่เป็นความพยายามที่จะก้าวพ้นจากการจำลองกล้องฟิล์ม ไปสู่การจำลองระบบการมองเห็นของมนุษย์ ซึ่งเป็นทิศทางที่มีประโยชน์
มันคือการขยับเข้าใกล้ความจริงขึ้นอีกก้าว แทนที่จะมัวแต่เลียนแบบเทคโนโลยีเก่า motion blur แบบชัตเตอร์อาจหายไปได้เหมือนภาพพิมพ์โทนซีเปีย หนังขาวดำ 16FPS หรือวงล้อทรงรีที่เกิดจากชัตเตอร์เชิงกล
เป้าหมายไม่ใช่การจำลองความจริง เพราะมันทำไม่ได้อยู่แล้ว
ดูเหมือนว่า ambient.garden เพิ่งขึ้นหน้าแรกไป เลยทำให้บทความนี้ถูกดันขึ้นมาด้วย พอกลับมาอ่านอีกครั้งก็รู้สึกว่าจริง ๆ แล้วมันควรเป็นสองบทความ
ช่วงแรกผมยังชอบอยู่ มันลงลึกเรื่องว่า motion blur คืออะไร และในทางทฤษฎีมันควรเป็นอย่างไรได้ดีพอเหมาะ แต่ช่วงหลังเป็นคำอธิบายแบบอัดแน่นจนเกือบบ้าของการทำงานของเชดเดอร์สำหรับแอนิเมชัน “torusphere” แบบเฉพาะทางที่อาศัย motion blur ส่วนนั้น อย่างน้อยสำหรับผม ประโยชน์หลักคือช่วยให้โค้ดยังไม่กลายเป็นสิ่งที่เข้าใจไม่ได้โดยสิ้นเชิงในอนาคต พอย้อนมองแล้ว การเปลี่ยนผ่านระหว่างสองส่วนนี้ให้ความรู้สึกเหมือนกระโดดลงทะเลสาบที่กลายเป็นน้ำแข็ง ขอโทษด้วย
โล่งใจที่มันไม่ได้เป็นเพราะไวน์แก้วที่เพิ่งดื่มไปอย่างเดียว
ผมเคยลองเล่นกับ motion blur ในฐานะฟังก์ชันฉายภาพของการยื่นออกในสี่มิติอยู่สองสามครั้ง แต่ในบริบทจริงอย่างวิดีโอและเท็กซ์เจอร์ มันกลับไม่คุ้มใช้งานเมื่อเทียบกับการ sampling บนฮาร์ดแวร์ที่มี caching ถึงอย่างนั้นพอเห็นบทความนี้ก็ทำให้นึกว่า “เอาอีกสักครั้งดีไหม”
เดโมเปรียบเทียบแบบเรียลไทม์นี่สุดยอดมาก ตอนตามอ่านมาถึงตรงนั้นในหัวผมรู้สึกว่า “เข้าใจแล้ว” แต่พอได้ลองสลับเปิด/ปิด motion blurเอง ความแตกต่างมันชัดเจนขึ้นมาทันที
พอได้เห็น motion blur all the way down แล้ว somehow ก็ชวนให้นึกไปถึงทฤษฎีสตริง อะตอม ไปจนถึงการกำเนิดของจักรวาล
แน่นอนว่ายิ่งลงลึกไปก็ยิ่งประหลาดขึ้นเรื่อย ๆ