เครื่องมือท่อส่งเนื้อหาควรจะฝังตัวอยู่ในเครื่องยนต์หรือไม่?


10

เอ็นจิ้นเกมควรมีขนาดเล็กเพียงใด ไปป์ไลน์เนื้อหาควรฝังอยู่ในเอ็นจิ้นเท่าใด

บางกรณีใช้งานที่ super engine อาจมีประโยชน์:

  • เมื่อโหลดเนื้อหาของผู้ใช้ผู้ใช้ไม่จำเป็นต้องทำพื้นผิวของตัวเองเครื่องยนต์จะทำมันในเวลาโหลด

  • สคริปต์ร้องขอแบบอักษรที่มีขนาดใหญ่กว่าที่สร้างไว้ล่วงหน้าเครื่องยนต์สามารถแยกโฆษณาไฟล์ ttf เพื่อสร้าง atlas ใหม่

  • รัศมีปลอม

ไม่มีสิ่งนี้แน่นอน สิ่งนี้ต้องใช้เครื่องมือไปป์ไลน์เนื้อหาของคุณเพื่อเขียนใน C ++ ไลบรารีสนับสนุนที่คุณใช้ในไพพ์ไลน์จำเป็นต้องรวบรวมเพื่อใช้งานบนอุปกรณ์ มันต้องการการสร้างเนื้อหาที่จะไม่บั๊ก และโดยทั่วไปแล้วทำให้เครื่องยนต์ของคุณใหญ่ขึ้นและเทอะทะ
ข้อดีและข้อเสียอื่น ๆ คืออะไร?
ข้อดีมีมากกว่าข้อเสียหรือไม่

คำถามเฉพาะ:

  • เครื่องยนต์ควรโหลดรูปแบบภาพต่างๆได้หรือไม่? ตัวโหลด TGA เท่านั้นนั้นค่อนข้างง่ายต่อการเขียนด้วยมือ

  • รูปแบบเสียงเป็นอย่างไร เป็นไปได้หรือไม่ที่จะรองรับการโหลดไฟล์ wav เท่านั้น? ไฟล์เพลงโดยรอบมักมีขนาดใหญ่มาก

  • เครื่องยนต์ควรมีความสามารถในการแยกวิเคราะห์ TTF และการสร้างแผนที่แบบไดนามิกหรือไม่?

  • บรรจุพื้นผิว

คำตอบ:


11

Noel Llopis เกมส์จากภายในบล็อกสัมผัสเกี่ยวกับเรื่องนี้เมื่อเร็ว ๆ นี้ใน"เกมระยะไกลการแก้ไข" โพสต์ ย่อหน้าเปิด:

ฉันเป็นแฟนตัวยงของเกมเพียงเล็กน้อยเท่านั้น ทุกสิ่งที่สามารถทำได้แบบออฟไลน์หรือในเครื่องมือแยกต่างหากควรอยู่นอกรันไทม์ ที่ใบเกมสถาปัตยกรรมและรหัสมากลีนและเรียบง่าย

(บทความนี้เป็นบทความที่แนะนำให้อ่านเช่นเดียวกับเนื้อหาส่วนใหญ่ของโนเอลไม่ว่าคุณจะเห็นด้วย 100% หรือไม่ก็ตาม)

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

ประสิทธิภาพที่ดีขึ้นอาจทำให้เวลาในการทำซ้ำลดลงอย่างน่าประหลาดใจแม้ว่าจะมีความสามารถในการแก้ไขบางอย่างในเครื่องยนต์ลดลง: ลองทำอะไรสักอย่างง่ายขึ้นถ้าคุณสามารถโหลดเกมได้ในเวลาไม่นาน

การใช้หลักคำสอนบางส่วนของ " ปรัชญา unix " จะช่วยให้คุณรักษาความยืดหยุ่นของ toolchain: ไปป์ไลน์โมดูลาร์ขนาดเล็ก

ปรัชญาส่วนตัวของฉัน: อบข้อมูลให้มากที่สุดเท่าที่จะเป็นไปได้แบบออฟไลน์ แต่ให้การสนับสนุนเครื่องยนต์เพื่อรับข้อมูลอบใหม่ได้ตลอดเวลา (โปรดทราบว่าข้อมูลใหม่นี้ไม่จำเป็นต้องเล่นจนกว่าจะถึงจุดที่สะดวกสบาย: กดปุ่ม "รีเฟรช" ระดับถัดไปจะเริ่มขึ้นคุณจะเปลี่ยนไปสู่พื้นที่ใหม่ไม่ว่าอะไรก็ตามกุญแจคือการค้นหาจุดหวานที่ลดลง เวลาทำซ้ำโดยมีความซับซ้อนของรหัสขั้นต่ำและความพยายามในการเขียนโค้ด)

ที่ บริษัท ของเราเครื่องมือสำหรับศิลปิน / นักออกแบบของเราส่วนใหญ่มุ่งเน้นไปที่ปัญหา UI: ความสะดวกในการจัดการกับสินทรัพย์เดี่ยวหรือแบทช์ของมันเป็นต้นบางครั้งพวกเขาเป็นเพียงเครื่องมือของบุคคลที่สามเช่น Photoshop หรือ 3DS Max เครื่องมือเหล่านี้ส่งออกไปยังรูปแบบกลาง (มัก xml ที่อ้างอิงข้อมูลไบนารีแหล่งที่มา แต่ไม่เสมอไป) รูปแบบกลางจะถูกหยิบขึ้นมาโดยเครื่องมือ "data make" แบ็กเอนด์ซึ่งจะทำให้มันกลายเป็นสิ่งที่มีประโยชน์และโหลดเร็วสำหรับแพลตฟอร์มเป้าหมาย

ความสามารถในการพกพาทำได้โดยการเพิ่มเครื่องมือสร้างแบ็กเอนด์เพิ่มเติมหรือขยายเครื่องมือสร้างแบ็กเอนด์ที่มีอยู่ซึ่งมีข้อได้เปรียบเพิ่มเติมในการมองไม่เห็นต่อผู้สร้างเนื้อหา

ตอนนี้ด้วยการเพิ่มข้อมูลที่เหมาะสมคุณสามารถมีการเปลี่ยนแปลงในรูปแบบการอบภายในไม่กี่วินาที เครื่องยนต์ของคุณสามารถสไปเดอร์หรือเครื่องมือสามารถสไปเดอร์แล้วสิ่งเหล่านี้จะปรากฏในระบบทรัพยากรของคุณพร้อมสำหรับการโหลดใหม่เมื่อสะดวก

เครื่องมือ - โดยเฉพาะอย่างยิ่งข้อมูลแบ็กเอนด์สร้างเครื่องมือ - มักจะมีความลื่นและตัวเลือกมากกว่ารหัสเครื่องยนต์ ไม่เป็นไรเพราะง่ายต่อการสร้าง / ขยายใหม่เขียนใหม่และทดสอบ คุณมีรายละเอียดสำหรับพฤติกรรมของพวกเขาและมันค่อนข้างง่ายต่อการทดสอบหน่วยเปรียบเทียบกับรหัสเครื่องยนต์

ความคิดเห็นของฉันในคำถามของคุณ:

เครื่องยนต์ควรโหลดรูปแบบภาพต่างๆได้หรือไม่? ตัวโหลด TGA เท่านั้นนั้นค่อนข้างง่ายต่อการเขียนด้วยมือ

(นอกเหนือจาก: แม้ว่าคุณจะใช้ตัวถอดรหัส TGA ในเครื่องยนต์อย่าเขียนโค้ดด้วยมือคุณแค่ขอปัญหา - มีรายละเอียดปลีกย่อยมากมายที่มีรูปแบบภาพส่วนใหญ่และเครื่องมือมากมายที่ไม่ยึดติด ตรงกับรูปแบบที่ไม่แน่นอนคุณควรหารหัสห้องสมุดที่ผ่านการทดสอบอย่างดีสำหรับการประมวลผลภาพ)

ฉันต้องการเครื่องมือที่แปลงจาก TGA เป็นรูปแบบพื้นผิวภายในของคุณรวมถึงข้อมูลเมตา

รูปแบบเสียงเป็นอย่างไร เป็นไปได้หรือไม่ที่จะรองรับการโหลดไฟล์ wav เท่านั้น? ไฟล์เพลงโดยรอบมักมีขนาดใหญ่มาก

เราใช้สามรูปแบบที่นี่: เพลงที่ติดตาม (.xm), ADPCM (.wav) และ Speex (.spx) นี่เป็นเพราะเราอยู่ในอุปกรณ์พกพาและรูปแบบเหล่านี้มีน้ำหนักเบามากในการถอดรหัส

เครื่องยนต์ควรมีความสามารถในการแยกวิเคราะห์ TTF และการสร้างแผนที่แบบไดนามิกหรือไม่? บรรจุพื้นผิว

การแปลเป็นปัญหาอย่างหนัก: ดูคำตอบของคำถามล่าสุดของคุณ มันเกือบจะคุ้มค่าที่จะทำแบบออฟไลน์

นอกจากนี้คุณยังสามารถสร้างข้อมูลเมตาต่ออักขระให้เป็นโครงสร้างการอบที่เกือบเป็นศูนย์โหลด

ในการปิดคุณสามารถล้างข้อมูลและทำแพ็คเกจนี้กับเกมของคุณสำหรับชุมชน mod คุณสามารถเพิ่มรูปแบบแหล่งที่มาเพิ่มเติมได้ตลอดเวลา และไม่มีอะไรขัดขวางคุณไม่ให้เชื่อมช่องว่างระหว่างเครื่องมือสร้างเนื้อหาและเอ็นจิ้นในบางกรณี หวังว่าโค้ดอบข้อมูลและรหัสสไปเดอร์ / การถ่ายโอนของคุณสามารถนำไปปรับใช้ใหม่ในไลบรารีซึ่งในที่สุดอาจใช้เครื่องมือสร้างเนื้อหาโดยตรงในบางกรณี แต่ฉันจะไม่ทำให้เป้าหมายแรกของฉันจำเป็นต้อง ... แค่ระวังให้ดีว่ามันจะเป็นเป้าหมายในที่สุดและปล่อยให้สิ่งนั้นมีอิทธิพลต่อการออกแบบของคุณเล็กน้อยและไปหาผลไม้แขวนลอยต่ำก่อน


เป็นการอัพเดตคุณอาจต้องการพิจารณาใช้รูปแบบไฟล์ KTXสำหรับพื้นผิว มันมีข้อดีของการเป็นส่วนใหญ่ "อ่านstructแล้วไป" สำหรับการใช้งาน GL ส่วนใหญ่ (และจากความคิดเห็นของคุณดูเหมือนว่าคุณกำลังกำหนดเป้าหมาย GL) ในขณะที่ยังยืดหยุ่นและกำหนดชัดเจน

ค่าใช้จ่ายส่วนหัวของ KTX อาจสูงเล็กน้อยสำหรับข้อมูลที่อบเสร็จแล้วขึ้นอยู่กับเป้าหมายของคุณและคุณอาจต้องละทิ้งการสนับสนุน endian swap ขึ้นอยู่กับ usecase ของคุณ ... แต่อย่างน้อยก็คุ้มค่าสำหรับการพิจารณาการออกแบบ


ขอบคุณมากค่ะ ฉันไม่เคยคิดที่จะสร้างรูปแบบภาพของตัวเองที่ง่ายต่อการโหลด มีไลบรารีการโหลดพื้นผิวที่น้อยที่สุดที่สร้างขึ้นแล้วหรือไม่ จากนั้นอีกครั้งเป็นกระแสข้อมูลไบต์ที่มีความกว้างความสูงและการเข้ารหัส (เช่น GL_RGB555)
deft_code

1
อย่าสร้างรูปแบบภาพของคุณเองมากนักเพื่อให้ได้ภาพในรูปแบบที่แน่นอนที่ DirectX, GL หรือทุกสิ่งที่คุณต้องการ =) เท่าที่ห้องสมุดไป: มีตันออกมี สำหรับเครื่องมือฉันมักจะใช้ ImageMagick ( imagemagick.org/script/index.php ) เนื้อหาของห้องสมุดหรือแม้แต่โปรแกรม ... รหัส ImageMagick เป็นโรงเรียนเก่าและค่อนข้างน่าเกลียด แต่ค่อนข้างเร็วยืดหยุ่นและถนน ผ่านการทดสอบ ฉันแน่ใจว่าคนอื่นจะมีคำแนะนำอื่น ๆ อีกมากมาย หากคุณกำลังใช้เช่น C # สำหรับ toolchain ของคุณจำนวนมากของสิ่งนี้จะถูกสร้างขึ้นแล้วใน .NET libs ...
Leander

1
"ฉันแน่ใจว่าคนอื่นจะมีคำแนะนำอื่น ๆ มากมาย" MFC! :) หรือ OpenIL ฉันคิดว่าหนึ่งในประเด็นสำคัญเกี่ยวกับการอบสินทรัพย์ลงในรูปแบบเฉพาะของแพลตฟอร์มคือเมื่อคุณเพิ่มรูปแบบของแหล่งข้อมูลเพิ่มเติมและแพลตฟอร์มอื่น ๆ จำนวนชุดค่าผสมจะระเบิด การแปลงสินทรัพย์แหล่งที่มาเป็นรูปแบบกลางแล้วแปลงเป็นรูปแบบเฉพาะแพลตฟอร์มจะลดจำนวนเส้นทางการแปลง เพิ่มรูปแบบต้นฉบับอื่นเพียงเขียนตัวแปลงเป็นรูปแบบกลาง เพิ่มแพลตฟอร์มอื่นเพิ่มคนทำขนมปังในรูปแบบเป้าหมายของแพลตฟอร์มนั้น
Chris Howe

1
ฉันจะเพิ่มว่าการรักษาความซับซ้อนด้านนอกของเครื่องยนต์ไม่ได้แปลว่าการใช้งานไม่ได้กับเครื่องยนต์ แยกเก็บไว้เพื่อให้แยกจากเครื่องยนต์ได้ง่ายเป็นกุญแจสำคัญ ฉันไม่สามารถความเครียดเพียงพอที่จะมีประโยชน์ในการสนับสนุนการโหลดเนื้อหาร้อนแรงเช่นการโหลดสิ่งใหม่ ๆ สิ่งนี้ก็สามารถนำความซับซ้อนมาสู่ระบบของคุณได้เช่นกันดังนั้นคุณจะต้องทำให้แน่ใจว่ามันสร้างขึ้นในแบบที่เกมไม่ต้องสนใจว่าสินทรัพย์จะมาจากไหน
dash-tom-bang

3

คำถามของคุณดูเป็นเรื่องส่วนตัวและขึ้นอยู่กับว่ากลุ่มเป้าหมายของคุณคือใคร

ลองทำคำถามการแยกวิเคราะห์แบบอักษร / ttf ของคุณ หากคุณกำลังวางแผนที่จะเพิ่มแบบอักษรของตัวเองคุณอาจต้องการทำให้ขั้นตอนการนำเข้าน้อยที่สุด หากคุณเพิ่มแบบอักษร / ขนาดตัวอักษรจำนวนมากในเกมภายในคุณอาจต้องการเครื่องมือที่ค่อนข้างซับซ้อนที่ศิลปินสามารถใช้กับการฝึกอบรมเล็กน้อย หากคุณกำลังจะทำมันครั้งเดียวภายในจากนั้นเวลาที่คุณใช้ในการทำผู้นำเข้าที่เหมาะสมอาจจะน้อยกว่าการใช้เวลาในการเขียนเครื่องมือสำหรับกรณีก่อนหน้า

มันเป็นเรื่องของการปรับขนาดกับทุกสิ่ง เครื่องมือฝังตัวนั้นคุ้มค่ากับความพยายามเมื่อคุณทำอะไรหลาย ๆ ครั้งและต้องการลดความซับซ้อน / ข้อบกพร่องที่เป็นผลมาจากมัน ตัวระบุเพิ่มเติมทั้งหมดที่คุณเพิ่ม (เช่นพื้นผิว TGA เท่านั้นแทนการนำเข้าพูด PSDs) ส่งผลให้ผู้ใช้ปลายทางใช้เวลามากขึ้น

โปรดจำไว้ว่าเครื่องมือเนื้อหามักใช้โดยผู้ที่มีความโน้มเอียงทางเทคนิคน้อยกว่า (อ่าน: ศิลปิน) โดยส่วนตัวแล้วฉันชอบวิธีที่ Unity ทำงานซึ่งคุณสามารถลากไฟล์ต้นฉบับ (psd, 3ds, ttf, mp3, jpg, mov, อะไรก็ได้) และมันจะแปลงเป็นรูปแบบภายในโดยอัตโนมัติ รูปแบบภายในส่วนใหญ่จะถูกซ่อนจากผู้ใช้ นอกจากนี้ยังจะทำการแปลงซ้ำอัตโนมัติเมื่อตรวจพบการเปลี่ยนแปลงไฟล์ต้นฉบับ แต่นั่นเป็นงานจำนวนมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.