PDA

نسخه کامل مشاهده نسخه کامل : HDR Rendering در XNA



PersianLoverMRB
29-05-2011, 15:41
سلام خدمت دوستان عزیز.
من دارم روی یه برنامه با XNA کار می کنم.در حال حاظر برای نورپردازی از Deferred Rendering استفاده می کنم و می خوام قابلیت HDR Rendering هم بهش اضافه کنم ولی چندتا مشکل دارم.
هنگام ایجاد Light Map تو Deferred Rendering باید Additive Blending فعال باشه منتها اگر بخوام برای HDR از یک رندر تارجت fp16 استفاده کنم بدلیل ممیز شناور بودن تارجت نمی شه از Blending استفاده کرد.
اگر هم بخوام از LogLov Encoding استفاده کنم همین مشکل وجود خواهد داشت.
بازم همین مشکل رو برای ابجکت های شفاف و particle ها وجود داره.
کلا گیر کردم نمی دونم چیکار کنم.
اگه یه نفر منو راهنمایی کنه و از سردرگمی تو تاپیکای خارجی منو نجات بده واقعا ممنونش می شم.:41:

Armin060
29-05-2011, 16:01
از رندر تارجت منظورت "Render target" هست؟

PersianLoverMRB
30-05-2011, 14:48
از رندر تارجت منظورت "Render target" هست؟
اره دیگه:31:
اشتباه که ننوشتم!

Armin060
30-05-2011, 14:54
اشتباه که ننوشتم!
اشتباه نوشتی. میشه "رندر تارگت"

hossainiir
05-06-2011, 23:28
سلام،
من به XNA زیاد آشنا نیستم ولی روی MDX و Unmanaged DirectX مسلط هستم، اتفاقا در حال حاضر روی یک پروژه دارم کار می کنم که توش از رندر تاخیری استفاده می کنم و همچنین این پروژه دارای HDR Lighting هم هست که تمامی این قسمت ها تقریبا تمام شده اند.
در مورد آبجکتهای ترنسپرنت و شفاف باید بگم از اشکالات رندر تاخیری همین اشیا هستند و تنها راه حل آن رندر کردن این دسته از اشیا در مراحل پایانی رند است، ضمنا Crysis 2 هم برای این حل مشکل همین کارو کرده.
در مورد سوال اولتون نمی تونم کمکتون کنم چون من با MDX دارم جواب می گیرم!!!

در ضمن سایت GameDev.net بهترین سایت در زمینه پرسش و پاسخ درباره بازی سازی است، خیلی خوب هم جواب میدن.

PersianLoverMRB
06-06-2011, 15:46
سلام،
من به XNA زیاد آشنا نیستم ولی روی MDX و Unmanaged DirectX مسلط هستم، اتفاقا در حال حاضر روی یک پروژه دارم کار می کنم که توش از رندر تاخیری استفاده می کنم و همچنین این پروژه دارای HDR Lighting هم هست که تمامی این قسمت ها تقریبا تمام شده اند.
در مورد آبجکتهای ترنسپرنت و شفاف باید بگم از اشکالات رندر تاخیری همین اشیا هستند و تنها راه حل آن رندر کردن این دسته از اشیا در مراحل پایانی رند است، ضمنا Crysis 2 هم برای این حل مشکل همین کارو کرده.
در مورد سوال اولتون نمی تونم کمکتون کنم چون من با MDX دارم جواب می گیرم!!!

در ضمن سایت GameDev.net بهترین سایت در زمینه پرسش و پاسخ درباره بازی سازی است، خیلی خوب هم جواب میدن.

خب در مورد ابجکت های شفاف بایدم در مرحله بعدی به صحنه اضافه بشن.مشکل من تو HDR هستش.
تو DirectX فکر نکنم مشکلی وجود داشته باشه.تو 4.0 XNA بخاطر سازگاری با Xbox360 قابلیت alpha blending یا Additive Blending تو target های ممیز شناور غیر فعال هست در صورتی که PC های امروزی هیچ مشکلی در این مورد ندارن.
کلا فعلا گیر کردم و بیخیال HDR شدم و به کارای دیگه می رسم.
شما برای HDR lighting تو Deffered lighting از چه تارگتی استفاده کردی؟
در GameDev.net هم که هر وقت گیر میکنم میرم اونجا.منتها مشکل تو یه جای دیگس.راستش انگلیسیم زیاد خوب نیست.یه نمونه از تلفظ اشتباه هم تو بالا می بینی.(البته اینو میدونستم تلفظ صحیحش چی می شه ولی خوب عادت کرده بودم به اشتباهش):27:
زیاد خوب نمی تونم به انگلیسی ترجمه کنم ولی انگلیسی به فارسی دستپاشکسته بلدیم.برای شروع کار با XNA یه کتاب اموزشیو برای خودم ترجمه کرده بودم:10:
راستی تو sample های DX یه sample هست که با استفاده از RGB64 (از نوع int) داده های HDR رو ذخیره میکنه و کانال الفا هم خالی می مونه.شما اطلاع داری تو این روش می شه از alpha blending یا Additive blending استفاده کرد یا نه؟

hossainiir
06-06-2011, 19:28
شما برای HDR lighting تو Deffered lighting از چه تارگتی استفاده کردی؟

راستی تو sample های DX یه sample هست که با استفاده از RGB64 (از نوع int) داده های HDR رو ذخیره میکنه و کانال الفا هم خالی می مونه.شما اطلاع داری تو این روش می شه از alpha blending یا Additive blending استفاده کرد یا نه؟

من برای رندر تارگتم از تکسچر بافرمت A16B16G16R16F استفاده می کنم، البته نمی دونم تو XNA چی میشه، خلاصش میشه 16F.

اون مثالی را که شما میگید فکر کنم HDR Formats باشه، که اگه همین باشه باید بگم که این مثال برای اینه که روشی را روبه روی ما بذاره که اگه کارت گرافیک از ممیز شناور پشتیبانی نکرد از این روش بهره ببریم. فکر کنم این مثال با کارتهای گرافیکی امروزی دیگر کاربردی نداشته باشه.(این که گفتید RGB64 منو به شک انداخته که این مثال هست یا نه)

یک سوال خصوصی ، چند وقته XNA کار می کنی؟؟

PersianLoverMRB
06-06-2011, 20:40
من برای رندر تارگتم از تکسچر بافرمت A16B16G16R16F استفاده می کنم، البته نمی دونم تو XNA چی میشه، خلاصش میشه 16F.

اون مثالی را که شما میگید فکر کنم HDR Formats باشه، که اگه همین باشه باید بگم که این مثال برای اینه که روشی را روبه روی ما بذاره که اگه کارت گرافیک از ممیز شناور پشتیبانی نکرد از این روش بهره ببریم. فکر کنم این مثال با کارتهای گرافیکی امروزی دیگر کاربردی نداشته باشه.(این که گفتید RGB64 منو به شک انداخته که این مثال هست یا نه)

یک سوال خصوصی ، چند وقته XNA کار می کنی؟؟
تو XNA هم همون میشه.
RGB64 منظورم همون RGB16 بود که هر کانالش 16 هستش:31:
تو این مثال برای تبدیل داده های HDR به RGB16 از کدای زیر استفاده کردن که دلیلشم نمی دونم:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته فکر کنم داده های ممیز شناور بین 0 تا RGB16_MAX رو به محدوده 0 تا 1 می بره که قابل ذخیره سازی تو RGB16 بشه موقع decode هم مسلما عددرو ضرب در RGB16_MAX میکنه دیگه.هر عدد بیشتر از RGB16_MAX هم از بین میره. RGB16_MAX هم برابر 100 گذاشتن.


حالا به نظر شما رندر کردن یه ابجکت شفاف یا استفاده از Additive Blending هنگام ایجاد light map تو Deferred lighting باعث از بین رفتن داده های درست می شن یا نه؟

(خودم نمی تونم تست کنم ببینم جواب می ده یا نه.DirectX تصب ولی وقتی می خوام یه برنامرو اجرا کنم حدودا 80 تا ارور می ده منم تا حالا با DirectX کار نکردم اصلا نمی دونم چه شکلی باید alpha blending فعال بشه(البته از طریق shader می شه).C++ هم قبلا یه کم کار کرده بودم ولی ولش کردم حالا همون یه کمم یادم رفته)

XNA هم شاید 8 ماه یا بیشتر یا کمتر باهاش اشنا شدم.کلا از برنامه نویسی 3بعدی خوشم می امد یه کم درباره DirectX و XNA تحقیق کردم تصمیم گرفتم XNA یاد بگیرم.خیلی جالب و البته اسونتر از C++ و DirectX هستش چون از C# استفاده می شه.البته زیاد بلد نیستم بالاخره درس و خوندن برای کنکور و کارای دیگه هم هست که باید انجام بشه.:2:

hossainiir
06-06-2011, 21:34
حدس شما در باره کد درسته به بردن اعداد از یک رنج مشخص به رنج 0 تا 1 میگن نرمال کردن که خیلی کاربرد داره.
منظورت از light map چیه، آخه من نمی فهمم که ربط شی ترنسپرنت با light map چیه!!
برای compile کردن مثالهای دایرکت اکس از چه ورژن Visual studio استفاده می کنی؟

به نظر من XNA کار نکنی بهتره ،می تونی از Managed DirectX استفاده کنی با این ورژن میتونی هم با VBو #C برنامه نویسی کنی، در ضمن مثال هایش تو اینترنت خیلی زیاده و چون به Unmanaged DirectX خیلی نزدیکه با یاد گرفتن ++C مشکل دوباره یاد گرفتن DirectX را نداری. و اینکه XNA بیشتر برای ساخت بازی واسه XBOX و کسی بازی برای PC باش درست نمی کنه.

PersianLoverMRB
06-06-2011, 22:23
در مورد light map: منظورم از light map همون فاز دوم تو Deferred lighting هستش.اول اطلاعات مورد نیاز مانند depth , normal و... رو ایجاد می کنیم بعد با استفاده از اینها مقدار نوری که به هر پیسکل میرسه را محاسبه می کنیم.(البته خودتون بلدین و منظور من از توضیح واضح کردن منظورم بود)در هنگام محاسبه نور دریافتی باید Additive Blending فعال باشه تا نورهای دریافتی توسط یک پیکسل مشخص با همدیگر جمع بسته بشن.بعد از رندر Direction light و تمام light Volume ها نتیجرو با رنگ اصلی محیط ترکیب می کنیم.منظورم از light map اینه حالا نمی دونم چه اسمای دیگه ای داره!
ربطی بین light map ایجاد شده با اشیای شفاف وجود نداره.من بین جملم 'یا' گذاشتم.:31:

حالا به نظر شما رندر کردن یه ابجکت شفاف یا استفاده از Additive Blending هنگام ایجاد light map تو Deferred lighting
چه شیرتوشیری شد!
ورژن 2008 که کلی ارور میده.تو پوشه ای که sample نصب می کنم Solution2010 هم وجود داره ولی اصلا باز نمی شه.
Managed DirectX که دیگه ساپورت نمیشه.در ضمن XNA اصلا خودش جایگذینی برای MDX هستش.
حالا چرا فقط برای Xbox بازی بسازن.واسه PC هم میشه ازش استفاده کرد.یعنی اصلا فرقی نداره!کدی که نوشته می شه رو هر دو قابل اجراس.

یه سوال:مگه داده های HDR تا چه رنجی تولید می شن که تو کدایی که نوشتن اعداد رو تقسیم یا ضرب در 100 کردن.فرض کن از یه texture نمونه برداری می کنیم.مسلما مقدار برگشتی بین 0 تا 1 هستن.حالا میایم یه سری نورپردازی هم می کنیم.مقدار نور دریافتی هرچقدر هم که زیاد باشه دیگه باعث نمیشه این عدد 0 تا 1 تا 100 هم برسه.من اشتباه گرفتم یا دلیلی داره؟

hossainiir
06-06-2011, 23:28
وقتی از رندر تاخیری استفاده می کنی ،این رندر تارگتها درست میشن،Diffuse map,Normal,Depth و Specular map ،البته اینا می تونن هرچیز دیگه ای باشن، ولی Light map کلا چیز دیگه ایه، نگاشت نور یا Light map در حقیقت یک تکسچره که طرح نور مورد نظر توشه مثلا وقتی یک پنجره که نور از داخلش داره داخل ساختمونو روشن می کنه در نظر بگیر و فرض کن پنجره یک پرده کرکره داره که نور از اونا رد نمیشه طرحی که نور روی زمین درست میکنه میشه نگاشت نور .

راستشو بخای من نتونسم Additive Blending رو توی MDX پیدا کنم و ببینم کارش چیه!!!


ورژن 2008 که کلی ارور میده.تو پوشه ای که sample نصب می کنم Solution2010 هم وجود داره ولی اصلا باز نمی شه.
برای کامپایل کردن lib و Include های دایرکت ایکس رو به visual studio اضافه کردی؟؟


Managed DirectX که دیگه ساپورت نمیشه.در ضمن XNA اصلا خودش جایگذینی برای MDX هستش
بله XNA و SlimDX جایگزین MDX هستند ولی به نظر من هنوز MDX بهتره، در مقایسه با XNA اینکه MDX خیلی به Unmanaged نزدیکتره و اینکه SlimDX اشکالات منطقی توش داره!!!


حالا چرا فقط برای Xbox بازی بسازن.واسه PC هم میشه ازش استفاده کرد.یعنی اصلا فرقی نداره!کدی که نوشته می شه رو هر دو قابل اجراس.
اصول کدهای مدیریت شده کند هستن و XNA و MDX و SlimDX از این دسته هستند. اینکه می تونید برای هردو برنامه نویسی کنید بیشتر برای آسانتر شدن کار برنامه نویسان XboX بوده که قبل از تست روی کنسول نتیجشونو ببینن .


یه سوال:مگه داده های HDR تا چه رنجی تولید می شن که تو کدایی که نوشتن اعداد رو تقسیم یا ضرب در 100 کردن.فرض کن از یه texture نمونه برداری می کنیم.مسلما مقدار برگشتی بین 0 تا 1 هستن.حالا میایم یه سری نورپردازی هم می کنیم.مقدار نور دریافتی هرچقدر هم که زیاد باشه دیگه باعث نمیشه این عدد 0 تا 1 تا 100 هم برسه.من اشتباه گرفتم یا دلیلی داره؟
تعریف HDR اینه : نسبت بیشترین شدت روشنایی به کمترین شدت روشناییه که این نسبت برای نورهای مرئی برابر 12^10 است که چشم ما فقط میتونه 1000:1 از این نسبت را تشخیص بده وکامپیوتر میتونه 100:1 از این نسبت را نشان دهد بخاطر این باید دقت تقریب بالا باشه بخاطر اینه که از 16F وحتی 32F استفاده میشه. من هم اول فکر می کردم که وقتی از ممیز شناور استفاده می کنم دقت بین 0 تا 1 افزایش پیدا می کنه اما وقتی مقادیر را تغییر دادم فهمیدم که از 0 تا 10 تغییر می کنه!!!!
مثال HDR Cube map دایرکت رو ببین فرق استفاده از ممیز شناور و استفاده نکردنشو می تونی ببینی.

PersianLoverMRB
07-06-2011, 00:23
خب منظور منم از light Map همین بود.مثل دوتا عکس پایین که light map رو با deffuse Map ترکیب کردم نتیجش شده عکس دومی.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

مگه شما نگفتید برای پروژتون از Deffered lighting استفاده می کنید پس بدون Additive Blending چطوری light Map خودتونو ایجاد می کنید؟
منظورتو از اینکه تو تکسچرهای ممیز شناور دقت از 0 تا 10 تغییر می کنه نگرفتم!
راستی شما نوشتی نمی دونی کار Additive blending چیه؟منظورم render state که موقع رسم بعضی از particle ها مثل particle های انفجار فعال می کنیم.یعنی رنگی که قرار روی back buffer نوشته بشه اول با محتویات back buffer جمع میشه سپس نوشته می شه.

Alpha Blending

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Additive Blending

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

hossainiir
07-06-2011, 10:39
ویکی پدیا light map این طوری تعریف کرده :
"A lightmap is a data structure which contains the brightness of surfaces in 3d graphics applications such as video games. Lightmaps are precomputed and used for static objects."
اول اینکه عکس هایی که گذاشتی خیلی قشنگن ، اگه کار خودت باشه برای کسی که تقریبا تازه XNA رو شروع کرده خیلی خوبه.


منظورتو از اینکه تو تکسچرهای ممیز شناور دقت از 0 تا 10 تغییر می کنه نگرفتم!
منظورم این بود که اول فکر می کردم دقت اعشار اعداد بین 0 تا 1 افزایش پیدا می کنه، بعد فهمیدم که نه رنج تغییرات بیشتر از 1 هم میتونه باشه.
این تنظیمات من برای رندر کردن نوره:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هم تصویری از این رندرم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

PersianLoverMRB
07-06-2011, 16:50
در مورد عکسا که اره.همون کاریه که دارم می کنم.البته همه ی چیزارو که ادم نمی تونه خودش از صفر شروع کنه!برای مثال من خودم می خواستم یک LOD QuadTree Terrain برای برنامم بسازم که یه sample پیدا کردم از کدای همون استفاده کردم.البته تغییرات زیادی توش دادم برای مثال یه shader برای terrain نوشتم که تا 8 تا تکسچر رو blend می کنه.یا ابزارایی برای تغییر شکل terrain و ابزارایی برای texture map و میزان blend هر قسمت از terrain ایجاد کردم.الانم دارم روی انیمیشن گیاه ها کار می کنم.ولی کارم تو مدلای Instance شده فعلا گیر کرده.:41:

در مورد تکسچرهای ممیز شناور که فقط تا 10 نیست.برای مثال اگه از Vector4 (همون 32fp) استفاده کنی می تونی تمام اعداد float رو توش ذخیره کنی.
اون تنظیماتم همون Additive Blending هستش.
در مورد عکس برنامتم خیلی خوبه!من بیشتر به محیطای outDoor علاقه دارم:31:.با توجه به عکسی که گذاشتی برای مدیریت فضای بازی تو محیطای inDoor کاری کردی؟در مورد هوش مصنوعی چی؟من که اگه بتونم کارمو ادامه بدم بعد از مدتی تازه می خوام برم وارد بحث شیرین فیزیک! البته از یه فیزیک انجین اماده استفاده می کنم.

PersianLoverMRB
07-06-2011, 17:04
راستی در مورد کامپایل سمپل ای DX می تونی کمکم کنی.اولش که DX رو ریختم برنامه ها همه ارور می دادن که یه فایل با پسوند header نمی تونن پیدا کنن.مسلما باید مسیر فایلای DX رو بهش می دادم. تو قسمت option -> projects & solution -> VC++ Directories یه چندتا مسیر رو بهش دادم که اینارم تو اینترنت پیدا کردم.اون ارورش حل شد ولی الان اکثر ارورا این شکلیه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که جای ... یه type یا یه method هستش.ما هم که c++ بلد نیستیم.
اگه کمک کنی ممنون می شم.:10:
راستی تو با C++ می نویسی.مقدار کداش زیاده:20:

Armin060
07-06-2011, 17:30
این خطا برای فایل های lib هست. تو همون جا علاوه بر Include directories یه مولفه ی دیگه به اسم Library directories هست، که lib های dx رو باید بهش اضافه کنید. فقط توجه کنید که اگر 32bit کامپایل میگیرید حتما کتابخونه های 32bit استفاده کنید و اگر 64bit کتابخونه های 64bit. سپس تو تو همون پنجره برید قسمت Linker و بعد Input و از اونجا تو مولفه ی Additional Dependencies اسم lib هایی که باید لینک بشند رو بنویسید. اگر از d3d9 استفاده می کنید d3d9.lib و اگر از d3d10 میشه d3d10.lib و ... البته کتابخونه های دیگه ای هم مثل d3dx یا dxgi یا d3dcompiler و ... وجود دارند که هر کدوم رو خواستید می تونید اضافه کنید. البته می تونید مرحله ی آخر رو با کد هم انجام بدید برای مثال:


#pragma comment(lib, "d3d11.lib")

hossainiir
07-06-2011, 18:36
من XNA زیاد کار نکردم، نمی دونم چقدر سخته ولی پیاده سازی کردن Deferred shading تو directx و ++C یه مقدار سخته و گمونم یه حالت سادش بیشتر از 5000 خط بشه.
نه اونقدرها هم که فکر می کنید پیچیده و سخت نیست، بیشتر سختی کار روی کدهای شیدرشه و مدیریت کردن اوناست و یک مقدار سختیه دیگه در مفهوم ماتریس هاست.
من از 800 خط کد شیدرش و تقریبا 2000 خط کد #C نوشتم.


البته خط های ++C با #C خیلی فرق داره. هر یک خط ++C به اندازه ده پانزده خط #C و حتی بیشتر می تونه سخت باشه. تو ++C خیلی نکات رو باید رعایت کنید و ...
من با این که یه خط #C برابر ده پانزده خط کد ++C مخالفم، این عدد تقریبا 3 تا 4 برابره...

خیلی از موضوع دور شدیم.


در مورد عکس برنامتم خیلی خوبه!من بیشتر به محیطای outDoor علاقه دارم.با توجه به عکسی که گذاشتی برای مدیریت فضای بازی تو محیطای inDoor کاری کردی؟در مورد هوش مصنوعی چی؟
چندتا نکته:
1- این برنامه یا بهتر موتور ما به طور همزمان می تونه Indoor و Outdoor باشه، یعنی صحنه میتونه شامل هردو باشه.
2- برای مدیریت اشیا و فضا در Indoor از الگوریتم Unreal استفاده کردیم، و برای Outdoor از الگوریتم Oct tree استفاده کردیم.
3- هوش مصنوعی رو برادر من کار کرده و اطلاعات دقیقی ازش ندارم، اکه بخاید بش میگم که درباره هوش مصنوعیش واستون بنویسه.


من که اگه بتونم کارمو ادامه بدم بعد از مدتی تازه می خوام برم وارد بحث شیرین فیزیک! البته از یه فیزیک انجین اماده استفاده می کنم.
به نظر من یک شاخه از بازی سازی سازی رو دنبال کنی بهتره، زیاد شاخه به شاخه نشو، این حرف من حاصل سالها تجربست!!!!!
PersianLoverMRB یه PM بت دادم لطفا جواب بده.

PersianLoverMRB
07-06-2011, 19:34
می تونی درباره ی الگوریتم Unreal یه کم توضیح بدی:31:
درباره هوش مصنوعی هم اگه بگید لطف کردید.
درباره فیزیک:خوب بالاخره برای ساخت بازی فیزیکم لازمه. اگه می خواستم خودم فیزیک انجین بنویسم اونوقت حرف شما تاحدی درست بود.هر چند که ساخت فیزیک انجین نیاز به اطلاعات خوب درباره ریاضیات داره و برنامه نویسی حرفه ای:20:
راستی شما تو انجینتون گفتید هر دو محیط indoor و outdoor رو پیاده سازی کردید.برای اجرای هر دوی اینها باید بین octree و اون الگوریتم unreal ارتباطی وجود داشته باشه؟در واقع شما چه طوری یه مدلی رو که هم تو octree هستش و هم تو unreal مدیریت می کنید؟

hossainiir
07-06-2011, 20:19
می تونی درباره ی الگوریتم Unreal یه کم توضیح بدی
البته من مسئول کارای گرافیکیم و برادرم هوش مصنوعی و قسمتهای ساختمان داده،
این الگوریتمو برادرم پیاده سازی کرده، این الگوریتم خیلی پیچیدست، توی گوگل جستجو کنی تئوریاشو میتونی پیدا کنی اما مثال نداره،
ممکنه یکم توضیحم گنگ باشه ولی سعی خودمو میکنم خوب بنویسم،
از این الگوریتم برای کاهش تعداد رندرها در فضا و محیطهای بسته با تعداد زیاد در و پنجره استفاده میشه، هر اتاق را بر اساس شکلی که داره با معادلات صفحه محدود تعریف میکنیم و یک ایندکس بش نسبت میدیم، هر اتاق دارای درو پنجرهست که به آنها خروجی میگیم هر خروجی نیز با یک صفحه محدود تعریف میشه .فرض کنید که ناظر در اتاق 0 وایساده و داره از در یا خروجی اتاق 1 رو نگا می کنه اشیایی که در اتاق 1 پشت دیوار هستند و در خط دید ناظر نیستند نباید رندر شوند برای اینکار یک هرم ناقص با اطلاعات مکان ناظر و ابعاد خروجی درست میشه از این هرم ناقص استفده میکنیم تا ببینیم کدام یک از اشیای اتاق در دید ناظر هست تا اونا فقط رندر بشن. این روند درختیه و میتونه تا چندین اتاق اتفاق بیافته.


راستی شما تو انجینتون گفتید هر دو محیط indoor و outdoor رو پیاده سازی کردید.برای اجرای هر دوی اینها باید بین octree و اون الگوریتم unreal ارتباطی وجود داشته باشه؟در واقع شما چه طوری یه مدلی رو که هم تو octree هستش و هم تو unreal مدیریت می کنید؟
برای اینکه هردو تکنیک قابل اجرا باشن مجبور شدیم یه سری چیزا رو تعریف کنیم مثلا اینکه فضای Outdoor رو یک اتاق بزرگ فرض کردیم و اسمشو پرتال گذاشتیم و ایندکس پرتال را 1- تعریف می کنیم در پرتال برای رندر کردن از Oct tree استفده می کنیم و بقیه ماجرا همون چیزیه که بالا نوشتم.

در باره هوشش هم به برادرم میگم وقت کرد براتون بنویسه.:20:

PersianLoverMRB
07-06-2011, 21:59
یه همچین چیزی تو ذهنم بود.
تو XNA یک کلاس به نام cameraFrustum وجود داره که همون هرم دوربینه.حالا شما براساس خروجی های اتاق یک cameraFrustum تولید می کنی یا نه یک نوع کلاس برای این هرم های تولید شده ی خودتون دارید؟
چون اون چیزی که تو ذهن من بود اینطوری بود: (البته جزئیات و فعلا بیخیال) فرض کنیم ما یک اتاق با دو پنجره داریم.اتاق ها و همچنین پنجره ها یک Oriented Box هستند.اگر box مربوط به اتاق تو دید دوربین بود میاد بر اساس مکان دوربین و طول و عرض پنجره ها یک شئ که خودمون تعریف کردیم تولید می کنه.این شئ تقریبا همون cameraFrustumهستن ولی برای راحت تر شدن محاسبات خودمون یک کلاس جداگونه می نویسیم.در این شئ ساخته شده 6 تا plane وجود داره که همون هرمو می سازند.برای اینکه ببینیم مدلای داخل اتاق با این شئ برخورد دارند می ایم برخورد Sphere مدل رو با این 6 plane محاسبه می کنیم و اگر این Sphereدر پشت یکی از plane ها (رو به داخل هرم) قرار داشت رندرش می کنیم.
تو XNA برخورد اشیا با plane به 3 صورته : Front,Back,Intersecting منظور منم از پشت plane نوع Intersection یا back هستش.
کلا یه همچین چیزی تو ذهنم هست ولی حالا تا زمان اجرا کردنش خیلی مونده!

hossainiir
11-06-2011, 12:00
سلام، می خواستم چندتا از ویژگی هاو الگوریتمهایی که برای هوش مصنوعی استفاده کردیم را بنویسم تا بعدا اگه خواستی توضیحات بیشتری بدیم:
1- استفاده کردن از Path Follower
2-استفاده از روش مسیر یابی *A و Dijestra
3-استفاده از Hiding
4-استفاده از Arrive
5-استفاده از DFA و NFA
6-ایجاد گراف به صورت Drag Drop
و موردی که الان روش داریم کار می کنیم Smart Object ها هستند.

PersianLoverMRB
11-06-2011, 19:25
اگه یه مقدار توضیح بدی که خوب میشه.
ببینم منبعی خوب برای یادگیری برنامه نویسی برای هوش مصنوعی سراغ داری.
سوالات در مورد هوش مصنوعی زیاد دارم ولی به عنوان یه نمونه:
برای مثال الگوریتم path finding رو در نظر بگیر.برای این الگوریتم مسلما یک ساختار از کل بازی مورد نیاز تا بشه مسیر درست پیدا کرد.حالا شما از چه ساختاری برای ایجاد یک تصویر کلی از مرحله و اشیای موجود در اون استفاده کردید؟
مسلما همین ساختار برای فیزیک هم مورد نیاز است تا برخورد اشیا به درستی تشخیص داده بشه.ولی خب حتما برای فیزیک جزئیات بیشتری باید وجود داشته باشه.منظورم اینه که یک ابجکت مثل ماشینو رو در نظر بگیز.این ماشین در ساختار فیزیک باید تا حدی با جزئیات باشه.برای مثال از چندتا box یا حتا از triangle های با جزئیات پایین تشکیل شده باشه ولی همین ماشین در ساختار هوش مصنوعی نیازی نداره که بیشتر از یه box باشه.تا همین حد که یه player بدونه جلوش یه ابجکت هست و باید اونو دور بزنه.
حالا با این توضیحات شما از یک ساختار جداگانه برای هوش مصنوعی استفاده کردید یا نه از همون ساختارهای دیگه مثل فیزیک یا سیستم مدیریت اشیا برای رندر استفاده کردید؟(امیدوارم منظورمو رسونده باشم:27:)