الشبكة العربية لمطوري الألعاب

موهوب  16mofed84 مشاركة 1

انا قرأت كثير من كتب الDeferred render ..استهلاك اقل شيء 3 Render target  ..مما يؤدي الى خفض سرعه اللعبه ..في كل الملفات الي قرأتها
في ملف من انفيديا عن هذا الموضوع ..و الاستهلاك 3 Render target  ..في اخر المف يقولون :
"MORE RESEARCH IS NEEDED!
PLEASE SHARE YOUR FINDINGS!
...."
فكرتي هي (وقد جربتها و نجحت)
Deferred render  العادي :


depth,1
normal,2
color(diffuse),3 or 4(for alpha)
specular,1
specular color ,3
Result : 10 or 11
if you add shininess : 12
3 render target .(4 buffer per one)


my idea is :
depth,1
normal,2
UV,2  <-*
TextureID,1
Result: 6, 2 Render Target
__________
additional
Default light,1
object ID ,1<- for determine the life or water ...
also : 2 Render Target

ارسال احداثيات الصور يكون على الشكل التالي:
1 : اعاده جميع الاحداثيات الى 0و1 اي: 5.5 -> 0.5
2 : رسم هذه الصور في ال Screen space  على فكره عندمه قمت بهذه التجربه الشاشه حجمها 1920 , 1080 موضوعه على حجم 1024 , 760 مؤقتا
دقه الصور التي حصلت عليها خارقه جدا كأنها من  1920 , 1080
رسم الصور full screen quad  5 texture per one draw

مشكله Alpha Channel
ليست بالمشكله الكبيره
الحل يكون في رسم عادي بدون اي Alpha 
ثم في Render 1  او بدونه ترسم مجسمات الافا (الشفافه)

لم يجرب لكنها فكره المستقبلReal time reflection ..
make specular planes per one reflection
max :4 reflections in screen
1: حول جميع مواقع اللمعان ما عدا الاضاءه الى شفاف ثم ارسم انعكاس حول ال plane  ..
ادمج النتيجه مع الdepth ..

لتقليل استهلاك اي Render :
For each Triangle:
check if visible (using normal)<- in CPU(game not shader)
.
don't use bounding sphere to check if visible to camera 
لانها رح تكون ابطأ 





الفكره الاساسيه لهذا الموضوع في Deferred render و الباقي زياده خير
لأني بحثت على google عن Render to UV  Deferred render  و لم اجد احد يستخدم هذه الفكره فما رأيكم بتسجيلها في موقع nVidia

خبير مدير وسام البهنسي مشاركة 2

مفيد،
 
في اليومين السابقين كنتُ أتفكر بالحل الذي قدمته، وأحاول استخراج نقاط ضعف له...
 
طبعاً الحل محدود لدايركت ثري دي 10 و 11، حيث ستحتاج لميزة صفيفات الإكساء (Texture Arrays). المشكلة -النظرية- هنا أن عدد الإكساءات الممكن ربطه بهذه الصفيفة هو 512 كحد أقصى في D3D10، و 2048 في D3D11..
 
المشكلة العملية هي أن الصفيفة تجبرك على وضع إكساءات من نفس الحجم، مما يزيل بعض المرونة. لكننا لو استخدمنا أسلوب الأطلسة لاستطعنا التغلب على هذه المشكلة بسهولة، بل إن ذلك يؤدي إلى زيادة عدد الإكساءات الممكن ربطها.
 
بصراحة أنا أجد الفكرة رائعة!!
 


في 28/رمضان/1432 05:47 ص، غمغم 16mofed84 باستغراب قائلاً:

بحثت على google عن Render to UV  Deferred render  و لم اجد احد يستخدم هذه الفكره فما رأيكم بتسجيلها في موقع nVidia

رأيي الشخصي ألا تضيع فكرتك في هذا المكان. أنا أرى الفكرة من النجاح بحيث أنها تستحق أن تكون مقالة في كتاب GPU Pro. باعتباري أحد محررين الكتاب، فأنا أصوت بشدة لمقالتك، وعلى استعداد لتبنيها في قسم تصميم المحركات. إن أعجبتك الفكرة، نستطيع التفكير أكثر في الموضوع. الآن كتاب GPU Pro 3 في مراحله النهائية، وبعد ذلك سننتقل لـ GPU Pro 4، حيث أعتقد أن مقالتك يجب أن تنشر. نحن نتكلم في غضون 4 أشهر تقريباً. في هذه الأثناء تستطيع البدء بكتابة المقالة ووضعها على مدونتك الخاصة كي تسجل الفكرة باسمك في حال لحقك بها أحد... 
ما رأيك؟

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

موهوب  16mofed84 مشاركة 3

صراحه لم اعتقد ان الموضوع رهيب لهذه الدرجه انت شجعتني جدأ جدأ جدأ جدأ..
انا على DirectX 9  و ليس  10 or 11  حتى اني لم استخدم سوى model shader 2.0  !  و مع صور 1024 !

2048 لم اجربها

و لكن المشكله التي ظهرت في في اطراف ال UV  يظهر مثل border 


و لكن الذي فاجأني اكثر عندما حولت حجم render target  الى نصف حجم الشاشه ! نجحت و بنفس الدقه الا ان الاطار على بعض الاطراف زاد حجمه !

حاولت اخفاء هذا الاطار عن طريق ال Blur ..و لكن بقي اثر بسيط ..و لكنه ليس حل لهذه المشكله لا بد من وجود حلول اخرى..

و المشروع لمن يحب ان ينزله في المرفقات

موهوب  16mofed84 مشاركة 4

و ملف ال CCM الذي يحتوي على معلومات المثلثات و موقع الصور في الملف الاخر ..

صيغه CCM  من برنامج من عملي وليس من برنامج اخر ..يمكن قراءه هذا الملف عن طريق ال xml


عند فتح المشروع و تشغيله ... يطلب منك اختيار ملف ال CCM اختره و سيعرض ..(لم اضع ابداعي في هذا المجسم ..)

موهوب  16mofed84 مشاركة 5

بنسبه لكتاب GPU pro انا جاهز لتقديم العلم لكني لا اعرف هذا الكتاب او ..لم اقرأه ....

انا جاهز لكتابه اي شيء و اذا كنت تريد اضافه اسم الموقع .agdn. فأنا موافق ايضا وكن طلبي صغير ..لو ارى اي مقاله لكي اعرف الطريقه المتبعه ...و اي خدمه انا جاهز لتقديما و احب ان اساعد☺ و اكون مسرور😋

خبير مدير وسام البهنسي مشاركة 6

بداية دعنا نتبحر أكثر في المثال الذي أرسلته. لقد اطلعت على المظللات المستخدمة ولم أفهم كثيراً ما الذي تحاول فعله. هل تستطيع شرحه هنا؟

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

موهوب  16mofed84 مشاركة 7

على رأسي:
1: deferred render عادي مثل اي مشروع ..ولكن كما شرحته في الاعلى UV ...
طبعا يجب اعاده ال UV  الى 0 .....1 اي مع اهمال الرقم و اخذ الرقم العشري ..
7.3 ->0.3
1.0 -> 1.0
-5.3 -> 0.3
الطريقه التي استخدمتها خاطئه و اعترف بذلك يجب اخذ الرقم على انه int  ثم طرحه او جمعه الى float 

2: كما تعلمون الجزء الاهم في الDeferred render  هو الPost-Processing 
عن طريق رباعيه الشاشه Full Screen Quad وهنا الجزء >المخفي< :

foreach material visible in screen :

draw full screen quad and check if the texture ID == TextureIDfrom render

then draw

....

وهنا ايضا اخطأت فيجب ان ارسم بدل
one texture in one full screen quad
four textures in one full screen quad
4 بدل 1

موهوب  16mofed84 مشاركة 8

اهم مشكله انحلت و الحمدلله الحل:
في ملف Albedo.fx


texture RT1;
sampler RTS1 = sampler_state
{
    texture =  ;
    magfilter = NONE;//////<-
    minfilter = LINEAR;
    mipfilter= LINEAR;
    AddressU = CLAMP;
    AddressV = CLAMP;
    BorderColor = float4(0,0,0,0);
};


texture RT2;
sampler RTS2 = sampler_state
{
    texture =  ;
    magfilter = NONE;///////<-
    minfilter = LINEAR;
    mipfilter= LINEAR;
    AddressU = CLAMP;
    AddressV = CLAMP;
    BorderColor = float4(0,0,0,0);
};

موهوب  16mofed84 مشاركة 9

اذا فكرت جيدا ..و بعد التجربه فأنا انسحب من هذه الفكره للاسباب التاليه:
عدد ال Full Screen quads  = textures/4 هذا فقط للالوان اما للاضاءه ..Normal , specular ...Displace  /4 * كل ضوء !
هذا يؤدي الى استهلاك كبير ..

الا انها قد تكون فكره المستقبل في حال ظهور انواع جديده من الصور غير displace normal ....

و بهذا انتهى الموضوع :( شكرا جميعا على التشجيع ..الى انها فكره مستقبليه !