คำถามติดแท็ก frame-rate

ความถี่ที่อุปกรณ์ถ่ายภาพสร้างภาพต่อเนื่องที่ไม่ซ้ำกัน ส่วนใหญ่มักแสดงเป็นเฟรมต่อวินาที (FPS)

11
ฉันควรใช้ขั้นตอนเวลาแบบคงที่หรือแบบแปรผันเมื่อใด
ลูปเกมควรเป็นไปตามขั้นตอนเวลาคงที่หรือแปรผันหรือไม่? เป็นหนึ่งที่เหนือกว่าเสมอหรือตัวเลือกที่เหมาะสมแตกต่างกันไปตามเกม? ขั้นตอนเวลาผันแปร การอัปเดตทางฟิสิกส์จะถูกส่งผ่านอาร์กิวเมนต์ "เวลาที่ผ่านไปนับตั้งแต่การอัปเดตครั้งล่าสุด" และขึ้นอยู่กับอัตราเฟรม position += distancePerSecond * timeElapsedซึ่งอาจหมายถึงทำคำนวณเป็น จุดเด่น : ราบรื่นและง่ายต่อการเขียนโค้ดจุด ด้อย : ไม่สามารถกำหนดค่าได้คาดเดาไม่ได้ในขั้นตอนเล็กหรือใหญ่ ตัวอย่างdeWiTTERS : while( game_is_running ) { prev_frame_tick = curr_frame_tick; curr_frame_tick = GetTickCount(); update( curr_frame_tick - prev_frame_tick ); render(); } ขั้นตอนเวลาคงที่ การอัปเดตอาจไม่ยอมรับ "เวลาที่ผ่านไป" เนื่องจากจะถือว่าการอัปเดตแต่ละรายการเป็นช่วงเวลาที่แน่นอน การคำนวณอาจทำได้position += distancePerUpdateดังนี้ ตัวอย่างมีการแก้ไขระหว่างการเรนเดอร์ จุดเด่น : สามารถคาดการณ์ได้กำหนดขึ้น (ซิงค์เครือข่ายง่ายกว่า) รหัสการคำนวณที่ชัดเจนจุด ด้อย …

8
พวกเขาจะทำอย่างไร: กระเบื้องนับล้านใน Terraria
ฉันได้สร้างเอ็นจิ้นเกมคล้ายกับTerrariaซึ่งส่วนใหญ่เป็นสิ่งที่ท้าทายและในขณะที่ฉันคิดว่าส่วนใหญ่แล้วฉันไม่สามารถคาดเดาได้ว่าพวกเขาจัดการกับกระเบื้องที่สามารถโต้ตอบ / เก็บเกี่ยวได้นับล้าน เกมมีในครั้งเดียว การสร้างไทล์ประมาณ 500,000 แผ่นนั่นคือ 1 ใน 20 ของสิ่งที่เป็นไปได้ในTerrariaในเครื่องยนต์ของฉันทำให้อัตราเฟรมลดลงจาก 60 เหลือประมาณ 20 ถึงแม้ว่าฉันจะยังคงแสดงเฉพาะไพ่ในมุมมองเท่านั้น ใจคุณฉันไม่ได้ทำอะไรกับกระเบื้องเพียงแค่ทำให้พวกเขาอยู่ในความทรงจำ อัปเดต : รหัสถูกเพิ่มเพื่อแสดงว่าฉันทำสิ่งต่าง ๆ อย่างไร นี่เป็นส่วนหนึ่งของชั้นเรียนที่จัดการกับกระเบื้องและดึงพวกเขา ฉันเดาว่าผู้ร้ายคือส่วน "foreach" ซึ่งวนซ้ำทุกอย่างแม้แต่ดัชนีที่ว่างเปล่า ... public void Draw(SpriteBatch spriteBatch, GameTime gameTime) { foreach (Tile tile in this.Tiles) { if (tile != null) { if (tile.Position.X < -this.Offset.X + 32) …

3
ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มันเป็นไปได้สำหรับฉันที่มีหลายคนที่กำลังทำงานอยู่ในขณะเดียวกันเช่นเอ็นจิ้นเกม สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

2
การเคลื่อนไหวนั้นขึ้นอยู่กับอัตราเฟรมแม้จะใช้ Time.deltaTime
ฉันมีรหัสต่อไปนี้เพื่อคำนวณการแปลที่จำเป็นในการย้ายวัตถุเกมใน Unity ซึ่งเรียกว่าLateUpdateมา จากสิ่งที่ฉันเข้าใจการใช้งานของฉันTime.deltaTimeควรจะทำให้เป็นอิสระแปลสุดท้ายอัตราเฟรม (โปรดทราบCollisionDetection.Move()เป็นเพียงการแสดง raycasts) public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If …

5
ประโยชน์ของการกำหนดเฟรมต่อวินาทีคืออะไร (ถ้ามี)
ฉันกำลังทำงานกับเกมง่ายๆใน OpenGL โดยใช้ SDL สำหรับการเริ่มต้นการแสดงผลและการป้อนข้อมูลและปรากฏในแง่ของเวลาที่ฉันมีสองตัวเลือกให้ฉัน หมายเลขหนึ่งที่กำลังนอนหลับสำหรับ optimTimePerFrame - theTimeTakenToRender, เมื่อ optimTimePerFrame ในวินาที = 1 / theFramerateCap (ฉันไม่แน่ใจว่าสิ่งนี้จำเป็นหรือไม่เพราะมันเทียบเท่ากับการใช้ vsync ซึ่งอาจแม่นยำกว่านี้ถ้าการสันนิษฐานของฉันถูกต้องกรุณาบอกฉันทีว่า SDL + OpenGL มี vsync เป็นค่าเริ่มต้นหรือไม่อย่างไร เพื่อเปิดใช้งาน) ส่วนอีกอันคือการวัดเวลาตั้งแต่เฟรมสุดท้ายแสดงผลและปรับการเคลื่อนไหวตามนั้น (เวลาที่สั้นลงในการเรนเดอร์เฟรมจะทำให้เอนทิตีน้อยเคลื่อนไปในเฟรมนั้น) ในแง่ของประสิทธิภาพและการลดการสั่นไหว ฯลฯ ข้อดีและข้อเสียของสองวิธีนี้คืออะไร
13 opengl  sdl  frame-rate  vsync 

2
การปลดล็อกอัตราเฟรมใน XNA / MonoGame จะบอกฉันว่ารหัสของฉันมีประสิทธิภาพหรือไม่
ฉันได้ปลดล็อกอัตราเฟรมใน MonoGame ผ่านทาง: this.graphics.SynchronizeWithVerticalRetrace = false; base.IsFixedTimeStep = false; และใช้เป็นพื้นฐานสำหรับการปรับปรุงและวาดภาพในเกมอย่างมีประสิทธิภาพ ที่ความละเอียด240 x 160โดยไม่มีการวาดหรืออัปเดตใด ๆ ยกเว้นตัวนับเฟรมฉันจะได้รับค่า FPS 9,000ถึง11,000 FPS หากฉันเพิ่มรหัสทั้งหมดของฉันลงไปมันจะลดลงเหลือประมาณ1,100 FPS นี่เป็นตัวบ่งชี้ที่ดีว่ารหัสของฉันทำให้ GPU ช้าลงอย่างมาก (10x) และฉันควรจะกังวลไหม? เกมจะวิ่งที่ 60 FPS ดังนั้นฉันก็ยังค่อนข้างห่างไกลจากจุดนั้น แต่ควรจะกังวลเกี่ยวกับอัตราเฟรมที่ปลดล็อคที่จุดใด GPU: AMD FirePro W5000 (FireGL V)

5
ทำงานกับก้อนจำนวนมาก ปรับปรุงประสิทธิภาพ?
แก้ไข:เพื่อสรุปคำถามฉันมีโลกตาม voxel (สไตล์ Minecraft (ขอบคุณคอมมิวนิสต์ Duck)) ซึ่งเป็นทุกข์จากการทำงานที่ไม่ดี ฉันไม่ได้เป็นแหล่งกำเนิดบวก แต่ต้องการคำแนะนำที่เป็นไปได้เกี่ยวกับวิธีกำจัดมัน ฉันกำลังทำงานในโครงการที่โลกประกอบด้วยลูกบาศก์จำนวนมาก (ฉันจะให้ตัวเลขแก่คุณ แต่เป็นโลกที่ผู้ใช้กำหนด) หนึ่งการทดสอบของฉันอยู่ประมาณบล็อก (48 x 32 x 48) โดยทั่วไปบล็อกเหล่านี้จะไม่ทำอะไรเลยในตัวเอง พวกเขานั่งอยู่ตรงนั้น พวกเขาเริ่มใช้เมื่อมันมาถึงการมีปฏิสัมพันธ์ของผู้เล่น ฉันต้องตรวจสอบก้อนที่ผู้ใช้โต้ตอบกับเมาส์ (เลื่อนเมาส์คลิก ฯลฯ ) และตรวจจับการชนเมื่อผู้เล่นเคลื่อนที่ ตอนนี้ฉันมีความล่าช้าอย่างมากในตอนแรกวนไปทุกช่วงตึก ฉันจัดการเพื่อลดความล่าช้านั้นโดยวนลูปผ่านบล็อกทั้งหมดและค้นหาบล็อกที่อยู่ในช่วงของอักขระและจากนั้นวนซ้ำผ่านบล็อกเหล่านั้นสำหรับการตรวจจับการชน ฯลฯ อย่างไรก็ตามฉันยังคงอยู่ที่ 2 เฟรมต่อวินาทีที่น่าหดหู่ ใครบ้างมีความคิดอื่น ๆ เกี่ยวกับวิธีที่ฉันสามารถลดความล่าช้านี้ Btw ฉันใช้ XNA (C #) และใช่มันเป็น 3d
12 xna  3d  frame-rate  voxels 

4
การแก้ไขเฟรมอย่างที่ใช้โดย SmoothVideo Project เป็นตัวเลือกในการเพิ่มจำนวนเกมโดยไม่กระทบกับประสิทธิภาพหรือไม่?
โครงการ SmoothVideo ใช้การสอดแทรกเฟรมภาพต่อวินาทีเพื่อเพิ่มวิดีโอจาก 24 ถึง 60 ผลเป็นที่น่าประทับใจสวย ฉันสงสัยว่าสามารถใช้กับสิ่งนี้ได้หรือไม่และจะดูดีในวิดีโอเกมหรือไม่ มันใช้ทรัพยากรน้อยกว่าการเรนเดอร์เฟรมทั้งหมดดังนั้นจะช่วยให้แท่นวางที่ต่ำกว่าแสดงผลได้ที่คุณภาพของแท่นวางที่ดีกว่ามากในบางระดับของการประนีประนอม ฉันรู้ว่ามันจะไม่ถูกต้องและจะเพิ่มความล่าช้าในการป้อนข้อมูลเล็กน้อยตามที่จำเป็นต้องยึดไว้กับเฟรมใหม่ล่าสุดเพื่อให้สามารถสร้างและแทรกการแก้ไขที่หนึ่ง มันไม่ได้แย่เหมือนฟูลเฟรม แต่โดยเหตุผลของฉันมีเพียงความล่าช้าเท่านั้นคือเวลาการแก้ไขบวกครึ่งเวลาในการรีเฟรชเฟรมต่อวินาทีดั้งเดิม ดังนั้นสำหรับ 30 fps มันจะเป็นเวลาประมาณ 33ms / 2 + บางทีความล่าช้านี้อาจทำให้มันไม่เหมาะกับเกมบุคคลที่ผ่านมาเร็ว แต่ฉันสงสัยว่ามันจะเป็นอุปสรรคในเกมที่เล่นช้ากว่า ความล่าช้าจะลดลงที่อัตราเริ่มต้นที่สูงขึ้นดังนั้นฉันคิดว่ามันจะคุ้มค่าอย่างแน่นอนเมื่อไปจาก 60fps ถึง 100 + fps ซึ่งปรับปรุงประสบการณ์แม้ว่าจะเพิ่มขึ้นเล็กน้อยในขณะที่การเก็บภาษีบนระบบมาก

3
กรอบการเคลื่อนไหวอิสระ
ฉันได้อ่านการเคลื่อนไหวอีกสองเธรดที่นี่: การเคลื่อนไหวตามเวลา Vs การเคลื่อนไหวตามอัตราเฟรมหรือไม่ และ เมื่อใดที่ฉันควรใช้ขั้นตอนเวลาที่แน่นอนหรือแปรผัน แต่ฉันคิดว่าฉันขาดความเข้าใจพื้นฐานของการเคลื่อนไหวแบบอิสระของเฟรมเพราะฉันไม่เข้าใจว่าหัวข้อเหล่านี้กำลังพูดถึงอะไร ฉันติดตามบทเรียน SDL ของ lazyfoo และเข้าสู่บทเรียนอิสระของเฟรม http://lazyfoo.net/SDL_tutorials/lesson32/index.php ฉันไม่แน่ใจว่าส่วนการเคลื่อนไหวของรหัสพยายามที่จะพูดอะไร แต่ฉันคิดว่ามันเป็นแบบนี้ (โปรดแก้ไขให้ฉันถ้าฉันผิด): เพื่อให้มีการเคลื่อนไหวแบบอิสระเฟรมเราต้องค้นหาว่าวัตถุอยู่ไกลแค่ไหน ( เช่นสไปรต์) เคลื่อนไหวภายในกรอบเวลาที่กำหนดเช่น 1 วินาที หากจุดเคลื่อนที่ที่ 200 พิกเซลต่อวินาทีฉันต้องคำนวณว่ามันเคลื่อนที่ภายในวินาทีนั้นด้วยการคูณ 200 pps โดย 1/1000 ของวินาที นั่นถูกต้องใช่ไหม? บทเรียนบอกว่า: "ความเร็วเป็นพิกเซลต่อวินาที * เวลานับตั้งแต่เฟรมสุดท้ายเป็นวินาทีดังนั้นหากโปรแกรมทำงานที่ 200 เฟรมต่อวินาที: 200 pps * 1/200 วินาที = 1 พิกเซล" แต่ ... ฉันคิดว่าเราคูณ 200 pps …
11 frame-rate 

6
ทำให้อัตราเฟรมของ pygame เร็วขึ้น
จากการทำโปรไฟล์เกมของฉันฉันเห็นว่าเวลาส่วนใหญ่ในการดำเนินการของเกมงานอดิเรกของฉันคือระหว่างการ blit และการพลิก ขณะนี้มันทำงานที่ประมาณ 13fps เท่านั้น การ์ดแสดงผลของฉันค่อนข้างดีดังนั้นฉันเดาว่า pygame ไม่ได้ใช้งาน ไม่มีใครรู้เกี่ยวกับตัวเลือกกราฟิก / การแสดงผลที่ฉันต้องตั้งค่าใน pygame เพื่อให้เร็วขึ้น? หรือนี่เป็นสิ่งที่ฉันต้องอยู่ด้วยตั้งแต่ฉันเลือก pygame?

2
ข้อ จำกัด เฟรมโหลด
ที่ประสบความสำเร็จมากที่สุดเครื่องมือเกมการแข่งขันชอบid Tech, GoldSrc, Sourceและเช่นอนุญาตให้มีข้อ จำกัด framerate คุณสามารถเล่นกับ 30 กับ 60 กับ 99 กับ 72 กับ 68 ฯลฯ ในระยะสั้นคุณสามารถ cap มันและควบคุมหมวก ฉันสงสัยว่าฉันจะ จำกัด อัตราเฟรมอย่างไร ไม่สนใจรหัส แต่เป็นทฤษฎี

1
การแยกโลจิคัล / อัพเดตจากโค้ดการแสดงผล / การวาดในเธรดเดี่ยวโดยใช้โหมดสลีป
ฉันได้อ่านแล้วว่าความเร็วของวัตถุในเกมไม่ควรถูกขัดขวางโดย FPS แต่ควรขึ้นอยู่กับเวลา ฉันจะแยกโค้ดอัปเดต / วาดเพื่อเพิ่มประสิทธิภาพได้สูงสุดโดยไม่ จำกัด อัตราการวาดและให้อัตราการอัปเดตตรรกะอย่างต่อเนื่องตามเวลาได้อย่างไร รหัสหลอกปัจจุบันของฉันเป็นดังนี้ loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } ปัญหาคือรหัสการวาดภาพเป็นอุปสรรคต่อประสิทธิภาพของอัตราการอัปเดต () และมันใช้ cpu 100% เพราะถ้าการนอนหลับถูกโยนทิ้งมันจะสลัดฟังก์ชันการวาดภาพ / ลอจิกออก ฉันใช้ SDL ด้วยและดูเหมือนจะไม่มีตัวเลือก vsync ฉันเคยได้ยินคำศัพท์ที่แก้ไขแล้วและเปลี่ยนแปลงเวลาได้อย่างรวดเร็ว แต่ฉันไม่แน่ใจว่าจะทำอย่างไรกับการนอนหลับ ()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.