φυβλαςのβλογ
บล็อกของ phyblas



ทำความเข้าใจเรื่องการสะท้อนใต้ผิว (subsurface) ของ standardSurface ใน arnold ใน maya
เขียนเมื่อ 2021/09/20 00:36
แก้ไขล่าสุด 2021/10/23 19:11

หลังจากที่ก่อนหน้านี้ได้เขียนถึงเรื่องสีพื้นฐาน, สีสเป็กคิวลาร์ และ แสงส่องผ่าน ไปแล้ว

ค่าในหมวดถัดไปที่จะพูดถึงคราวนี้ก็คือ subsurface (サブサーフェス) ซึ่งใช้จำลองวัตถุที่มีแสงทะลุผ่านเข้าไปสะท้อนที่ด้านใต้พื้นผิว

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

ลักษณะผิวแบบนั้นสามารถจำลองได้โดยปรับค่าในแผง subsurface ของวัสดุ standardSurface



ตัวเลือกปรับแต่งมีดังนี้

ชื่อแอตทริบิวต์ ชื่อที่แสดงในแผงปรับค่า ความหมาย ค่า
subsurface weight ウェイト น้ำหนักของสีสะท้อนใต้ผิว 0.0 ~ 1.0
subsurfaceColor color カラー สีสะท้อนใต้ผิว 0.0 ~ 1.0
0.0 ~ 1.0
0.0 ~ 1.0
subsurfaceRadius radius 半径 ความลึกที่แสงแต่ละสีจะส่องผ่านลงไปได้ 0.0 ~ 1.0
0.0 ~ 1.0
0.0 ~ 1.0
subsurfaceScale scale スケール สัดส่วนความลึกของการสะท้อนใต้ผิว ≥0.0
subsurfaceAnisotropy anisotropy 異方性 ความไม่สม่ำเสมอในทิศทางของการสะท้อนใต้ผิว -1.0 ~ 1.0

เมื่อยิ่งใช้ subsueface มากก็จะยิ่งเห็นภาพดูหยาบๆเหมือนมีคลื่นรบกวนเข้ามามาก ซึ่งอาจแก้ได้โดยปรับค่า sampling ของ sss ให้เป็นเลขเยอะหน่อย ไม่เช่นนั้นจะได้ภาพที่มืคลื่นรบกวนมาก แต่ต้องแลกกับการที่ใช้เวลาเรนเดอร์นานขึ้น




สำหรับตัวอย่างในคราวนี้จะขอใช้โมเดลยาฮางิ (矢矧やはぎ) (ที่มา https://3d.nicovideo.jp/works/td31750)

ต่อไปจะลองทดสอบการใช้ subsurface โดยลองปรับค่าต่างๆแล้วดูความเปลี่ยนแปลงที่เกิดขึ้น




ความเปลี่ยนแปลงไปตามค่าน้ำหนักของสีสะท้อนใต้ผิว

ปกติแล้วถ้าหากใช้สี subsurface จะใช้ในลักษณะเหมือนกับสี base ถ้ามีเท็กซ์เจอร์ก็จะใส่ลงไปที่ subsurface ด้วย

subsurface กับ base สามารถใช้ร่วมกันได้ ยิ่งตั้งค่าน้ำหนักของ subsurface ให้มากก็ยิ่งแสดงผลเป็น subsurface มาก ถ้าหากเป็น 1 ไป base ก็จะไม่มีผล สีจะขึ้นกับ subsurface ทั้งหมด

ลองตั้งสีเท็กซ์เจอร์ให้กับทั้ง base และ subsurface เหมือนกัน ให้น้ำหนัก base เป็น 1 ไว้ตลอด แล้วปรับ subsurface ตั้งแต่ 0 ไปจนถึง 1







ความเปลี่ยนแปลงไปตามค่ารัศมีของแต่ละสี

subsurfaceRadius เป็นค่าที่กำหนดว่าแต่ละสีจะลงเข้าไปในผิวได้ลึกแค่ไหนก่อนจะสะท้อนออกมา ค่าเป็นตัวเลข ๓ ตัวที่แสดงถึงค่าสีแดงเขียวน้ำเงิน เช่นเดียวกัในส่วนของ subsurfaceColor

โดยค่าตั้งต้นแล้ว subsurfaceRadius จะอยู่ที่ 1.0 นั่นคือทุกสีมีการเปลี่ยนแปลงไปเท่าๆกัน แต่หากปรับให้บางสีมีค่าน้อยลงไป จะทำให้สีนั้นผ่านทะลุเข้าไปน้อยลง ส่วนสะท้อนใต้ผิวก็จะมีผลของสีนั้นลดลง

ให้ค่าสีแดงของ subsurfaceRadius เป็น 1.0 คงที่ไว้ ในขณะที่สีเขียวและน้ำเงินลดลงเรื่อยๆจาก 1.0 แล้วลดลงเรื่อยๆจนเป็น 0.0


จะเห็นว่ายิ่งลด subsurfaceRadius ของสีเขียวและน้ำเงินลงก็จะยิ่งออกเป็นสีแดงชัดขึ้นมา




ความเปลี่ยนแปลงไปตามความสัดส่วน

subsurfaceScale คือสัดส่วนความลึกของแสงที่จะส่องลงไปใต้ผิว ถ้าหากค่ายิ่งมากก็หมายความว่าแสงจะส่องลงไปได้ลึก ทำให้ดูแล้วโปร่งแสงขึ้นมา

ลองปรับค่า subsurfaceScale ตั้งแต่ 1 เพิ่มไปทีละ 2 เท่าเรื่อยๆจนถึง 1024





ความเปลี่ยนแปลงไปตามความไม่สม่ำเสมอในทิศทาง

หากปรับค่า subsurfaceAnisotropy ก็จะทำให้เกิดการสะท้อนใต้ผิวแบบไม่สม่ำเสมอในทิศทาง

ค่าที่ใส่ได้คือตั้งแต่ -1.0 ไปจนถึง 1.0 ลองปรับค่าในช่วงนี้แล้วดูความเปลี่ยนแปลงที่เกิดขึ้นดู





รูปแบบวิธีการสะท้อนใต้พื้นผิว

นอกจากตัวเลือกปรับค่าต่างๆดังที่กล่าวมาแล้ว ยังมีส่วนสำคัญอีกอย่างที่ปรับแล้วมีผลอย่างมาก นั่นคือรูปแบบการสะท้อนผิว ซึ่งมีให้เลือก ๓ แบบคือ diffusion และ randomwalk,randomwalk v2 โดยค่าตั้งต้นจะเป็น randomwalk ในตัวอย่างที่ผ่านมาก็ไม่ได้ปรับอะไรตรงนี้ จึงเท่ากับใช้เป็น randomwalk มาตลอด ความแตกต่างของแต่ละแบบก็คือแบบจำลองที่ใช้ในการคำนวณสีที่แสดงออกมา

ลองให้ subsurfaceScale=5, subsurfaceAnisotropy=0 แล้วเปรียบเทียบผลที่ได้จากการเรนเดอร์ทั้ง ๓ แบบดู







-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> 3D >> maya

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文