นี่คือรหัส Quake 2 อย่างเป็นทางการ V3.21 ที่มีการสนับสนุน Vulkan และชุดภารกิจรวมอยู่ด้วย เป้าหมายของโครงการนี้คือการรักษาความเข้ากันได้มากที่สุดเท่าที่จะเป็นไปได้กับเกมดั้งเดิม - เพียงแค่ประสบการณ์วานิลลา Quake 2 ที่บริสุทธิ์เมื่อเรารู้ว่ามันกลับมาในปี 1997 อย่างไรก็ตามมีความแตกต่างที่น่าสังเกตเล็กน้อยซึ่งทำให้การตัดด้วยเหตุผลหลายประการ:
vk_postprocess Consolehudscale )aimfix Console, backported จาก berserker@quake2คำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับกระบวนการคิดที่อยู่เบื้องหลังโครงการนี้สามารถพบได้ในโพสต์บล็อกของฉันซึ่งฉันอธิบายการออกแบบโดยรวมว่าฉันโจมตีปัญหาบางอย่างและวิธีการพัฒนาสิ่งต่าง ๆ หลังจากการเปิดตัวครั้งแรก
สำหรับความท้าทายพิเศษฉันตัดสินใจที่จะใช้ VKQuake2 บนรหัสซอฟต์แวร์ ID เดิม ด้วยเหตุนี้จึงไม่มีการพึ่งพาในห้องสมุดที่มีลักษณะคล้าย SDL ภายนอกและโครงการทั้งหมดส่วนใหญ่อยู่ในตัวเอง นี่ก็หมายความว่าข้อบกพร่องดั้งเดิมบางตัวอาจมีอยู่
quake2.sln และเลือกสถาปัตยกรรมเป้าหมาย (x86/x64) - ควรสร้างโดยไม่มีขั้นตอนเพิ่มเติมใด ๆ น่าเสียดายที่รหัส Linux สำหรับ Quake 2 นั้นไม่ดีและด้วยเหตุนี้จึงมีเพียง Vulkan Renderer ที่ใช้งานได้ในเวลานี้ สร้างขั้นตอนสมมติว่า Ubuntu เป็นการกระจายเป้าหมาย:
sudo apt install make gcc g++ mesa-common-dev libglu1-mesa-dev libxxf86dga-dev libxxf86vm-dev libasound2-dev libx11-dev libxcb1-dev
.bashrc ของคุณ (แทนที่เวอร์ชัน SDK และตำแหน่งด้วยไฟล์ที่สอดคล้องกับระบบของคุณ): export VULKAN_SDK=/home/user/VulkanSDK/1.3.224.1/x86_64
export PATH=$VULKAN_SDK/bin:$PATH
export LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH
export VK_LAYER_PATH=$VULKAN_SDK/etc/explicit_layer.d
vulkaninfo เพื่อตรวจสอบ) - ถ้าไม่คุณสามารถรับได้ด้วย: sudo apt install mesa-vulkan-drivers
linux และประเภท make release หรือ make debug ขึ้นอยู่กับตัวแปรที่คุณต้องการสร้าง - ไบนารีเอาต์พุตจะถูกวางไว้ใน linux/releasex64 และ linux/debugx64 Subdirectories ตามลำดับตามลำดับ VULKAN_SDK ไปยังตำแหน่ง/เส้นทางที่กำหนดเอง - ทำให้มันชี้ไปที่ SDK ที่ดาวน์โหลดmacos/vkQuake2.xcworkspace - ควรสร้างโดยไม่มีขั้นตอนเพิ่มเติมใด ๆ.bash_profile ของคุณและเพิ่มรายการต่อไปนี้ (แทนที่เวอร์ชัน SDK และตำแหน่งด้วยเกมที่สอดคล้องกับระบบของคุณ): export VULKAN_SDK=/home/user/VulkanSDK/1.3.224.1
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
export VK_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d
macos และเรียกใช้ make release-xcode หรือ make debug-xcode ขึ้นอยู่กับตัวแปรที่คุณต้องการสร้าง-ไบนารีเอาต์พุตจะถูกวางไว้ในไดเรกทอรีย่อย macos/vkQuake2macos และเรียกใช้ make release หรือ make debug - ไบนารีเอาท์พุทจะถูกวางไว้ใน macos/release macos/debug โครงการนี้ใช้ Loader Vulkan ที่รวมกับ SDK แทนที่จะเชื่อมโยงโดยตรงกับ MoltenVK.framework สิ่งนี้ทำเพื่อให้เลเยอร์การตรวจสอบความถูกต้องมีไว้สำหรับการดีบัก Builds ได้รับการทดสอบโดยใช้ MacOS 10.14.2
pkg install vulkan-tools vulkan-validation-layers
vulkaninfo เพื่อตรวจสอบ) - ถ้าไม่คุณควรอัปเดตหรือค้นหาแพ็คเกจที่เหมาะสมที่สุดสำหรับการกำหนดค่าฮาร์ดแวร์ของคุณlinux และประเภท make release หรือ make debug ขึ้นอยู่กับตัวแปรที่คุณต้องการสร้าง - ไบนารีเอาต์พุตจะถูกวางไว้ใน linux/releasex64 และ linux/debugx64 Subdirectories ตามลำดับตามลำดับ ด้วยความพยายามของ Igalia และไดรเวอร์ V3DV ของพวกเขาจึงเป็นไปได้ที่จะรวบรวมและเรียกใช้ VKQuake2 บน Raspberry Pi 4 คำแนะนำการสร้างเช่นเดียวกับ Linux ใช้
Visual Studio C ++ redistributable จำเป็นต้องเรียกใช้แอปพลิเคชัน: 32 บิตหรือ 64 บิตขึ้นอยู่กับสถาปัตยกรรมที่เลือก สิ่งเหล่านี้มีให้โดยอัตโนมัติหากคุณติดตั้ง Visual Studio
แพ็คเกจรีลีสมาพร้อมกับเนื้อหาการสาธิต Quake 2 เพื่อแสดงฟังก์ชั่น Vulkan เท่านั้น สำหรับประสบการณ์เต็มรูปแบบคัดลอกไฟล์ .pak ปลีกรุ่นและไฟล์วิดีโอลงในไดเรกทอรี baseq2 และเรียกใช้ปฏิบัติการ สำหรับแพ็คภารกิจให้คัดลอกข้อมูลที่จำเป็นไปยัง rogue ("Ground Zero"), xatrix ("The Reckoning"), zaero ("Quake II: Zaero") และ smd ("การทำลายกลไกเล็กน้อย") ตามลำดับ จากนั้นคุณสามารถเริ่มเกมได้ด้วย ./quake2 +set game rogue , ./quake2 +set game xatrix , ./quake2 +set game zaero หรือ ./quake2 +set game smd
โครงการนี้ใช้ Miniaudio สำหรับการเล่นเพลงหากไม่มีซีดีเกมต้นฉบับ สำหรับ quake มาตรฐาน 2 ให้คัดลอกแทร็กทั้งหมดลงในไดเรกทอรี baseq2/music ตาม trackXX.[ogg,flac,mp3,wav] รูปแบบการตั้งชื่อ (ดังนั้น track02.ogg, track03.ogg ... สำหรับไฟล์ ogg ฯลฯ ) สำหรับ "Ground Zero" และ "The Reckoning" ให้คัดลอกแทร็กไปยัง rogue/music และ xatrix/music Directories ตามลำดับ สำหรับการควบคุมเพิ่มเติมเกี่ยวกับการเล่นให้ใช้ miniaudio [on,off,play [X],loop [X],stop,pause,resume,info] คำสั่งคอนโซล
คำสั่งต่อไปนี้จะพร้อมใช้งานเมื่อใช้ Vulkan Renderer:
| สั่งการ | การกระทำ |
|---|---|
vk_validation | สลับเลเยอร์การตรวจสอบความถูกต้อง:0 - ปิดการใช้งาน (ค่าเริ่มต้นในการเปิดตัว)1 - ข้อผิดพลาดและคำเตือนเท่านั้น2 - การตรวจสอบเต็มรูปแบบ (ค่าเริ่มต้นในการดีบัก)3 - เปิดใช้งาน VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT |
vk_strings | พิมพ์ข้อมูล Vulkan/GPU พื้นฐานบางอย่าง |
vk_mem | พิมพ์จุดสุดยอดไดนามิก/ดัชนี/เครื่องแบบ/สามเหลี่ยมบัฟเฟอร์บัฟเฟอร์และตัวอธิบายชุดสถิติการใช้งาน |
vk_device | ระบุดัชนีของอุปกรณ์ Vulkan ที่ต้องการบนระบบที่มี GPU หลายตัว:-1 - ชอบ First Discrete_gpu (ค่าเริ่มต้น)0..n - ใช้อุปกรณ์ #N (รายการอุปกรณ์ทั้งหมดถูกส่งคืนโดยคำสั่ง vk_strings ) |
vk_msaa | สลับ MSAA (Multisampling):0 - ปิด (ค่าเริ่มต้น)1 - MSAAX22 - MSAAX43 - MSAAX84 - MSAAX16 |
vk_sampleshading | สลับตัวอย่างแรเงา (supersampling) สำหรับ MSAA (ค่าเริ่มต้น: 0 ) |
vk_mode | โหมดวิดีโอ Vulkan (ค่าเริ่มต้น: 11 ) การตั้งค่านี้เป็น -1 ใช้ความละเอียดหน้าจอที่กำหนดเองที่กำหนดโดย r_customwidth (ค่าเริ่มต้น: 1024 ) และ r_customheight (ค่าเริ่มต้น: 768 ) ตัวแปรคอนโซล |
vk_flashblend | สลับการผสมผสานของไฟเข้าสู่สภาพแวดล้อม (ค่าเริ่มต้น: 0 ) |
vk_polyblend | ผสมผสานเอฟเฟกต์เต็มหน้าจอ: เลือด, powerups ฯลฯ (ค่าเริ่มต้น: 1 ) |
vk_skymip | สลับการใช้ข้อมูล MIPMAP สำหรับกราฟิกท้องฟ้า (ค่าเริ่มต้น: 0 ) |
vk_finish | แทรกการโทร vkDeviceWaitIdle() บนเริ่มการเรนเดอร์เฟรมเริ่มต้น (ค่าเริ่มต้น: 0 )อย่าใช้สิ่งนี้มันมีเพียงเพื่อให้มี gl_finish เทียบเท่า! |
vk_point_particles | สลับระหว่างการใช้ point_list และสามเหลี่ยมที่มีพื้นผิวสำหรับการเรนเดอร์อนุภาค (ค่าเริ่มต้น: 1 ) |
vk_particle_size | ขนาดอนุภาคที่แสดงผล (ค่าเริ่มต้น: 40 ) |
vk_particle_att_a | ความเข้มของอนุภาคเป็นคุณลักษณะ (ค่าเริ่มต้น: 0.01 ) |
vk_particle_att_b | ความเข้มของแอตทริบิวต์อนุภาค B (ค่าเริ่มต้น: 0 ) |
vk_particle_att_c | ความเข้มของแอตทริบิวต์อนุภาค C (ค่าเริ่มต้น: 0.01 ) |
vk_particle_min_size | ขนาดต่ำสุดของอนุภาคที่แสดงผล (ค่าเริ่มต้น: 2 ) |
vk_particle_max_size | ขนาดสูงสุดของอนุภาคที่แสดงผล (ค่าเริ่มต้น: 40 ) |
vk_lockpvs | ล็อคตาราง PVS ปัจจุบัน (ค่าเริ่มต้น: 0 ) |
vk_clear | ล้างบัฟเฟอร์สีแต่ละเฟรม (ค่าเริ่มต้น: 0 ) |
vk_modulate | ตัวดัดแปลงความสว่างของพื้นผิว (ค่าเริ่มต้น: 1 ) |
vk_shadows | วาดเงาเอนทิตีทดลอง (ค่าเริ่มต้น: 0 ) |
vk_picmip | ลดปัจจัยสำหรับพื้นผิว (ค่าเริ่มต้น: 0 ) |
vk_round_down | สลับการปัดเศษขนาดพื้นผิว (ค่าเริ่มต้น: 1 ) |
vk_log | บันทึกข้อมูลการตรวจสอบเฟรมไปยังไฟล์ (ค่าเริ่มต้น: 0 ) |
vk_dynamic | ใช้แสงแบบไดนามิก (ค่าเริ่มต้น: 1 ) |
vk_showtris | แสดงสามเหลี่ยมตาข่าย (ค่าเริ่มต้น: 0 ) |
vk_lightmap | แสดง Lightmaps (ค่าเริ่มต้น: 0 ) |
vk_aniso | สลับการกรอง anisotropic (ค่าเริ่มต้น: 1 ) |
vk_vsync | สลับการซิงค์แนวตั้ง (ค่าเริ่มต้น: 0 ) |
vk_postprocess | สลับการแก้ไขสี/แกมม่าเพิ่มเติม (ค่าเริ่มต้น: 1 ) |
vk_underwater | สลับวิสัยทัศน์ของผู้เล่นวิสัยทัศน์เมื่ออยู่ใต้น้ำ (ค่าเริ่มต้น: 1 ) |
vk_restart | สร้างระบบย่อย Vulkan ทั้งหมดขึ้นใหม่ |
vk_mip_nearfilter | ใช้การกรองเพื่อนบ้านที่ใกล้ที่สุดสำหรับ MIPMAPS (ค่าเริ่มต้น: 0 ) |
vk_texturemode | เปลี่ยนโหมดการกรองพื้นผิวปัจจุบัน:VK_NEAREST - การแก้ไขที่ใกล้ที่สุด - Neighbor ไม่มี mipmapsVK_LINEAR - การแก้ไขเชิงเส้นไม่มี mipmapsVK_MIPMAP_NEAREST - การแก้ไขที่ใกล้ที่สุดกับ MIPMAPSVK_MIPMAP_LINEAR - การแก้ไขเชิงเส้นด้วย MIPMAPS (ค่าเริ่มต้น) |
vk_lmaptexturemode | เหมือนกับ vk_texturemode แต่นำไปใช้กับพื้นผิว LightMap |
vk_fullscreen_exclusive | Windows เท่านั้น: สลับการใช้งานโหมดเต็มหน้าจอพิเศษ (ค่าเริ่มต้น: 1 ) โปรดทราบว่าเมื่อเปิดใช้งานตัวเลือกนี้ไม่มีการรับประกันว่าสามารถรับเต็มหน้าจอแบบเต็มหน้าจอได้ในระบบของคุณ |
vk_sampleshading เนื่องจากข้อผิดพลาดที่อาจเกิดขึ้นในไดรเวอร์โลหะทำให้เกิดการหยุดชะงักระหว่างการรวบรวม Shader