5 คะแนน โดย GN⁺ 2024-07-29 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ภาพรวมของโปรเจกต์

    • ตลอดหลายปีที่ผ่านมา ผู้เขียนได้ทำงานกับฉาก 3D และเลเวลที่รันในเบราว์เซอร์
    • ตอนแรกเริ่มจากเดโมแยกเดี่ยว แต่ค่อย ๆ พัฒนาเป็นโปรเจกต์ลักษณะคล้ายเกมที่เชื่อมต่อถึงกัน
    • ใช้เทคนิคเชิงกระบวนการและเชิงกำเนิดเพื่อสร้างองค์ประกอบบางส่วน
  • Shaders + Textures

    • เท็กซ์เจอร์ส่วนใหญ่ถูกออกแบบให้ไร้รอยต่อ เพื่อไม่ให้เห็นลวดลายซ้ำแม้ในพื้นที่ขนาดใหญ่
    • สร้างเชดเดอร์แบบกำหนดเองใน Three.JS เพื่อเพิ่มความสามารถเพิ่มเติม
  • Triplanar Mapping

    • สามารถใช้เท็กซ์เจอร์กับเมชได้โดยไม่ต้องมี UV map จึงเหมาะกับภูมิประเทศที่สร้างแบบเชิงกระบวนการ
    • นำไปใช้งานได้ไม่ซับซ้อน และประยุกต์ใช้กับเมชได้หลากหลายประเภท
    • ใช้ฟังก์ชัน pow() เพื่อปรับน้ำหนัก ช่วยเพิ่มคุณภาพและปรับแต่งประสิทธิภาพให้เหมาะสม
  • Hex Tiling

    • อัลกอริทึมสำหรับซ่อนการทำซ้ำของเท็กซ์เจอร์แบบไร้รอยต่อ
    • พอร์ตเป็นไลบรารีแบบสแตนด์อโลนที่รวมเข้ากับโปรเจกต์ Three.JS ได้ง่าย
    • ต้องใช้ UV map และมีภาระด้านประสิทธิภาพค่อนข้างสูง
  • Depth Pre-Pass

    • เรนเดอร์ฉากสองครั้งเพื่อบันทึกค่าความลึกของพิกเซล ช่วยเพิ่มประสิทธิภาพ
    • ในฉากที่มี overdraw สูง สามารถเพิ่มประสิทธิภาพได้มากกว่า 30%
  • AI-Powered PBR Texture Synthesis

    • ใช้เท็กซ์เจอร์ที่สร้างด้วย AI เพื่อยกระดับคุณภาพของฉาก
    • ใช้ DeepBump และ Materialize ในการสร้าง PBR map
  • Volumetric Fog/Clouds

    • พัฒนาเชดเดอร์สำหรับเพิ่มเมฆหรือหมอกเข้าไปในฉาก
    • ใช้ LoD noise lookup เพื่อเพิ่มความสามารถที่หลากหลาย
  • Meshes + Geometry

    • ศึกษาเทคนิคการสร้างและดัดแปลงเมชขณะรันไทม์
    • ส่วนใหญ่ใช้สร้างองค์ประกอบตกแต่งหรือฉากหลังแบบเชิงกระบวนการ
  • LoD Terrain

    • สร้างภูมิประเทศด้วยฟังก์ชัน noise และปรับความละเอียดแบบไดนามิกตามระยะห่างจากกล้อง
  • Procedural Mesh Processing + Manipulation Pipeline

    • สร้างไปป์ไลน์สำหรับแบ่งย่อยและดัดแปลงเมช low-poly แบบเชิงกระบวนการ
    • การจัดการ normal ต้องใช้ความพยายามอย่างมาก
  • Future Work

    • มีแผนใช้ Constructive Solid Geometry(CSG) เพื่อรวมเมชหรือเจาะตัดบางส่วนออก
    • ตั้งใจพอร์ตไปยัง Rust เพื่อทำความเข้าใจให้ลึกซึ้งยิ่งขึ้น

สรุปโดย GN⁺

  • บทความนี้แนะนำเทคนิคและเครื่องมือหลากหลายที่มีประโยชน์ต่อการพัฒนาเกมเชิงกระบวนการ
  • เทคนิคการทำเท็กซ์เจอร์อย่าง Triplanar Mapping และ Hex Tiling ช่วยยกระดับทั้งประสิทธิภาพและคุณภาพไปพร้อมกัน
  • การสร้างเท็กซ์เจอร์ด้วย AI และเชดเดอร์ Volumetric Fog/Clouds ช่วยเพิ่มความสมจริงให้กับฉาก
  • งานในอนาคตอย่าง Constructive Solid Geometry มีศักยภาพสูงสำหรับการดัดแปลงเมช
  • โปรเจกต์ที่มีความสามารถคล้ายกัน ได้แก่ ProBuilder ของ Unity และ Houdini

1 ความคิดเห็น

 
GN⁺ 2024-07-29
ความคิดเห็นจาก Hacker News
  • เคยมีประสบการณ์ลองทำการสร้างเชิงกระบวนการมาก่อน

    • โดยเฉพาะพยายามทำต้นไม้สวย ๆ
    • รู้สึกว่ายังขาดวิธีเชื่อมเรขาคณิตเข้าด้วยกันได้อย่างง่ายดาย
    • การสร้างทรงกระบอกสองอันนั้นง่าย แต่การเชื่อมมันเข้าหากันยากมาก
    • ในทางทฤษฎี CSG อาจช่วยอุดช่องว่างนี้ได้ แต่ยากเพราะต้องโมเดลเป็นรูปทรง 3D
    • เคยพยายามทำรูทีนสำหรับเชื่อมลูปสองวงเข้าด้วยกัน แต่ทำงานได้ไม่ดี
    • ภายหลังอยากสร้างเกมที่ระบบการสร้างเชิงกระบวนการแบบโมดูลาร์ทำงานได้เองอย่างเป็นธรรมชาติ
  • การสร้างภูมิประเทศที่ดีไม่ใช่เรื่องง่าย

    • ยากทั้งในระดับขนาดของโลกและในระดับสายตาผู้เล่น
    • แนวทางแบบง่ายจะสร้าง height map ที่ขรุขระและแทบไม่เหมือนความเป็นจริง
    • Dwarf Fortress เริ่มจาก midpoint displacement พื้นฐานแล้วปรับแต่งเฉพาะทางเพิ่มอีกมาก
  • เป็นบทความที่ยอดเยี่ยมเกี่ยวกับเทคนิคเชิงกระบวนการบนเว็บ

  • มีประสบการณ์ทั้งดีและไม่ดีกับการใช้ depth pre-pass

    • ลองมาหลายครั้งแล้ว แต่ไม่ค่อยรู้สึกถึงการเพิ่มประสิทธิภาพมากนักบน GPU เดสก์ท็อประดับกลางถึงสูง
    • ไม่แน่ใจเหตุผลนัก แต่อาจเป็นเพราะ early Z rejection ช่วยประหยัดการเรียกใช้ pixel shader ไปแล้ว
    • โดยทั่วไปจะเรนเดอร์เมชทึบแสงจากหน้าไปหลัง
    • เพื่อความเป็นธรรม การทดลองของตัวเองเกิดขึ้นในบริบทของแอปพลิเคชัน CAD/CAM ไม่ใช่เกม
    • ฉากมีเท็กซ์เจอร์น้อยมากและมีเรขาคณิตที่มีจำนวนโพลิกอนสูงมาก ต่างจากสภาพแวดล้อมเกมทั่วไป
  • ในฐานะศิลปิน 3D นี่เป็นบทความที่น่าสนใจมาก

    • บทความดี ๆ เกี่ยวกับหัวข้อนี้มีน้อยมาก
    • วางแผนว่าจะลองใช้ Three.js