ฉันจะเลือกสัดส่วนการปรับของโลกเกม 3 มิติได้อย่างไร


9

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

ฉันสามารถคิดต่อไปนี้เป็นปัญหาที่อาจเกิดขึ้น:

  1. ความเข้ากันได้ของโปรแกรมการสร้างแบบจำลอง 3 มิติ (?)
  2. ความแม่นยำเชิงตัวเลข (สิ่งนี้สำคัญหรือไม่) โดยเฉพาะอย่างยิ่งในระดับขนาดใหญ่เกมอย่าง Battlefield มีแผนที่ขนาดใหญ่อย่างไรพวกเขาจะไม่สูญเสียความแม่นยำเชิงตัวเลขหากใช้การแมป 1: 1 กับมาตราส่วนโลกแห่งความเป็นจริงเนื่องจากการแสดงจุดลอยตัว ตัวเลข (เช่นกับการหล่อเรย์, การจำลองทางฟิสิกส์)?
  3. เพลย์ ฉันไม่ต้องการให้การเคลื่อนไหวของหน่วยรู้สึกช้าหรือเร็วในขณะที่ใช้ค่าเกือบโลกเหมือน-9.8 m/s^2แรงโน้มถ่วง (นี่อาจเป็นอัตนัย)
  4. การขยายขนาดสินทรัพย์ที่นำเข้าขึ้น / ลงตกลงหรือว่าเหมาะสมกับโลกที่มีขนาดดั้งเดิมหรือไม่
  5. การแสดงผล ตาข่ายขนาดใหญ่ที่มีจุดสุดยอดเท่ากันนับช้าลงเพื่อแสดงผลหรือไม่?

ฉันสงสัยว่าฉันควรแยกคำถามนี้เป็นหลายคำถามหรือไม่ ...

คำตอบ:


3

โดยทั่วไปคุณควรทำอะไรก็ได้

  1. เนื่องจากคุณมีวัตถุในชีวิตจริงมันเหมาะสมที่จะปรับขนาดของมัน (โดยปกติแล้วแอพพลิเคชั่นการสร้างแบบจำลอง 3 มิติจะมีการตั้งค่าหน่วยวัด, ฟุต, ฯลฯ ) แต่เมื่อคุณย้ายออกจากรถถังและเข้าไปในต้นไม้และวัตถุอื่น ๆ เพื่อปรับขนาดให้เหมาะกับสไตล์เกมของคุณ (ดังนั้นคุณจำลองต้นไม้และมีวิธีการปรับขนาดในตัวแก้ไขเกมเพื่อให้ดูดีหลายครั้งคุณจะใช้ต้นไม้เดียวกันซ้ำ แต่มีขนาดแตกต่างกันเพื่อเพิ่มความหลากหลาย)

  2. อย่าเคลื่อนย้ายกล้องไปให้ไกลจากแหล่งกำเนิดโลก แต่ให้ย้ายโลกรอบ ๆ กล้องที่วางไว้ใกล้กับจุดกำเนิดโลก วิธีนี้คุณหลีกเลี่ยงปัญหาความแม่นยำจำนวนมากที่เกิดขึ้นเมื่อ GPU / ฟิสิกส์จำเป็นต้องเปรียบเทียบค่าที่มีความแม่นยำต่ำอย่างแม่นยำ หากคุณย้ายรถถังและกล้อง 10 กม. จากจุดกำเนิดความแม่นยำของคุณจะอยู่ที่เศษส่วนของมิลลิเมตรที่มี float32 และนั่นอาจทำให้เกิดเอฟเฟกต์คล้ายกับ Z-fighting ระหว่างโมเดลที่ถูกเปลี่ยน

  3. คุณจะต้องปรับค่าคงที่ทั่วโลกเพื่อให้เกมของคุณรู้สึกดี มันเป็นวิธีเดียวกับที่คุณเปลี่ยนสเกลสัมพันธ์ของโลกเพื่อข้ามส่วนที่น่าเบื่อและแพ็คสิ่งที่น่าสนใจมากขึ้นในพื้นที่ขนาด 4x4 กม. (เมืองแม่น้ำภูเขา ฯลฯ ) ที่อยู่ห่างจากกันในโลกแห่งความจริง

  4. หากพวกเขาดูดีขึ้น หากพวกเขาพอดีกับพวกเขา - เก็บไว้ เกมและภาพยนตร์เป็นศิลปะมากกว่าความเป็นจริงเกี่ยวกับการคัดลอกคนตาบอด ดังนั้นคุณจึงได้พบต้นไม้ที่ดูดีซึ่งมีความสูงเพียง 2 เมตรซึ่งแน่นอนว่าคุณขยายและปรับเกมของคุณด้วยวิธีอื่น (ปรับแต่งจานสีรายละเอียดพื้นผิว ฯลฯ )

  5. ฉันสงสัยว่าจะมีความแตกต่างใด ๆ หากพวกเขาใช้จำนวนพิกเซลบนหน้าจอเท่ากัน


8

ที่นี่มันไป

  1. โปรแกรมการสร้างแบบจำลอง 3 มิติมีแนวโน้มที่จะให้คุณเลือกระดับหน่วย อาจถูก จำกัด ไว้ที่ Imperial หรือ Metric แต่เป็นเพียงตัวเลขเท่านั้น สามารถแปลง / ปรับ / ปรับตัวเลขได้อย่างง่ายดาย มันไม่ได้เรื่องจริงๆสิ่งที่ระบบหน่วยคุณใช้ตราบใดที่คุณใช้อย่างใดอย่างหนึ่ง อยู่อย่างสม่ำเสมอดังนั้น 1 เมตรจะไม่กลายเป็น 1 ฟุต

    แก้ไข: หนังสือ: การเข้ารหัสเกมเสร็จสมบูรณ์, การเพิ่มที่สาม, บทที่ 15, pg 525 "เมตรฟุตศอกหรือเคลลิแคม?"

  2. เกมที่มีจุดยอดขนาดใหญ่สามารถทำได้หลายอย่าง สำหรับหนึ่งพวกเขาสามารถแบ่งมันออกเป็นชิ้นเล็ก ๆ แล้วข้อมูลที่อ้างถึงชิ้นนั้นสามารถระบุการชดเชย ค่อนข้างคล้ายกับการใช้ Octrees ซึ่งเป็นการปรับการเรนเดอร์เพื่อหลีกเลี่ยงการเรนเดอร์ส่วนใหญ่ที่มองไม่เห็น อีกวิธีหนึ่ง Double สามารถเก็บ1.79769e + 308ซึ่งเป็นตัวเลขที่ค่อนข้างใหญ่ แต่มีรายละเอียด ลอยสามารถเก็บ 3.40282e + 038 ซึ่งไม่ต้องโทรม

    แก้ไข: การเข้ารหัสเกมเสร็จสมบูรณ์, การเพิ่มที่สาม, บทที่ 13, pg 410, "ระบบพิกัดและพิกัด" (ตารางที่เพิ่มที่ด้านล่างของโพสต์)

  3. คุณอาจต้องการใช้ระบบเมตริกหรือแปลงเป็นระบบหน่วยของคุณเอง น่าสังเกตคือคุณอาจปรับแต่งค่าเล็กน้อย แน่นอนว่าค่า tweaked ของคุณจะไม่ถูกต้องทางร่างกาย แต่มันอาจจะรู้สึกว่า-9.3 m/s^2มีความถูกต้องมากขึ้นในการพูด

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

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

แก้ไข: ตาราง fallowing ถือว่าเป็นจำนวนจุดลอยตัว IEEE แบบ 32 บิต

Game Coding Complete, Third Addition, Table 13.2, pg. 411
Smallest unit         Smallest Representable object  Upper Range    Description of
                      (As a textured polygon)                       largest area

100m                  A group of redwood trees       1.67x10^9      Earth/Moon System
1m                    A Human Being                  1.67x10^7      North and South America
1cm                   A coin                         1.67x10^6      California
1mm                   A flea                         1.67x10^5      San Francisco Bay Area
100 micrometer        A grain of pollen              1.67x10^4      Downtown San Francisco

ข้อมูลทั้งหมดนี้และอื่น ๆ ในการเข้ารหัสเกมเสร็จสมบูรณ์ เขียนโดย Mike McShaffry มืออาชีพในอุตสาหกรรมที่ทำงานเกี่ยวกับเกมตั้งแต่แบล็คแจ็คไปจนถึง Thief: Deadly Shadows


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

การแก้ไขเหล่านั้นเหมาะกับความชอบของคุณหรือไม่
Wolfgang Skyler

ใช่แม้ว่าฉันจะถามเกี่ยวกับstackoverflow.com/questions/872544/precision-of-floating-pointโดยเฉพาะอย่างยิ่งในการจำลองทางฟิสิกส์ แต่ฉันคิดว่าต้องมีคำถามแยกต่างหาก
concept3d
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.