واضح آرشیو وب فارسی:سایت ریسک: حل مشکلات پردازشی در استفاده از معادلات واقعی نور Mahdi_Rashed 11 خرداد 1389, 12:38هـــــــــــی . دیشب بلاخره بعد از کلی زحمت تونستم بخشی از GI رو که پدیده ی بازتاب نور از سطح هست رو طوری برنامه نویسی کنم که با سیستمهای معمولی قابل پردازش باشه . حالا چرا این پست رو زدم ؟ چون اولین باز که برای ساخت GI real time اقدام کردم به جای استفاده از متدهای رایج موتورهای طراحی بازی اومدم از معادلات واقعی نور استفاده کردم . معادلاتی که توی راهنمای نرم افزار و پلاگین Maxwell و Vray و چند تا راهنمای دیگه استفاده کردم . این معادلات شامل پدیده ی تابش از منبع نوری و برخورد و مداخله و تفکیک نوری بود . معادلات نوری در این حالت دارای ضرب 3 زیگما با توان n و بازه 0 تا بینهایت هستن . یعنی اگه عدد نوری که بسته های انرژی نور با فوتون رو تشکیل میدن بره بالای 1000000000 دیگه مصیبتی پیش میاد که نگو . اول اینطوری برنامه نویسی کردم و دیدم روی سیستم چهار هسته 9000 سرعت fps رسید به 12 تا 16 و حجم پردازش CPU و GPU از حد مجاز برای نور بالاتر رفت و 90 درصد و بعضی وقتا بیشتر رو پر کرد . پس عاقلانه نبود استفاده از این سیستم نوری چون نیازمند یک ابر رایانه بود برای محاسبه هر فریم . اما برای حل این چه کار کنیم ؟؟؟ نمیدونم :-? برای حلش من از راه شاید ابتکاری خودم استفاده کردم . اول اومدم مقیاس واحد و انرژی فوتون جدیدی رو تعریف کردم که مقدار او خیلی کمتر از حالت معمولی بود . همچنین به جای عدد بینهایت در بازه ی معادله 1000 واحد بیشتر از بیشترین انرژی قابل محاسبه موتور طراحی بازی در نظر گرفتم . چرا ؟ چون اول 800 واحد بوبرنامه نویسی د و موتور باگ میداد و احتمالاً به علت پردازش های تصادفی بود . بعد از این واحدی که برای انرژی فوتون تعریف کردم رو با انرژی و واحد اصلی فوتون نوری هماهنگ کردم . میدونید چطوری ؟ ها ها ها نمیگم چون من برای واحد خودم یک ظریب محابسه داشتم یک Unit Convertor متن باز رو یک کم تغییر دادم تا ضریب انرژی خودم و واحد اصلی بهش اضافه بشه بعد کار هماهنگ کردن رو شروع کردم . مثلاً برای هر 10000 فوتون 0.1 فوتون در نظر گرفته بهش ولی انرژی نوری اون و شرت تابش فرقی نکنه ( مثلاً ) . حالا با جایگزینی مقدار جدید به جای مقدار اصلی بازه ها خیلی کم میشه . یک کار دیگه هم که مهمه مقدار نهایی و تعداد اعشار هست . اعداد اعشای بیشتر از 3 واحد لازم نیست تا محاسبه بشن چون وقتی 2 عدد اول اعشار محاسبه بشن شما 89 درصد به جواب و دقت اصی نزدیک میشین . حالا 3 تا هم باشه مشکلی پیش نمیاد ولی 4 تا که بشه 25 درصد به صورت خیلی غیر طبیعی به باز پردازشی اضافه میشه . اما برای تبدیل مقدار و ضریب اصلی به ضریب جدید باید چند خط که نه یه عالمه خط برنامه نویسی بشه . مال من 1700 خط مفید شد . چون باید یک سیستم پایه نور با ضریب جدید برنامه نویسی بشه . این برنامه در قالب C# Advanced حجم زیادی نداره و روی پردازش اثر محسوسی نمیذاره . مدل آماده هم هست که میتونید توی DirectX SDK پیدا کنید یا به طور مستقیم از سایت XNA Game Studio دانلود کنید . حالا برای جایگزینی یک همچین معادلات نوری در بازی قاعدتاً نباید مشکلی داشته باشید . نه مشکل از قبیل باگ شناسایی متد برنامه نویسی نه مشکل از قبیل بار پردازشی . خودتون امتحان کنید و اگه مشکلی داشتید همینجا بگین اینم تست موتور من و دستانم هست که اسمش Main Core Game Engine هست . 70 درصد برنامه نویسی اون با متدهای جدید و شخصی هست و نسخه ی اصلی اون شهریور ماه کامل میشه . این کلیپ 16 ثانیه هست با حجم 4 مگ . البته یک سوتی هم دادیم که خورشید هست . اون عکسه و اصلاً جالب نشده . بنابراین از توجه به خورشید خودداری کنید . سیستم نوری داخل این تست دقیقاً به روشی که گفته شد برنامه نویسی شده ولی هنوز تستیه و خیلی کار داره . دانلود تست موتور طراحی بازی Main Core () لینک مستقیه . میتونید با راست کلیک دانلودش کنید یا این که اگه Quick Time player رو دارید توی مرورگر ببینید . ممنون . موفق باشید همگان :rose: Ultra 3D 11 خرداد 1389, 14:45ایول بابا قدم بزرگی ورداشتی ... امیدوارم موفق باشی با چه زبان برنامه نویسی کار کردی؟ با ++c ...؟ Mahdi_Rashed 11 خرداد 1389, 14:57کل موتور با زبان C# Advanced xنوشته شده ali_tavanaie 14 خرداد 1389, 20:05سلام شما از مدل فوتونی استفاده می کنید یا موجی؟ Mahdi_Rashed 14 خرداد 1389, 20:17Photon و caustic که البته caustic در این تست دیده نمیشه و برنامه نویسی و معادلاتش هم فرق داره MAXBAZ 14 خرداد 1389, 20:36آقا مهدی دست ما رو هم بگیر !!! ما که برنامه نویسی بلد نیستیم چطور میتونیم همچین کارایی بکنیم !؟ ali_tavanaie 14 خرداد 1389, 22:52بعد یک سوال دیگه (ببخشید اگر زیاد سوال می کنم) شما برای این تحلیل ها از یک سری فرمول های سه بعدی از پیش تعیین شده استفاده می کنید و یا از پایه همه چیز طراحی شدند؟ Gi شما شامل چه مشخصاتی میشه؟ glossiness , IOR,refracion,difuse reflection,refraction ، کدوم از این ها رو داره؟ ببخشید اگر سوال می کنم ، چون بنده هم کار نور می کنم و می خوام از قابلیت های نرم افزارهایی که بشه باهاشون چنین کارهایی کرد آگاه شم. Mahdi_Rashed 14 خرداد 1389, 23:38کلیه ی معادلات مربوط به نور از منابع معتبر و کتابهای مختلف و بخشهایی از فرمولها که مربوط میشه به کار در موتور بازی از مقاله های موجود در سایتهای ATI , nVIDIA,Crytek و ... استفاده شده . GI در موتور طراحی Main Core فعلاً چون کار موتور تموم نشده تستی هست ولی برای فاز اول همه ی جزییات که گفتین در موتور قرار خواهد گرفت البته این پروسه زمان بری هست و ممکنه در نسخه ی اول GI کاملی در موتور نباشه . این که میگم زمانبر به دلیل نیروی کار ما هست که 4 نفریم . شما 2000 تا سوال بپرس من خیلی هم خوشحال میشم جواب بدم ali_tavanaie 15 خرداد 1389, 12:27ok! حالا که گفتی من هم پر رو بازی در میارم و می پرسم. مثلاً ببین وقتی یک بسته فوتون به یک سطح با glossiness زیر 1 می خوره ، بعد اون بسته رو به چند بسته تقسیم می کنی و بعد به هر بسته متناسب با زاویه خروجیش یک درصدی از انرژی بسته اولیه رو می دی ، یا اینکه برای این قضیه هم فرمول داری؟ زمانی که یک نقطه با نور difuse خاصی داری ، نوری که از اون نقطه ساطع می شه رو با چه قائده ای پخش می کنی؟ Mahdi_Rashed 15 خرداد 1389, 12:50بطور کلی برخورد فوتون با سطحی که ظزیب جذاب و براقی اون زیر یک هست باید نظیر اجسام سیاه عمل کنه . ولی اینجا کمی جذب میشه و بقیه به صورت bouncing light بازتاب میشه . البته توجه داشته باش که ایسن سیستم نوری برای بازی هست و اجرای این حجم از محاسبات از طریق فرمول غیر ممکن میشه و باید اونا رو با شیدر بنویسیم . زمانی که یک نقطه با نور difuse خاصی داری ، نوری که از اون نقطه ساطع می شه رو با چه قائده ای پخش می کنی؟ البته لازم به ذکر هست که موتور Vray ننوشتم . این کار رو اگر انجام بدم دیه ی CPU و GPU من و مردم رو کی میده :) توی کل سیستم GI و Bouncing light اگر سطح دارای تکسچر x-normal باشه بخشهایی شبیه SSAO و شارش نوری انجام پذبره . در این صورت میتونیم Caustic هم برای تعریف کنیم . ولی همین کاستیک خیلی حجم پردازشی رو بالا میبره مخصوصاً اگر رئال تایم باشه . چیزی که شما میگی عین حقیقت پخش نوره . برخورد نور با یک شکاف خیلی کوچک روی یک تیکه چوب براق مثلاً مسیر جدیدی رو برای نور تعریف میکنه . ولی اینا رو نمیشه برای بازی پیاده کرد . چون حجم پردازشی رو خیلی بالا میبره . یک کتابی هست به نام Digital lighting & rendering که خیلی از پدیده های نوری رو توی محیط 3بعدی به طور کامل توضیح داده . البته من همه کتاب رو نخوندم . ali_tavanaie 15 خرداد 1389, 14:41دلیل این که می بینی انقدر حساسم به این خاطره که من هم دوست دارم یک نرم افزار تحلیل نور به صورت فیزیکی و real بسازم و دوست داشتم بدونم شما تا کجا تونستید پیش برید. Mahdi_Rashed 15 خرداد 1389, 15:23نرم افزار تحلیل نور خیلی باید کار سختی باشه و البته چون فقط تحلیل نور هست و شبیه بازی چیزای دیگه نداره ممکن میشه . احتمالاً باید همه ی فرمولها و قوانین نوری رو پیدا کنید و با الگوریتم و مقدار و ضریب و ... به هم ربطشون بدبد . سیستمی که ما نوشتیم برای بازی ساخته شده . با اینکه میتونه به قوانین واقعی نزدیک باشه ولی واقعی واقعی نیست در حدی که بشه نور رو تحلیل کرد . ولی کار شما ممکنه . چون بحث فقط نور در محیط رئالتایم و مثل بازی چیزاهای دیگه از قبیل ai نداره که باعث درگیر شدن و زیاد شدن حجم پروسس بشه . سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 363]