SingleFrame
Animation Maker Studio

(เตรียมความพร้อม : โครงงานการ์ตูน 3D แอนิเมชั่น สำหรับเด็ก บนฟรีทีวี " งานประณีตในงบประหยัด ")

ศึกษา Displacement Mapping

    ยังไม่ค่อยกระจ่างรายละเอียดทางเทคนิคของ Displacement Map จากที่ข้อมูลระบุไว้ พอสรุปได้ว่า Displacement มีการ " ยก " หรือ " ยุบ " ผิวจริง ตามทิศทางของ Surface Normal จะเรียกว่า Real Bump ก็ได้ ดังนั้นรูปทรงด้านข้างและเงาตก จึงเกิดเป็นรูปทรงตามที่ Map
    โดยสีดำ (back / 0,0,0) จะทำให้ผิวโมเดลยุบลงไป 127 ซ.ม. สีขาว (white / 255,255,255) จะยกผิวขึ้นมา 127 ซ.ม. เช่นกัน ผมก็ประมาณเอาเองว่า ค่าที่จะเป็นระดับผิวเดิมของโมเดล ก็น่าจะคือ " สีเทากลาง "
 Part. 1
5 October 2008 / ๕ ตุลาคม ๒๕๕๑
    ลองสังเกตจากภาพทางซ้ายมือ ผมทำภาพที่ใช้ Map ใน Mode RGB โดยใช้ค่า " เทากลาง " ที่ R = 127, G = 127, B = 127 ตรงบริเวณที่ผมลอง Quick Render ดู จะเห็นว่า ผิวโมเดลยุบลงไปจากระดับผิวเดิม 
   
    ผมใช้ภาพใน Mode Grayscale ทำ Map และกำหนดค่าที่ระดับผิวหรือ " พื้น " หรือ " เทากลาง " ที่ K = 50%
   เป็นมุมที่ผมวาง Map โดย Flatten (คลี่ UV) คลี่ออกทีละ ครึ่งทรงกลม ให้แบนราบ แล้วจึงวาง Map ทีละครึ่งซีก
    ผลที่ได้ เมื่อทำ Displacement Mapping ลงบนผิวโมเดลทรงกลมครึ่งบน สังเกตว่า คราวนี้ผิวไม่ " ยุบ " ลงไปจากระดับผิวเดิมแล้ว
    ลอง Quick Render ดูผลลัพธ์ เมื่อวาง Map ทั้งครึ่งบนและครึ่งล่าง
Part. 2

   
    ผมเอาข้อมูลมาเติมนิดหนึ่งครับ เรื่องค่าสี " เทากลาง " ที่เราจะใช้กำหนดเป็น ระดับผิวเดิมของโมเดล คือ ถ้าจะใช้ภาพทำ Map ใน Mode RGB ให้ใช้ค่าที่ R = 128 , G = 128 , B = 128 ก็จะไม่ทำให้ผิวโมเดลเดิมเปลี่ยนระดับ เพราะ Displacement Map จะเช็กเทียบค่าทั้ง RGB แต่ถึงแค่ 127 ระดับเท่านั้น (ที่ 127 คือค่าที่จะมีผลมากที่สุด) เมื่อเป็นค่ามากกว่า 127 คือตั้งแต่ 128 ขึ้นไป ก็จะไม่มีผลอะไร ดังนั้น Displacement Map ใช้ภาพทำ Map ได้ทั้ง RGB และ Grayscale การใช้ภาพทำ Map ใน Mode RGB จะสามารถไล่ระดับได้มากกว่า Grayscale
    ภาพตาราง สลับขาว-เทา ในโหมด RGB ที่ผมใช้ทำ Map ให้กับรูปบนด้านซ้ายมือ
    คราวนี้ทดลองกับค่าสีต่างๆ ไม่เล่นกับเฉพาะค่าสีเทาแล้ว โดยทำเป็นตารางสี (RGB) ค่าต่างๆ เพื่อใช้ Map บนผิวทรงกลม 
    ภาพทางซ้ายมือคือ ผลลัพธ์ที่ออกมา
    ภาพที่ ๓ ผมใช้ภาพตารางสีเดิม Map เพิ่มลงไปเป็นชั้นที่ ๒ ที่ตำแน่งเดิม, กำหนดชนิดของ Map ชั้นนี้ เป็นแบบ Color Map เพื่อใช้อ้างอิงดูว่า สีอะไรมีผลกับ การยกขึ้น หรือ การยุบลง ของผิวอย่างไร

    ลองสังเกต ผิวโมเดลตรงบริเวณที่ "สีตรงข้าม" ชนกัน และผิวโมเดลตรงบริเวณที่ "สีข้างเคียง" ชนกัน
Part. 3

    ประโยชน์หลักๆของ Displacement คือ ใช้แก้ปัญหา หรือลดขั้นตอน รายละเอียด ในการขึ้นโมเดลบางรูปทรง ซึ่งถ้าขึ้นผิวจริงจะยุ่งยากมาก หรืออาจเป็นไปไม่ได้เลยในทางปฏิบัติ ที่จะขึ้นผิวนั้นจริงๆ เช่น ผิวคนเสมือนจริง, ที่มีสิว ไฝฝ้า รอยเหี่ยวย่น รูขุมขน รอยนูนของเส้นเลือด, ภาชนะหรือขวดที่มีลักษณะผิวนูนเว้าที่ซับซ้อน ฯลฯ

    Displacement Map สัมพันธ์กับ Patch ที่ Map เมื่อเคลื่อน, ย่อ, ขยาย Path อย่างไร ก็จะเป็นสัดส่วนไปตามนั้น รวมถึงมีผลเมื่อใช้ Expression สั่งคุมปริมาตรของโมเดลให้คงที่ เมื่อ หด - ยืด โมเดลด้วย (ใช้ตอนทำ Squash & Stretch)

    ยกเว้น คือ ไม่สามารถควบคุมผิวที่ "ยุบ" หรือ "ยก" ขึ้นมานั้นได้โดยตรงต้องควบคุมผ่านจุดของ Patch เดิม ที่ทำ Map ไว้ (สำหรับผลกับทางฟิสิกส์ เช่น เวลาชน เช็กที่ผิว Map หรือ ผิว Patch
เรื่องนี้ผมยังไม่เคยลองครับ)
Part. 4
28 October 2014 / ๒๘ ตุลาคม ๒๕๕๗
    รายงานผลเรื่องชนผิว คือ โปรแกรมมีการเช็ก การชนผิวที่เกิดจาก Displacement Map ครับ โดยลองสั่ง Simulate ๖๐ เฟรม ปล่อยผ้าลงมา, หมุนลูกสีเล็กน้อย เพื่อเปลี่ยนทิศของแรงขณะที่ผิวชนกัน Rendering ขนาดเล็ก ประมาณแค่พอดูออกนะครับ
Part. 5

Animated Displacement Map
(ทำรอยเท้าบนพื้น)
animated displacement map Re posed : 26 November 2015
๒๖ พฤศจิกายน ๒๕๕๘

2.02 MB/00:00:06
1.31 MB/00:00:13     ไปเจอ Tutorial: Footsteps in the Snow using Animated Displacement Decals เลยรีบศึกษา และทดลองทำก่อนทันทีเลย

    ต้องยอมรับว่าเทคนิคนี้ "สุดยอด" ผู้สอนคิดและทำ Tutorial สอนไว้ตั้งแต่ปี 2002 หรือ ๑๒ ปีมาแล้ว ผมเคยลองทำ [คลิ้กดู] แต่เป็นวิธีขึ้นโครงโมเดลจริงๆ ไม่เป็นเทคนิคที่ทำได้ง่ายๆอย่างนี้

    ได้ผลเป็นดังคลิ้ปวิดีโอด้านบน และทางซ้ายมือ ซึ่งยังกระท่อนกระแท่น ทั้ง ๒ คลิ้ป เพราะตัวอย่างที่สอนนั้น ใช้โปรแกรมฯ เวอร์ชั่นรุ่นเก่ามาก ต้องค่อยๆทำความเข้าใจ และปรับหลายอย่าง

   สงสัยว่า โมเดลคง "ตืบ" เท้าในก้าวที่ ๓-๔ แรงไปหน่อย ทำเอาพื้นทะลุเลย ยังไม่รู้ว่า เป็นเพราะอะไร และยังแก้ไม่ให้พื้นทะลุ ในไฟล์นั้นไม่ได้ด้วย

    Capture พื้นรองเท้าของโมเดลนายโต (Bottom View) นำเข้าไปทำให้เป็นขาว-ดำ ใน GIMP
 
  ทำให้เป็นภาพสี ขาว-ดำ เพื่อให้เข้าใจง่าย แต่ไม่จำเป็นต้องเป็น Mode Grayscale ก็ได้ หลักของ Displacement คือ
  • สีที่อ่อนกว่าสีเทากลาง (หรือค่าน้อยกว่า 127) ผิวโมเดลจะถูกยกขึ้นสูง
  • สีที่เข้มกว่าสีเทากลาง (หรือค่ามากกว่า 127) ผิวโมเดลจะถูกยุบลงไป
  ภาพที่ใช้ทำ Displacement Map รอยเท้า, สร้าง Layer พื้นต่างหาก เป็นสีเทากลาง ค่า R 127, G 127, B 127 (ผิวจะเหมือนเดิม) ขอบรอบนอกรอยเท้า ทำเป็นเส้นขอบสีขาว (ขอบจะถูกยกขึ้นสูง) ส่วนรอยเท้าจริงทำให้เป็นสีเข้ม โดยคงรายละเอียด ของพื้นรองเท้าไว้ (พื้นจะยุบลงไป) ถ้า Render ภาพขนาดใหญ่อย่างละเอียด จะเห็นรายละเอียดในส่วนนี้

  สั่ง Filters > Gaussian Blur (แยก Layer พื้นไว้ก่อนสั่ง) แล้ว Exporte ออก เป็นรอยเท้าข้าง ซ้าย-ขวา เพื่อนำไปวางตามตำแหน่งบนพื้น แล้วกำหนดคีย์เฟรมเปลี่ยนค่า

    Time Line ของ Decals ที่วางเป็น Displacement Map ของแต่ละก้าว (กราฟแสดงของก้าวที่ ๓ /คู่แรกคือตำแหน่งยืน) โดยกำหนดค่า Interpolation Method แบบ Hold

  ที่เฟรมแรกค่าเป็น 0 และจะคงเป็น 0 (คือไม่มีผลอะไร) ไปจนเจอคีย์เฟรม (ตำแหน่งก้าวที่ ๓ แตะพื้น) ที่คีย์เฟรมนี้จะปรับค่า Displacement เป็น 340 ค่าก็จะกระโดดไปที่ 340 ทันที และคงที่ค่านี้เรื่อยไป ผลคือเกิดรอยเท้ายุบลงไปทันที ที่เฟรมเท้าแตะพื้น แล้วรอยยุบจะคงอยู่เรื่อยไป
    ถ้าสังเกต จะเห็นว่ายังมีข้อผิดพลาดเกิดขึ้นอีก คราวนี้เป็นที่รอยแรกเลย และเป็นที่เดียวเท่านั้น ลองซูมขยายและ Render อย่างละเอียดดู จะเห็นว่าผิวบางส่วน ไม่ถูกกดยุบลงไป ยังคงอยู่ระดับเดิม แสดงว่า มีอะไรผิดพลาดตอนปะภาพ (Stamp)

    ย้อนกลับไปปะภาพ หรือ Stamp ใหม่แล้ว ทิ้งค่า Stamp เก่าไป ข้อผิดพลาดนั้นก็หมดไป
Part. 6

ต้องการ Splines ละเอียดเท่าไร? เมื่อต้องทำ Diaplacement ?


11.3 MB/00:00:58
   กำลังทำ Cookie-cut กับใบไม้เพื่อจะสร้างทรงพุ่มไม้ แบบต่างๆ เก็บสะสมไว้สำหรับสร้างฉาก แต่เกิดข้อบกพร่องขึ้น ซึ่งลักษณะคล้ายๆกับที่เกิดขึ้น ในฉากที่ทดลองทำ Animated Displacement พอทดลองลดโครงข่าย Splines ที่ใช้เป็น Plane เพื่อปะรูปใบไม้ ลงไปครึ่งหนึ่ง ปรากฎว่า "Errors" นั้นหายไป

   ทำให้เกิดสงสัยว่า "Errors" ที่เกิดขึ้นใน Displacement เกี่ยวข้อง กับความละเอียดของ โครงข่าย Splines หรือเปล่า

   เข้าใจกันมาแต่เดิมว่า เวลาจะทำ Displacement ควรให้ระนาบ หรือ Plane ที่จะปะ Displacement มีความละเอียดมากๆ เพื่อผิวจะได้ ยุบลง หรือ ยกขึ้น อย่างราบเรียบ
    ในการทดลอง ระนาบ หรือ Plane มีขนาด กว้าง x ยาว เท่ากับ 60cm x 60cm
  1. ระนาบแรก ผมใช้จุด cps เพียง 4 จุด ซึ่งจะสร้างเป็น แผ่น Patch ได้ 1 Patch
  2. ใช้จุด cps 9 จุด ซึ่งจะสร้างเป็น แผ่น Patch ได้ 4 Patches
  3. ใช้จุด cps 20 จุด ซึ่งจะสร้างเป็น แผ่น Patch ได้ 16 Patches
  4. ใช้จุด cps 93 จุด ซึ่งจะสร้างเป็น แผ่น Patch ได้ 900 Patches


ผล Rendering รูปซ้าย จากระนาบ 1 Patch ส่วนรูปขวา จากระนาบ 900 Patches
   Stamps ภาพ ลงไปบนระนาบทั้งสี่ระนาบ (ดูรายละเอียดในคลิ้ปวิดีโอ) เสร็จแล้วนำไปจัดแสงหน้ากล้อง, สั่ง Rendering ได้ผลดังภาพประกอบด้านบนครับผม

    จากการทดลองนี้ ผมคงต้องเปลี่ยน ความเข้าใจเรื่องนี้ใหม่แล้ว
    ต้องทดลองให้สุดซอย กลับมาที่ โปรเจ็ค Animated Displacement

    เปลี่ยนโมเดลพื้นที่ใช้แอนิเมทรอยเท้า จากระนาบที่มี 3,154 Patches ลงมาเหลือเพียง 8 Patches แล้วปะ หรือ Stamps ด้วยรูปเดิม, ค่าเดิม, และตำแหน่งเดิม โดยใช้คำสั่ง Recall view / Position

   ลอง ใช้เครื่องมือ Render Mode ลากล้อมกรอบ เพื่อ Render ดูบางส่วน

    เห็นอย่างชัดเจนว่า บนพื้นระนาบที่มี 8 Patches รอยที่เกิดขึ้นแต่ละรอยนั้น เหมือนกันบ้าง ไม่เหมือนกันบ้าง <ซึ่งอาจเป็นข้อดี เพราะมีความต้องการอย่างนั้นก็ได้>

    ส่วนรอยที่เกิดบนพื้นระนาบที่มี 3,154 Patches นั้นเหมือนกันทุกรอย

    คราวนี้ลอง Rendering คุณภาพ <HDTV-720 / 64 Passes> ที่ Frame: 03:21 (๑ เฟรม) ปรากฎว่า
  • บนพื้น 8 Patches ใช้เวลา 00:27:49
  • บนพื้น 3,154 Patches ใช้เวลา 00:24:41
   ในกรณีมีการ Stamps Displacement เป็นจำนวนหลายๆครั้ง (บนระนาบเดิม) ถ้าจำนวน Patches เพื่อทำ Displacement น้อยเกินไป ผลลัพธ์ที่ออกมา อาจไม่สมบูรณ์
    จากการทดลองผลลัพธ์ที่ออกมา มีความแตกต่างเมื่อ Displacement หลายๆครั้ง บนระนาบ 8 Patches กับบนระนาบ 3,154 Patches, บนระนาบที่มีความละเอียดสูง รอยที่เกิดจากการ Stamps แต่ละรอยจะปรากฏผลคงที่



ยังไม่ทำ Displacement บนระนาบมีจำนวน 1 Patches
   สรุปจากการทดลองนี้ว่า ถ้ามีการ stamps ด้วยค่าเดียวกัน (ใช้ภาพเดียวกัน/กำหนดค่าต่างๆเท่ากัน) ลงบน Patches ที่มีโครงข่าย Splines น้อยเกินไป ผลลัพธ์ของ Stamps แต่ละครั้งที่ Render ออกมา บางครั้งก็คงที่ บางครั้งก็แตกต่างไป

    ส่วนที่คิดเรื่องเวลาที่ใช้ Render จะลดลง เมื่อมีการลดจำนวน Patches ให้น้อยลง สำหรับกรณี Displacement  เวลาที่ใช้ Render กลับนานขึ้น

    การลดจำนวน Patches เพื่อทำ Displacement ไม่ช่วยลดเวลาในการ Render ลง

ทำ Displacement บนระนาบมีจำนวน 8 Patches

ทำ Displacement บนระนาบมีจำนวน 3,154 Patches

ทำ Displacement และ Normal Map
Part. 7
ทำคลื่นน้ำด้วย Animated Displacement Map
(my next update)




update: 15 October 2018 / ๑๕ ตุลาคม ๒๕๖๑
okbabb@bobby.in.th
LINE ID : by_tawan
Tel : 02 583 7637
[ อยู่ระหว่างทำการปรับปรุง ยังไม่รับทำงานครับผม ]
ขอบคุณครับ
thanks for your visiting

Rate : TV G2

(เตรียมความพร้อม : โครงงานการ์ตูน 3D แอนิเมชั่น สำหรับเด็ก บนฟรีทีวี " งานประณีตในงบประหยัด ")
Created with : Kompozer
EVO Hosting