דיון מרוכז- קריעת תמונה, V-Sync ונפילות FPS - כרטיסי מסך - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


SyndromE

Recommended Posts

רוב הגיימרים כנראה מודעים למושג 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 במערך \ CrossFire (כולל כרטיסי Dual-GPU המנצלים 2 ליבות בו זמנית).

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

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

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

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

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

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

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

במצב נורמאלי של שימוש ב- Double Buffer, קיים זמן אחזור (Latency) של כ- 16ms. זמן זה דיי זניח מאחר ורובנו לא מסוגלים להבחין בו, מה שמוביל להנחה הרווחת שהמצב מקובל וסטנדארטי. Triple Buffering מקפיץ זמן זה לכ-24ms, אשר מספיק להפריע לרובנו. קביעת ערך ה-Maximum pre-rendered frames בלוח הבקרה של ל-"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

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

- שינוי ערך זה לכרטיסי 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
  • נוצר
  • תגובה אחרונה
  • 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 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.

קישור לתוכן
שתף באתרים אחרים

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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. .exe, D3Doverrider : Triple Buffering has been forced in IDirect3D9::CreateDevice

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...