หลังจากที่ก่อนหน้านี้ได้เขียนถึงเรื่อง
สีพื้นฐาน,
สีสเป็กคิวลาร์ และ
แสงส่องผ่าน ไปแล้ว
ค่าในหมวดถัดไปที่จะพูดถึงคราวนี้ก็คือ
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 แล้วเปรียบเทียบผลที่ได้จากการเรนเดอร์ทั้ง ๓ แบบดู