irpg Community

Full Version: เบื้องต้นของเอนจิ้น: LOD, Collision, Materials
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
( ͡° ͜ʖ ͡°)
[Image: xpUGK14.png]


บทความที่แล้ว: http://irpg.in.th/thread-3071.html

Level of Detail (LOD)
เพื่อไม่ให้ตัวเกมประมวลผลหนักเกินไป เราต้องการที่จะให้วัตถุหรือ Mesh ที่ผู้เล่นสามารถมองเห็นได้ภายในฉากเกม มีรายละเอียดของวัตถุที่น้อยเมื่อ Mesh อยู่ห่างไกลจากตัวผู้เล่น แต่เมื่อเวลาผู้เล่นเข้าไปอยู่ใกล้วัตถุหรือ Mesh ดังกล่าว เราต้องการให้ผู้เล่นเห็น Mesh นั้นได้อย่างละเอียดชัดที่สุด ในโปรแกรม UE นั้น เราสามารถทำให้ Mesh ภายในฉากสลับเปลี่ยนความละเอียดน้อยเมื่อตัวผู้เล่นอยู่ห่างไกลออกมา และเปลี่ยนเป็นความละเอียดสูงได้เมื่อผู้เลนเข้ามาอยู่ใกล้ Mesh เราจะทำวิธีการนี้ได้จากการใช้ Level of Detail หรือ LOD นั่นเอง โดยต่อไปนี้จะแสดงเป็นตัวอย่างให้เข้าใจได้ง่ายกันครับ

[Image: YjIrbGT.jpg]


จากบทความที่แล้ว ที่ได้นำโมเดลบ้านเข้ามาในโปรเจคต์เกมของเราซึ่งมีรายละเอียดดังรูปภาพด้านบน เราจะเห็น LOD0 อยู่ทางด้านขวาหรือในหน้าต่าง Details มี Element ที่ใส่ Material เอาไว้อยู่ 2 ตัวคือผิวไม้กับผิวสีแดง LOD0 นั้นเป็น LOD หลักของ Mesh โดยต่อมาเราจะเพิ่ม LOD เข้าไปอีก 1 ตัว โดยไปที่หน้า Details > LOD Settings > LOD Import กดเลือก Import LOD Level 1

[Image: Km6sOX7.jpg]


แล้วก็จะได้ LOD1 มาดังภาพด้านบน เราจะเห็น Screen Size ของแต่ละ LOD นั้นมีค่าไม่เท่ากัน มันหมายความว่า LOD0 จะแสดงผลเมื่อ Mesh ดังกล่าวอยู่ในระยะการมองเห็นมากกว่า 50% และ LOD1 จะแสดงผลเมื่อ Mesh ดังกล่าวอยู่ในระยะการมองเห็นน้อยกว่า 50% ลงไป ตัวอย่างเช่นหาก Mesh มีอยู่ LOD อยู่ 3 ตัว โปรแกรมก็จะเฉลี่ยเปอร์เซ็นต์ให้ทั้ง 3 ตัวโดยอัตโนมัติ ที่นี้ผมได้ทำการเปลี่ยน Element 0 ของ LOD1 เป็นพื้นผิวสีฟ้าอ่อน เพื่อแสดงให้เห็นความแตกต่างของ Mesh เวลาแสดงผลได้ง่ายขึ้น

LOD ระยะใกล้

[Image: oivR5so.jpg]


LOD ระยะไกล

[Image: WxNSHIU.jpg]


จากรูปภาพทั้ง 2 ด้านบน จะเห็นว่าเมื่อเข้าไปอยู่ใกล้โมเดลบ้านแล้วจะเห็นเป็นผิวไม้ และภาพที่ 2 เมื่ออยู่ออกห่างจากโมเดลบ้านไปได้ระยะหนึ่งเราจะเป็นพื้นผิวกลายเป็นสีฟ้าทันที อย่างไรก็ตามถ้าเราไม่ต้องการให้โปรแกรมเฉลี่ยระยะของ Screen Size เอง เราสามารถกดติ๊กถูกที่ Auto Compute LOD Distances ออกไปแล้วไปแก้ไขเอาเองได้ที่ช่อง Screen Size ของแต่ละ LOD

หมายเหตุ: หากต้องการลบ LOD ออกจะต้องทำได้ด้วย UE ในเวอร์ชั่น 4.15 หรือสูงกว่าเท่านั้น และไม่สามารถลบที่เป็น LOD0 ออกได้



Collision
ในทุกวัตถุภายใน UE นั้นจะมีสิ่งที่เรียกว่า Collision อยู่รอบ Mesh เพื่อเอาไว้ควบคุมวัตถุนั้นๆ ให้มีฟิสิกส์อยู่ในตัว เช่น การสัมผัสกันระหว่างวัตถุ การชน การกระเด็น โดยโปรแกรมจะกำหนดทุก Mesh ให้มีการ Collision Enabled เอาไว้อยู่แล้ว ซึ่งต่อไปจะแสดงตัวอย่างโดยมี 2 วัตถุ ที่ใช้แสดง Collision กัน

[Image: QRwOLSi.jpg]


จากภาพคือวัตถุทรงกลมที่เป็นลูกบอลสีฟ้าและสี่เหลี่ยมที่เป็นเหมือนกำแพงโดยมี Object Type ที่แตกต่างกัน ถ้าเราต้องการให้ลูกบอลไปชนกับกำแพงได้ จะต้องตั้งค่า Collision Setup ให้เป็นให้ Block ที่หน้าต่าง Details ของ Mesh ทั้งสองฝ่ายตามรูปด้านล่าง


[Image: brant3r.jpg]

[Image: KGb1V7G.jpg]

จากภาพด้านบนเมื่อทดสอบรันโปรแกรมลูกบอลจะเข้าไปชนกับกำแพงได้โดยไม่ทะลุผ่านกำแพงออกไป
(เราสามารถสร้าง Event สำหรับการ Collision นี้ได้ถ้าเราทำวัตถุนี้เป็น Blueprint โดยการติ๊กถูกที่ช่อง Simulation Generates Hit Events)  


[Image: diRauj7.jpg]

ถ้าเราปรับ Collision Setup ให้เป็น Ignore จะทำให้ลูกบอลที่เข้าไปชนกำแพงทะลุผ่านออกไปยังอีกด้านหนึ่งเลย



Materials
UE นั้นสามารถนำ Material และ Texture เข้ามาใช้กับ Mesh ใดๆ ที่นำเข้ามาจากโปรแกรม Digital Content Creation อย่างเช่น 3ds Max ได้ดังที่เคยแสดงเป็นตัวอย่างเอาไว้ในบทความที่แล้ว (Importing Assets) หมายความว่า Material ใน UE คือสิ่งที่ใช้กำหนดตัวพิ้นผิวหน้าตาของ Mesh โดยการใส่รูปภาพ (Textures) ได้แก่ สี ความมันวาว ความขุรขระ และยังสามารถทำให้วัตถุเคลื่อนไหวโดยการจัดการกับ Vertices ซึ่งในหลักแล้วเราจะใช้ Material กันกับ Mesh เท่านั้น แต่อันที่จริงแล้วมันยังนำไปใช้กับ Decals, Post process และ Light functions อีกด้วย (จะยังไม่กล่าวถึงในบทความนี้)

วิธีการสร้าง Material
วิธีการสร้าง Material ใน UE นั้นก็ทำได้ง่ายมากเพียงแค่กดคลิ๊กขวาที่หน้า Content Browser กดเลือก Material แล้วตั้งชื่อให้มันแค่นี้เราก็ได้ไฟล์ Material มาแล้วครับ

[Image: ekOCEZe.jpg]


Material user interface
ตอนนี้เราพอจะรู้กันไปบ้างแล้วว่า Material คืออะไร ทีนี้เปิดเข้าไปดูข้างในไฟล์ Material กันว่ามี user interface อะไรกันบ้าง

[Image: CdSwKed.jpg]


1. Toolbar ตัวปุ่มต่างๆ ที่ใช้ช่วยดูตัว Material นี้ ได้แก่
Save – สำหรับบันทึกไฟล์เมื่อเราไปแก้ไขตัว Material
Find in CB – ใช้ค้นหาไฟล์ Material ที่เปิดอยู่นี้ว่าอยู่ที่ไหนใน Content Browser
Apply – ยืนยันการแก้ไข Material เพื่อให้แสดงผลลัพธ์การเปลี่ยนแปลง แต่ไฟล์จะยังไปถูกบันทึก
Search – สำหรับพิมพ์เพื่อค้นหาคำภายใน Material
Home – เมื่อกดแล้วโปรแกรมจะเลื่อนไปหาโหนดที่เป็นตัวหลักของ Material
Clean Up – จะทำการลบโหนดที่ไม่ถูกเชื่อมโยงกับโหนดหลักออกไป
Connectors – แสดงหรือซ่อนส่วนที่ไม่ได้เชื่อมโยง pin ของโหนดหลัก
Live Preview – โชว์การแสดงผลหน้าตาของ Material ให้เห็นแบบ real-time
Live Nodes – อัปเดตโหนดต่างๆ แบบ real-time
Live Update – มีการอัปเดต Shader สำหรับทุกโหนดใน Material
Stats – โชว์ข้อมูลของ Material ว่ามี Texture และ Shader เท่าไหร่ รวมถึงข้อมูลที่ Errors ด้วย
Mobile Stats – เหมือนกันกับ Stats แต่เอาไว้ใช้กับโทรศัพท์


2. Preview panel หน้าต่างเอาไว้โชว์หน้าตาตัวอย่างของ Material เมื่อเราทำการสร้างและเชื่อมต่อโหนดอื่นๆ เข้ากันกับโหนดหลัก หรือสามารถแสดงตัวอย่างของโหนดใดๆ ได้ด้วยการกดคลิ๊กขวาที่โหนดนั้นแล้วเลือก Start Previewing Node

[Image: QnF4GJ3.jpg]


หน้าต่างนี้สามารถควบคุมได้ดังนี้
Rotate – คลิ๊กซ้ายเพื่อลากดูตัวอย่าง
Pan – คลิ๊กปุ่มกลางเมาส์เพื่อขยับตัวอย่าง
Zoom – คลิ๊กขวาเพื่อใช้ย่อขยายขนาดของตัวอย่าง
Update Light – กดปุ่ม L ค้างแล้วคลิ๊กซ้ายลากเพื่อปรับแสงสว่างของตัวอย่าง

ที่มุมขวาล่างของหน้าต่างนั้นให้เราสามารถเปลี่ยนรูปทรงของตัวอย่างที่แสดงได้ ซึ่งจากภาพด้านบนจะให้รูปทรงพื้นฐานมี 4 แบบ คือรูปทรงกระบอก ทรงกลม ทรงสี่เหลี่ยมแบน และทรงสี่เหลี่ยม ส่วนที่เป็นรูปกาน้ำเอาไว้แสดงตัวอย่างด้วย Mesh ที่เราต้องการจะดู โดยให้ไปเลือก Mesh ที่หน้า Content Browser เอาไว้ก่อนแล้วค่อยกลับมากด


3. Details panel หน้าต่างสำหรับแสดงรายละเอียดต่างๆ ที่เราสามารถปรับแก้ไขได้ เมื่อเราเลือกโหนดที่อยู่ในกราฟ ถ้าไปยังไม่ได้กดเลือกโหนดใดๆ ทางโปรแกรมจะแสดงข้อมูลของโหนดหลักของ Material ขึ้นมาให้เห็นเอง ส่วนข้อมูลเพิ่มเติมที่เกี่ยวกับรายละเอียดต่างๆ นั้น ให้เข้าไปดูเอาในรายละเอียดของ Material ได้ที่ https://docs.unrealengine.com/latest/INT...index.html


4. Graph panel เรียกได้ว่าเป็นหน้าต่างหลักของที่นี้เลยก็ว่าได้ เราสามารถสร้างโหนดทั้งหมดได้ที่หน้านี้เพื่อกำหนดว่าจะให้ Material มีหน้าต่างออกมาเป็นอย่างไร โดยเริ่มต้นจากที่เราทำการสร้างไฟล์ Material ขึ้นมา ภายในหน้าต่างเราจะเห็นโหนดอยู่ตัวหนึ่งซึ่งเป็นโหนดหลักของมันนั่นเอง ซึ่งจะไม่สามารถลบโหนดตัวนี้ออกไปได้ ส่วนบาง inputs ที่สีตัวอักษรเป็นสีเทานั่นคือไม่สามารถใช้ได้ หากต้องการใช้ให้ลองเปลี่ยน Blend mode ที่หน้า Details panel ดูเอา


5. Palette panel หน้าต่างแสดงรายการทั้งหมดของกราฟโหนดและฟังก์ชั่นสำหรับ Material เราสามารถเลือกค้นหาแล้วกดลากใส่ลงในหน้ากราฟได้เลย



Common Material Nodes
ในการสร้าง Material ขึ้นมานั้นเราจำเป็นจะต้องเข้าใจฟังก์ชั่นต่างๆ ที่ใช้เข้ามาเชื่อมกับโหนดหลักของ Material ซึ่งจะขอเสนอโหนดหรือฟังก์ชั่นทั่วไปที่มักถูกใช้ในการสร้าง Material เป็นส่วนใหญ่

วิธีการสร้าง Nodes
ก่อนที่จะไปรู้เรื่องฟังก์ชั่นที่ใช้กันใน Material เรามีวิธีในการสร้างโหนดหรือฟังก์ชั่นเพิ่มเข้าไปในกราฟโหนดอยู่ดังต่อไปนี้
1. หาเอาจากหน้าต่าง Palette panel แล้วคลิ๊กลากลงไปในกราฟเลย
2. คลิ๊กขวาในพื้นที่ว่างของกราฟแล้วเลือกหาฟังก์ชั่นที่ต้องการ
3. คลิ๊กซ้ายที่ปุ่ม exec ของโหนดแล้วลากออกมาในพื้นที่ว่างของกราฟ ซึ่งจะเป็นการเชื่อมโหนดไปในตัวเลย


Texture sample

[Image: LBf82H6.jpg]

ฟังก์ชั่นกำหนด Texture ให้กับ Material โดยการเลือกไฟล์ Texture ที่อยู่ในโปรเจ็คต์ใส่ไปในโหนดนี้ได้ที่หน้าต่าง Details ดังรูปภาพด้านบน


Constant

[Image: zwzMvgQ.jpg]

ฟังก์ชั่นที่ใช้ในการกำหนดค่าความสว่างของ Texture โดยการใส่ตัวเลขเป็นเปอร์เซ็นต์ลงไปในช่อง Value ของโหนด (1 คือ 100%)


Multiply - โหนดที่ใช้สำหรับรวม 2 ฟังก์ชั่นให้ทำงานรวมกัน


Constant 3Vector

[Image: RnA0sDM.jpg]

ฟังก์ชั่นที่ใช้ในการเปลี่ยนสีของ Texture ใหม่โดยการกำหนดสีที่ต้องการได้ที่ช่อง Constant ของโหนด


Add

[Image: mHuqIxK.jpg]

ฟังก์ชั่นคณิตศาสตร์ เอาไว้ใช้บวกเพิ่มค่าต่างๆ ที่เป็นตัวเลขระหว่างฟังก์ชั่นทั้งสอง โดยจากตัวอย่างภาพด้านบนเป็นการรวมค่า Vector สีทั้ง 2 ตัวรวมกัน


Divide – ฟังก์ชั่นคณิตศาสตร์ สำหรับใช้หารค่าระหว่างสองค่า


Subtract – ฟังก์ชั่นคณิตศาสตร์ สำหรับใช้ลบค่าระหว่างสองค่า


ยังมีอีกหลายฟังก์ชั่นที่มักถูกเรียกใช้ในการสร้าง Material แต่ขอเอาไว้ต่อไปในบทความหน้านะครับ



อ้างอิง
https://th.wikipedia.org/wiki/
https://docs.unrealengine.com/


แล้วพบกันใหม่ตอนหน้าครับ Derp