φυβλαςのβλογ
บล็อกของ 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)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

บทความแต่ละเดือน

2024年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2023年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2022年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2021年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2020年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

ค้นบทความเก่ากว่านั้น

ไทย

日本語

中文