واضح آرشیو وب فارسی:سایت ریسک: تکنولوژی 3بعدی در بازیهای رایانه Mahdi_Rashed 29 مرداد 1389, 14:18این روزا که بازار فیلمهای 3بعدی و دوربین های 3بعدی خیلی داغ شده بد نیست یک سری بزنیم به استفاده از تصاویر 3بعدی قابل مشاهده با عینک در بازیهای رایانه . تصاویر 3بعدی چطور ایجاد میشن ؟ در فیلمهای 3بعدی دوربینهایی ساخته شدن که میتونن تصاویر 3بعدی رو تهیه کنن . تصاویری که از 3بخش تصویر اصلی , تصویر فیلتر قرمز و تصویر فیلتر آبی . با ادقام شدن این تصاویر با هم و با استفاده از عینک مخصوص میشه فیلم مورد نظر رو 3بعدی دید . دوربینهایی که این نوع فیلمها رو فیلمبرداری میکنن دارای 2 لنز هستن که معمولاً فاصله بین اونها به اندازه فاصله بین دو چشم در یک صورت استاندارد هست . حلا ما هم میایم از همین روش به صورت معمولی در بازی استفاده میکنیم . یعنی 2 دوربین در صحنه قرار میدیم و با توجه به اطلاعات رنگی و ... کدهای مورد نظر رو به توابع رندر دوربین میدیم . ولی این کار استاندارد نیست . چون با وجود 2 دوربین در بازی و دو تابع رندر کننده کامل حجم پردازشی 2 برابر میشه در نتیجه سرعت بازی از نصف کمتر میشه و کاربر رو از بازی دور میکنه . برای این که یک بازی با تکنولوژی 3بعدی طراحی کنیم نیاز به ساخت یک دوربین با 3لنز دارین که فاصله لنز اول و سوم با لنز دوم که وسط هست یکی باشه . در این حالت لنز وسط یک تابع رندر کامل رو میگیره و به طور معمولی کار میشگیش رو انجام میده ولی 2 لنز اول و سوم باید Shader مخصوص خودشون رو دریافت کنن . پس تابع های هر کدوم از لنزهای 1 و 3 رو به رندر گوشه ای یا Edge Renderer نسبت میدیم . در این حالت کل حجم پردازشی که اضافه میشه یک شانزدهم هست که خیلی کم و سرعت رو کاهش نمیده . البته باید بدونین که برد رندر کننده های لنز 1 و 3 باید به نصف کاهش پیدا کنه . چون اشیای دور به صورت 3بعدی دیده نخواهند شد و لازم نیست که رندر کننده ها این کار رو انجام بدن . فاصله بین لنزها و Offset رو در مرحله نهایی تنظیم میکنیم تا اندازه های دقیق و مناسب رو تعیین کنیم . این اندازه ها به ازای هر بخش از مرحله فرق خواهد کرد . وقتی که لنزها آماده شد میریم به سمت ساخت Shader ها . هر دو Shader برای لنزهای 1 و 3 شبیه هم و از نوع محیطی هستن . پس یک Shader رنگ ابی نسبتاً پررنگ و Shader دیگه رنگ قرمز مایل به صورتی رو میگیره . برای ساخت base و پایه Shader باید از یک Standard Mat استفاده کنیم . یک لایه رنگ مورد نظر رو میدیم و روی صفحه با multiply تلفیق میکنیم . این Blending mode هست که در فتوشاپ همه باهاش آشنا هستن . بعد از این کار باید Opacity رو به 35 تا 45 کاهش بدیم . در این حالت اگر Shader ها رو به دو تابع رندر کننده لنزها بدیم تصویر 3بعدی میشه ولی مشکلاتی هم داره . مثلاً سایه ها هم 3بعدی میشن و برجسته یا SSAO که در کنار دیوارها ساخته میشه در این حالت شبیه سکوی کنار دیوار میشه . یا نورهایی که حجمی هستن و افکت مه دارن 3بعدی و برجسته دیده میشن که خیلی غیر طبیعی خواهد بود . برای حل این مشکل باید برای توابع رندر کننده لنز 1 و 3 یک دامنه تعیین کنین . در این دامنه هر تابعی که قرار بگیره رندر 3بعدی میشه . دقیقاً شبیه دامنه ها در توابع ریاضی با فرق این که به جای عدد نام تابع قرار میگیره . مثلاً تابع تکسچرهایی با ضریب normal Map +12 یعنی هرچی که تکسچرش و نرمال تکسچرش بیشتر از عدد 12 بود 3بعدی دیده بشه . پس یک کلاس با نام مثلاً 3drender تعریف میشه و تمامی چیزهایی که باید رندر 3بعدی بشن درونش قرار میگیره و به توابع رندر لنز 1 و 3 نسبت داده میشه . روش دیکه عکس روش قبلی هست . یعنی شما تمامی عواملی که رندر میشن رو در تابعی تعریف میکنین و عواملی رو که نباید رندر 3بعدی بشن رو از تابع کم میکنین . این راه بهتر و سبک تری خواهد بود چون عواملی که نباید رندر بشن کم هستن و زودتر میشه تابع رو ساخت . این کار رو هم که انجام دادین رندر کننده 3بعدی شما درست شده و خوب کار خواهد کرد . فقط در آخر باید فاصله های لنز 1 از 2 و 3 از 2 رو تعیین کنین و Offset هر کدوم رو مشخص کنین و با توجه به صحنه تغییر بدین . این تکنولوژی رو خودمون در پروژه Main Core انجام دادیم . البته در مراحل آزمایشی هست ولی خروجیها قابل توجه بوده . موفق باشید . منبع : MRashed.ir () Mahdi_Rashed 29 مرداد 1389, 14:23کد رنگهایی که ما استفاده کردیم : #00aade برای آبی #ff0054 برای قرمز سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 569]