4
ฉันจะนำแสง voxel มาใช้กับการบดเคี้ยวในเกมสไตล์ Minecraft ได้อย่างไร
ฉันใช้ C # และ XNA อัลกอริทึมปัจจุบันของฉันสำหรับให้แสงสว่างเป็นวิธีเรียกซ้ำ อย่างไรก็ตามมันมีราคาแพงจนถึงจุดที่ก้อน 8x128x8 หนึ่งก้อนคำนวณทุก 5 วินาที มีวิธีการให้แสงแบบอื่นที่จะทำให้เกิดเงาแบบแปรผันได้หรือไม่? หรือวิธีการเวียนเกิดเป็นวิธีที่ดีและบางทีฉันอาจทำผิด ดูเหมือนว่าสิ่งที่เกิดขึ้นซ้ำ ๆ นั้นมีราคาแพง (ถูกบังคับให้ผ่านบล็อกประมาณ 25k ต่อก้อน) ฉันกำลังคิดเกี่ยวกับการใช้วิธีการคล้ายกับการติดตามรังสี แต่ฉันไม่รู้ว่ามันจะทำงานอย่างไร อีกสิ่งหนึ่งที่ฉันพยายามคือการจัดเก็บแหล่งกำเนิดแสงในรายการและสำหรับแต่ละบล็อกจะได้ระยะห่างจากแหล่งกำเนิดแสงแต่ละจุดและการใช้แสงนั้นไปยังระดับที่ถูกต้อง แต่แสงจะผ่านกำแพง รหัสการเรียกซ้ำปัจจุบันของฉันอยู่ด้านล่าง สิ่งนี้ถูกเรียกจากที่ใด ๆ ในก้อนที่ไม่มีระดับแสงเป็นศูนย์หลังจากการล้างและเพิ่มแสงแดดและคบไฟใหม่ world.get___atเป็นฟังก์ชั่นที่สามารถรับบล็อกด้านนอกของก้อนนี้ (นี่คือภายในชั้นเรียนชิ้น) Locationเป็นโครงสร้างของตัวเองที่คล้ายกับ a Vector3แต่ใช้จำนวนเต็มแทนค่าทศนิยม light[,,]เป็น lightmap สำหรับชิ้นข้อมูล private void recursiveLight(int x, int y, int z, byte lightLevel) { Location loc = new …