עבור לתוכן

דיון מרוכז- קריעת תמונה, V-Sync ונפילות FPS

Featured Replies

פורסם

רוב הגיימרים כנראה מודעים למושג V-Sync, או Vertical Synchronization.

כשהוא כבוי, בזמן משחק, יוצגו פריימים שאינם מסונכרנים עם קצב הרענון של המסך עצמו – כתוצאה מכך נפגע מתופעת לוואי הנקראת

"קריעת תמונה", (או "Tearing"). זאת תורגש בעיקר במקרים של אורות מהבהבים במשחק או תנועה אופקית מתמשכת.

מלבד הפגיעה באיכות \ אמינות התמונה ותחושת התנועה הכללית, כאבי ראש כתוצאה מכך נפוצים.

• להלן תמונות המעידות על tearing, כאשר נלקחו בזמן תנועה (לחץ להגדלה) :

16c9evn.png 1zxqqrr.jpg 238179d1276487450t-ist-tearing-und-hat-es-mit-v-sync-zutun-css.jpg

קריעת תמונה תופיע כשכרטיס המסך מעדכן את באפר התצוגה בזמן רענון המסך (60hrz = שישים רענונים לשנייה)

jr6tkz.png

V-Sync מסנכרן את כרטיס המסך עם קצב הרענון של המסך ובכך מונע את תופעת ה-Tearing, אך עם זאת ישנו חסרון ואני אסביר: כרטיסי המסך לרוב משתמשים בבאפר כפול “Double Buffer” בכל רגע נתון - ברגע שרינדור הסצנה הושלם בבאפר אחד (מאחורי הקלעים), התמונה השלמה עוברת לבאפר השני לצורך הצגתה על גבי המסך. כאשר V-Sync פעיל, כרטיס המסך חייב להמתין למסך שירענן את התמונה.משמעות הדבר היא שההחלפה בין הבאפרים יכולה להתבצע אך ורק לאחר שהמסך סיים להציג תמונה שלמה.כתוצאה מכך, במשחק המשתמש ב-Double Buffer, קצב הפריימים לא יכול להשתנות בחופשיות ומוגבל לחלוקת קצב הרענון במספרים שלמים בלבד. לצורך העניין, מסכי LCD מאפשרים קצב רענון מקסימאלי של 60hz. במקרה זה קצבי הפריימים האפשריים יהיו: 60fps, 30fps, 20fps, 15fps, 12fps, 10fps...

ז"א, כאשר Vsync פעיל בשימוש Double Buffer, ובמידה וכרטיס המסך אינו מסוגל לייצר תמיד 60 פריימים לשנייה, קצב זה ייפול ישירות ל-30fps. במצבים בהם הכרטיס מייצר פחות מ-30fps, הקצב ייפול ל-20fps וכך הלאה...

כאן בדיוק “Triple Buffering” נכנס לסיפור, זה מאפשר איכסון פריים שלישי בבאפר המוסף, כך שתמיד קיים פריים מוכן לתצוגה.אם נכנסתם להגדרות דריבר כרטיס המסך, יכולתם להבחין באפשרות להפעיל “Triple Buffering”. למרבה הצער, אפשרות זאת תקיפה לגבי משחקים המרונדרים ב-OpenGL בלעדית, כגון Doom3 או משחקים המשתמשים במנוע שלו (Quake4, Prey וכו'..) אולם, הרוב המוחלט של המשחקים מרונדרים ב-Direct3D של מיקרוסופט, הידוע בשם DirectX. ע"מ להכריח Triple Buffer תחת DirectX, הכרחי להשתמש בתוכנה צד שלישי (אולם, קיימים מקרים בהם המשחק כבר מתוכנת מראש לעבוד עם triple buffer). התוכנה המדוברת היא Direct3D Overrider והיא ניתנת בחינם ככלי נפרד המשולב לתוכנה RivaTuner (תוכנת אוברקלוק ו-Tweaking לכרטיסי מסך. *כבר לא בפיתוח). את RivaTuner ניתן להוריד בגרסתה האחרונה כאן. לנוחיותכם צירפתי את D3DOverrider להורדה בתחתית הפוסט (אין צורך להוריד\להתקין את RivaTuner)

D3Doverrider פועלת על DX8 / DX9 / DX10 / DX11 / DirectDraw , אינה מבזבזת משאבים והיא אפילו "Punkbuster SAFE".


נקודות חשובות:

• לא ניתן להשתמש ב-Triple Buffering במערך SLI \ CrossFire (כולל כרטיסי Dual-GPU המנצלים 2 ליבות בו זמנית).

Triple Buffering לא פועל עם שיטת הרינדור הנפוצה (AFR) של מערכים אילו. אומנם, אנשים הצליחו להפעיל את זה במערכי SLI, כאשר הכריחו שיטת רינדור בשם Split Frame Rendering, או "SFR" מלוח הבקרה של Nvidia.

• בשימוש ב-V-Sync, ה-FPS יוגבל לקצב הרענון של המסך (60hrz = 60fps max).

חיסרון זה הוא מבחינת Benchmark בלבד, מאחר וכל FPS מעל לקצב הרענון לא יוצג על המסך ממילא.

• ישנם משחקים (מעטים) אשר התוכנה עלולה להפריע להם - במקרים כאלה תקבלו מסך שחור \ קריסה של המשחק. הפתרון במקרה זה הוא להוסיף פרופיל ל-d3doverrider ולהצביע על קובץ ההפעלה של המשחק, בפרופיל זה אפשר לנסות לקבוע רמה אחרת של-Application Detection Level, או לקבוע NONE במידה ורוצים להתעלם מהאפליקציה ולוותר על triple buffer. כמו כן, מומלץ להוסיף פרופיל שכזה (NONE) ל-3DMARK, אחרת התוצאה עלולה להיות נמוכה מהרצוי.

אלטרנטיבה היא כמובן לכבות את ה-d3doverrider במקרה הצורך.

• הבאפר "השלישי" צורך זכרון כ.מסך אשר יכול היה לשמש לאחסון טקסטורות וכדו'. בכל אופן הצריכה היא מינימאלית \ לא מורגשת.

• המציאות היא שבשימוש בבאפרים + Vsync קיימת תופעה הנקראת “Mouse Lag” או “Input Lag” (השהיית קלט)

במצב נורמאלי של שימוש ב- Double Buffer, קיים זמן אחזור (Latency) של כ- 16ms. זמן זה דיי זניח מאחר ורובנו לא מסוגלים להבחין בו, מה שמוביל להנחה הרווחת שהמצב מקובל וסטנדארטי. Triple Buffering מקפיץ זמן זה לכ-24ms, אשר מספיק להפריע לרובנו. קביעת ערך ה-Maximum pre-rendered frames בלוח הבקרה של Nvidia ל-"2" (בברירת מחדל הוא "3") מפיל זמן זה בחזרה ל-16ms מבלי "לשבור" את ה-Triple Buffering. ניתן לצמצם עוד יותר את הלאג בהגדרה ל-"1", אך יש לקחת בחשבון כי ככל שהערך נמוך כך גם יתכן קצב פריימים פחות עקבי או stutter.

בנוסף לכך שהלאג מושפע מערך ה-pre-rendered frames, הוא תלוי גם בקצב ה-FPS עצמו - ככל שה-FPS נמוך כך יגבר הלאג.

להגדרת ערך ה-Maximum pre-rendered frames באמצעות לוח הבקרה של אנוידיה - NVCP :

3D Settings / Manage 3D Settings / Global Settings / Maximum pre-rendered frames

להגדרת ערך ה-PreRender Limit באמצעות התוכנה RivaTuner לכל גרסאותיה :

Driver Settings / Customize / DirectDraw and Direct3D Settings / VSync / Prerender Limit

- שני ההגדרות הנ"ל תקפות לגבי DirectX בלבד

- שינוי ערך זה לכרטיסי AMD/ATI (אצלם נקרא בשם FlipQueueSize) אפשרי באמצעות התוכנה ATI Tray Tools או RadeonPro


לסיכום :

V-Sync מונע Tearing אך עלול לגרום לנפילות FPS

Triple Buffering מונע נפילות FPS אך מגביר Mouse Lag

הורדת ערך ה-Pre-Rendered Frames מונעת \ מצמצמת Mouse Lag

אם נוציא משוואה יעילה מ-3 אילו, הרי ש Pre-Rendered Frames (2/1) + Triple Buffer + V-Sync יתנו תוצאה אידיאלית.


התוכנה D3DOverrider מצורפת להורדה בתחתית הפוסט

* ניתן להצביע עם הסמן על כל אופציה ע"מ לקבל הסבר ב-tooltip

2hx4qgx.jpg

  • תגובות 284
  • צפיות 160.8k
  • נוצר
  • תגובה אחרונה
פורסם

אחלה הצעת ייעול

נכנס ל"סטיקי"

פורסם
  • מחבר

נהדר, הסטיקי הראשון שלי ;D

נקווה שישרת את הקהילה, יום טוב :xyxthumbs:

  • 2 שבועות מאוחר יותר...
פורסם

לא שמתי לב אבל אחלה סטיקי.....

  • 2 שבועות מאוחר יותר...
פורסם
  • מחבר

שיחרור חדש ל-Rivatuner - גרסא 2.04

ולהלן השדרוגים ל- D3DOverrider v1.5 :

Updated D3DOverrider v1.5 bundled utility:

* Considering that triple buffering is normally being used in conjunction with vertical synchronization, now D3DOverrider gives you options for forcing VSync for DirectDraw, Direct3D8, Direct3D9 and Direct3D10 applications. Similar to triple buffering forcing options, new VSync forcing options are fully hardware and OS independent and can be used to force VSync under any OS on both NVIDIA and ATI GPU based display adapters.

* Similar to triple buffering forcing events, VSync forcing events are also automatically sent to RivaTuner's event history panel.

Please take a note that it applies only to Direct3D8 and Direct3D9 VSync forcing events which are performed once per application lifetime. DirectDraw and Direct3D10 VSync forcing events are performed at per-frame due to specifics of DirectDraw and Direct3D10 API so they are not reflected into event history panel.

* Improved race condition preventing algorithm in the hooking system. New algorithm improves compatibility with multithreaded rendering engines (e.g. Bioshock) calling frame presentation routine concurrently from different threads.

פורסם

אז רגע אחד.

אם אני שם Vsynce + triple buffer זה יתקן את הקו הזה שמופיע בכל פעם שהזווית מצלמה זזה?

פורסם
  • מחבר

ברגע שאתה שם Vsync, אכן לא יהיה יותר "קו" \ חתכים אופקיים כאילו...

אם בנוסף תאפשר גם Triple Buffer אז לא יהיו קפיצות לא רצויות של ה- FPS.

* Triple Buffer הוא לא תנאי לשימוש ב-Vsync, אך מומלץ ביותר בשילוב עם Vsync.

פורסם

ברגע שאתה שם Vsync, אכן לא יהיה יותר "קו" \ חתכים אופקיים כאילו...

אם בנוסף תאפשר גם Triple Buffer אז לא יהיו קפיצות לא רצויות של ה- FPS.

* Triple Buffer הוא לא תנאי לשימוש ב-Vsync, אך מומלץ ביותר בשילוב עם Vsync.

וואלה ואני מחפש הרבה זמן איך לפתור את התעלומה הזאת של הקו!

תודה רבה עזרת לי מאוד! אני ייתן לזה ניסיון.

פורסם

נחמד מאוד לדעת! תודה!

פורסם

באיזה משחקים ניסית את זה? ב - Bioshock ו graw2 זה לא עובד

פורסם

לעשות Force On לVsync+Trip Bufferingדרך הדרייבר באמת קשה...

::)

פורסם

כנראה שיותר קשה להגיב כמו בנאדם.

wise ass

פורסם
  • מחבר

קודם כל הוא לא צריך לעשות את זה דרך הדריבר כי TripleBuffer לא תופס לגבי DirectX מהדריבר.

אני בדקתי עכשיו על Bioshock וזה עובד...

Jogogold, לא כל כך הבנתי מה בדיוק לא עובד לך ?

אני רואה שאתה על Vista, אבל ה-d3doverrider צריך לעבוד גם ב-DX10. תוריד Rivatuner 1.04.

Vsync אתה יכול להפעיל דרך המשחק עצמו (או להכריח דרך ה-d3doverrider החדש, אם בא לך)

Triple Buffer אתה מכריח בעזרת D3DOverrider, בפרופיל הגלובלי נאמר, לשם הבדיקה.

וזה כל הסיפור.

סימנים להצלחה: (קודם כל תריץ FRAPS שתוכל לראות את ה-FPS)

1. ה-FPS לא יעבור את קצב הרענון של המסך - למשל 60FPS (סימן ש-Vsync עובד)

2. אתה לא רואה חתכים\קריעת תמונה (סימן ש-Vsync עובד)

3. ה-FPS לא יפול מ-60 ל-30 ישירות, ז"א, אם אתה יכול לראות את ה-FPS בסביבות ה-50~ למשל , סימן ש-Triple Buffer עובד.

[glow=red,2,300]4[/glow]. בהנחה שאתה לא מעוניין להסתמך על העיניים שלך בבדיקה, אתה יכול להפעיל Event Viewer של Rivatuner ורשום שם הכל:

- פתח את ה-Hardware Monitoring של RivaTuner.

- לחץ SETUP למטה מצד ימין

- מתחת ל-Data Sources, סמן את Event Viewer.

- עכשיו הרובליקה נוספה למוניטור. תעלה את המשחק ותחזור למוניטור לראות מה הוא רשם על ההצלחה של d3doverrider.

כשאני מצביע על ה-event רשום בחלון קטן:

Event Markers :

1. Bioshock.exe, D3Doverrider : Triple Buffering has been forced in IDirect3D9::CreateDevice

פורסם

תודה, היתה לי בעיה בדרייבר אבל זה הסתדר אחרי שהורדתי את 163.71

מאוד מעניין, עובד יפה. תודה על הטיפ.

איך לא שמענו על זה עד עכשיו?

פורסם

זה מגביל את הFPS שלי ל60 FPS למרות שקצב רענון המסך שלי הוא 75Hrtz...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים