Voxel Displacement Renderer — การทำให้สุนทรียะแบบ 3D ย้อนยุคทันสมัยขึ้น
แรงบันดาลใจด้านสุนทรียะ
- เกม 3D ช่วงต้นถึงกลางยุค 90 (Doom, Quake, Duke Nukem) มีอิทธิพลอย่างมากทั้งด้านเทคโนโลยีและเกมเพลย์
- ในช่วงหลัง ข้อจำกัดด้านภาพของเกมเหล่านี้กลับกลายเป็นเสน่ห์แบบย้อนยุค
- เรขาคณิตของฉากนั้นเรียบง่ายแต่เปี่ยมด้วยจินตนาการ และเท็กซ์เจอร์ก็มีขอบพิกเซลที่คมชัด
- สไตล์นี้คล้ายกับการย่อเชิงนามธรรมแบบมีสไตล์ของ pixel art แบบ 2D
- จึงได้รับความนิยมในเกมสมัยใหม่ที่ได้แรงบันดาลใจจากความย้อนยุคและเกมอินดี้ 3D
วิธีการทำงานของ voxel แบบทั่วไป
- voxel mesh คือกริดสามมิติที่ประกอบด้วยเซลล์ทรงลูกบาศก์ซึ่งอาจถูกเติมเต็มหรือเว้นว่าง
- voxel ขนาดใหญ่จะมีเท็กซ์เจอร์ ส่วน voxel ขนาดเล็กจะเป็นสีล้วน
- เพื่อสร้างฉากขนาดใหญ่ สามารถวางเรขาคณิตทั้งหมดไว้ในกริดที่ใช้ร่วมกัน หรือวาง voxel mesh อิสระหลายชิ้นไว้ในพื้นที่เดียวกันก็ได้
- เมื่อตัดสินใจสร้างโลกของเกมด้วย voxel ก็จำเป็นต้องสร้างเรขาคณิตแบบ voxel และให้ทั้งระบบเรนเดอร์รวมถึงตรรกะเกมเพลย์ทำงานในระดับ voxel
- การเพิ่มหรือลบเรขาคณิตใน voxel mesh ทำได้ง่าย
วิธีการทำงานของ displacement แบบทั่วไป
- displacement mapping กำหนดว่าพิกเซลแต่ละจุดในเท็กซ์เจอร์ควรยื่นเข้าไปหรือยื่นออกมาจากผิวของ mesh มากน้อยเพียงใด
- ซอฟต์แวร์ทำโมเดล 3D สามารถแบ่งย่อย mesh และทำให้จุดยอดใหม่เกิด displacement เพื่อใช้ displacement mapping ได้
- ในกราฟิกแบบเรียลไทม์ มักใช้ร่วมกับเอฟเฟกต์ surface shading เพื่อสร้างรายละเอียดเชิงเรขาคณิตที่ละเอียด โดยไม่ต้องเปลี่ยนรูปทรงทางกายภาพของ mesh
- shell mapping ช่วยให้มองเห็น displacement ตาม silhouette ของวัตถุได้
สิ่งที่ฉันสร้าง — การผสม voxel กับ displacement mapping
- ใช้ mesh low-poly แบบดั้งเดิมเพื่อสร้างฉากของเกม 3D คลาสสิก แล้วใช้ displacement map เพื่อกำหนดรายละเอียดพื้นผิวในระดับ voxel
- ใช้ triangle mesh และข้อมูล displacement map ที่มีอยู่อย่างจำกัด เพื่อแปลงเป็นข้อมูลเรขาคณิตที่ renderer จะโหลดเข้าสู่ GPU
- ทำ pre-process เท็กซ์เจอร์เพื่อสร้างข้อมูลที่จำเป็นระหว่างการเรนเดอร์
- ใช้สถานะของ mesh และเท็กซ์เจอร์เพื่อเรนเดอร์เรขาคณิตแบบ voxel displacement
การสร้างอาร์ตแอสเซตและฉาก
- ต้องสร้างแอสเซต 2 ประเภท คือเท็กซ์เจอร์และ mesh
- เท็กซ์เจอร์แต่ละชิ้นประกอบด้วย albedo map และ displacement map
- mesh เป็น triangle mesh แบบ low-poly ที่มีการทำ texture mapping ตามปกติ
- มีข้อจำกัดบางอย่างต่อโครงสร้างของ mesh และการแมปเท็กซ์เจอร์
ข้อดีของแนวทางนี้
- สามารถสร้างคอนเทนต์ได้ด้วยเวิร์กโฟลว์ที่คุ้นเคย
- เนื่องจากสร้างฉากด้วย triangle mesh จึงไม่จำเป็นต้องเขียน physics engine หรือ character controller ขึ้นใหม่
- ระบบเกมเพลย์ส่วนใหญ่ไม่จำเป็นต้องสนใจรายละเอียดระดับ voxel
แผนต่อจากนี้
- ยังมีฟีเจอร์อีกมากที่สามารถเพิ่มหรือปรับปรุงในตัว renderer เองได้
- กำลังศึกษาวิธีรวมวัตถุขนาดเล็กหรือวัตถุที่มีแอนิเมชันเข้ามา
- มีแผนจะปรับปรุงการทำ lighting
- คิดว่าการนำเทคนิคการเรนเดอร์นี้ไปผสานเข้ากับเกมเป็นเส้นทางที่เป็นไปได้จริง
ความเห็นของ GN⁺
- ความท้าทายทางเทคนิค: การรวม voxel กับ displacement mapping เป็นงานที่ยากมาก และต้องอาศัยงานระบบเฉพาะทางจำนวนมาก
- การใช้งานจริง: เทคโนโลยีนี้มีแนวโน้มสูงที่จะผสานเข้ากับ game engine ที่มีอยู่แล้วได้ ทำให้นักพัฒนายังใช้ระบบเดิมต่อได้
- เสน่ห์ด้านสุนทรียะ: การตีความสุนทรียะของเกม 3D ย้อนยุคใหม่ในแบบสมัยใหม่อาจดึงดูดเกมเมอร์จำนวนมาก
- ข้อพิจารณาด้านประสิทธิภาพ: เทคโนโลยีการเรนเดอร์นี้ยังต้องการการปรับแต่งประสิทธิภาพ โดยเฉพาะอย่างยิ่งสำหรับการเรนเดอร์แบบเรียลไทม์
- ศักยภาพในอนาคต: เทคโนโลยีนี้อาจนำไปใช้ได้กับเกมหลากหลายแนว และน่าจะมีประโยชน์อย่างยิ่งสำหรับนักพัฒนาเกมอินดี้
ยังไม่มีความคิดเห็น