[Introduction to Shading Language Part 4]
ภาพนึ้เป็นการใช้งาน Displacement ซึ่งเปลี่ยนตำแหน่ง P รวมกับ Bump ซึ่งเปลี่ยนเพียง N เท่านั้น มาดูกันครับ ว่าต้องเตรียมอะไรบ้าง { extensions pixar pxsl { template displacement xDisplacement { label xDisplacement description "Combining simple displacement and bump shader together." ribattribute float displacementbound { label "Displacement Bound" description "This number represents the maximum displacement in shaderspace that your surface will undergo. Be very careful with this parameter as it can dramatically influence rendering times. In particular, make SURE to set this to 0 (zero) if you aren't performing any displacement." default 0 range {0 100 .001} subtype vslider } parameter float DoDisplacement { label "Do Displacement" default 0 subtype switch } parameter float UseShadingNormals { label "Use Shading Normals" description "When a displacement map is used, this shader calls calculatenormal().This causes polygonal data to appear faceted. This parameter causes the original shading normal offset to be added to the calculated normal, generally re-smoothing polygonal data." default 0 subtype switch } parameter float Kb0 { description "A multiplier for the bump." subtype vslider range {0 100 .001} detail varying default .1 } parameter float Bump { detail mustvary default 0 } parameter float Kb1 { description "A multiplier for the displacement." subtype vslider range {0 100 .001} detail varying default .1 } parameter float Displacement { detail mustvary default 0 } RSLMain { output "normal Nf;" } } } } ลงไป PP รับหน้าที่เก็บตำแหน่งของ P เมื่อถูก เลื่อนสองครั้ง จาก Kb0 และ Kb1 จึงเป็นจุดที่ใช้คำนวญ normal vector สุดท้าย Q ทำหน้าที่เก็บตำแหน่งของ P เมื่อถูกเลื่อนไป ครั้งเดียว จากค่า Kb1 (Displacement) เป็นตัวเก็บตำแหน่งจริงของ P เสร็จเรองเขียน Shader ก็มาถึง Maya กันครับ
เป็น Model ที่สร้างด้วย Polygon และเปลี่ยนเป็น Subdiv Surfaces เนื่องจากเป็น Polygon จึงต้องมีการคลี่UV เป็นเรื่องปกติครับ ในที่นี้ผม จะขอข้ามวิธีคลี่ไปครับ
จะคลี่ใน Maya หรือ DeepUV ก็แล้วแต่สะดวกครับ ภาพด้านบนนี้คลี่จาก DeepUV ระบายสีใน DeepPaint3D และ import กลับมาที่Maya อีกทีเริ่มทำ Shader ใน Slim ครับ ครั้งแรกทดลองทำ Displacement โดยใช Simple Displacement ของ Slim ก่อน
ต่อ Shading Network ดังภาพ โดยใช Ensemble เป็นตัวรวม ลอง render ดูครับ
เป็นการ Bump แบบเรียบๆ เรื่องจากไม่ได้ติ๊ก Do Displacement ลองทำ Displecement ดูบ้าง
ค่า Displacement Bound คือค่าขอบเขตของการ Displace ถ้าค่านี้น้อยเกินไปพื้นผิวอาจแตกหรือ ปริออกมา ในทางกลับกันถ้าค่ามากเกินไป ก็จะทำให ้เสียเวลาในการ render นานมาก
อันนี้ผมต่อ Worley เข้ากับ Simple Displacement
ได้ออกมาแบบนี้ครับ เห็นได้ชัดเจนว่ามีการนูนของพื้นผิว โดยไม่ต้องเปลี่ยน model ปัญหาของ Simple Displacement คือไม่สามารถซ้อน Bump ลงไปได ้มาลอง Slim Template ที่เขียนขึ้นมากันดูครับ
xDisplacement สามารถต่อ ภาพเข้าไปได ้สองภาพเพื่อเป็น Displacenment Map และ Bump Map ตามลำดับ
ตั้งค่า Kb0 และ Kb1 ตามความเหมาะสมครับ
render ก็จะออกมาแบบภาพนี้ครับ การใช้งาน Displacement ให้มีประสทธิภาพได ้มีประโยชน์อย่างมากในการสร้างงานด้วย RenderMan เป็นความสามารถที่หาได้ยากใน renderer ตัวอื่น มีSoftware ที่ชื่อ ZBrush สามารถ Paint Displacement แบบ Real-Time ได ้น่าสนใจมากครับ เนื่องจากจะทำให้การสร้าง Displacement Map ง่าย |
|