1 คะแนน โดย GN⁺ 2024-05-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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
  • ประสิทธิภาพอยู่ในระดับใช้งานจริงได้แล้ว
    • บน 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 ความคิดเห็น

 
GN⁺ 2024-05-25
ความคิดเห็นจาก Hacker News
  • น่าจะเพราะผมแก่พอที่จะจำยุคที่ดาวน์โหลดเกมผ่านโมเด็ม 2400 baudได้ สุนทรียะแบบนี้เลยรู้สึกมีเสน่ห์มากจริงๆ
    วิดีโอก็ยอดเยี่ยม และสำหรับผมมันปลุกบรรยากาศความรู้สึกบางอย่างขึ้นมาได้แรงมาก
    ในช่วงที่หลังคาต่ำเกินไปถึงกับรู้สึกอึดอัดและคล้ายเป็นโรคกลัวที่แคบ ส่วนถ้ำพื้นหินกับทรายและถ้ำที่มีโขดหินนั้นสวยมากจนทำให้อยากเล่นเกมผจญภัยสไตล์ Myst หรือ LucasArtsที่สร้างด้วยเรนเดอเรอร์นี้
    น่าจะเข้ากันได้ดีกับธีมอย่างการสำรวจถ้ำหรือการขุดค้นทางโบราณคดี

    • เห็นด้วยเลย สำหรับผมมันให้อารมณ์แบบพิกเซลอาร์ต/เรโทรชัดกว่าความรู้สึก Doom/Wolfenstein แบบโพลิกอนต่ำเสียอีก
    • มันทำให้นึกภาพNoita แบบ 3Dขึ้นมาเลย
      ถ้าจะขยายเอนจินทรายตกให้เป็น 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

    • ถ้าอ่านบล็อกโพสต์ดีๆ มันคือโมเดลที่อนุมาน normal mapจากเท็กซ์เจอร์ ไม่ใช่วิธีใหม่ในการเรนเดอร์เรขาคณิต
      บทความนี้ใกล้เคียงกับการจัดการ displacement map ในรูปแบบ representation แบบ voxel ขนาดเล็กมากกว่า และเครื่องมืออย่าง Deep Bump ก็น่าจะใช้ช่วยสร้างทรัพยากรเท็กซ์เจอร์สำหรับระบบที่พูดถึงนี้ได้
    • อย่างที่บทความบอก normal map ไม่ได้ “ใช้ได้ผล” ในทุกสถานการณ์
      เพราะมันไม่ได้เปลี่ยนเรขาคณิตจริง เปลี่ยนแค่ภาพลวงของแสงและมิติ ดังนั้นเมื่อมองจากขอบเมช 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 อยู่ แต่พูดถึงแนวทางด้านสภาพแวดล้อมของ Voxel Doomมากกว่าตัวมอนสเตอร์
      “เมื่ออธิบายบริบททั้งหมดนี้แล้ว ตอนนี้ผมอยากยกย่องม็อด 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
      Nanite ตั้งต้นจากการสร้างวัตถุหลายโพลิกอน และสตรีม chunk ที่ถูกทำให้เรียบง่ายลงเพื่อไม่ให้สามเหลี่ยมที่เรนเดอร์มีขนาดเล็กกว่าพิกเซล
      เพราะมันสามารถทำเรขาคณิตให้ละเอียดมากได้อย่างเป็นธรรมชาติ displacement map จึงค่อนข้างซ้ำซ้อน และไม่มีเหตุผลมากนักที่จะต้องบีบไปไว้ใน texture map
      แน่นอนว่าภูมิประเทศเป็นอีกกรณีหนึ่ง แต่ก็เป็นเคสเฉพาะ
      วิธีในบทความนี้ดูเหมือนจะใช้ displacement กับเมชโพลิกอนต่ำเพื่อสร้างเรขาคณิตที่มีโพลิกอนสูงแต่ถูก “ทำให้เป็น voxel” ตอนโหลด
  • ถ้าจำไม่ผิด Comanche ใช้วิธีการแบบ ray tracing สำหรับการเรนเดอร์ภูมิประเทศ[1]
    ไม่ใช่ว็อกเซลจริง ๆ แต่เป็น 2D height map ที่ถูกสุ่มตัวอย่าง
    มันใช้ชื่อว่า “VoxelSpace” เลยทำให้สับสนได้
    [1] https://github.com/s-macke/VoxelSpace

    • เดาว่านี่น่าจะเป็นเทคนิคแบบเดียวกับที่ใช้ในเกม Comanche เป๊ะ ๆ หรืออย่างน้อยก็เป็นวิธีที่ให้ผลลัพธ์แบบเดียวกันได้
      ตรงข้ามกับความเชื่อที่พบได้บ่อย เกมเหล่านั้นไม่ได้ใช้ 3D voxel จริง ๆ แต่เรนเดอร์ height map ที่เก็บค่าสีและความสูงไว้ในเท็กซ์เจอร์ภูมิประเทศด้วยการทำ ray marching
      ถ้าทำ ray marching ไปยังเท็กซ์เจอร์ในเชดเดอร์ ก็สามารถสร้างหน้าตาแบบเดียวกันขึ้นมาได้ และน่าจะดูใกล้เคียงมากกับผลลัพธ์ที่บทความบล็อกนี้ทำได้
    • แทบจะไม่เกี่ยวข้องกันเลย ในที่นี้ดูเหมือนจะใช้ geometry shader เพื่อสร้าง รายละเอียดเมชแบบ voxel และอาจมีการปรับแต่งประสิทธิภาพในขั้นตอนย่อยบางอย่างด้วย
      ส่วนนั้น Nanite เป็นเทคโนโลยีเรนเดอร์แบบ GPU-driven ที่ปรับความหนาแน่นของสามเหลี่ยมให้ตรงกับคุณภาพเป้าหมาย
      Nanite ก็ใช้ displacement map และ tessellation ได้เหมือนกัน แต่จะใช้เส้นทางแยกต่างหากซึ่งไม่ได้มีประสิทธิภาพมากกว่าการใส่แอสเซ็ตหลายเหลี่ยมสูงเข้าไปเรนเดอร์ตรง ๆ เสมอไป
  • การได้เห็นวิธีใหม่ ๆ ในวงการว็อกเซลเป็นเรื่องที่ดีเสมอ
    แต่ก็เสียดายนิดหน่อยที่บทความนี้พูดปนกันระหว่าง ว็อกเซลกับเทคนิคการเรนเดอร์บางแบบ
    ว็อกเซลก็แค่การใช้กริด 3D และจากช่วงกลาง ๆ ดูเหมือนผู้เขียนจะมองว่าการใช้ว็อกเซลเท่ากับการเรนเดอร์แบบลูกบาศก์ หรือสิ่งที่มักเรียกว่า บล็อกเซลเรนเดอเรอร์ สไตล์ Minecraft
    เขายังบอกด้วยว่าสามารถเอาเรขาคณิตแบบสามเหลี่ยมมาใช้ในเอนจินได้โดยตรง แต่ดูเหมือนจะลืมไปว่าบล็อกเซลหรือจริง ๆ แล้วกระบวนการเรนเดอร์แทบทุกแบบก็ทำแบบเดียวกันได้
    นี่เองจึงเป็นวิธีที่ปลั๊กอินเรนเดอร์ว็อกเซลทั่วไปซึ่งใช้สไตล์อื่น ๆ ได้รับการรองรับระดับเฟิร์สต์คลาสในเอนจินที่มีอยู่

  • อยากให้สิ่งนี้เป็นโอเพนซอร์สมาก หวังจริง ๆ ว่าจะเป็นแบบนั้น

  • ชอบมากจริง ๆ ทำให้นึกถึง Ultima Underworld

  • นี่แหละควรเป็นอนาคตของการทำเกม 3D ยุคเรโทรให้ทันสมัยขึ้น งดงามจริง ๆ