ปัญหาประสิทธิภาพ SVG Filter เกิดขึ้นขณะที่นักพัฒนาสำรวจเอฟเฟกต์แอนิเมชันแบบวาดด้วยมือ

ทีมชุมชน BigGo
ปัญหาประสิทธิภาพ SVG Filter เกิดขึ้นขณะที่นักพัฒนาสำรวจเอฟเฟกต์แอนิเมชันแบบวาดด้วยมือ

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

วิธีการนี้รวม SVG filter effects สองแบบเข้าด้วยกัน: feTurbulence เพื่อสร้าง procedural noise และ feDisplacementMap เพื่อบิดเบือน pixels ของภาพตาม noise นั้น ด้วยการทำให้ filter parameters เคลื่อนไหวด้วย JavaScript นักพัฒนาสามารถสร้างการเคลื่อนไหวแบบโซ่เซาะอย่างละเอียดที่ให้ภาพประกอบมีคุณภาพแบบวาดด้วยมือ

คอมโพเนนต์ SVG Filter สำหรับเอฟเฟกต์การเดือด:

  • feTurbulence: สร้างเทกซ์เจอร์สัญญาณรบกวนแบบขั้นตอน
  • feDisplacementMap: ใช้สัญญาณรบกวนในการเลื่อนตำแหน่งพิกเซลของภาพ
  • ช่วงเวลาของแอนิเมชัน: โดยทั่วไปจะอยู่ที่ 100-200ms เพื่อให้ได้เอฟเฟกต์ที่ลื่นไหล
  • ความถี่พื้นฐาน: มักจะเริ่มต้นประมาณ 0.02 สำหรับการบิดเบือนที่ละเอียดอ่อน

ข้อกังวลด้านประสิทธิภาพจำกัดการใช้งานจริง

แม้จะได้ผลลัพธ์ทางภาพที่น่าประทับใจ แต่นักพัฒนารายงานปัญหาประสิทธิภาพที่สำคัญเมื่อนำ SVG filters ไปใช้ในสภาพแวดล้อมการผลิต ข้อกังวลหลักเน้นไปที่การใช้ CPU โดยแม้แต่การรวม filter แบบง่าย ๆ ก็ทำให้เกิดการใช้ทรัพยากรมากเกินไป

ผมได้เล่นกับการใช้ SVG effects เพราะมันทรงพลังอย่างน่าทึ่ง แต่ผมไม่แนะนำให้ deploy มันมากเกินไป: แม้ว่า Firefox จะทำ GPU acceleration ระดับหนึ่งสำหรับ SVG filter graphs แต่ในทางปฏิบัติ graphs ที่ดูเรียบง่ายมาก ๆ ที่ผมได้ลองสร้างดูเหมือนจะกลับไปใช้ CPU แม้จะเปิด webrender.all ไว้แล้ว

feTurbulence filter primitive ดูเหมือนจะมีปัญหาเป็นพิเศษ โดยมีรายงานว่ามันทำให้ CPU cores เต็มที่ทันทีบนแล็ปท็อปสมัยใหม่ สิ่งนี้ทำให้เทคนิคนี้ไม่เหมาะสำหรับอุปกรณ์มือถือและระบบที่ใช้แบตเตอรี่ ซึ่งการใช้ CPU มากเกินไปสามารถทำให้แบตเตอรี่หมดเร็วและเกิด thermal throttling

ผลกระทบต่อประสิทธิภาพ:

  • การใช้งาน CPU: ใช้งานเต็มประสิทธิภาพทุกคอร์ในแล็ปท็อปรุ่นใหม่
  • ผลกระทบต่อมือถือ: ทำให้อุปกรณ์ร้อนเกินไปและแบตเตอรี่หมดเร็ว
  • การเร่งความเร็วด้วย GPU: มีข้อจำกัด มักจะกลับไปใช้การประมวลผลด้วย CPU
  • การรองรับเบราว์เซอร์: Firefox มีการเร่งความเร็วด้วย GPU บ้าง แต่ไม่สม่ำเสมอ

แนวทางทางเลือกแสดงให้เห็นความหวัง

ข้อจำกัดด้านประสิทธิภาพได้นำนักพัฒนาไปสำรวจวิธีการทางเลือกเพื่อให้ได้เอฟเฟกต์ที่คล้ายกัน บางคนได้ทดลองกับการสร้าง paths ใหม่ด้วยตนเองเพื่อสร้างแอนิเมชันแบบหยักเป็นคลื่น แม้ว่าแนวทางนี้จะใช้ทรัพยากรมากเช่นกัน คนอื่น ๆ ได้ใช้เครื่องมือแอนิเมชันเฉพาะทางเช่น Rive เพื่อสร้างแอนิเมชันแบบ frame-based ด้วย state machines

การอภิปรายยังได้เปรียบเทียบกับเทคนิคแอนิเมชันที่ยอมรับแล้วเช่น Squigglevision ที่ใช้ในรายการเช่น Dr. Katz และ Home Movies วิธีการแบบดั้งเดิมเหล่านี้ได้เอฟเฟกต์ทางภาพที่คล้ายกันผ่านแนวทางเทคนิคที่แตกต่างกัน ซึ่งชี้ให้เห็นเส้นทางหลายทางสู่เป้าหมายสร้างสรรค์เดียวกัน

ความเข้ากันได้กับมือถือยังคงท้าทาย

การทดสอบบนอุปกรณ์มือถือเผยให้เห็นข้อกังวลเพิ่มเติมนอกเหนือจากการใช้ CPU ผู้ใช้รายงานว่าอุปกรณ์ร้อนมากเมื่อดูหน้าเว็บที่มี animated SVG filters ซึ่งบ่งชี้ว่ามีการปรับให้เหมาะสมกับฮาร์ดแวร์มือถือไม่ดี ปัญหาความร้อนนี้เพิ่มปัญหาการหมดแบตเตอรี่ ทำให้เทคนิคนี้ไม่เหมาะสำหรับประสบการณ์เว็บที่เน้นมือถือเป็นหลัก

การอภิปรายในชุมชนเน้นย้ำถึงความท้าทายทั่วไปในการพัฒนาเว็บ: การสร้างสมดุลระหว่างความน่าสนใจทางภาพกับข้อจำกัดด้านประสิทธิภาพ แม้ว่า SVG filters จะเสนอความเป็นไปได้ในการสร้างสรรค์ที่น่าทึ่ง แต่ข้อจำกัดในการใช้งานปัจจุบันจำกัดการใช้งานจริงในสภาพแวดล้อมการผลิต

การสนทนาที่กำลังดำเนินอยู่สะท้อนคำถามที่กว้างขึ้นเกี่ยวกับลำดับความสำคัญในการปรับปรุงเบราว์เซอร์และการปรับปรุงในอนาคตอาจทำให้เอฟเฟกต์เหล่านี้เหมาะสมมากขึ้นสำหรับการใช้งานเว็บในชีวิตประจำวันหรือไม่

อ้างอิง: Simulating Hand-Drawn Motion with SVG Filters