เบื้องต้นของเอนจิ้น: Material - Common Nodes & Types - Printable Version +- irpg Community (https://irpg.in.th) +-- Forum: irpg Other Game Engines School (https://irpg.in.th/forum-47.html) +--- Forum: Others (https://irpg.in.th/forum-48.html) +--- Thread: เบื้องต้นของเอนจิ้น: Material - Common Nodes & Types (/thread-3092.html) |
เบื้องต้นของเอนจิ้น: Material - Common Nodes & Types - dreamknight - 05-06-2017 ( ͡° ͜ʖ ͡°) บทความที่แล้ว: http://www.irpg.in.th/thread-3081.html Download Unreal Engine 4 Documentation: https://drive.google.com/open?id=0BwdnMj4684J7Z3FuYTJHeUhaU0U Common Material Nodes จากบทความที่แล้วเรื่องของ Material เราไปดูโหนดหรือฟังก์ชันที่มักถูกเรียกใช้จะอธิบายโหนดอื่นกันต่อเลย แต่สำหรับตัวอย่างที่ใช้ในอธิบายนั้นเป็นเพียงการแสดงให้เห็นการทำงานของโหนโดยพื้นฐานเท่านั้น ยังสามารถนำไปประยุกต์เองได้หลายวิธี Component Mask โหนดที่เอาไว้ใช้ดึงที่จะกำหนดเลือกแสดงผลค่า RGBA (Red, Green, Blue, Alpha) จากอินพุตอย่างเช่นโหนด Vector ไปยัง Material ได้ ถ้าต้องการแสดงผลแค่ค่าสีเขียวจาก RGBA เราสามารถใช้ Mask นี้ได้ และยังสามารถตั้งค่าให้ Mask กำหนดชื่อ Parameter (ตัวแปร) เพื่อใช้อ้างอิงในการกำหนด Mask ใหม่ได้ด้วย โดยจากรูปภาพด้านบนคือการใช้ Mask ที่ดึงค่า Alpha เชื่อมกับ Opacity และอีกตัวดึงค่า RGB ต่อกับ Base Color Linear interpolate (Lerp) โหนดสำหรับผสมสีระหว่างสองสีโดยการกำหนด Alpha ถ้ามีค่าเป็น 1 จะใช้สีที่จุด B(สีฟ้า) ถ้ามีค่าเป็น 0 จะใช้สีที่จุด A(สีแดง) แต่ถ้าค่าเป็น 0.5 จะได้สีที่ผสมระหว่างสีแดงกับสีฟ้าคือสีม่วงนั่นเอง Power สำหรับใช้เพิ่มระดับความเข้มของสี Constant ดังตัวอย่างที่เพิ่มความเข้มของสีแดงได้ Desaturation สามารถปรับพื้นสีที่เชื่อมต่ออยู่ (สีฟ้าตามรูปภาพด้านบน) ให้กลายเป็นเทา โดยกำหนดค่าได้ที่ช่อง Fraction Fresnel โหนดช่วยสร้างขอบแสงรอบวัตถุ ตามรูปภาพเราจะเห็นลูกทรงกลมสีแดงและตามขอบของทรงกลมเป็นสีฟ้า 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 เพื่อที่จะเปลี่ยนค่าของ Parameter ได้นั้นต้องติ๊กถูกที่อยู่ข้างหน้าของแต่ล่ะตัวแปรเสียก่อนดังรูปด้านบน 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 เพื่อการข้อมูลเข้าประมวลผลในฟังก์ชัน วิธีการสร้างนั้นจะต้องไปกดคลิ๊กขวาที่หน้ากราฟ แล้วพิมพ์หาด้วยคำว่า input จากนั้นกดเลือกที่ FunctionInput จากนั้นกำหนดรายละเอียดของโหนดดังรูปภาพข้างบน ให้เราสร้างโหนดให้เสร็จเรียบร้อยตามรูปภาพ เราจะมีส่วนของข้อมูลขาเข้าฟังก์ชันสองตัวคือ Texture และค่าตัวเลข Scalar จากกราฟจะเห็นว่าเป็นการเปิดปิดค่าของสีน้ำเงินให้แก่ Texture นั่นเอง โดยที่ค่าตัวแปรของ Intensity นั้นเราต้องการให้มีค่าอยู่ที่ระหว่าง 0 กับ 1 เท่านั้นด้วยใช้ Clamp หมายความว่าถ้าค่า Intensity เป็น 0 ค่าสีน้ำเงินใน Texture ยังแสดงผลอยู่ แต่ถ้าค่า Intensity เป็น 1 คือจะทำการปิดค่าสีน้ำเงินออกไปจาก Texture ต่อมาคือการนำฟังก์ชันที่เราสร้างมาใช้ใน Material โดยการคลิ๊กขวาในหน้ากราฟแล้วพิมพ์หาชื่อฟังก์ชันที่เราตั้งเอาไว้ (NormalMapAdjuster) เชื่อมต่อกับโหนดต่างๆ ดังรูปภาพด้านบน จะเห็นว่าที่ NormalIntensity ได้ตั้งค่าตัวแปรเอาไว้ที่ 1 ทำให้สีน้ำเงินของ Texture ถูกตัดออกไปเหลือแต่ค่าสีแดงและสีเขียว จึงทำให้ Texture กลายเป็นสีเหลืองนั่นเอง Layered Material หากจะทำความเข้าใจกันแบบง่ายๆ เลย Layered Material ก็คือการตั้งค่าของ Material สำหรับใช้ใน Material ต่ออีกทีนั่นเอง โดยสร้างเอาไว้ในฟังก์ชันเพื่อให้ง่ายต่อการปรับเปลี่ยนหรือใช้งาน ซึ่งมีวิธีการสร้างดังต่อไปนี้ 1. สร้างไฟล์ Material Function ขึ้นมาตั้งชื่อว่า MaterialLayerBlend 2. สร้าง MakeMaterialAttributes เชื่อมต่อกับโหนด Output 3. สร้างโหนด FunctionInput (Texture) และ Constant3Vector เชื่อมต่อกับ BaseColor 4. สร้างตัวแปรกำหนดค่า Constant เชื่อมกับ Metallic และ Roughness ตามรูปภาพด้านบน ต่อมาคือการนำฟังก์ชันนั้นมาใช้โดยไปที่ไฟล์ Material เลือกเปลี่ยนโหนดของ Material ให้สามารถใช้ Attribute ได้โดยการติ๊กถูกที่ช่อง Use Material Attributes ดังรูปภาพ จากนั้นก็เชื่อมต่อโหนดฟังก์ชันเข้าไป โดยประโยชน์การใช้ Layer นี้คือเราสามารถเปลี่ยนค่าต่างๆ ของ Material ผ่านทางฟังก์ชันได้ทันทีโดยไม่ต้องเข้ามาแก้ไขตัว Material จริงนั่นเอง ตอนนี้เราน่าเข้าใจการสร้างกราฟของ Unreal Engine กันบ้างแล้ว บทความหน้าจะไปเจาะลึกเรื่อง Blueprints หรือกราฟที่เราใช้สร้างโหนดกันครับ อ้างอิง https://th.wikipedia.org/wiki/ https://docs.unrealengine.com/ แล้วพบกันใหม่ตอนหน้าครับ |