Voxel Displacement Renderer – ปรับสุนทรียะ 3D ย้อนยุคให้ทันสมัย
(blog.danielschroeder.me)- Daniel Schroeder กำลังพัฒนาเรนเดอร์แบบเรียลไทม์ที่ขยายสัมผัสของพื้นผิวแบบพิกเซลในเกม 3D ยุค 90 ด้วย รายละเอียดพื้นผิว voxel ขนาดเล็ก โดย asset อินพุตใช้ mesh สามเหลี่ยม low-poly และ texture ที่คุ้นเคย
- แทนที่จะสร้างทั้งฉากเป็น voxel grid ใช้ displacement map ทำให้เฉพาะพื้นผิวดูเหมือน voxel เพื่อมุ่งสู่สไตล์ภาพที่เหมาะกับสภาพแวดล้อมแบบคงที่สไตล์ Doom, Quake, Duke Nukem
- CPU แปลง mesh สามเหลี่ยมและข้อมูล displacement ที่จำกัดให้เป็นข้อมูล geometry สำหรับ GPU และ preprocess texture ส่วนการ render frame นั้น GPU จัดการแทบจะเป็นอิสระ
- เดโมแสดง frame time 4–9ms ที่ 1440p บน Radeon RX 5700 XT และบน Steam Deck OLED ที่ 800p ทำได้เกิน 60FPS และหลายช่วง ล็อกที่ 90FPS
- เนื่องจากยังจัดการสภาพแวดล้อมเป็น mesh สามเหลี่ยมได้ การชน, character controller และ pathfinding จึงแก้ด้วยไลบรารีฟิสิกส์เดิมและการประมวลผลแบบอิง mesh ได้ โดยมีเพียงบางระบบที่จำเป็นต้องรับรู้รูปร่างรายละเอียดแบบ voxel
ขยายสุนทรียะ 3D ยุค 90 ด้วยพื้นผิว voxel
- เป้าหมายคือคง geometry ของสภาพแวดล้อมที่เรียบง่ายและขอบ texture ที่คมชัดแบบเกม 3D คลาสสิกยุค 90 ไว้ พร้อมเพิ่ม รายละเอียด 3D แบบบล็อก บนพื้นผิว
- เกม 3D ช่วงต้นถึงกลางยุค 90 อย่าง Doom, Quake, Duke Nukem ส่งอิทธิพลอย่างมากทั้งด้านเทคโนโลยีและ gameplay และช่วงหลังนี้ข้อจำกัดด้านภาพในยุคนั้นเองก็ถูกมองเป็นเสน่ห์แบบ retro
- จุดเริ่มต้นคือคำถามว่า “ถ้าสร้างรายละเอียดพื้นผิวด้วย voxel แทน pixel จะเป็นอย่างไร”
- เช่น กำแพงหินกรวดสามารถยังคงความรู้สึกแบบ pixelated เมื่อมองใกล้ ๆ แต่มีความลึกเชิงเรขาคณิตได้
- ผลลัพธ์ถูกออกแบบให้อยู่ระหว่างรูปลักษณ์ของเกมยุค 90 กับการแสดงผลที่ทันสมัยกว่า
ข้อจำกัดของแนวทาง voxel ทั่วไป
- Voxel mesh ทั่วไปคือกริดสามมิติที่บอกว่าเซลล์รูปทรงลูกบาศก์แต่ละเซลล์ถูกเติมหรือว่างอยู่
- สามารถใส่ texture ให้ voxel ขนาดใหญ่ได้เหมือน Minecraft
- หรือใช้ voxel ขนาดเล็กสีเดียวแบบ Teardown ก็ได้
- หากจะสร้างสภาพแวดล้อมแบบ voxel ต้องวาง geometry ทั้งหมดลงในกริดร่วมกัน หรือวาง voxel mesh อิสระหลายชุดในพื้นที่เดียวกัน
- มีเครื่องมือสำหรับสร้าง voxel geometry โดยตรง แต่กระบวนการสร้างมักใช้เวลานานและมักจำกัดอยู่กับการสร้าง mesh ขนาดเล็ก
- สามารถสร้าง building block อย่างผนังหรือพื้นแบบ tile เพื่อนำมาประกอบเป็นโครงสร้างขนาดใหญ่ได้ แต่เหมาะกับอาคารที่จัดแนวตามกริด และไม่ค่อยเหมาะกับภูมิประเทศอิสระ
- Procedural generation มีประโยชน์กับสภาพแวดล้อมธรรมชาติและการผสม building block แต่ก็มีความยากของตัวเอง และเหมาะกับเกมบางประเภทเท่านั้น
- อาจ rasterize mesh สามเหลี่ยมเดิมให้เป็น voxel grid ได้ แต่ geometry ที่ได้จะอยู่ใน voxel grid เดียว ทำให้อาจเกิดผลลัพธ์ด้านสุนทรียะที่ไม่ต้องการ
- พื้นผิวที่ align ตามแกนอาจดูเหมือนแผ่น voxel แบน ๆ ส่วนพื้นผิว 45 องศาอาจดูเหมือนขั้นบันได
- เมื่อการแทนฉากอย่างเป็นทางการกลายเป็น voxel ไม่ใช่แค่การเรนเดอร์ แต่ game logic อย่างฟิสิกส์, character controller, pathfinding ของ NPC ก็อาจต้องทำงานใน ระดับ voxel ด้วย
- แต่ก็มีข้อดีตรงที่เพิ่มหรือลบ geometry ใน voxel mesh ได้ง่ายเหมือน Minecraft และ Teardown
ข้อจำกัดของแนวทาง displacement ทั่วไป
- Displacement mapping ใช้ displacement map ร่วมกับ texture เพื่อกำหนดว่า pixel แต่ละจุดของ texture จะขยับจากพื้นผิว mesh เข้าไปด้านในหรือออกมาด้านนอกมากเท่าไร
- ซอฟต์แวร์โมเดล 3D สามารถ subdivide mesh แล้วขยับ vertex ใหม่เพื่อทำให้ displacement กลายเป็น geometry จริงได้
- วิธีนี้ส่งผลต่อ silhouette ของวัตถุด้วย
- จำนวน polygon ของ mesh ผลลัพธ์เพิ่มขึ้นมาก
- mesh อินพุตที่มีขอบหรือมุมแข็งต้องปรับแก้เพื่อให้ได้ผลลัพธ์ที่ดี
- ในกราฟิกเรียลไทม์ สามารถใช้เอฟเฟกต์ surface shading อย่าง parallax occlusion mapping เพื่อทำให้ดูเหมือนมี geometry ละเอียดโดยไม่เปลี่ยนรูปทรงจริง
- อาจดูดีบนพื้นและกำแพงขนาดใหญ่
- แต่ที่ขอบวัตถุ geometry ยังแบนอยู่ ทำให้ภาพลวงตาแตก
- shell mapping เป็นแนวทางกึ่งกลางที่ทำให้เห็น displacement ที่ silhouette ของวัตถุได้โดยไม่ต้องใช้ mesh ที่ subdivide อย่างละเอียด
- จัดการยากในบริเวณที่ mesh อินพุตมีความโค้งสูง
- และไม่ง่ายที่จะปรับ mesh อินพุตที่มีขอบหรือมุมแข็งให้เข้ากับเทคนิคนี้
วิธี implementation: ผสาน voxel กับ displacement mapping
- Renderer นี้สร้างสภาพแวดล้อมแบบเกม 3D คลาสสิกด้วย mesh สามเหลี่ยม low-poly ใช้ displacement map กำหนดรายละเอียดพื้นผิวระดับ voxel แล้ว render ให้ดูเหมือนประกอบขึ้นจาก voxel จริง
- เนื่องจากมุ่งเป้าไปที่สภาพแวดล้อมที่มี edge คมจำนวนมาก เช่น มุมอาคาร จึงต้องการผลลัพธ์แบบ voxel แม้ในบริเวณที่ displacement mapping ทั่วไปจัดการได้ยาก
- implementation ปัจจุบันเป็นโปรเจกต์ C++ / Vulkan แบบ standalone
- โครงสร้างพื้นฐานทำงานหลักสามอย่าง
- รับ mesh สามเหลี่ยมและข้อมูล displacement map ที่จำกัด แล้วแปลงเป็นข้อมูล geometry ที่ GPU จะใช้เมื่อวาด mesh ที่ถูกแปลงรูป
- กระบวนการนี้รันบน CPU ก่อนการ render frame
- ในเกมที่วางจำหน่ายจริง สามารถ bake ผลลัพธ์ลงดิสก์ได้
- การแปลงสภาพแวดล้อมเดโมทั้งหมดในวิดีโอใช้เวลา 0.5 วินาทีบน single thread
- Preprocess texture เพื่อสร้างข้อมูลอย่าง normal map ที่จำเป็นระหว่างการ render
- งานนี้โดยตัวมันเองค่อนข้างพื้นฐาน แต่ช้า จึงเหมาะกับการ bake
- ใช้ mesh และสถานะ texture ที่สร้างขึ้นเพื่อวาด voxel displacement geometry บน GPU
- CPU แทบไม่ต้องเข้ามายุ่งต่อ frame
- รับ mesh สามเหลี่ยมและข้อมูล displacement map ที่จำกัด แล้วแปลงเป็นข้อมูล geometry ที่ GPU จะใช้เมื่อวาด mesh ที่ถูกแปลงรูป
- ประสิทธิภาพอยู่ในระดับใช้งานจริงได้แล้ว
- บน Radeon RX 5700 XT ลำดับเดโม render ที่ 1440p ด้วย frame time 4–9ms
- เทียบเท่ากับ 250–110FPS
- ที่ native 800p บน Steam Deck OLED รักษาได้มากกว่า 60FPS และหลายช่วงล็อกที่ 90FPS
วิธีสร้าง art asset
- การสร้างเนื้อหาต้องใช้ asset สองประเภทคือ texture และ mesh
- texture แต่ละชุดประกอบด้วย albedo map และ displacement map
- albedo จะช่วยทำให้สไตล์ภาพดูน่าเชื่อถือ หากเลียนแบบ palette ที่จำกัดของเกม retro
- displacement map ให้ค่าความสูงละเอียด และ renderer สามารถปรับ scale เพื่อเปลี่ยนความแรงได้
- หลังปรับ scale แล้ว หน่วยความสูงคือจำนวน voxel ที่พื้นผิวจะขยับเข้าไปด้านในหรือออกมาด้านนอก
- Renderer จะ displace เฉพาะเป็นหน่วย voxel จำนวนเต็มที่ใกล้ที่สุด แต่ค่าความสูงที่แม่นยำใช้ในการคำนวณ normal map
- รายละเอียดที่ต่ำกว่า voxel หนึ่งก้อนก็ยังส่งผลต่อแสงได้
- Mesh เป็น mesh สามเหลี่ยม low-poly แบบใส่ texture mapping ทั่วไปพร้อม shading normal
- normal บอกว่าส่วนใดเป็นพื้นผิวโค้งเรียบ และ edge ใดเป็น edge คม
- Renderer ทำงานเพิ่มเติมเพื่อให้ได้ผลลัพธ์ที่ดีบริเวณ edge คม
- เพื่อสไตล์ภาพ จะพยายามรักษาขนาด voxel ให้คงที่ในการทำ texture mapping แต่ไม่ใช่ข้อบังคับ
- มีข้อจำกัดในโครงสร้าง mesh และ texture mapping
- ข้อจำกัดบางอย่างอาจถูกนำออกได้ในอนาคต
- ข้อจำกัดบางอย่างหลีกเลี่ยงไม่ได้เพราะวิธีการทำงานของ renderer
- Asset ไม่ใช่ representation แบบ voxel โดยเฉพาะ แต่เป็น mesh สามเหลี่ยม จึงสร้างได้ด้วยเครื่องมือหลายชนิด
- สภาพแวดล้อมเดโมถูกโมเดลด้วย Blender
- รูปแบบที่ export จาก Blender สำหรับเดโมในปัจจุบันคือไฟล์ OBJ
ข้อดีและขอบเขตการใช้งานในการสร้างเกม
- แนวทางนี้ทำให้สร้างเนื้อหาด้วย workflow ที่คุ้นเคย แทนเครื่องมือแก้ไข voxel เฉพาะทาง
- การสร้าง texture ที่ดีอาจยาก แต่เมื่อสร้างแล้วก็นำกลับมาใช้กับ geometry หลายแบบได้ง่าย
- geometry จำนวนมากในเดโมวิดีโอใช้ texture บล็อกหินสีเดียวกันสามสี
- เนื่องจากสภาพแวดล้อมถูกสร้างเป็น mesh สามเหลี่ยม และคุณลักษณะ voxel เป็นการตกแต่งพื้นผิว จึงสามารถมองสภาพแวดล้อมเป็น polygon geometry ได้เมื่อสะดวก
- แอปเดโมรองรับการเคลื่อนที่มุมมองบุคคลที่หนึ่ง, การชน, การขึ้นบันได และการชนกำแพง
- ไม่ได้เขียน physics engine หรือ character controller เอง
- ผสานโอเพนซอร์ส Jolt Physics
- ใช้ mesh สามเหลี่ยมเดิมเป็น collision geometry
- การเคลื่อนที่และ pathfinding ของศัตรูก็แก้ได้บนฐาน mesh เดียวกัน
- มีเพียงบาง gameplay system ที่ต้องรับรู้ voxel
- เช่น ใน first-person shooter สามารถ implement ฟังก์ชัน displacement-aware raycast เพื่อให้กระสุนตามรูปร่างที่แม่นยำของ geometry ที่ถูก displace
- เกม voxel จำนวนมากต้องสร้างหลายระบบของเกมแบบ custom จึงมักใช้ engine ของตัวเอง แต่แนวทางนี้ทำให้ logic ส่วนใหญ่ที่นอกเหนือจาก rendering ไม่จำเป็นต้องรู้รายละเอียดระดับ voxel
- เส้นทางที่สมจริงที่สุดคือการผสานเทคนิค rendering นี้เข้ากับ engine ที่มีอยู่
งานที่เหลือและขั้นถัดไป
- implementation ปัจจุบันเหมาะกับการสร้าง level geometry แต่สภาพแวดล้อมในเกมยังต้องมีองค์ประกอบ dynamic เช่น object ขนาดเล็ก, ของตกแต่ง และศัตรู
- ในอนาคตมีแผนเพิ่มวิธีผสาน object ขนาดเล็กหรือ object ที่มี animation เข้ากับ art style นี้
- แสงในเดโมดูดีอยู่แล้ว แต่ implementation ปัจจุบันยังมีข้อจำกัด
- รองรับแสงได้เพียงจำนวนน้อย
- ไม่มีเงา, ambient occlusion หรือฟีเจอร์ขั้นสูงกว่า
- Renderer นี้มุ่งเป้าไปที่ สภาพแวดล้อมที่ส่วนใหญ่ค่อนข้างคงที่ แบบที่เกมส่วนใหญ่มี มากกว่า geometry ที่ dynamic มาก ๆ อย่างเกม voxel ทั่วไป
- ยังมีพื้นที่ให้จัดการแสงได้หลายรูปแบบ รวมถึงวิธี bake ตามความต้องการของแอปพลิเคชันเฉพาะ
- ปัจจุบันยังไม่มี anti-aliasing และเห็นได้ชัดโดยเฉพาะบนพื้นไกล ๆ
- แผนในอนาคตของโปรเจกต์และการพูดคุยสำหรับนักพัฒนา·สตูดิโอจะต่อในบทความที่สอง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
น่าจะเพราะผมแก่พอที่จะจำยุคที่ดาวน์โหลดเกมผ่านโมเด็ม 2400 baudได้ สุนทรียะแบบนี้เลยรู้สึกมีเสน่ห์มากจริงๆ
วิดีโอก็ยอดเยี่ยม และสำหรับผมมันปลุกบรรยากาศความรู้สึกบางอย่างขึ้นมาได้แรงมาก
ในช่วงที่หลังคาต่ำเกินไปถึงกับรู้สึกอึดอัดและคล้ายเป็นโรคกลัวที่แคบ ส่วนถ้ำพื้นหินกับทรายและถ้ำที่มีโขดหินนั้นสวยมากจนทำให้อยากเล่นเกมผจญภัยสไตล์ Myst หรือ LucasArtsที่สร้างด้วยเรนเดอเรอร์นี้
น่าจะเข้ากันได้ดีกับธีมอย่างการสำรวจถ้ำหรือการขุดค้นทางโบราณคดี
ถ้าจะขยายเอนจินทรายตกให้เป็น 3D ก็น่าจะใช้แนวทางอย่าง smooth particle hydrodynamics ได้เหมือนกัน
ในส่วนที่เพดานต่ำ บล็อกที่ห้อยลงมาจากหลังคาดูเหมือนฝืนกฎฟิสิกส์
https://web.archive.org/web/20240524065427/https://blog.dani...
https://www.youtube.com/watch?v=1xFEbXWstCM
มีอีกแนวทางหนึ่งคือ Deep Bump ซึ่งจัดการปัญหาเดียวกันด้วยวิธีที่ต่างออกไปโดยสิ้นเชิง
Deep Bump เป็นเครื่องมือแมชชีนเลิร์นนิงที่สร้าง normal map ที่ดูสมจริงจากภาพเท็กซ์เจอร์
มันเหมาะมากกับเท็กซ์เจอร์หินหรืออิฐแบบที่เรนเดอเรอร์ voxel displacement นี้ใช้ และกับเท็กซ์เจอร์ผ้าก็ยังพอมองเห็นรอยยับ กระเป๋า และปกเสื้อเพื่อสร้าง normal ที่สื่อความลึกได้
กับเปลือกไม้ก็พอใช้ได้ แต่กับพืชไม่ค่อยดีนัก ซึ่งน่าจะเป็นผลจากชุดข้อมูลฝึก
ถ้าจะทำเกมสาย Doom/Wolfenstein ให้ทันสมัย ก็มีเครื่องมือโอเพนซอร์สที่ใช้ได้อยู่แล้ว
[1] https://github.com/HugoTini/DeepBump
บทความนี้ใกล้เคียงกับการจัดการ displacement map ในรูปแบบ representation แบบ voxel ขนาดเล็กมากกว่า และเครื่องมืออย่าง Deep Bump ก็น่าจะใช้ช่วยสร้างทรัพยากรเท็กซ์เจอร์สำหรับระบบที่พูดถึงนี้ได้
เพราะมันไม่ได้เปลี่ยนเรขาคณิตจริง เปลี่ยนแค่ภาพลวงของแสงและมิติ ดังนั้นเมื่อมองจากขอบเมช displacement ก็ยังเป็นตัวเลือกคุณภาพสูงกว่านั่นเอง
แต่ DeepBump อาจใช้สกัด height map แบบหนึ่งมิติสำหรับ displacement แบบดั้งเดิมได้ นั่นคือแผนที่ที่มีแค่ความสูง ไม่ใช่ displacement เวกเตอร์ 3D เต็มรูปแบบ
มันเจ๋งดี แต่ก็สงสัยว่าแนวทางนี้จะเข้ากับโมเดล 3D แบบแอนิเมชันได้ดีแค่ไหน
ต่อให้ทำได้ดี อย่างมากก็คงออกมาคล้ายม็อด “Voxel Doom” ของ Doom
[1] https://media.moddb.com/cache/images/mods/1/55/54112/thumb_6...
[2] https://media.moddb.com/cache/images/mods/1/55/54112/thumb_6...
“เมื่ออธิบายบริบททั้งหมดนี้แล้ว ตอนนี้ผมอยากยกย่องม็อด Voxel Doom สำหรับ Doom คลาสสิก ผู้สร้างม็อดได้แทนที่มอนสเตอร์และสไปรต์อื่นๆ ในเกมด้วย voxel mesh เพื่อเพิ่มมิติความลึก ซึ่งเป็นงานที่น่าประทับใจมาก ต่อมาในช่วงปลายปี 2022 เขายังเริ่มทดลองใช้ parallax mapping เพื่อเพิ่มรายละเอียดแบบ voxel ให้กับเรขาคณิตของด่าน ส่วนตัวผมคิดว่าส่วนนั้นออกมาไม่ค่อยดีนัก ไม่ใช่เพราะงานศิลป์ของผู้สร้าง แต่เป็นเพราะข้อจำกัดพื้นฐานของ parallax mapping เวลานำมาเรนเดอร์ ม็อดนี้ไม่ใช่แรงบันดาลใจให้โปรเจกต์ของผม เพราะตอนนั้นผมทำอยู่แล้ว แต่การได้เห็นม็อดนี้ได้รับเสียงตอบรับที่ดีบนออนไลน์ก็ช่วยผลักดันให้ผมทำงานต่ออย่างมาก ↩”
ตัวแนวทางเองบอกว่าน่าจะรองรับของอย่างประตูแบบแอนิเมชันด้วย ดังนั้นถ้าผสมเมชกับ texture flipbook ก็น่าจะใช้กับมอนสเตอร์ที่ยังคงหน้าตาแบบ Doom ดั้งเดิมได้เหมือนกัน
แต่บริเวณที่มีความโค้งหักมุมแรงๆ น่าจะเป็นจุดที่ shell mapping เกิด artifact หนักที่สุด และในบทความก็พูดถึงข้อจำกัดของการแปลงด่านเป็นเมชไว้ด้วย เลยอาจไม่ใช่ก็ได้
ดูคล้ายกับสิ่งที่ Notch กำลังทำอยู่พอสมควร ถ้าไปดูฟีด Twitter ของเขาจะเห็นว่าเขากำลังทำ voxel rendering อีกแบบหนึ่ง
แต่ของนี้ใช้C++/Vulkan และดูยอดเยี่ยมจริงๆ
สงสัยว่าแนวทางนี้เทียบกับUnreal Engine 5 Naniteแล้วเป็นอย่างไร บางที Unreal Engine เองก็อาจกำลังทำอะไรคล้ายๆ กันอยู่ก็ได้
จำได้ว่าแรงจูงใจอย่างหนึ่งของการใช้ voxel ในเกมเก่าๆ เช่น Comanche[1] คือมันช่วยให้ได้ภูมิประเทศที่ซับซ้อนและดูดี โดยมีต้นทุนต่ำกว่าการโมเดลด้วย triangle mesh บนฮาร์ดแวร์ระดับใกล้เคียงกัน
ผู้เขียนพูดถึง 110FPS บน RX 5700 XT แต่ก็ยังไม่แน่ใจว่าถ้าเทียบกับแนวทางอื่นแล้วถือว่าอยู่ระดับไหน
[1] https://en.wikipedia.org/wiki/Comanche_(video_game_series)
Nanite ตั้งต้นจากการสร้างวัตถุหลายโพลิกอน และสตรีม chunk ที่ถูกทำให้เรียบง่ายลงเพื่อไม่ให้สามเหลี่ยมที่เรนเดอร์มีขนาดเล็กกว่าพิกเซล
เพราะมันสามารถทำเรขาคณิตให้ละเอียดมากได้อย่างเป็นธรรมชาติ displacement map จึงค่อนข้างซ้ำซ้อน และไม่มีเหตุผลมากนักที่จะต้องบีบไปไว้ใน texture map
แน่นอนว่าภูมิประเทศเป็นอีกกรณีหนึ่ง แต่ก็เป็นเคสเฉพาะ
วิธีในบทความนี้ดูเหมือนจะใช้ displacement กับเมชโพลิกอนต่ำเพื่อสร้างเรขาคณิตที่มีโพลิกอนสูงแต่ถูก “ทำให้เป็น voxel” ตอนโหลด
ถ้าจำไม่ผิด Comanche ใช้วิธีการแบบ ray tracing สำหรับการเรนเดอร์ภูมิประเทศ[1]
ไม่ใช่ว็อกเซลจริง ๆ แต่เป็น 2D height map ที่ถูกสุ่มตัวอย่าง
มันใช้ชื่อว่า “VoxelSpace” เลยทำให้สับสนได้
[1] https://github.com/s-macke/VoxelSpace
ตรงข้ามกับความเชื่อที่พบได้บ่อย เกมเหล่านั้นไม่ได้ใช้ 3D voxel จริง ๆ แต่เรนเดอร์ height map ที่เก็บค่าสีและความสูงไว้ในเท็กซ์เจอร์ภูมิประเทศด้วยการทำ ray marching
ถ้าทำ ray marching ไปยังเท็กซ์เจอร์ในเชดเดอร์ ก็สามารถสร้างหน้าตาแบบเดียวกันขึ้นมาได้ และน่าจะดูใกล้เคียงมากกับผลลัพธ์ที่บทความบล็อกนี้ทำได้
ส่วนนั้น Nanite เป็นเทคโนโลยีเรนเดอร์แบบ GPU-driven ที่ปรับความหนาแน่นของสามเหลี่ยมให้ตรงกับคุณภาพเป้าหมาย
Nanite ก็ใช้ displacement map และ tessellation ได้เหมือนกัน แต่จะใช้เส้นทางแยกต่างหากซึ่งไม่ได้มีประสิทธิภาพมากกว่าการใส่แอสเซ็ตหลายเหลี่ยมสูงเข้าไปเรนเดอร์ตรง ๆ เสมอไป
การได้เห็นวิธีใหม่ ๆ ในวงการว็อกเซลเป็นเรื่องที่ดีเสมอ
แต่ก็เสียดายนิดหน่อยที่บทความนี้พูดปนกันระหว่าง ว็อกเซลกับเทคนิคการเรนเดอร์บางแบบ
ว็อกเซลก็แค่การใช้กริด 3D และจากช่วงกลาง ๆ ดูเหมือนผู้เขียนจะมองว่าการใช้ว็อกเซลเท่ากับการเรนเดอร์แบบลูกบาศก์ หรือสิ่งที่มักเรียกว่า บล็อกเซลเรนเดอเรอร์ สไตล์ Minecraft
เขายังบอกด้วยว่าสามารถเอาเรขาคณิตแบบสามเหลี่ยมมาใช้ในเอนจินได้โดยตรง แต่ดูเหมือนจะลืมไปว่าบล็อกเซลหรือจริง ๆ แล้วกระบวนการเรนเดอร์แทบทุกแบบก็ทำแบบเดียวกันได้
นี่เองจึงเป็นวิธีที่ปลั๊กอินเรนเดอร์ว็อกเซลทั่วไปซึ่งใช้สไตล์อื่น ๆ ได้รับการรองรับระดับเฟิร์สต์คลาสในเอนจินที่มีอยู่
อยากให้สิ่งนี้เป็นโอเพนซอร์สมาก หวังจริง ๆ ว่าจะเป็นแบบนั้น
ชอบมากจริง ๆ ทำให้นึกถึง Ultima Underworld
นี่แหละควรเป็นอนาคตของการทำเกม 3D ยุคเรโทรให้ทันสมัยขึ้น งดงามจริง ๆ