المشاركة الأصلية كتبت بواسطة khalil@1
هذا ما أقصده حيث في لعبة DIRT 2 تدعم بطاقات انفيديا 2X, 4X, 8X, 8X CSAA, 16X CSAA, 8xQ CSAA, and 16xQ CSAA
وتدعم بطاقات ATI في تلك اللعبة 2X, 4X, 8X MSAA
وعند عمل اختبار لهذه اللعبة ولنفرض أنه تم تطبيق 8X AA هل تصبح تلك المقارنة عادلة؟ طالما أن MSAA تستهلك أكثر من طاقة الكرت لتعطي صورة أفضل؟
الأمثلة التي أوردتها في مشاركتي السابقة تنطبق على لوحة التحكم عند تفعيل ال AA
أما الألعاب :
إذا أخذنا DIRT 2 كمثال :
بطاقات nVIDIA تدعم : 2x MSAA , 4x MSAA , 8x MSAA , 8x CSAA , 16x CSAA , 8xQ CSAA , 16xQ CSAA
بطاقات ATI تدعم : 2x MSAA , 4x MSAA , 8x MSAA
لا أعتقد أن أحد سوف يقارن كرت من ATI على 8x MSAA مع كرت من nVIDIA على 8x CSAA مثلا ويترك 8x MSAA .
هنالك ألعاب يتم توحيد معيار ال AA على MSAA و هنالك ألعاب أخرى لا يتم توحيد المعيار , فإذا كانت اللعبة لاتحتوي تفاصيل عند ال AA مثل :
2X
4X
8X
في هذه الحالة عند المقارنة على 8x يفضل التفعيل من لوحة التحكم للحصول على مقارنة عادلة وعدم حصول لبس في المقارنة , بحيث يتم تفعيل 8xQ من لوحة تحكم nVIDIA , مقابل تفعيل 8x من لوحة تحكم ATI .
قد يتبادر للذهن أن nVIDIA تغش في ال AA وخاصة على ال 16X ولماذا 16xQ CSAA وليس 16x MSAA ؟
الإجابة على هذا السؤال سهل ال Directx9 , Directx10 عند تفعيل ال AA فإن أقصى قيمة يدعمها لل AA هي :
8 لل Stored Color/Z Samples
16 لل Coverage Samples
وبالتالي عند تصميم أي لعبة تعتمد على ال AA لل Directx فإن أعلى قيمة لل AA هي 8,16 أي 16xQ CSAA وللحصول على قيم أعلى فإنه ينبغي على مبرمجي اللعبة الإعتماد على دعم ال AA خارج نطاق ال Directx (لوحة التحكم مثلا) , وإذا لم يتم ذلك فسنشاهد أعلى إعدادات هي 8x MSAA .
* إذن nVIDIA قامت بوضع 16xQ CSAA بهذه القيم لأنها أعلى قيم يدعمها ال Directx .
من ناحية برمجية بحته عند برمجة لعبة DIRT مثلا بال Directx9 فإن المتغيرات التي يتم تمريرها كالتالي :
2x MSAA= D3DMULTISAMPLE_2_SAMPLES, 0
4x MSAA= D3DMULTISAMPLE_4_SAMPLES, 0
8x MSAA= D3DMULTISAMPLE_8_SAMPLES, 0
8x CSAA= D3DMULTISAMPLE_4_SAMPLES, 2
8xQ CSAA= D3DMULTISAMPLE_8_SAMPLES, 0
16x CSAA= D3DMULTISAMPLE_4_SAMPLES, 4
16xQ CSAA= D3DMULTISAMPLE_8_SAMPLES, 2
ال CSAA موضحة في جدول على موقع nVIDIA على الرابط :
https://developer.nvidia.com/object/...ampled-aa.html
كود ال AA في لعبة DIRT 2 على ال Directx9 يمكن محاكاته كالتالي :
آلية عمل هذا الكود :
إذا كان كرت الشاشة ATI :
2x MSAA
4x MSAA
8x MSAA
هل كرت الشاشة nVIDIA ? ----> لا ----> خروج .
--------------------------------------------------------------
إذا كان كرت الشاشة nVIDIA :
2x MSAA
4x MSAA
8x MSAA
هل كرت الشاشة nVIDIA ? ----> نعم ----> إكمال إضافة الخيارات.
8x CSAA
8xQ CSAA
16x CSAA
16xQ CSAA
هنالك العديد من الألعاب التي لاتضع الشرط الخاص بكروت nVIDIA و بالتالي فإن قيم ال AA تكون متساوية مع ATI .
----------------------------------------------------------------------------------------------
نلاحظ عند البرمجة بال Directx9 فإن قيم ال AA تحتاج للحفظ أكثر منها للفهم .
مع مجيء ال Directx10 حلت الإشكالية وأصبح إدخال قيم ال AA نفسه كما في الجدول :
وبالتالي أصبحت أكثر سهولة وفهم .
قيم ال CSAA موضحة في جدول على موقع nVIDIA على الرابط :
قمت بتجربة بتجربة بسيطه للكود الخاص بال AA في ال Directx10 :
كود:
typedef struct DXGI_SAMPLE_DESC
{
UINT Count;
UINT Quality;
} DXGI_SAMPLE_DESC;
حيث تم تعريف تركيب جديد يحتوي Count وهو عبارة عن قيمة Stored Color/Z Samples و Quality وهو عبارة عن قيمة Coverage Samples .
كود:
typedef struct DXGI_SWAP_CHAIN_DESC
{
DXGI_MODE_DESC BufferDesc;
DXGI_SAMPLE_DESC SampleDesc;
DXGI_USAGE BufferUsage;
UINT BufferCount;
HWND OutputWindow;
BOOL Windowed;
DXGI_SWAP_EFFECT SwapEffect;
UINT Flags;
} DXGI_SWAP_CHAIN_DESC;
أستخدام التركيب DXGI_SAMPLE_DESC عن طريق SampleDesc
كود:
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory( &sd, sizeof( sd ) );
sd.BufferCount = 1;
sd.BufferDesc.Width = width;
sd.BufferDesc.Height = height;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = g_hWnd;
// Stored Color/Z Samples قيمة
sd.SampleDesc.Count = 1;
// Coverage Samples قيمة
sd.SampleDesc.Quality = 0;
sd.Windowed = TRUE;
هذه التجربه رغم بساطتها فقد وضحت الكثير من الأمور
1- أقل قيمة لل (sd.SampleDesc.Count (Stored Color/Z Samples هي 1 ولن يعمل البرنامج على القيمة 0
2- أعلى قيمة لل (sd.SampleDesc.Count (Stored Color/Z Samples هي 8 ولن يعمل البرنامج على قيمة أعلى .
3- (sd.SampleDesc.Count (Stored Color/Z Samples يقبل القيم 1,2,4,8 ولن يعمل البرنامج على الأعداد الفردية التي تتخللها .
4- أقل قيمة لل (sd.SampleDesc.Quality (Coverage Samples هي0 وأعلى قيمة 16 ويقبل الأعداد الفردية .
5- أعلى قيمة يمكن إدخالها لل AA هي 8,16 وهي القيمة الخاصة ب 16xQ CSAA .
هنالك سؤال يتبادر للذهن وهو : هل فرق الجوده بين 8x MSAA و 8x CSAA كبير ؟
أترك لكم الإجابة لكم بعد أخذ عينه وتكبيرها أي الصورتين بها تنعيم حواف أفضل وهل الفرق بينها كبير .
المفضلات