Common Material Nodes
จากบทความที่แล้วเรื่องของ Material เราไปดูโหนดหรือฟังก์ชันที่มักถูกเรียกใช้จะอธิบายโหนดอื่นกันต่อเลย แต่สำหรับตัวอย่างที่ใช้ในอธิบายนั้นเป็นเพียงการแสดงให้เห็นการทำงานของโหนโดยพื้นฐานเท่านั้น ยังสามารถนำไปประยุกต์เองได้หลายวิธี
Material Types
ตอนนี้เรารู้ฟังก์ชันหรือโหนดพื้นฐานที่ใช้กับ Material กันไปบ้างแล้ว ทีนี้ไปดูความแตกต่างของแต่ละประเภท Material กันบ้าง ได้แก่ Material instances, Material functions, Material parameter collections และ Layered material
Material Instances
ใช้ในเปลี่ยนลักษณะของ Material ที่นอกเหนือฟังก์ชันที่ตั้งไว้ในตัวแม่แบบ ทำให้สามารถเปลี่ยนค่าต่างๆ ในแบบ Real time โดยไม่ต้องไปคอมไพล์ใหม่เลย ทั้งนี้ตัว Material instance นั้นยังถูกแบบออกเป็น 2 ประเภทอีกคือ Material Instance Constant และ Material Instance Dynamic ซึ่งจะมีเพียง Material Instance Constant เท่านั้นที่มี UI และสร้างไฟล์ที่หน้า content browser ได้ดังตัวอย่างภาพด้านบน
Material Instance User Interface
1. Toolbar มีเมนูต่างๆ ดังนี้
Save: เซฟไฟล์ Material
Find in CB: กดเพื่อค้นหาไฟล์นี้ในหน้า Content Browser
Params: โชว์ตัวแปรทั้งหมดที่มาจากตัวแม่แบบของ Material
Mobile Stats: ค่าของ Material สำหรับโทรศัพท์
2. Details หน้าต่างแสดงตัวแปรทั้งหมดที่มาจาก Material และค่าต่างๆ ของ Material Instance
3. Instance parents หน้าต่างที่ทำให้เห็น Instance ทั้งหมด และตัวแม่อบบของ Material
4. Viewport หน้าโชว์ตัวอย่างรูปร่างเหมือนกับที่หน้า Material editor
การตั้งค่า Parameter ของ Material Instance Constant
รูปภาพด้านบนคือวิธีการทำตัวแปร Parameter เพื่อใช้ใน Material Instance โดยกดคลิ๊กซ้ายที่โหนดแล้วกด Convert to Parameter จากนั้นที่หน้าต่าง Details จะมีให้กำหนดชื่อตัวแปร Parameter Name ซึ่งประเภทของตัวแปรมีอยู่ประมาณ 20 ประเภท โดยมีตัวแปรที่ใช้กันทั่วไป 3 ตัว คือ Scalar, Vector และ Texture
Material functions
ผู้ที่มีความรู้เรื่องการเขียนโปรแกรมหรือสร้างเกมกันมาบ้างจะเข้าใจการทำงานในเรื่องนี้ได้ไม่ยากว่าฟังก์ชันนั้นคืออะไร ฟังก์ชันคือส่วนของโปรแกรมที่ถูกเขียนขึ้นเพื่อทำหน้าที่เฉพาะของมัน ฟังก์ชันนั้นจะมีเป็นของตัวในภาษาเอง (UE ใช้ภาษา C++) และฟังก์ชันที่ผู้พัฒนา UE ได้สร้างเอาไว้ให้เราหยิบมาใช้งานอย่างเรื่องของ Common Material Nodes ที่เคยอธิบายไปจะมีการนำฟังก์ชันที่มีอยู่แล้วใน UE มาใช้สร้าง Material แต่คราวนี้เราสามารถสร้างฟังก์ชันที่ต้องการเพื่อเพิ่มปรับเปลี่ยนการทำงานของฟังก์ชันเองได้
ฟังก์ชันทั่วไปที่เราใช้กันจะมีอยู่ 2 แบบคือฟังชั่นที่ส่งข้อมูลออกไปอย่างเดียว และฟังก์ชันที่มีการนำข้อมูลเข้ามาก่อนค่อยนำผลลัพธ์ส่งออกไป หากเราต้องการนำข้อมูลเข้ามายัง Material function เราจะต้องใช้โหนดที่เรียกว่า FunctionInput และถ้าเราต้องการส่งค่าที่ประมวลในฟังก์ชันเสร็จแล้วออกไปยังข้างนอก เราจะใช้โหนดที่เรียกว่า FunctionOutput ซึ่งในตัวฟังก์ชันที่เราเพิ่งสร้างไฟล์ขึ้นมาจะมีโหนด Output สร้างเอาไว้ให้อยู่แล้ว
UI ของ Material function ก็มีหน้าตาแบบเดียวกันกับหน้า Material แต่ที่หน้าต่าง Details จะมีส่วนให้เราตั้งค่าเอาใส่รายละเอียดของฟังก์ชัน อย่างเช่น Description: ถ้าเราใส่ข้อความเอาไว้ในช่องนี้ เราจะมองเห็นข้อความเมื่อเรานำเมาส์ไปชี้ที่โหนดฟังก์ชันตอนเราเอาไปใช้ใน Material แล้ว Expose to Library: ถ้าติ๊กถูกเอาไว้ จะทำให้เรียกใช้ฟังก์ชันตัวนี้ได้ที่หน้า Material เมื่อเราคลิ๊กขวาในกราฟ Library Categories: คือรายการกลุ่มของฟังก์ชัน ซึ่งเบื้องต้นจะเซ็ตเอาไว้ให้แล้วที่กลุ่ม Misc แต่เราสามารถเปลี่ยนไปอยู่กลุ่มอื่นหรือจะสร้างกลุ่มใหม่ก็ได้
ตัวอย่าง Material functions
เราได้เข้าใจฟังก์ชันเบื้องต้นกันแล้ว ต่อไปจะมาแสดงตัวอย่างการสร้างฟังก์ชันและนำไปใช้ยัง Material เพื่อให้เข้าใจกันได้มากขึ้น โดยให้เราสร้างไฟล์ Material function ขึ้นมาตัวหนึ่งตั้งชื่อว่า NormalMapAdjuster แล้วสร้าง FunctionInput ขึ้นมา 2 ตัวคือ Texture และ Intensity เพื่อการข้อมูลเข้าประมวลผลในฟังก์ชัน
Layered Material
หากจะทำความเข้าใจกันแบบง่ายๆ เลย Layered Material ก็คือการตั้งค่าของ Material สำหรับใช้ใน Material ต่ออีกทีนั่นเอง โดยสร้างเอาไว้ในฟังก์ชันเพื่อให้ง่ายต่อการปรับเปลี่ยนหรือใช้งาน ซึ่งมีวิธีการสร้างดังต่อไปนี้
ต่อมาคือการนำฟังก์ชันนั้นมาใช้โดยไปที่ไฟล์ Material เลือกเปลี่ยนโหนดของ Material ให้สามารถใช้ Attribute ได้โดยการติ๊กถูกที่ช่อง Use Material Attributes ดังรูปภาพ จากนั้นก็เชื่อมต่อโหนดฟังก์ชันเข้าไป โดยประโยชน์การใช้ Layer นี้คือเราสามารถเปลี่ยนค่าต่างๆ ของ Material ผ่านทางฟังก์ชันได้ทันทีโดยไม่ต้องเข้ามาแก้ไขตัว Material จริงนั่นเอง