virtual reality یا واقعیت مجازی

  • شروع کننده موضوع
  • #1

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
این یک پیش نویس درمورد واقعیت مجازی هست که به مرور تکمیل میشه. لطفا پست نذارین. فیدبک هاتونو میتونین پ.خ. کنین. با تشکر
واقعیت مجازی اصلا چی هست؟
واقعیت مجازی دنیایی هست که توسط کامپیوتر تولید شده و کاربر میتونه باهاش تعامل داشته باشه و از طریق حواس طبیعی ش باهاش کار کنه.
خب این دنیای کامپیوتری مثلا چه جور دنیایی میتونه باشه؟
میتونه دقیقا شبیه دنیای واقعی ما باشه و با همون قوانین فیزیکی، یا دنیاها و ساختمون هایی که قبلا در گذشته وجود داشتن و الان از بین رفتن، دنیایی که واقعا نمیشه بهش وارد شد مثلا داخل بدن انسان یا داخل کره زمین و حتی دنیاهای خیالی که هیچ کدوم از قوانین دنیای ما توش صدق نمیکنه.
کاربر میتونه دقیقا وارد این دنیای کامپیوتری بشه و با اشیای مجازی ارتباط برقرار کنه. اشیا کاملا سه بعدی هستن و مود های دیگه هم تو این دنیا وجود داره. مثلا صوت، بو و حرکت کردن در این دنیای کامپیوتری کاملا ممکن هستند.
اصل مهمی که تو واقعیت مجازی هست اینه که کاربر توسط این دنیای مجازی کاملا احاطه شده و واقعا فکر میکنه که در اون دنیا هست. به این اصل immersion گفته میشه. به عنوان مثال صندلی ای که تو این دنیای کامپیوتری وجود داره، به این صورت هست که کاربر بتونه روش بشینه. پس واقعیت مجازی خوب در واقع یک توهم خوب هست که دنیای کامپیوتری از دنیای واقعی قابل تمایز نباشه.
دنیایی که در فیلم ماتریکس ساخته میشه مثالی از یک واقعیت مجازی خوب هست که کاملا شبیه دنیای واقعی هست و حتی در بعضی موارد قابل تمایز نیست اما مسلما دنیای واقعی نیست!

خب تو معرفی واقعیت یه مثلث i داریم که خیلی معروفه و اضلاع اون اینا هستن: immersion, imagination و interaction. این مثلث میگه که سه جز اساسی برای اینکه واقعیت مجازی داشته باشیم چیا هستن.
immersion که خدمتتون عرض کردم. بریم سراغ دو ضلع دیگش. interaction هم بیشتر به این مربوط میشه که واقعیت مجازی این امکان رو بهمون بده که با اشیا تعامل کنیم؛ مثلا جابه جاشون کنیم. برای اینتاکشن داشتن با اشیا نیاز داریم که از یه سری دم و دستگاه یا دیوایس استفاده کنیم. مثلا کنترلر یا دستکش یا از این دیوایس هایی که توی ایکس باکس واسه دنبال کردن حرکات بدن استفاده میکنن.(اسمشو نمیدونم :D) درمورد imagination هم خیلی خلاصه بگم که تصور سه بعدی از اشیا بهمون بده و بتونیم مود های دیگه رو هم داشته باشیم.

خب بریم سراغ روش هایی که در حال حاضر سعی کردن واقعیت مجازی رو ایجاد کنن.
۱. این صفحه نمایش هایی که روی سر قرار میگیرن رو حتما دیدین و ممکنه ازش استفاده هم کرده باشین. این صفحه نمایش ها خیلی قدیمی هستن و اولین بار تو سال ۱۹۶۵ ساخته شدن که داستانشو بعد تر میگم.
۲. غار یا CAVE: به صورت یه اتاقک مستطیلی با سه دیوار هست که یکی از دیواره هاش برای رفت و آمد برداشته شده. شما میتونین با عینکتون تو این غار راه برین و چیزهای مختلف سه بعدی رو بررسی کنین ولی کسی که از بیرون داره شما رو تماشا میکنه فقط یک سری تصویر دو بعدی میبینه. بعضی از غارها دیواره ی چهارم هم دارن که به کاربر بیشتر حس واقعیت مجازی رو میدن.
درمورد عینک های واقعیت مجازی یه توضیح علمی کوتاه میدم. توی این عینکا دو تا اصل باید رعایت شه. ۱- Stereo parallax و ۲- Motion parallax. اولی مربوط به اینه که ما دو تا چشم داریم که با هم حرکت میکنن و در طراحی این عینک ها باید به این نکته و ویژگی های چشمی دقت شه. مورد دوم هم مربوط به اینه که وقتی جسمی رو داریم و حرکت میکنیم ممکنه زاویه های مختلفی از اون رو ببینیم. مثلا اگه یه مکعب رو به رومون باشه اگه سرمون رو یکم بچرخونیم باید وجه دیگش رو با زاویه ببینیم و نه صاف و یکنواخت!

خب آدمای مختلف تو این حوزه تعریف های مختلفی از واقعیت مجازی اراءه دادن و چیز مشترکی که تو همشون پیدا کردم اینا بوده: سه بعدی، محیطی که توسط کامپیوتر تولید شده، قابل تعامل

واقعیت مجازی اشتراک زیادی با گرافیک کامپیوتر و بازی کامیپوتری داره. اینجا درمورد شباهت ها و تفاوت هاشون صحبت میکنیم.
نکته اول اینکه واقعیت مجازی ۳ بعدی هست ولی اون دوتا ۲ بعدی هستن. خب شاید بگین بازی کامپیوتری سه بعدی هم داریم ولی اشتباه نکنین. این بازی های ۳ بعدی درون دو بعد صفحه کامپیوتر جا شدن و به هرحال تصویر های ۲ بعدی هستن که به خاطر ساختارشون سه بعدی میبینیم. فکر میکنم منظورم از سه بعدی مشخص شد.
نکته بعدی اینه که ریل تایم یا بلادرنگ بودن تو واقعیت مجازی مهمه و تو بعضی از بازی هام مهمه تو بعضیام یه تاخیر قابل قبوله. ولی تو واقعیت مجازی اگه بخواین یه جسم مجازی رو جابه جا کنین قاعدتا باید همون زمان جابه جا شه.
مساله بعدی مود هایی هست که داریم. همونطور که اشاره کردم تو واقعیت مجازی ممکنه بو، صدا و حرکت و یا تغییر دما داشته باشیم اما تو گرافیک و بازی کامیپوتری از این خبرا نیست.
گرافیک معمولا استاتیک و ثابت هست و تو بازی هم بیشتر جلوه های بصری اهمیت دارن اما تو واقعیت مجازی فیزیک هم نقش مهمی ایفا میکنه.
واقعیت مجازی باید شما رو تو خودش غرق کنه و نتونین دنیای مجازی و واقعی رو تشخیص بدین اما بازی های کامپیوتری هرچقدرم سرگرم کننده باشن هدفشون این نیست. البته اینم اضافه کنم که بازی های واقعیت مجازی رو به رشد هستند :)
مقایسه از نظر دید خود محوری و خارج محوری egocentric and exocenteric perspective هم هست. دید خودمحوری یعنی وقتی از یک پنجره به بیرون نگاه میکنیم واقعیت رو اونطوری که باید باشه ببینیم. در واقعیت مجازی این مورد خیلی مهمه و به چشم میاد ولی توی بازی های کامپیوتری شما هرچی خودتو جابه جا کنی که یه زاویه ی دیگه رو ببینی موفق نمیشی. برای اینکه خاصیت دید خودمحوری فراهم بشه نیاز به سیستم های ردیابی هست که مفصل بعدا درموردش حرف میزنیم.

خب تو بحث های واقعیت مجازی ۳ تا اصطلاح داریم که نباید با هم قاطیشون کنیم: ۱- سیستم واقعیت مجازی: همون سخت افزار و نرم افزار هایی که واقعیت مجازی رو فراهم کردن.
۲- دنیای مجازی: محتوایی که توسط واقعیت مجازی تولید میشه رو بهش میگیم دنیا. مثلا اشیا و نحوه قرار گیری شون.
۳- محیط مجازی: ترکیب دو تای قبلی یعنی سیستم و محتوا رو میگیم محیط مجازی.

طیف واقعیت:
یه سر این طیف واقعیت محض هست که میشه دنیای خودمون.
یه سر دیگش واقعیت مجازی هست که تا اینجا گفتم.
این وسط دو تا دنیای دیگم داریم. یکیش واقعیت افزوده (Augmented Reality) هست که یعنی بیایم از اجزای مجازی تو دنیای واقعی استفاده کنیم.
یکی دیگشم مجازیت افزوده(!) (Augmented Virtuality) هست که یعنی تو دنیای مجازی یه سری چیز میز واقعی داشته باشیم مثلا دستای خودمون.
مبحث ما از اونجا که از اسمش معموله واقعیت مجازی هست و نه طیف های دیگه.

آیا واقعیت مجازی مهمه؟
فکر میکنم باید یه تاپیک جدا واسه هایپ سایکل بزنم و حتی درمورد یه سری تکنولوژی هاش بیشتر تحقیق کنم چون چیزای جالبی توی هایپ سایکل پیدا میشه.
از هایپ سایکل که بگذریم، واقعیت مجازی پیشینه ی قدیمی داره اما تو سال های اخیر سرچ هایی که درموردش شده افزایش پیدا کرده که از گوگل ترند میتونین ببینین.
و اما کاربرد هاش:
اولیش گیم هست
دومیش شبیه سازی هاست. مثلا شبیه سازی پرواز یا رانندگی. شبیه سازی ساختمون ها و آثار تاریخی. حتی شبیه سازی های پزشکی
پیش ساخت کارخونه و یا جاهایی که ساختنشون پر هزینست.
و البته ساختن رابط کاربری بهتر.

خب وقتشه که درمورد چالش های واقعیت مجازی هم حرف بزنیم.
اول ساختن دستگاه و رابط های ۳ بعدی و چند مودی. الگوریتم های پیچیده و قوی واقعیت مجازی، قابلیت ریل تایم و بلادرنگ بودن، فیزیک اجسام و هوش انسانی(مثلا بخوایم انسان مجازی بسازیم!)
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #2

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست و پست بعدی میخوام بیشتر درمورد رابط کاربری سه بعدی بگم.
اول بریم سراغ تعریف:
۱- تعامل سه بعدی: از اسمش کاملا مشخصه که چی هست. یعنی کاربر بتونه با کامپیوتر به صورت سه بعدی ارتباط داشته باشه و کارهایی که میخواد انجام بده رو به صورت سه بعدی انجام بده.
و البته تمام اپلیکیشن های سه بعدی لزومانیازی به تعامل سه بعدی ندارن. مثلا ساخت تصویر سه بعدی در نرم افزار های سه بعدی کامپیوتری با بالا و پایین کردن یه سری متغیر ساخته میشه و توی محیط ادیتور توی صفحه نمایش کامپیوتر انجام میشه که همه چیز دو بعدی هست. پس الان که کاربر داره از طریق محیط دو بعدی ادیتور در مانیتور یک تصویر سه بعدی میسازه، تعامل دو بعدی داریم. البته از یه دید دیگه هم میتونیم بهش نگاه کنیم که ما داریم از طریق ماوس و کیبورد توی دنیای واقعی سه بعدی با تصویر سه بعدی تعامل میکنیم. و اگر این دید رو در نظر بگیریم میتونیم بگیم تعامل سه بعدی داریم.
اما تعامل سه بعدی میتونه با ابزار های دو بعدی هم انجام شه. در همین مثال، ورودی ما کرسر هست که به عنوان ورودی دو بعدی در نظر گرفته میشه.
امیدوارم این مثال زیادی پیچیده نشده باشه. :D
۲- رابط کاربری سه بعدی یا همون 3DUI: رابط کاربری ای که تعامل سه بعدی رو ممکن میکنه. این رابط میتونه یه کنترل باشه که دکمه ش رو که فشار میدین بتونین به صورت سه بعدی تعامل داشته باشین.
۳- رابط کاربری مکانی یا Spatial User Interface: رابط کاربری ای به وسیله ی اون میتونیم مستقیما حجم اجسام و فضای سه بعدی رو تغییر بدیم. (جالب شد!)
مثالی که ازش داریم اینه که فرض کنید تصویر سه بعدی(مثلا تصویر سه بعدی الن تو شگفت انگیزان!) ای که گفتم تو مانیتور هست بیاد و توی واقعیت مجازی به صورت سه بعدی حضور پیدا کنه. وسیله ای که بتونیم به وسیله ی اون الن رو تغییر شکل بدیم و مثلا دستاشو دراز کنیم رو میگیم رابط کاربری مکانی.
۴- تکنیک تعامل سه بعدی: روش هایی که کمک میکنن تا تعامل سه بعدی محقق شه رو میگن تکنیک!

اجزایی که تعامل سه بعدی رو میسازن چیان؟
این تکنیک ها شامل سخت افزار ها و نرم افزارهای مورد نیاز برای محقق کردن تعامل هستن.
چه سخت افزاری؟
مثلا دستکش یا کنترل یا دیوایس هایی که توی ایکس باکس واسه دنبال کردن حرکات بدن استفاده میکنن. یا عینک یا صفحه نمایشی که تو واقعیت مجازی روی چشم میذاریم. یک دیوایس جالب دیگم هست به نام هپتیک دیوایس که دیزاینر ها واسه طراحی سه بعدی و پزشک ها در شبیه سازی های پزشکی میتونن ازش استفاده کنن. شاید بد نباشه ویدیوش رو از اینجا ببینید.
این سخت افزار های به دو دسته تقسیم میشن: ورودی (مثل دستکش و کنترل) و خروجی(مثل صفحه نمایش).
چه نرم افزاری؟
نرم افزاری که اطلاعاتی که از طریق سخت افزار به دست اومده رو تبدیل کنه به ورودی مناسب سیستم. مثلا فرض کنید شما با یه تفنگ(سخت افزار ورودی) به هدف مجازی شلیک میکنید و میخواید که چیزی که گلوله ی تفنگ بهش خورده رنگش عوض شه. فهموندن اینکه شما شلیک کردین به اینکه هدف شلیک شده و مثلا رنگش باید عوض شه کاری هست که نرم افزار انجام میده.
هم چنین نرم افزار باید خروجی سیستم رو به خروجی قابل درکی واسه ما تبدیل کنه.
پس این اجزا چیا شدن؟
ما --> دیوایس ورودی -->سیستم --> دیوایس خروجی --> ما
ما هدفمون رو از طریق دیوایس ورودی به سیستم می فهمونیم و سیستم هم از طریق دیوایس خروجی نتیجه رو به ما نشون میده. این خروجی میتونه حتی به صورت صدا، بو یا فشار باشه!
* سیستم توی مثال تفنگ مجازی همون دم و دستگاهی هست که شامل هدف هست و بهش شلیک میکنیم و باید رنگش عوض شه. و خروجی هم تغییر کردن رنگ هست.
متافور های تعامل سه بعدی چین؟
اصلا متافور یعنی چی؟ متافور در لغت یعنی استعاره و تشبیه ولی اینجا استفاده کردن از کلمه ای مثل استعاره واقعا گمراه کنندست. متافور ها روش هایی هستن که به کمک اونا تکنیک های تعامل محقق میشه.
استفاده کردن از دستکش یا هپتیک دیوایس یا کنترل تکنیک های مختلف هستن. مثالی که از متافور میشه زد اینه که واسه اینکه یه شی رو تو واقعیت مجازی بخوایم انتخاب کنیم چه متافور هایی میتونیم استفاده کنیم: یه متافور اینه که اسم شی رو بگیم. متافور دیگه اینه که بهش اشاره کنیم یا لمسش کنیم. متافور دیگه حتی میتونه این باشه که به یک شی نگاه کنیم.
سعی کنید متافور و تکنیک رو اشتباه نگیرید.
خب سوالی که ممکنه پیش بیاد اینه که چرا از متافور هایی که تو دنیای واقعی داریم استفاده نکنیم. مثلا تو دنیای خودمون وقتی میخوایم یه شی رو جا به جا کنیم پا میشیم میریم سمتش و برش میداریم و میذاریم جایی که میخوایم. چرا دقیقا همین سناریو رو تو واقعیت مجازی نداشته باشیم.
جواب اینه که سخته! فیزیکش سخته! ریل تایم بودنش سخته! تشخیص برخورد اشیا به همدیگه اونم به صورت ریل تایم سخته! و البته محدوده. مثلا شی خیلی داغ رو نمیتونیم همینطوری جا به جا کنیم. یا ممکنه بخوایم تغییر شکل در اشیا به وجود بیاریم و یه میله آهنی رو خم کنیم. یا میخوایم دست کنیم داخل بدن انسان مجازی و قلبشو دستکاری کنیم! خب در دنیای خودمون در این مسایل محدودیت داریم.
مساله بعدی هم اینه که ممکنه خسته کننده باشه. فرض کنین میخوایم ۱۰۰ تا شی رو جا به جا کنیم. ۱۰۰ بار باید پا شیم بریم سمتش و برش داریم و بذاریم جایی که میخوایم. خب میتونیم در حالیکه رو صندلی لم دادیم با کنترل اشاره کنیم و تمام.
البته متافور های دنیای واقعی هم کاملا حذف نشدن. میتونیم بگیم دو تا دیدگاه داریم: یکیش دیدگاه نظری هست که دقیقا شبیه سازی حرکات دنیای واقعی هست.
دیدگاه دیگه عملی هست که بیشتر برای حل مسایل ازش استفاده میشه.
 
  • شروع کننده موضوع
  • #3

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
در ادامه ی بحث تعامل با اشیا در واقعیت مجازی دو مرحله اصلی داریم.
۱- انتخاب اشیا: یعنی شی ای که در ادامه میخوایم باهاش کاری انجام بدیم رو انتخاب و تعریف کنیم.
۲- دستکاری یا منیوپولیشن اشیا: مثلا جابه جا کردن شی یا تغییر دادن مکان و یا جهت شی. حتی ممکنه بخوایم در شکل شی تغییری ایجاد کنیم که خارج از بحث ماست.
مراحل انتخاب شی:
برای اینکه بتونیم شی ای رو انتخاب کنیم لازمه سه مرحله زیر رو دنبال کنیم.
۱- نشان کردن شی: اول باید به وسیله اشاره کردن، یا لمس کردن یا روش های غیر مستقیم مثل صدا کردن شی، بگیم که فلان شی رو میخوایم انتخاب کنیم.
۲- تایید انتخاب: معمولا برای اینکه بگیم شی ای که نشون شده همون شی ای هست که ما میخواستیم باید تایید کنیم. تایید کردن میتونه به صورت صوتی باشه یا فشردن دکمه یا غیره. ممکنه حتی مرحله تایید نداشته باشیم!
۳- فیدبک: فیدبک به معنی بازخورد هست. خب حالا که شما شی رو نشون کردی و تایید کردی که آره همین شی رو میخواستم، سیستم به شما بازخوردی نشون میده که میتونه به صورت شنیدنی یا متنی یا دیدنی و یا فشار وارده باشه.

خب بریم سراغ روش های معمول اشاره کردن
۱- Ray Casting یا پرتاب اشعه و پرتو

مثلا یه تفنگ رو در نظر بگیرید که اشعه لیزری پرتاب میکنه. این اشعه از تفنگ شروع میشه و به نزدیک ترین چیزی که برخورد کنه اون شی نشون (شلیک) میشه.
این روش همونطور که از توضیحش بر میاد ساده هست و برای اشیای در محدوده ی نزدیک دقیق هست. اما واسه اشیای دور خیلی دقیق نیست و البته اگه امتحان کرده باشین چون فقط یه اشعه باریک داره با کوچکترین لرزش دست از کنترل خارج میشه و ممکنه به شی دیگه ای بخوره.

۲- پرتاب اشعه با دو دست
خب دقیقا مثل قبل اما از هر دو دست واسه شلیک اشعه استفاده میکنیم. خب نتیجه دقیق تر هست چون لرزش دو دست نسبت به یک دست تنها کمتره منتها عیبش اینه که خسته کننده ست.

۳- تکنیک نور فلش یا Flashlight
به جای اینکه یک اشعه تنها پرتاب کنیم، اشعه ای با سطح مقطع مخروطی پرتاب میکنیم. اینطوری اگه خود اشعه به شی نخوره حداقل قاعده ی مخروطی بهش برخورد میکنه. و در صورتی که این سطح مقطع با چند شی برخورد کنه، شی ای که به اشعه مرکزی و کاربر نزدیک تر هست انتخاب میشه.
خوبی این روش اینه که انتخاب شی راحت تر و با دقت بیشتری خواهد بود ولی اگه چند تا شی کوچیک نزدیک هم داشته باشیم کارمون سخت میشه.

۴- تکنیک نور فلش توسعه یافته یا روش روزنه
مشابه روش قبل هست منتها از جهت دیوایس هم استفاده میکنه و شی ای رو انتخاب میکنه که در راستای جهت دیوایس هست. مثلا اگه دیوایس رو افقی گرفتیم اشیای افقی رو نشون میکنه و نه عمودی ها رو. خب این روش به نسبت سخت هست و دستگاه و شی باید با هم هماهنگ باشن مساله رو پیچیده تر میکنه اما در عوض دقیق تر هست.

۵- باز هم تکنیک نور فلش توسعه یافته یا روش IntenSelect(انتخاب مصمم!)
فقط در حد خلاصه بگم که این روش هم مثل تکنیک نورفلش از پرتو با سطح مقطع مخروطی استفاده میکنه اما برخلاف نورفلش هرچی که شی دور تر باشه این سطح مقطع بزرگتر نمیشه. بلکه متناسب با فاصله ی شی میتونه تغییر کنه و بزرگ و کوچیک شه. به خاطر همین میگیم مطابقت فضایی داره.
این روش به خاطر اینکه از اشعه خمیده استفاده میکنه که به خاطر اینه که از نظر زمانی وابسته به نتیجه در زمان قبلش هم هست. و باعث میشه شی از حالت نشان یهو خارج نشه. و به خاطر همین میگیم ثبات زمانی داره.
خوبی این روش اینه که برای انتخاب اشیای دور و کوچک که نزدیک هم هستن به خوبی کار میکنه و جیتر (اثر ناشی از لرزش دست) کم شده. به علاوه برای انتخاب اشیای درحال حرکت هم موثر هست. این روش یک سری فاکتورهای قابل تنظیم داره که بسته به کاربردی که داریم میتونیم تنظیم کنیم. اما محدودیتی که این روش داره اینه که برای اشیای کروی و نقطه ها و شکل های ساده کار میکنه.

۶- تکنیک صفحه تصویر
به جای اینکه با تصویر سه بعدی کار کنیم میایم با معادل دو بعدیش کار میکنیم و بعد این دو بعدی رو به سه بعدی مپ میکنیم. برای استفاده از دو بعد هم میتونیم از انگشت (مثل تاچ گوشی) یا کرسر استفاده کنیم یا بگیم که اشیا در کف دستمون هستن و با جا به جا کردن کف دست، شی رو تکون بدیم و یا از دست هامون به عنوان قاب استفاده کنیم و هرچیزی رو که میخوایم نشون کنیم کافیه با دست و انگشتامون دورش قاب درست کنیم. و خب همونطور که به نظر میرسه این روش خیلی قابل لمس تر هست برامون نسبت به روش های دیگه چون بیشتر از دست استفاده میکنیم.

نکته تکمیلی:
لازمه که درمورد تفاوت accuracy و precision بدونیم. هر دو عبارت تو فارسی به عنوان دقع و صحت ترجمه میشن. اما یکم تفاوت دارن.
accuracy رو بهتره درستی ترجمه کنیم و به این معناست که اندازه گیری هامون چقدر نزدیک به هدف و مقدار درست هست.
و precision رو همون دقت(یا معنی بهتر عدم پراکندگی) ترجمه میکنم و به این معناست که اندازه گیری هامون از یه چیز در صورتی که چندین بار تکرار شه چقدر شبیه به هم هست.
مثلا یه صفحه دارت رو در نظر بگیرید که میخوایم بزنیم به وسط صفحه. ده بار پرتاب میکنیم. در صورتی که هر بار یه گوشه از صفحه بخوره و خیلی پراکنده باشه و نزدیک به مرکز هم نباشه یعنی هم درستی و هم دقت پایین بوده.
اگر به صورت پراکنده بخورن به مرکز یعنی درست پرتاب کردیم و accuracy بالاست اما چون نتایج برخورد نسبتا پراکنده ست و شبیه هم نیست پس دقت کار پایین بوده.
حالا برعکس. فرض کنید که همه رو پرتاب کردیم به یه نقطه(دقت بالا) اما دور از مرکز هست(درست نیست).
و حالت چهارم هم اینه که همه رو دقیقا و به صورت مجتمع پرتاب کردیم به مرکز پس هم دقت و هم درستی بالاست.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #4

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
گفتیم یکی دیگه از روش های نشان کردن شی لمس کردن یا در اصطلاح تاچ کردن هست.
در لمس کردن، کاربر به وسیله ی کنترل یا کرسر یا دست مجازی شی رو لمس میکنه. خب این روش خیلی شبیه به روشی هست که تو دنیای خودمون ازش استفاده میکنیم ولی مشکلش اینه که فقط دردمورد اشیایی کار میکنه که در محدوده ی دسترسی ما هستن.
۱- روش Go-Go
خب اومدن راه حلی ارايه کردن که بتونیم اشیایی که در محدوده دسترسی مون نیستن رو هم لمس کنیم. اگه تونستین حدس بزنین این راه کار چیه؟ درسته! باز هم الن در شگفت انگیزان! هیچی، کافیه این توانایی رو در واقعیت مجازی داشته باشیم که دستامون رو هر چقدر خواستیم دراز کنیم!
به این روش Go-Go گفته میشه. برای اینکار بین بازوی واقعی و بازی مجازی مون یک تابع غیر خطی هست که برای اشیای در محدوده دسترسی مون طول بازو متناسب با فاصله از شی هست(تا اینجا رابطه خطی) و برای اشیای خارج از محدوده فاصیله به صورت توان دو محاسبه میشه. خب خوبی این روش اینه که بهمون محدوده ی بیشتری برای دسترسی میده اما اگه یادتون باشه دستای الن هم محدودیت داشتن و تا بینهایت نمیتونستن دراز شن. تو روش Go-Go هم بالاخره تا جایی میتونیم بازو مجازی رو دراز کنیم. و مشکل دیگه ای هم که داریم اینه که وقتی دستمون رو خیلی دراز کنیم کنترل کردنش یکم سخت میشه و خیلی دقیق نیست. یعنی ممکنه راحت از دستمون در بره.

۲- روش HOMER
تو این روش دست مجازی مون از بدنمون جدا میشه و میره سمت شی، شی رو لمس میکنه و برمیگرده سر جاش! البته اول شی به کمک روش پرتاب اشعه انتخاب میشه و بعد دست به سمت اون شی ای که انتخاب کرده حرکت میکنه.

۳- روش Voodoo Dolls
اینجا برعکس روش قبل، یه کپی از شی به سمت دست ما حرکت میکنه و ما لمسش میکنیم و بعد میفرستیمش سر جاش!
تو این روش اومدن این امکان رو هم در نظر گرفتن که از هر دو تا دستامون استفاده کنیم. مثلا با دست چپ یه شی عروسکی رو بگیریم و با دست راست کلاهشو بچرخونیم. تو این روش سایز یا فاصله جسم اهمیتی نداره اما کار کردن با دو دست چالش های زیادی رو واسه تولید کننده ممکنه ایجاد کنه.
میتونید یه نمونه ویدیو از این روش تو یوتیوب از اینجا ببینید.

۴- روش World in Miniature یا ویم یا دنیا با ابعاد کوچک
خب تو این روش یه نسخه کوچیک از محیط ایجاد میکنیم که راحت بتونیم اشیا توش رو جا به جا کنیم. جا به جایی ها تو این نسخه کوچیک شده مستقیما تو دنیای اصلی هم اعمال میشن. مثلا فرض کنید یه خونه اسباب بازی از اتاقتون داشته باشید و همه وسایل عین همون وسایل اتاقتون باشه. اگه بخواین تو اتاقتون تخت رو جا به جا کنید شاید خیلی راحت نباشه. اما توی این خونه کوچولو خیلی راحت میتونید همه چیزو جا به جا کنید.
البته این روش مشکلی هم داره که ممکنه خیلی دقیق نباشه. خب وقتی تخت رو تو ابعاد کوچیک ۱ میلیمتر جا به جا کنید ممکنه تو ابعاد واقعیش ۱ متر جا به جا شه که و اگه ۲ یلیمتر جا به کنید(خیلی به چشم نمیاد) یهو ۲ متر جا به جا شه و نشه خیلی دقیق فاصله ۱.۵ متری رو تنظیم کرد.
فیلمشو میذارم اینجا
 
  • شروع کننده موضوع
  • #5

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست میخوام درمورد دستکاری کردن یا manipulation شی صحبت کنیم.
اول اینکه منظور از دستکاری کردن یعنی تغییر دادن مکان، جهت یا دفرم کردن شی. ما اینجا فقط درمورد تغییر دادن مکان و جهت صحبت میکنیم. این هم به وسیله عملیات ماتریسی به سادگی قابل انجام شدن هست. کافیه مکان اولیه رو در ماتریس چرخش ضرب کنیم یا با میزان جابه جایی جمع کنیم.

۱- روش Simple Grasping یا گرفتن ساده
این روش کاملا شبیه انتخاب شی هست که تو مرحله قبلی گفتیم. اول شی رو نشون میکنیم، بعد تایید میکنیم که گرفتیمش (اینجا شی میاد میچسبه به دیوایس ما) و بعد جابه جایی رو اعمال میکنیم و در نهایت هم به اندازه ای که میخواستیم میچرخونیمش.
نکته ای که هست اینه که ممکنه میزان جابه جایی واقعی و مجازی با هم فرق داشته باشن. مثلا تو روش ویم که ابعاد کوچیک شده هست باید میزان جا به جایی اسکیل بشه و اگه تو ویم ۰.۵ سانت جا به جا میکنیم، در واقع ۰.۰۰۵ * ۱۰۰=۵۰ سانت جا به جا شه.
اما چرخش به همون اندازه ای که داشتیم میمونه.
خب احتمالا این روش یکم خسته کننده به نظر برسه. شما باید با دیوایس یا کنترلر شی رو انتخاب کنین ولی روش های دیگه ای هم هستن که طبیعی تر هستن و شما با دستتاتون میتونین کار کنین.
دیوایس هایی که تو این روش ها استفاده میشه طبیعی تر از کنترل هستن. میتونه دستکش باشه، سنسور هایی که به دست متصل میشن باشه، یا ردیابی انگشت ها به کمک کامپیوتر ویژن باشه. دیوایس دیگه ای که هست ردیابی انگشت ها به کمک دوربین های فروسرخ هست که بهش میگن Leap Motion.
بریم سراغ روش ها:

۲- روش گرفتن بر اساس ژست
این روش شبیه روش ساده اول هست. منتها الان به جای کنترل، دستکش تجهیز شده دستمون هست. به جای اینکه با روش های گفته شده، شی رو نشون کنیم کافیه با دستکش شی رو در دستمون بگیریم. برای اینکه تایید کنیم که شی رو گرفتیم ژست دست بسته شده میگیریم. حالا که شی انتخاب شد، مثل قبل میتونیم جا به جاش کنیم یا بچرخونیمش. چون داریم با دستمون کار میکنیم این روش طبیعی تر از روش قبل هست. اما تو این روش نمیتونیم با اجسام کوچیک کار کنیم.

۳- روش گرفتن فیزیکی
این روش در واقع میاد تلاش میکنه که عملیات گرفتن رو شبیه سازی کنه. میاد تو کامپیوتر خیلی هندسی و دقیق یه دست میسازه که از نظر محاسباتی خیلی هم سنگین هست و به کمک فیزیک دست، عملیات گرفتن رو تو کامپیتر شبیه سازی میکنه. تو این روش باید بتونیم برخورد اجسام با دست شبیه سازی شده رو از نظر فیزیکی پیاده سازی کنیم و حتی درمورد وزن جسم یه فیدبکی به فردی که جسم رو گرفته بده.
نکته جالبش اینه که اگه دقت کرده باشین وقتی شما با انگشت هاتون به چیزی فشار میارین شکل پوست هم تغییر میکنه و فشرده میشه. این روش(در حالت ایده آل) میاد حتی شکل پوست رو هم تغییر میده.

۴- روش گرفتن به کمک هندسه
روش گرفتن فیزیکی خیلی ایده آل بود و راستش هنوز امکان پیاده سازی واسش نداریم. روش جایگزینی که براش داریم روش هندسی هست.
تو این روش دست رو به صورت ساده شده تری نسبت به روش فیزیکی پیاده سازی میکنیم. به جای اینکه سعی کنیم یه دست کامل رو شبیه سازی کنیم، فقط یه سری نقاط اصلی رو برمیداریم. (میتونم بگم مثل اینه که از یه سیگنال پیوسته، نمونه برداری کنیم) خب این روش به محاسبات کمتری نیاز داره. این روش ترید آفی هست بین اینکه چقدر از نظر فیزیکی دقیق هستیم و محاسبات لازم.
سه روش برای پیاده سازی گرفتن هندسی داریم:
(واقعا توضیح دادنشون سخته. میتونید اسکیپ کنید و البته اتفاقی نمیفته.)
۱- گرفتن بر اساس نظریه آتامتا یا Automata based Grasp
خوبه که درمورد نظریه آتامتا مطالعه داشته باشم!
این روش ۳ استیت اصلی داره. استیت اول وقتی که دست آزاد هست و سنسور های دست فعال نیستن. بعد شی میاد میخوره به دست شبیه سازی شده. در این زمان وارد استیت ۲ میشیم و همه ی سنسور ها شروع به فعال شدن میکنن و عملیات گرفتن شروع میشه. در صورتی که انگشت ها حالت <<گرفتن>>به خودشون بگیرن (وقتی میخوایم چیزی تو دستمون بگیریم انگشت ها رو چه فرمی میکنیم؟) و وارد استیت ۳ میشیم که بهش میگن <گرفتن امن> و شی کاملا در دست های ما هست و همه سنسور ها هم فعالن. حالا اگه بخوایم شی رو ول کنیم چی میشه؟ همه این مراحل واروونه میشن. اول از استیت <گرفتن امن> انگشت هامونو شروع میکنیم به باز کردن و میریم به استیت ۲ که <آغاز گرفتن> بود و بعد شی از دستمون جدا میشه و <دست آزاد> میشه و میریم استیت ۱.

۲- روش صفحه کروی یا Spherical Plane
تو این روش فرض میکنیم که جسم کروی هست یا اگه شکل دیگه ای داره یه کره بهش محاط میکنیم. و با ۳ تا انگشت هم کار میکنیم. این ۳ تا انگشت با همدیگه تشکیل یه مثلث میدن. هر مثلث رو میتونیم با بردار نرمالش مشخص کنیم. وقتی جسم رو جابه جا میکنیم یا تغییر جهت میدیم بردار نرمال مثلث جدید و مثلث قبلی باید با همدیگه مچ شن تا میزان تغییر سنجیده شه.

۳- روش چند تماسی یا Multi Contact
این روش چند تا خوبی داره: یکی اینکه میتونیم همزمان با چندتا شی کار کنیم و دیگه اینکه با هر شی ای و هر شکلی میتونیم کار کنیم.
تو این روش یک <محور گرفتن> تعریف میکنیم که خطی هست که از بین دو تا سنسوری که شی رو گذشتن میگذره. یک مخروط اصطکاک هم داریم که پارامتری هست که براساس سختی و نرمی جسم تعریف میشه. در صورتی که زاویه بین نرمالی که از جسم خارج میشه و <محور گرفتن> داخل مخروط اصطکاک قرار بگیره، میتونیم بگیم که شی گرفته شده. حالا اگه بخوایم جسم رو جا به جا کنیم و سنسور ها(انگشت هامون) رو تکون بدیم دوباره <محور گرفتن> جدیدی ایجاد میشه و باید این شرط رو چک کنیم. در ضمن میزان جا به جایی رو هم از میزان جا به جایی مرکز ثقل <محور گرفتن> در میاریم.
اگه بخوایم با ۳ تا انگشت کار کنیم باید <محور گرفتن> و <مخروط اصطکاک> رو واسه دو تا دوتا سنسورا در بیاریم و مقایسه کنیم. و به جای مرکز ثقل محور، مرکز ثقل مثلث ساخته شده بین ۳ تا انگشت رو داریم. منتها وقتی جسم رو جابه جا میکنیم ممکنه دیگه شرایط <گرفتن> صدق نکنه اما میگیم کاربر نمیخواد جسم رو رها کنه مگه اینکه خلافش ثابت شه. یعنی تنها در صورتی جسم آزاد میشه که کاربر اونو کاااملا رها کنه. پس اگه اون شرط زاویه بین نرمال و محور که گفتم صدق نکرد همچنان میخوایم جسم تو دست کاربر باشه. خب اگه یه وقت این شرط صدق نکرد چیکار کنیم؟ میاییم چیزی به نام ضریب نیرو تعریف میکنیم. در صورتی که ضریب نیرو برابر ۱ باشه یعنی جسمو گرفتیم و همه چیز خوبه. اما اگه ضریب نیرو نزدیک صفر باشه یعنی اون گرفتنه فایده نداره. ضریب نیرو هم دو به دو بین سنسورا محاسبه میشه. کافیه <گرفتن> مربوط به ضریب نیروی پایین رو حذف کنیم و دوباره شرایط رو بررسی کنیم و محاسبات رو انجام بدیم و چک کنیم.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #6

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
اگه یادتون باشه گفتیم برای تعامل با اشیا میتونیم اشیا رو انتخاب و دستکاری کنیم. اما روش های دیگه ای هم برای تعامل با اشیا وجود داره. اصلا تعامل به چه معنی بود؟ تعامل به این معنا هست که کاربر بتونه با اشیا به صورت سه بعدی کار کنه.
سه روش اصلی برای تعامل داریم:
۱- انتخاب و دستکاری: به تفصیل در ۳-۴ پست اخیر گفتیم.
۲- سیستم کنترل: توی این پست درموردش حرف میزنم.
۳- جهت یابی: اینکه بتونیم حرکت کنیم، لازم باشه سفر کنیم! مسیر یابی کنیم، مثلا تو یه خیابون مجازی هستیم و میخوایم جایی رو پیدا کنیم و از این دست مثال ها. البته در مورد این روش ها حالا حالا ها صحبت نمیکنیم :D

خب بریم سراغ سیستم کنترل:
اینجا کاربر سعی میکنه از طریق اینکه به سیستم دستور بده کار میکنه. مثلا مود سیستم یا استیت سیستم رو از طریق وارد کردن کامند یا دستور عوض کنیم. اول مثال دو بعدی بزنیم: مثلا تو صفحه نمایش ویندوز از طریق آیکون ها، کلیک کردن روی منو و یا خط فرمان و نوشتن کد توی ترمینال و اینطور دستور دادنا سیستم رو کنترل میکنیم. اما توی سه بعد یکم داستان فرق داره و به همین سادگی کلیک کردن نیست.
۴ تا دسته بندی داریم واسه سیستم کنترل:
۱- منو های گرافیکی: در ادامه بیشتر توضیح میدم.
۲- کامند صوتی: از اسمش معلومه دیگه. حرف بزنیم و بگیم مثلا لامپ جان خاموش شو!
۳-کامند ژستی و حرکتی: یعنی به وسیله یک حرکتی نشون بدیم که یه کاری انجام شه.
۴-استفاده از ابزار ها

درمورد منوهای گرافیکی بگم براتون.
۱- فرض کنین منوی دو بعدی رو برداریم بیاریم سه بعدی کنیم و بعد بخوایم به روش های اشاره کردن که قبلا توضیح دادم آیتم ها رو انتخاب کنیم.
09fig03.jpg

۲- منوی تولیپ رو از شکلی که گذاشتم میتونین ببینین: همینطور که از عکس معلومه با انگشت های دست چپ سه تا گزینه داریم مثلا رنگ و جنس و شکل. اول رنگ رو انتخاب میکنیم. بعد رو انگشتای دست راستمون رنگ های مختلف باز میشه: سبز و قرمز و زرد و ... که میتونیم انتخاب کنیم.
TULIP-menus-use-finger-pinches-to-select-menu-items_W640.jpg

۳- ویجت های سه بعدی هم دقیقا مثل منوی دو بعدی که تعمیم پیدا کرد و شد سه بعد، حالا یه چیزی شبیه ویجت های اسمارت فون تعمیم پیدا میکنه و میاد سه بعد میشه و دوباره با کنترلر میتونیم یه گزینه رو انتخاب کنیم. همچین چیزی:
4-Figure4-1.png

۴- اسمارت فون عزیز در همه جا حاضر هم میتونه به عنوان سیستم کنترل گرافیکی استفاده شه.
۵- روش دیگه هم استفاده از منوهای با یک درجه آزادی هست. ایده ی این روش اینه که عملیات انتخاب از یک منو صرفا با عملیات یک بعدی قابل انجام شدنه. این منو به دست کاربر متصل میمونه و کاربر مثلا با چرخوندن دستش انتخاب میکنه که کدوم گزینه انتخاب شه.
 
  • شروع کننده موضوع
  • #7

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
اول یه مرور کنیم که تا اینجای کار چی گفتیم.
خب تا اینجا واقعیت مجازی رو معرفی کردیم و گفتیم چی هست و چی نیست و درمورد روش های تعامل در دنیای واقعیت مجازی حرف زدیم.
توی این پست و چند پست آینده میخوام در مورد تشخیص برخورد یا collision detection بگم. این بخض همپوشانی زیادی با مباحث مربوط به ویدیو گیم داره چون اگه دو تا بازی ویدیویی کرده باشین درمورد اهمیت collision اطلاع دارین.
دلیل برخورد چیه و کی اتفاق میفته؟
منبع اصلی برخورد، تعمال داشتن کاربر با اشیا هست. که میتونه به تعامل داشتن اشیا با اشیای دیگه هم ختم شه. نتیجه ی این تعامل برخور کردن هست. حالا این برخورد میتونه برخورد دست کاربر با اشیا باشه وقتی که میخواد جسمی رو بگیره. یا میتونه برخورد اشیا با همدیگه باشه. مثلا فرض کنید توپ بولینگ مجازی رو پرت میکنین و توپ به یکی از بولینگ ها میخوره و یکی رو میندازه و اون بولینگ به بولینگ پشت سریش میخوره و اونم میفته و همینطور الی آخر. این برخورد میتونه به صورت جابه جا شدن و چرخیدن برای اشیای سفت و محکم یا در اصطلاح ریجید باشه. یا میتونه دفرمه شدن باشه مثلا شی ابعادش عوض شه (مثلا چند قطره آب به چند تا قطره آب دیگه برخورد کنن و تبدیل به قطره ی بزرگ تری شن ) یا بریده شه (برخورد چاقو با میوه) یا حتی خودش با خودش برخورد کنه و شکلشو عوض کنه (مثلا وقتی دستمونو تکون میدیم پارچه ی پرهن رو همدیگه سر میخوره و شکلش عوض میشه).
تفاوت برخورد کردن تو دنیای واقعی و واقعیت مجازی چیه؟
تو دنیای واقعی دو شی نمیتونن همزمان در یک نقطه قرار داشته باشن ولی این تو دنیای مجازی کاملا ممکنه! مثال سادش به نظرم اینه که یه کاغذ و قلم بردارین و دو تا خط بکشین که با هم برخورد کردن. مختصات هر دو خط در نقطه تقاطع یکی هست ولی همچین اتفاقی تو دنیای واقعی نمیتونه بیفته. دو تا خط که همدیگه رو قطع کردن -به اندازه ی فاصله در حد اتم هم که شده باشه- یکسان نیستن!
تو دنیای واقعی وقتی دو تا چیز برخورد میکنن یه رفتار فیزیکی به عنوان پاسخ اتفاق میفته اما درمورد دنیای مجازی باید تلاش کنیم شبیه سازی ریل تایم داشته باشیم(در هر صورت زمان محاسبه صرف میشه) تا بتونیم اون رفتار فیزیکی رو مدل کنیم.
درموردواقعیت مجازی، وقتی دو جسم با هم برخورد میکنن در واقع تو هم دیگه نفوذ میکنن و باید به کمک کوءری زدن اول برخورد رو تشخیص بدیم و بعد پاسخ رو محاسبه کنیم.
یه کوچولو در مورد تاریخچه برخورد بگم براتون.
اولین نقطه ها برمیگرده به دهه ۷۰ میلادی که درمورد برخورد ربات ها ریسرچ میکردن. بعد که تو دهه ۸۰ هندسه محاسباتی اومد و بعد هم عصر ویدیو گیم! درمورد اهمیت برخورد کردن تو بازی های ویدیویی نگم براتون که خودتون بهتر از من میدونین. و البته از وسطای دهه ۹۰ هر یکسال یبار یه الگوریتم جدید میدادن برای اینکه برخورد رو سریع تر و بهینه تر حساب کتاب کنن.

چالش های تشخیص برخورد
درستی
: همون طور که میدونید کامپیوتر کلاک داره و به صورت گسسته و دیجیتال در زمان کار میکنه. اینکه در زمان درست برخورد کردن رو لحاظ کنیم خیلی مهمه. در ادامه مثالی میزنم که این بیشتر روشن شه. فرض کنید یه توپ مجازی رو به یه جعبه مکعبی میزنیم. در دنیای واقعی توپ میخوره به جعبه و وایمیسته. اما اگه تو دنیای کامپیوتری زمانی که باهاش کار کردیم کند تر از سرعت توپ باشه ممکنه توپ از جعبه رد بشه و اصلا برخورد نکنه باهاش! یا اگه توی جعبه یه حفره داشته باشیم با حفره ی داخلی برخورد کنه به جای اینکه همون اول برخورد کنه و از حرکت بایسته!
البته واسه این مساله یه راهکار دم دستی دادن که زیاد چنگی به دل نمیزنه. Swept Volumes یا حجم جارو شده! به این صورت که فرض کنید کل مسیر حرکتی دو جسم رو جارو کنیم (هاشور بزنیم) و اگه دو مسیر با هم برخورد نکردن قطعا میتونیم بگیم دو جسم برخورد نداشتن. ولی اگه این دو مسیر با هم برخورد کنن نمیتونیم با قاطعیت بگیم که دو جسم برخورد کردن. چون ممکنه در زمان های مختلفی از نقطه ی تقاطع عبور کرده باشن.
نکته بعدی هم اینکه همونطوری که میدونید جسم هایی که میسازیم فقط تخمینی از شکل واقعی هستن. مثلا کره رو هیچ وقت نمیتونیم دقیقا به صورت کره در بیاریم. چون همه چیز گسسته هست و همه چیز تقریب هست و تقریب!
دقت و پایداری: توی محاسباتمون باید از اعداد اعشاری یا در واقع floating point operation استفاده کنیم که خطای گرد کردن داریم و احتمالا بدونید که این خطای گرد کردن تو محاسبات اعداد بزرگ چقدر اذیت میکنه. البته تشخیص درست اینکه برخورد اتفاق افتاده هم مساله ای هست واسه خودش.
بلادرنگ بودن و کارایی: یک عالمه محاسبات داریم که باید با سرعت خیلی خیلی زیادی انجام بشه و نمایش داده بشه! پس قدرت پردازنده خیلی مهمه. اگه موقع بازی با موبایل گوشیتون هنگ کرده باشه متوجه اهمیت داستان میشین. بعدم اینکه به یه مموری فوق العاده نیاز داریم تا خیلی چیزا رو توش ذخیره کنیم. اگه هنوز به اهمیت مموری پی نبردین باهام باشین تا در پست های آینده بیشتر بگم براتون.
نکته ای که درمورد سرعت پردازنده میخوام بگم اینه که برای بهینه تر کردن داستان میان سه تا پروسسور میذارن. یه دونه واسه کارای گرافیکی که به قدرت کمتری احتیاج داره، یدونه برای محاسبات فیزیکی که سنگین تره و به سرعت بیشتری نیاز داره و یدونه واسه محاسبات مربوط به لمس و حرکت و اینا که خیلی خیلی سنگین تره و البته موضوع بحث ما نیست حالا حالاها. کارهای گرافیکی مثل گرفتن ورودی از کیبورد یا به صورت کلی ورودی هایمون. خب سرعت کار کردن با کیبورد و کلیک کردن قاعدتا اونقدرا زیاد نیست. و البته رندر کردن گرافیک. که با ۲۵ هرتز جمع میشه. پردازنده ای که واسه محاسبات فیزیکی داریم سنسور ها رو بخونه، موقعیت جدید رو هر لحظه حساب کنه و برخورد کردن رو چک کنه و این به قدرتی حدود ۲۵۰ هرتز (۱۰ برابر) احتیاج داره. مثلا تو یه بازی کامپیوتری معمولا فقط بخشی از بازی هست که داره حرکت میکنه و مرتب باید حرکتش حساب کتاب شه و گرافیک باقی جاها ثابته معمولا.
تفاوت تشخیص برخورد و کوءری برخورد
کوءری زدن یعنی درخواست بدی چک کنی ببینی آیا برخورد اتفاق افتاده یا نه. تو کوءری زدن کاری به روند اتفاق افتادن نداریم. فقط میریم چک میکنیم و اعلام میکنیم که برخورد اتفاق افتاده یا نه و تمام!
اما تشخیص برخورد یه پروسه دینامیک محسوب میشه و زمان و مکان برخورد کردن برامون مهمه. البته معمولا برای تشخیص برخورد مجبوریم کوءری بزنیم و چک کنیم.

پاسخ برخورد بسته به اپلیکیشن
خب وقتی دو تا جسم بهم برخورد میکنن بسته به کاربردی که مد نظرمون هست جواب متفاوتی ممکنه بگیریم. مثلا تو خیلی از بازی ها کامپیوتری بمیخوایم ببینیم آیا برخورد اتفاق افتاده (بازنده) و یا نیفتاده (ادامه بازی) مثلا وقتی بازیکن به دیواره برخورد کرد باید منفجر شه و بسوزه!
یا در مثلا در انتخاب جسم وقتی شی انتخاب شد و برخورد اتفاق افتاد شی تغییر رنگ بده.
درمورد واقعیت مجازی که فیزیک خیلی مهمه ولی کجا(زمان برخورد) و کی(مختصات نقطه برخورد) و چگونگی ش (در چه راستایی) برامون اهمیت داره. و ممکنه از جسم عبور کنه یا جسم رو تقسیم کنه و یا حتی باعث شه شی بایسته یا برگرده.

تخمین زمان برخورد
در مورد اهمیت زمان برخورد قبلا توضیح دادم. حالا چطوری حسابش کنیم؟
مثلا زمان i-1 رو در نظر بگیریم که برخورد اتفاق نیفتاده. و یک استپ بعدی یعنی در زمان i چک میکنیم میبینیم عه برخورد اتفاق افتاده. خب حالا باید این زمان رو بشکونیم به نصف استپ. اول زمان i-۰.۵ رو چک میکنیم ببینیم برخورد داشتیم یا نه. اگه برخورد داشتیم پس زمان برخورد بین i-۱ و i-۰.۵ بوده پس باید i-۰.۲۵ رو چک کنیم و در غیر این صورت باید i-۰.۷۵ رو چک کنیم و الی آخر. اینقدر به صورت باینری این کارو میکنیم تا به دقت دلخواه برسیم و زمان برخورد رو تخمین بزنیم.
همونطوری که میبینید این روش از نظر محاسباتی سنگین به نظر میاد و به علاوه لزوما زمان اولین برخورد رو هم نشون نمیده. ممکنه زمان برخورد بعدی (مثال جعبه حفره دار بالا) رو واسمون حساب کنه.

مکان و چگونگی برخورد
حساب کردن مکان برخورد رو احتمالا خودتون به سادگی حدس زدین که کجاست. آره درسته نقطه تقاطع و برخورد دو جسم! اما نکته ای که مهمه اگه یه دایره به شعاع اپسیلون در نقطه برخورد در نظر بگیریم، تو این ناحیه دو جسم محدب (convex) هستن و صفحه جداکننده دارن.(اثباتش مربوط به بهینه سازی محدب و اینا هست.)
درمورد چگونگی برخورد دو جسم هم کافیه در زمان i-۱ نزدیک ترین نقاط دوجسم به هم رو حساب کنیم و فرض کنیم که در راستای خطی که این دو نقطه رو بهم میرسونه جسم حرکت کرده. این خط بر صفحه جداکننده عمود هست. بهش میگیم خط نرمال.
البته یه راه دیگه هم داریم که براساس زمان i هست یعنی وقتی دو جسم در هم نفوذ کردن. به این صورت که برداری رو باید حساب کنیم که اگه شی رو در راستای اون باید عقب بیاریم تا دو جسم با همدیگه مماس شن.

توی پست بعدی میخوام درمورد الگوریتم پایه تشخیص برخورد بگم.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #8

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
اینجا میخوام خیلی تخصصی تر درمورد برخورد صحبت کنم. اول خلاصه ای از الگوریتم تشخیص دادن برخورد میگم و بعد هزینه ی محاسبات برخورد و اینکه چطور میتونیم این هزینه رو کم کنیم و الگوریتممون رو بهینه تر کنیم.
الگوریتم اساسی تشخیص برخورد
زمان شروع و پایان کل فرآیند رو در نظر بگیرید. این زمان به وسیله ی زمان رندر کردن به چند قسمت مساوی تقسیم میشه. بعد از هر استپ زمانی رندرینگ، شما صحن جدیدی رو میبینید که البته باید اینقدر این استپ کوچیک باشه که ذهن ما فک کنه اینا پیوسته هستن.
توی هر استپ رندرینگ، رفتار اشیای صحنه بررسی میشن و براساس تغییراتی که داشتن جاهاشون ممکنه عوض شه و دوباره در جای جدید نمایش داده بشن.
بعد هر استپ رندرینگ رو تقسیم میکنیم به چند استپ کوچکتر که در هر استپ باید بررسی کنیم که ببینیم آیا برخورد رخ داده یا نه. حالا چطور بررسی کنیم؟ خیلی ساده تمام اشیا رو دو به دو باید مقایسه کنیم و در اصطلاح کوءری بزنیم ببینیم برخورد کردن یا نه. اگه دو جسم با هم برخورد داشته باشن احتمالش هست که دومینو وار به اجسام دیگه ای هم برخورد کنن و به خاطر همین باید کوءری زدن رو در استپ بعدی هم بررسی کنیم اما وقتی دیگه برخورد نداشته باشیم میتونیم کوءری زدن رو تو استپ های بعدی قطع کنیم.
اگه از این الگوریتم چیز زیادی دست گیرتون نشد خیلی سخت نگیرید. فقط خلاصه بگم که باید برخورد دو جسم رو دو به دو بررسی کنیم و این هزینه خیلی زیادی برامون داره. مثلا ممکنه دو جسم از همدیگه دور باشن و احتمال برخورد وجود نداشته باشه ولی چون این الگوریتم خیلی پایه هست و واسه هر دو جسم کوءری میزنه، اجسامی که از هم خیلی دور هستن رو هم چک میکنه. پس یکی از راه های کاهش هزینه های محاسباتی تقسیم کردن فضا یا space partitioning هست که مفصل تر درمورد صحبت میکنیم.
‌یه مشکل دیگه هم البته وجود داره. اشیا ممکنه شکل های خیلی پیچیده ای داشته باشن. واسه اینکه بخوایم برخورد بینشون رو بررسی کنیم باید هزینه زیادی بپردازیم تا برخورد شکل های پیچیده رو حساب کنیم. راه حل چیه؟ خیلی ساده! بیاییم به جای این شکل های پیچیده یه شکل ساده در نظر بگیریم و فرض کنیم که شکل توسط یه حجم محاط شده! این یعنی چی؟ به طور خلاصه یعنی فرض کنید یک مکعب مستطیل دور شخصیت گیم مورد علاقه تون قرار داره و اگه قرار باشه بهش شلیک کنن یا با ضربه بکشنش کافیه به این جعبه مکعب مستطیلی شکل اصابت کنن. شاید تو گیم های خیلی قدیمی تر متوجه شده بوده باشین که عه برخورد نکرد ولی باختم! احتمالا محاسبات مربوط به مکعب مستطیلشون خیلی تقریبی بوده. البته پیشرفت هایی صورت گرفته که مفصلش رو در ادامه میگم. راستی چون ممکنه شکلمون مکعب مستطیل نباشه به این جور احاطه کردن میگن حجم محصور کننده یا Bounding Volume! به روشی که به جای بررسی کردن برخورد دو جسم بیاییم برخورد کردن حجم محاطی شون رو بررسی کنیم میگن فاز گسترده یا Broad Phase و به روشی که برخورد خود دو جسم رو چک میکنن میگن فاز باریک یا Narrow Phase. همون طور که میتونید حدس بزنید در صورتی که برخورد تو فاز گسترده داشته باشیم لزومی نداره برخورد فاز باریک هم داشته بوده باشیم.

خب حجم محصور کننده باید چه ویژگی هایی داشته باشه؟
باید کل جسم رو بپوشونه. تا حد ممکن فضای آزاد بین جسم و حجم محصور کننده کم باشه و در اصطلاح Tight fitting باشه. یعنی اگه شی مون یه خودکار هست، حجم محصور کنندش در ابعاد خودکار باشه و نه در حجمی باشه که از ابعادش خیلی بزرگتره.
به علاوه باید این قابلیت رو بهمون بده که بتونیم سریع بین دو جسم کوءری بزنیم و حساب کردن این حجم راحت و سریع باشه چون در واقع میخواستیم از حساب کردن شکل پیچیده ی شی اصلی خلاص شیم. مخصوصا در صورتی که در اثر تغییر تو شکل جسم و دفرمه شدن، حساب کردن دوباره ی حجم محصور کننده نباید خیلی سخت باشه.

انواع حجم محصور کننده:
تا اینجا فقط شکل جعبه مکعب مستطیلی رو گفتم. اما روش های زیادی داریم. ساده ترین روش، کره محاطی هست. هزینه حساب کردنش خیلی راحته و فقط مرکز کره و شعاع مهم هستن اما خیلی نادقیق و ابتدایی هست و ممکنه فضای پرت زیاده بده. مثلا همون خودکار قبلی رو تو یک کره محاطی در نظر بگیرید. قطر کره باید اندازه طول خودکار باشه. ولی دور تا دور خودکار کلی فضای پرت داره. البته واسه اجسامی که خودشون کروی شکل هستن این روش خیلی جوابه. اگه یادتون باشه واسه گرفتن در روش روش صفحه کروی یا Spherical Plane هم از این ایده استفاده میکردیم.
روش بعدی همون مکعب مستطیل محاطی هست که بهش میگن AABB. البته این مکعب مستطیل همیشه ایستاده هست. و اگه جسم بچرخه باید یه مکعب مستطیل ایستاده ی دیگه بسازیم. این روش هم نسبتا ساده هست اما باز ممکنه فضای پرت زیادی بده. واسه پیدا کردن مکعب محاطی کافیه نقاط ماکسیمم و مینیمم رو در هر جهت حساب کنیم.
روش بعدی باز مکعب مستطیل هست اما قابلیت چرخش داره! به این روش میگن OBB.
روش بعدی k-DOP هست. اگه شکل پایین رو ببینید k=۶ هست. یعنی k/۲ یا ۳ تا اسلات(خطوط موازی دو به دو) و ۳ تا جهت داریم. هر چی که k بزرگتر باشه شکلی که تولید میشه دقیق تر هست و بیشتر شبیه به شکل اصلی هست. مشکلی که تو این روش هست اینه که در صورتی که جسم بچرخه باز هم باید همون k-DOP قبلی رو بهش اعمال کنیم که ممکنه نتیجه خوبی نداشته باشه.
و روش آخر هم Convex Hull. این روش هزینه محاسباتی بیشتری داره اما فضای پرت کمتری نسبت به باقی روش های میده و حجم محدبی رو بر جسم محاط میکنه.
این هم یه عکس که همه روش ها تصویری نشون میده:
67t1_screenshot_from_2020-12-06_12-07-26.png

احتمالا اگه هندسه دوم دبیرستان رو خونده باشین میدونید که برای اینکه در روش کره محاطی بگیم برخورد رخ داده چه شرطی داریم. کافیه فاصله بین مراکز کره کمتر از جمع شعاع دو کره باشه. خیلی ساده و راحت!
تو روش مکعب مستطیل ایستاده برای اینکه بگیم برخورد رخ داده میاییم مستطیل ها رو تصویر میکنیم بر دستگاه مختصات و در هر دو محور(یا سه محور واسه مکعب مستطیل) چک میکنیم ببینیم همپوشانی دارن یا نه. اگه در تمام محور هم همپوشانی داشتیم میگیم برخورد داشتن. از این تصویر میتونید متوجه منظورم بشین.
iuaGR.png

همون طور که میبینید مستطیل های سبز و آبی در هر دو محور با هم همپوشانی داشتن پس برخورد دارن اما نارنجی و سبز با اینکه در محور ایکس همپوشانی داشتن در محور ایگرگ همپوشانی ندارن و در نتیجه برخورد هم ندارن.

شاید بپرسین روش OBB دقیقا چیه و چطوری میتونیم مکعب مستطیل هایی با قابلیت چرخش رو بسازیم. خب اگه درمورد principle component و eignevector شون چیزی بدونین حدس زدنش زیاد سخت نیست. میاییم از Convex Hull محاطی نمونه برداری میکنیم و میانگین و کوواریانس ماتریس این نمونه ها رو حساب میکنیم تا بتونیم principle component های ماتریس کوواریانس رو در بیاریم. میانیگین مرکز حجم محاطی رو میده و آیگن وکتور های جهت چرخش رو میدن و آیگن ولیو ها طول رو در راستای بردار ها میدن. اگه چیزی از principle component نمیدونین بیخیال شین.
اما چک کردن اینکه دو تا مکعب مستطیل چرخشی با هم برخورد کردن خیلی شبیه روش قبلی هست. منتها به جای اینکه همپوشانی رو روی محور افقی و عمودی در نظر بگیریم باید روی محور های چرخیده که در راستای وجوه مستطیل هامون هستن چک کنیم. البته چون مکعب مستطیل داریم باید در راستای وجوه و اضلاع چک کنیم. اگه f تا وجه و e تا ضلع داشته باشیم کلا باید e^2+2f تا محور رو چک کنیم. واسه یه مکعب مسطیل میشه ۱۵ حالت.

همونطور که احتمالا از حرفام متوجه شده باشین، روش کروی و مکعب چرخشی در شرایط جا به جا شدن و چرخیدن مشکلی درست نمیکنن ولی روش های ای ای بی بی و کی داپ نسبت به چرخش خیلی حساس هستن و باید دوباره حجم محاطی رو حساب کنیم.
اینجا میخوام یه روش بگم که حساب کردن حجم محاطی رو یکم آسون تر و سریع تر کنه. اول اینکه فرض میکنیم میزان چرخش در استپ های زمانی زیاد نیست. یعنی تو یه استپ جسم یهو وارونه نشده یا ۹۰ درجه نچرخیده. همونطور که گفته بودم نقطه ماکسیمم و مینیمم تعیین کننده مکحب محاطی هستن. پس فرض میکنیم بعد از چرخش همون گوشه قبلی یا یکی از گوشه های چپ یا راست نقطه ی ماکسیمم(یا مینیمم) هستن. پس کافیه مقایسه رو بین این سه گوشه انجام بدیم و دوباره نقطه ماکسیمم رو پیدا کنیم و لازم نیست نقطه ماکسیمم رو بگردیم تا از اول پیدا کنیم.

خب هدفمون از تمام این بحث ها چی بود؟ پیدا کردن روشی واسه کم کردن هزینه های محاسباتی واسه چک کردن اینکه برخورد داریم یا نه. قبلا باید میومدیم بین هر دو جسم دو به دو کوءری میزدیم. الان کافیه حجم محاطی رو چک کنیم. اگه حجم های محصور کننده با هم برخورد نداشته باشن قطعا میگیم دو جسم برخورد ندارن اما اگه برخورد کنن چی؟ البته با قاطعیت نمیتونیم بگیم که برخورد رخ داده و باز باید برخورد دو جسم رو چک کنیم.
ادامه ی اینکه چطوری هزینه ها رو باز کم کنیم رو در پست بعدی میگم.
 
  • شروع کننده موضوع
  • #9

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
هزینه در بررسی برخورد چطور حساب میشه؟
هزینه ی کل رو میتونیم مجموع سه تا هزینه بگیریم: ۱- هزینه مربوط به حساب کردن حجم محصور کننده ۲-هزینه مربوط به بررسی برخورد در فاز گسترده ۳-هزینه مربوط به فاز نزدیک(یا باریک). هر کدوم از این هزینه ها در واقع حاصل ضرب تعداد دفعات در هزینه ی مربوط به یکبار هست. مثلا اگر لازم باشه سه بار برخورد در فاز گسترده رو چک کنیم هزینه مربوط به یکبار رو در سه دفعه ضرب میکنیم.
اینو گفتم که بگم حساب کردن حجم محاطی یه جور ترید آف هست. اگر حجم محاطی رو ساده در نظر بگیریم و هزینه ی کمی واسش پرداخت کنیم احتمالا تعداد دفعاتی که باید برخورد در فاز نزدیک رو چک کنیم بیشتر میشه و اگه هزینه مربوط به فاز نزدیک زیاد باشه این حاصل ضرب یهو گنده میشه.
در کل هزینه ی مربوط به بررسی هر بار برخورد نزدیک زیاد تر از بقیه هست و باید کاری کنیم که تعداد دفعات لازم برای بررسی برخورد در فاز نزدیک کم بشه تا حاصل ضرب و هزینه مربوط به کل برخورد فاز نزدیک زیاد نشه. روشی که برای کم کردن تعداد دفعات بررسی برخورد فاز نزدیک ارایه شده روش حجم محاطی سلسله مراتبی یا Bounding Volume Hierarchies هست. بهش BVH هم میگن. خب حالا این یعنی چی؟
تو روش کره ی محاطی میومدیم یه کره رو به جسم سه بعدی مون محاط میکردیم. حالا اگه بیاییم قسمت های کوچیک کوچیک از جسم رو توسط کره های کوچیک محاط کنیم یا به عبارتی شی رو با تعداد زیادی کره مدل کنیم کره محاطی سلسله مراتبی داریم.
An-overview-of-our-two-level-bounding-volume-hierarchy-Given-a-skinned-body-mesh-in-A_W640.jpg

توی این شکل میتونید سلسله مراتب رو بهتر ببینید. البته تماما کره نیست و بهتره به جای استوانه ها کره بذارید. میبینید که هرچی تعداد کره هایی که استفاده شده بیشتر باشه به شکل اصلی نزدیک تره. اما چک کردن اینکه بین دو کره برخورد رخ داده خیلی ساده تر از اینه که برخورد بین دو جسم رو چک کنیم.
برای اینکه این روش رو پیاده سازی کنن از دیتا استراکچر درخت استفاده میکنن. به این صورت که اول یک حجم محاط میشه و بعد این حجم محاطی رو به دو قسمت مساوی تقسیم میکنن و بعد هر کدوم از این دو حجم رو به دو حجم دیگه تقسیم میکنن و الی آخر، تا جایی به تعداد دلخواه حجم داشته باشیم.
برای اینکه حجم های تشکیل شده رو گروپ کنیم هم برعکس میریم تا برسیم به حجم محصور کننده ی اولی.
الگوریتم چک کردن برخورد در روش حجم محاطی سلسله مراتبی
اول میاییم دیتا استراکچر درخت رو میسازیم. بعد میاییم روت ها رو (حجم محاطی اولیه) رو با هم چک میکنیم. اگه این دو تا برخورد نداشتن پس کلا دو جسم برخورد نکردن. اما اگه اشتراک داشتن باید بریم واسه بچه های روت دو به دو چک کنیم ببینیم برخورد داشتن یا نه و همینطوری تا برگ ها ادامه میدیم تا ببینیم برخورد کجا بوده.
نکته اینه که اگه جایی اشتراک نداشتیم میتونیم قطع کنیم و بگیم اینجا برخورد رخ نداده.
از بین روش های مربوط به حجم محاطی که پست قبل درموردش صحبت کردم، در صورتی که شی ریجید(سفت و غیر قابل تغییر شکل) باشه بهتره از روش OBB یا مکعب چرخش یافته استفاده کنیم. درمورد این اشکال معمولا تعداد برخورد ها کمتر هست. از اونجا که اجسام ریجید فقط جابه جا میشن یا میچرخن پس کافیه همون مکعب چرخشی رو جابه جا کنیم یا بچرخونیمش و لازم نیست دوباره حجم محاطی رو از اول حساب کنیم.
اما درصورتی که شی قابلیت دفرمه شدن داره بهتره از k-DOP استفاده بشه. درمورد این اشیا تعداد برخوردها زیاد هست و حتی میتونن خودشون با خودشون برخورد کنن(تا خوردن پارچه). در مورد این اجسام علاوه بر چرخش و جا به جایی تغییرات دیگه ای هم میتونیم داشته باشیم و هربار باید از اول کل حجم محاطی رو حساب کنیم. هزینه ی حساب کردن k-DOP از OBB کمتر هست(اما قابلیت چرخش نداره) و هر شی رو باید جداگونه واسش حجم محاطی حساب کنیم. واسه همین رفتیم سراغ k-DOP.
خب تا اینجا روش هایی که گفتیم براساس این بودن که پیچیدگی شکل رو کمتر کنیم و در واقع شکل رو با حجم محاطی تخمین بزنیم و مدل کنیم و ساده تر کنیم. روشی که در ادامه قراره درموردش صحبت کنم پیچیدگی شکل رو کم نمیکنه بلکه سعی میکنه با فرضیاتی که داریم تعداد دفعات کوءری زدن رو کم کنه. مثلا اگه دو شکل از هم خیلی فاصله دارن فرض میکنیم که با هم برخورد ندارن و لازم نیست اونا رو چک کنیم. این روش رو تقسیم کردن فضا یا space partitioning میگن.
این روش چطوری کار میکنه؟ فرض کنید فضای سه بعدی یا حتی دو بعدی رو به چند قسمت تقسیم کنیم که به هر کدوم بگیم سلول. در صورتی که دو جسم سلول مشترکی داشته باشن احتمال اینکه برخورد کنن وجود داره اما اگه دو جسم در یک سلول اشتراک ندارن پس ممکن نیست با همدیگه برخورد کنن. به همین سادگی!
اما اینکه فضا رو با چه روشی تقسیم کنیم؟ آیا فضا رو کاملا یکنواخت به سلول هایی با ابعاد یکسان تقسیم کنیم؟ به این روش میگن واکسل گرید. یا بیاییم کاملا غیر یکنواخت تقسیم کنیم؟ روش BSP-tree. روش های octree و k-d tree هم روش های دیگه ای هستن که متناسب با وضعیت اشیا صفحه رو تقسیم میکنن. اما روش اول یعنی واکسل گرید کاملا یکنواخت هست و به محل قرار قراری آبجکت بستگی نداره.
من اینجا فقط روش واکسل گرید رو بررسی میکنم. هر سلول رو با سه پارامتر براساس سه محور مختصات دکارتی توصیف میکنیم. و فضا رو گسسته میکنیم. ابعاد سلول ها دست خودمونه. هرچی ابعاد سلول ها بزرگتر باشه تعداد سلول های کمتری داریم و بالعکس. (درمورد ترید آفی که مربوط به هزینه هاست فکر کنید.)
بعد باید مکعب مستطیل محاطی شکل رو حساب کنیم(نسبت به بقیه روش های راحت تره). البته از این مکعب مستطیل فقط نقطه مینیمم و ماکسیمم مهم هست. و تمام سلول هایی که تو این ناحیه قرار میگیرن رو در میاریم. این کار رو برای تمام اشکال انجام میدیم و در صورتی که سلول مشترک داشته باشیم برخورد رو گزارش میدیم.
البته اشکال میتونن در حرکت باشن و بعد از چند آپدیت دیگه با هم برخورد نداشته باشن. که باید در ذخیره کردن دیتا حواسمون به این مساله باشه.
برای اینکه روند پیدا کردن سلول هایی که شکل رو پوشش میدن رو یه مقدار بهینه تر کنیم در هر آپدیت اول چک میکنیم ببینیم آیا نقاط ماکسیمم و مینیمم تو همون سلول قبلی قرار دارن یا نه و اگه همونجای قبلی بودن دیگه لازم نیست دوباره سلول هایی که حجم محاطی رو میپوشونن رو حساب کنیم چون همون قبلی ها هستن یا اگه به اندازه یه سلول جابه جا شدن پس احتمالا همسایه ها هستن. و لازم نیست کل سلول های فضا رو بررسی کنیم.
البته باز باید حواسمون باشه که حتی اگه برخورد کردن گزارش بشه ممکنه واقعا برخورد رخ نده! برای اینکه دقیق تر باشه میتونیم سایز سلول ها رو کوچیک کنیم که باز ترید آف داریم!
کلا مهندسی هست و تریدآفش!
پس اگه سلول ها کوچیک باشن باید تعداد زیادی سلول پیدا کنیم و اگه تعداد سلول ها کم باشن گزارش برخورد نادقیق میشه. چیکار کنیم پس؟ یکی از راهکارها این میتونه باشه که بیاییم تعداد سلول ها رو برابر با تعداد اشیا بیگیریم. البته اگه سایز اشیا به هم نخوره و یکی فیل باشه و یکی موش خیلی بهینه نیست.
خب این هم از بحث شیرین برخورد و تمام!
فقط یه خلاصه کوچیک: روش های حجم محاطی و تقسیم فضا هردو برای کاهش هزینه ها استفاده میشدن اما روش حجم محاطی بیشتر آبجکت محور هست و به مکان شی توجه نمیکنیم و تقسیم فضا، فضا محور هست و شکل جسم به عنوان اطلاعات اضافی محسوب میشه که مثلا تقسیم فضا رو بهینه تر کنیم.


در پست بعدی درمورد ردیابی حرکت یا Motion Tracking حرف میزنیم.
 
  • شروع کننده موضوع
  • #10

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست و پست های بعدی میخوام درمورد ردیابی حرکت یا Motion Tracking بگم.

در واقعیت وقتی سرمون رو میچرخونیم انتظار داریم یه صحنه ی دیگه رو از یه دید دیگه ببینیم. تو واقعیت مجازی هم درست همینطور با عینک یا دوربینی که داریم وقتی سرمون رو میچرخونیم باید متفاوت ببینیم. خب از کجا باید تشخیص بدیم که سرمون چقدر چرخیده یا چه حرکتی داشته و الان داره کجا رو نگاه میکنه؟ به کمک ردیابی حرکت میتونیم جواب این سوالات رو پیدا کنیم. به علاوه صحنه ای که دوربین سمت راست میبینه با صحنه ای که دوربین چپ میبینه با هم فرق دارن(یبار چشم راستتون رو به دست بپوشونید و چیزی که چشم چپ میبینه رو نگاه کنید و بالعکس.)
قبلا درمورد دستگاه های ورودی صحبت کردیم. و اینکه میتونیم از دستکش مجهز استفاده کنیم که به کمک سنسورهاش وضعیت جسم رو میتونه تشخیص بده. خب این دستکش ها هم یک نوع ردیابی حرکت محسوب میشن. در واقع تمام دیوایس های ورودی در واقعیت مجازی نیاز دارن که سیستم ردیابی داشته باشن تا بتونیم مکان و جهت رو داشته باشیم اما هر سیستم ردیابی لزوما دیوایس ورودی نیست. دو تا مثال از این دستکش ها بزنیم.. یکیش دستکش دیتا هست که با فیبر نوری مجهز شده و وقتی که مثلا انگشتمون رو خم میکنیم براساس میزان نوری که به انگشت میرسه جهتش رو تشخیص میده. یکی دیگشم دستکش سایبری هست که به جای قیبر نوری از سیم استفاده شده و جریان الکتریسیتی رو اندازه میگیره. این دستکش ها باید تا شدگی/صاف بودن و جمع شدگی/باز شدگی انگشتان رو حساب کنن.البته نیاز هست که میزان چرخش انگشت شست رو هم حساب کنن که کار خیلی سختی هست ولی از اونجایی که انگشت شست در گرفتن اشیا بهمون کمک میکنه خیلی مهم هست. به وسیله این دستکش ها میتونیم حرکات طبیعی داشته باشیم و حتی چند تا شی رو برداریم و ردیابی کنیم اما بدیش اینه که خیلی راحت نیست. حتی دستکش نازک و لاتک هم بپوشیم اون حس دست خودمون رو ازمون میگیره حالا چه برسه به دستکشی که کلی سنسور بهش وصله! بعدشم اینکه دست هر کسی با هرکسی متفاوته ولی معمولا چون این دستکش ها گرون هستن به تعداد آدم ها تولید نمیشن و مجبور هستیم از یک دستکش عمومی استفاده کنیم که این باعث میشه نیاز داشته باشیم واسه هرکسی اون رو کالیبره کنیم.
خب این یکم از دستکش های مجهز. اما بریم درمورد باقی سیستم های ردیابی بیشتر بگیم.
خب معیارها در ردیابی حرکت چی هستن؟
اول اینکه اصلا چی رو میخوایم اندازه بگیریم و ردیابی کنیم؟ خب جواب زاویه، میزان جا به جایی، جای جدید شی، جهت قرار گرفتنش، شتابی که داشتیم، پترن حرکت و این جور چیزاست.
دومین مساله ابعاد هست. ما تو واقعیت مجازی با سه بعد کار میکنیم. تو مساله برخورد میتونستیم مساله رو یه جورایی مپ کنیم به دو بعد اما اینجا سه بعد رو باید در نظر بگیریم. و البته تعداد اشیایی که داریم ردیابی میکنیم هم مهم هستن.مثلا اگه بخوایم انگشت های دست رو ردیابی کنیم باید تک تک انگشت ها رو به عنوان شی ای که داریم ردیابی میکنیم در نظر بگیریم.
دقت مکانی فاکتور مهم دیگه ست. بسته به اپلیکیشن بعضی وقتا دقت مهم نیست. مثلا وقتی میخوایم حیوونی که تو واقعیت مجازی ساختیم رو ردیابی کنیم، اینکه قدم هاشو چطور برمیداره خیلی مهم نیست ولی وقتی قرار باشه یه شی رو در دست بگیریم دقت ردیابی انگشتان دست و شی مهم تر میشه. چون اگه درست ردیابی نشه و خطایی مثلا به اندازه پنج سانتی متر داشته باشیم ممکنه اصلا شی رو نگرفته باشیم ولی سیستم واسه خودش ردیابی کنه!
همینطور داشتن نویز و جیتر مکانی هم بسته به اپلیکیشن میتونه مشکل ساز یا بی اهمیت باشه.
البته دقت زمانی هم مهمه. اینکه چقدر تاخیر داریم قطعا خیلی مهمه و البته اینکه با چه نرخی داریم ردیابی رو انجام میدیم. اگه نرخ پایین باشه ممکنه ردیابی پر از جهش باشه و در واقع اسموث نباشه.
نکته بعدی هندل کردن دیتا هست. البته امروزه دیتا رو توسط کامپیوتر پردازش میکنیم ولی قبلا مجبور بودن خودشون ثانیه به ثانیه ردیابی کردن رو پردازش کنن. و چیزی که مطلوب ما هست ردیابی به صورت بلادرنگ یا ریل تایم هست.
مورد بعدی هم حجمی که داریم ردیابی میکنیم هست. معمولا اگه قرار باشه حجم زیادی رو ردیابی کنیم دقت پایین هست چون میخواد چند تا چیز رو ردیابی کنه ولی اگه قرار باشه مثلا فقط یک انگشت رو ردیابی کنیم، نتیجه دقیق تر خواهد بود.
مورد آخر ارگونومی هست. در صورتی که کلی سخت افزار به کاربر وصل کنیم که بخوایم ردیابی کنیم میشه روش intrusive و اگه دم و دستگاه به خود کاربر وصل نباشه میشه non-intrusive. مهمه که کاربر وقتی داره شی رو جا به جا میکنه براش احساس ناخوشایندی نداشته باشه و اگه یک عالمه چیز میز بهش وصل باشه کار رو سخت میکنه.

تکنولوژی هایی که داریم چیا هستن؟
۱- روش مکانیکی ۲- روش مغناطیسی ۳- روش نوری ۴- روش آلتراسوند(فراصوت) ۵- روش اینرشال یا سکون ۶- ماهواره و جی پی اس

۱- روش مکانیکی از قدیمی ترین روش ها بوده. یه سری دستگاه مکانیکی به خودشون متصل میکردن که حرکت رو می سنجه. و میزان جا به جایی یا تغییر جهت رو اطلاع میده.
۲- روش ردیابی الکترمغناطیسی رو اولین بار در صنعت نظامی استفاده کردن. فرض کنید یک فرستنده داریم و چند گیرنده. فرستنده سه تا کویل داره که در راستای محور های ایکس و وای و زد هستن و وقتی جریان از هر کدوم از این کویل ها عبور میکنه میدان مغناطیسی مربوط به اون جهت تولید میشه و وقتی به گیرنده ها - که اونا هم سه تا کویل در هر راستا دارن - میرسه در اونها جریان تولید میشه که با اندازه گرفتن این جریان میتونیم جهت گیرنده رو در بیاریم.
از این روش برای ردیابی کل بدن هم استفاده میشه. کافیه سنسور های گیرنده رو به بدن وصل کنیم.
حالا مزایا و معایب این روش چی هست: با این روش میتونیم مکان و جهت شی رو به دست بیاریم. تو این روش انسداد نداریم یعنی اگه یه مانعی بین فرستنده و گیرنده باشه موج الکترومغناطیسی ازش عبور میکنه. اما این امواج نسبت به مواد فرومغناطیسی حساس هستن و روی این مواد جواب نمیدن. به علاوه اگه فاصله زیاد باشه دقت کم میشه. سنسور ها نسبتا بزرگ هستن پس روی اشیای خیلی کوچیک نمیشه کار گذاشت و اینکه به کابل نیاز داریم.
۳- روش نوری خودش تشکیل شده از چهار روش. ۱- دوربین های فروسرخ و مارکر که بهش روش opto-electronic هم گفته میشه. ۲- Time of flight
۳- Structured light و ۴- دوربین های RGB ( بحث های کامپیوترویژن)
یه مارکر متصل میکنن به فرد یا چیزی که قراره اون رو ردیابی کنیم و بعد به وسیله ی دو دوربین فروسرخ مکان دو بعدی ش رو عکس برداری میکنن و به کمک این تصویر دو بعدی مکان سه بعدی رو در میارن. وقتی از یک دوربین برای عکس برداری استفاده میکنیم فقط میتونیم دو بعد رو در بیاریم ولی اگه از تعداد بیشتری و حاقل دو تا دوربین استفاده کنیم میتونیم بعد سوم رو هم در بیاریم.
دو حالت واسه این مارکر ها وجود داره. یکی حالت پسیو هست که مارکر ها فقط فروسرخی که بهشون میرسه رو بازتاب میکنن و حالت دیگه اکتیو هست که مارکر ها خودشون فروسرخ ساطع میکنن و بهمون اجازه میدن هر کدوم از مارکر ها رو که میخوایم روشن یا خاموش کنیم. این کجا به درد میخوره؟ مثلا اگه بخوایم سر انگشت هامون رو ردیابی کنیم اگه از مارکر پسیو استفاده کنیم ممکنه انگشت های مختلف با هم قاطی شن چون چهار پنج تا مارکر هست که شبیه به همه اما میتونیم با استفاده از مارکر اکتیو به ترتیب بگیم اول فقط انگشت اول مارکرش رو ردیابی کنیم و بعد دوم و همینطور الی آخر تا قاطی نشن. اما بدیش اینه که این حالت فعال نیاز به کابل داره. توی این عکس واسه سه تا و پنج تا انگشت ردیاب گذاشتیم.
ART-Finger-Tracking-System-with-3-and-5-Fingers-8_W640.jpg

خب این روش از بس خوبه که امروزه در اکثر موارد از این روش opto-electronic استفاده میکنن. این روش دقت خیلی خوبی داره و تاخیرش کمه. و اگه از مارکر های پسیو استفاده کنیم نیاز به کابل هم نداریم. اما متاسفانه انسداد داریم. یعنی اگه بین مارکر و دوربین باشه، فروسرخ نمیتونه ازش عبور کنه و عکسش ثبت نمیشه. و قبلنا کالیبره کردنش سخت بوده ولی امروزه دیگه این مشکل رو نداریم.

روش Time of Flight براساس سرعت حرکت نور هست که فاصله بین دوربین و شی رو میسنجه. این روش گرون هست و کاربرد زیادی تو واقعیت مجازی نداره. هرچند کیفیتش به مرور زمان بهتر شده.مولفه هاش شامل: واحد نوری هست که معمولا از فروسرخ استفاده میشه، سنسور تصویر و دستگاهی برای سنجش فاصله هست.

روش Structured Light یا نور ساختار یافته که ماکروسافت در دیوایس ایکس باکسش استفاده کرد. البته چون از نظر تجاری خیلی موفق نبود سه سال پیش تولیدش متوقف شد. این دیوایس از یک پروژکتور فروسرخ و یک دوربین فروسرخ تشکیل شده که پروژگتور پترنی رو می تابونه و دوربین اون رو ثبت و ضبط میکنه. و چون به مارکر نیاز نداره بهمون اجازه میده که کل حرکات بدن رو ردیابی کنیم. یک دوربین وی جی ای هم داره که اجازه میده بافت ها رو مپ کنیم. با وجود اینکه اینقدر چیز خوبی هست اما ظاهرا خیلی قابل اعتماد نبود و یه سری خطاها داشته که باعث شده متوقف شه.

۴- روش فراصوت: این روش تاخیر زیادی داره چون سرعت صوت فقط ۳۴۰ متر در ثانیه هست. و به این صورت هست که چند تا فرستنده فراصوت میذاریم و یه گیرنده داریم که بر اساس اینکه این امواج فراصوت کی و از کدوم جهت زودتر به گیرنده میرسن میتونیم مکان و جهت گیرنده رو حساب کنیم.

۵- روش سکون یا اینرشال. حتما با تعریف کلمه اینرسی آشنایی دارین. اینرسی به عدم تمایل اجسام فیزیکی برای تغییر سرعتشون گفته میشه. برای اینکه جسمی سرعتش رو تغییر بده باید بهش نیرو وارد شه.
این روش از سنسور هایی به نام IMU استفاده میکنه و شتاب حرکتی رو اندازه میگیره و ژیروسکوپ هم داره که سرعت چرخش رو اندازه میگیره. و برای اینکه مکان و جهت رو به دست بیاریم باید از این سرعت و شتاب انتگرال بگیریم که توسط وسیله ای به نام Dead Reckoning ممکنه. مشکلی که با این روش داریم اینه که به خاطر نویز و گرانش و این جور چیزا ممکنه خطا داشته باشیم و البته وقتی انتگرال میگیریم این خطاها رو هم جمع میشن و چیز فاجعه ای میشه. اما از اونجا که این سنسور ها خیلی ارزون هستن میتونیم بیاییم این خطاها رو جبران کنیم مثلا به کمک ردیاب های فراصوت.

خب تا اینجا روش های علمی و پایه واسه ردیابی رو گفتیم. اما روش های تجاری چی؟ مثلا ایکس باکس یکی از اون روش ها بود. در ادامه میخوام از HTC Vive بگم که کاملا تجاری هست و از اینجا که سایت اصلیش هست میتونید بیشتر درموردش ببینید. با حدود ۱۰۰۰ یورو(یا دلار) میتونید یکی از این ردیاب ها رو بخرین. اما این ردیاب چطور کار میکنه؟
HTC Vive از سنسور های IMU استفاده میکنه و برای تصحیح خطا از روش نوری کمک میگیره و فوتودیود و فرستنده نوری(امیتتر نوری) داره. این امیتتر ها گوشه های اتاق فیکس میشن آرایه ای از LED های فروسرخ دارن و هربار یکبار اتاق رو به صورت افقی و بار بعد به صورت عمودی اسکن میکنن تا مکان و جهت انسان رو در بیارن.
خب این روش نسبتا ارزون هست.(البته نه واسه ما ایرانیا = )) ) هم از نظر سخت افزاری هم از نظر محاسبات. و چون محاسباتش تو همون دیوایس به صورت محلی انجام میشه کاملا پرایوت و خصوصی هست. چون از تصحیح خطای نوری استفاده میکنیم دقت بالایی داره و تاخیر کمی داره. به کمک امیتر ها فضای زیادی رو ردیابی میکنه و بی سیم هست و اضافه کردن کاربر نسبتا ساده هست و فقط کافیه یه دوربین اضافه داشته باشیم. اما چون از فرو سرخ استفاده میکنه در صورتی که مانعی بین امیتر و انسان باشه نمیتونه اسکن و ردیابی کنه.

یکی دیگه از ردیاب های تجاری Oculus Rift هست که تقریبا قیمتش نصف قبلی هست. این ردیاب به جای امیتر، دوربین فروسرخ داره. و LED هایی که توی صفحه نمایشی که روی چشم میذاریم هستن، فروسرخ ساطع میکنن و دوربین اون ها رو ثبت میکنه و مکان رو حساب میکنه.

دو متد کلی برای ردیابی داریم. اولیش Outside-In و دومیش Inside-Out هست.
Outside-In Setup
تو این متد سنسور ها در اتاق نصب شدن و مارکر روی فیچری که میخوایم ردیابیش کنیم قرار داره و سنسور ها به مارکر نگاه میکنن و پردازش ها روی سرور انجام میشه.
Inside-Out Setup
این متد برعکس قبلی سنسور ها روی شی قرار گرفتن و به محیط بیرون نگاه میکنند. پردازش داده ها برای محاسبه مکان و جهت داخل خود دیوایس انجام میشه.
سنسور ها میتونن دوربین فروسرخ یا رنگی، فوتودیودسنسور های اینرسی یا آکوستیک و یا الکترومغناطیسی باشن.
فیچرها هم مارکرها یا محیط هست.
مثلا غار واقعیت مجازی روش Outside-In محسوب میشه چون دوربین ها گوشه های اتاقک قرار گرفتن و به کنترلی که دست فرد هست نگاه میکنن تا بتونن ردیابی کنن.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #11

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
در این پست میریم دیپ میشیم تو روش نوری و به خصوص opto-electronic برای ردیابی و الگوریتمش رو بررسی میکنیم. دلیلشم اینه که این روش خیلی موفق و دقیق بوده.
این سیستم دو قسمت اصلی سخت افزار و نرم افزار داره. بخش مربوط به سخت افزار شامل دوربین های فروسرخ که در گوشه های اتاق نصب میشن هست و یک سرور قدرتمند برای محاسبات مربوط به ردیابی. البته یک سرور دیگه هم باید داشته باشیم که باقی محاسبات مربوط به واقعیت مجازی مثل تشخیص برخوردِ رندرینگ و... رو انجام میده. معمولا این دو تا سرور رو کنار هم میذارن.
بخش جالب تر این سیستم، نرم افزارش هست که در واقع شامل الگوریتم و ریاضیات سیستم میشه. قبلا اشاره کردم که به کمک یک دوربین میتونیم یک عکس دوبعدی بگیریم. در این تصویر دو بعدی، به چیزی که قراره ردیابی کنیم، مارکر وصل میکنیم و این مارکر ها از جنسی هستن که نور رو به خوبی منعکس میکنند و نتیجه ی عکسی که میگیریم بعد از تبدیل کردن به تصویر باینری (با اعمال ترش الد یا حد آستانه) این هست که نقاط مربوط به مارکر نقاط روشنی هستن که به سادگی توسط دوربین فروسرخ قابل تشخیص هست. جاهایی که مارکر نداریم، دوربین فروسرخ کاملا سیاه میبینه و فقط جاهایی که مارکر روشن هست رو روشن میبینه. البته ممکنه چالش هایی داشته باشیم مثلا یک دوربین تمام نقاط مربوط به مارکر رو نبینه یا مشکل انسداد داشته باشیم(چیزی مانع بین مارکر و دوربین فروسرخ باشه) یا حتی نویز داشته باشیم ولی برای سادگی کار این مسایل رو خیلی جدی نمیگیریم. در هر صورت ما چند تا دوربین داریم که باید برای هر کدوم به صورت تصویر رو پردازش کنیم. پس تصویر ورودی به صورت یک تصویر باینری با نقاط روشن مربوط به مارکر خواهد بود.
استپ بعدی مربوط به تشخیص مکان مارکرها به صورت لیستی از نقاط ایکس و ایگرگ خواهد بود. مارکرها بسته به فاصله ای که دوربین دارن کوچک یا بزرگ به نظر میرسن و تعداد پیکسل های کمتر یا بیشتری خواهند داشت. از اونجایی که هر مارکر بیشتر از یک پیکسل رو اشغال میکنه، برای اینکه دقیق باشیم میخوایم که مرکز تصویر های مارکر رو مشخص کنیم. خب حالا برای پسدا کردن مرکز تصویر مارکرها باید چیکار کنیم؟ کل تصویر رو از نقطه ی بالا چپ ردیف به ردیف از چپ به راست و از بالا به پایین اسکن میکنیم(اسکن خطی) و پیکسل های مربوط به هر مارکر رو توی دیتا استراکچری به نام بوک کیپینگ (book keeping) ذخیره میکنیم.
قدم بعدی چگونگی تبدیل مکان های دو بعدی به سه بعدی هست. یک روش محبوب این هست که نقاط دو بعدی رو به پرتو های سه بعدی دوربین تبدیل کنیم و ببینیم که پرتو های دوربین های مختلف کجا باهم برخورد میکنن. این محل برخورد، مکان سه بعدی مارکر هست. البته برای اینکار به دیتا کالیبراسیون احتیاج داریم. دیتای کالیبراسیون رو یکبار موقع نصب دوربین های سیستم ردیاب در میاریم که شامل موقعیت و جهت دوربین ها و لنز های مورد استفاده در دوربین هاست. و چون دوربین ها ثابت هستن و تغییر نمیکنن دیتای کالیبراسیون هم ثابت میمونه. با این حساب، پرتوی فرضی از محل دوربین شروع میشه و در جهتی که مارکر نشون میده امتداد پیدا میکنه. محل برخورد پرتوها مکان سه بعدی رو نشون میده اما مشکلی هست اینه که ممکنه این پرتوها هیچ وقت با هم برخورد نکنن! در صورتی که دو تا پرتو باشه، کمترین فاصله بین دو پرتو رو به عنوان مکان برخورد در نظر میگیریم. اگر تعداد پرتوها بیشتر باشه میانگینی از میانگینِ کمترین فاصله بین دو به دوی پرتو ها به عنوان محل برخورد تلقی میشه. هر چی که تعداد دوربین ها و در نتیجه تعداد پرتوها بیشتر باشه دقت محل برخورد سه بعدی هم بیشتر میشه. خب تا اینجا لیست سه بعدی از پرتو ها رو حساب کردیم که به مکان سه بعدی مارکر ها ختم شد. اگر سیستم ردیاب فقط مکان سه بعدی رو بخواد کارمون تموم هست. کافیه این مکان سه بعدی رو به سرور پاس بدیم تا هر کاری که میخواد باهاشون برای رندرینگ بکنه.
اما معمولا علاوه بر مکان، جهت حرکت رو هم لازم داریم. برای پیدا کردن جهت ما نمیتونیم فقط از یک مارکر استفاده کنیم و باید حتما تعداد بیشتری مارکر -حداقل سه تا- داشته باشیم. به همچین چیزی میگیم تارگت که حداقل از سه تا مارکر ساخته شده که نسبت به هدیگه غیر خطی و ثابت هستن. هرچی که تعداد مارکرهای تارگت بیشتر باشه، پیدا کردن جهت دقیق تر هست. برای پیدا کردن جهت، از الگوریتمی به نام «ردیابی تارگت با ۶ درجه آزادی» استفاده میکنیم که به شرح زیر خواهد بود. منظور از ۶ درجه آزادی، ۳ درجه مکانی x,y,z و ۳ درجه جهتی هست.
برای این منظور به کنترلرمون یک تارگت وصل میکنیم. اول از همه یک مختصات گلوبال داریم که مکان سه بعدی مارکرهای متصل رو نسبت به این دستگاه مختصات حساب میکنیم. پس یک سری بردار سه بعدی داریم(y). به علاوه یک دستگاه مختصات محلی کنترلر هم در نظر میگیریم که مبداش برابر با یکی از مارکر ها به صورت تصادفی هست و بردار مکان باقی مارکرهای تارگت رو نسبت به این دستگاه محلی هم در میاریم(x). اگر بردار مکان(P) و جهت(R) دستگاه مختصات محلی به گلوبال رو هم داشته باشیم، میتونیم هر بردار محلی رو به بردار گلوبال مپ کنیم: y = Rx+P
اینجا باید با داشتن x,y بردار مکان و جهت رو حساب کنیم. و سوالی که پیش میاد اینه که اگه بردار مکان غلط باشه و در نتیجه کل محاسباتمون غلط بشه چی؟ بردار مکان ممکنه به دلایل مختلفی که قبلا تو چالش تشخیص مارکرها گفتم اشتباه باشه. الگوریتمی که استفاده میکنیم، الگوریتم روش مربع کمینه یا least square method هست که توی رگرسیون یا برازش منحنی معمولا استفاده میشه که میاییم دیتا رو به یک مدل فیت میکنیم. که با مینیمم کردن مجموع مربع خطا بین داده ی اندازه گیری شده و تخمین زده شده انجام میشه.
الگوریتممون به این صورت هست:
۱- حساب کردن میانگین بردار های x,y
۲- کم کردن میانگین از بردار های اصلی
۳- حساب کردن ماتریس کوواریانس C= Y(X.T)
۴- تجزیه ماتیس کوواریانس C = UW(V.T)
۵- بردار جهت یا چرخش به صورت V(U.T) حساب میشه و بردار مکان به صورت y_m - R*x_m
** برای پیدا کردن بردار مکان کافیه فرم کلی معادله رو -با فرض اینکه بردار مکان رو میدونیم- بنویسیم و نسبت به بردار مکان مشتق بگیریم.
** برای پیدا کردن بردار مکان هم بعد از اینکه بردار مکان رو جایگذاری کردیم، یکم فرم معادله رو تغییر میدیم و دستکاری میکنیم تا ماتریس کوواریانس از دلش بیاد بیرون.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #12

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
این پست و پست های بعدی درمورد واقعیت مجازی دیداری هست. اول درمورد فاکتورهایی که انسان توش دخیل هست صحبت میکنیم. مثلا اگه یه دیدگاه کوتاه درمورد ساختار چشم داشته باشیم بهتر میتونیم درمورد دوربین هایی که روی چشم قرار میگیره و ویژگی هایی که باید داشته باشه توضیح بدم. همینطور اینکه مفاهیمی مثل عمق یا فاصله رو ما انسان ها چطور درک میکنیم و اگه قرار باشه تو واقعیت مجازی این مسایل مطرح شن چطور باید باشه. چون ممکنه بخوایم یه چیزی تو فاصله دور به صورت مجازی نشون بدیم اما لزومی نداره اون چیز واقعا همونقدر دور باشه. همین که ذهن ما فکر کنه که این چیز دور هست کافیه.
اول از ساختار چشم شروع میکنیم.
خب اول از همه قرنیه قرار داره که ضریب شکست نور ورودی به چشم رو کنترل میکنه. این قسمت کاملا شفاف هست. بعد از اون عنبیه یا آیریس هست که بخش رنگی چشم هست و این عنبیه هست که مردمک رو تنگ و گشاد میکنه تا نور به اندازه کافی از چشم عبور کنه. بعد از عنبیه لنز چشم هست که ماهیچه های مژگانی میتونن لنز رو کشیده تر یا تپل تر کنن. این تغییر شکل لنز باعث میشه بتونیم اجسام در فواصل مختلف رو ببینیم. در سنین پیری لنز چشم ضعیف میشه و ماهیچه های مژگانی هر چی بکشنش نمیتونه برای فاصله های نزدیک متمرکز بشه که باعث بیماری دوربینی در افراد مسن میشه. در نهایت تصویر میفته رو پرده شبکیه و به کمک سلول های رنگی(Cone) و روشنایی(Rod) و عصب های نوری که به مغز فرستاده میشن میتونیم تصویر رو ببینیم. تعداد سلول های روشنایی خیلی بیشتر از سلول های رنگی هست. به همین خاطر در تاریکی که نور به اندازه کافی وجود نداره فقط سلول های روشنایی کار میکنن و ما همه چیز رو خاکستری میبینیم و نمیتونیم رنگ ها رو تشخیص بدیم.
محدوده ی دید چشم های ما چقدره؟ میدان دید اون مقدار از محیط هست مه بدون چرخوندن چشم هامون و وقتی سرمون مستقیم هست میتونیم ببینیم.
محدوده دید افقی داریم و عمودی. میدان دید عمودی کمتره و ۱۲۰ درجه هست. میدان دید افقی کل ۲۱۴ درجه هست که خیلی عجیب و جالبه! میدان دید شامل هر دو چشم ۱۲۰ درجه هست چون بخشی از محیط هست که فقط توسط یکی از چشم ها دیده میشه. میدان دید هر کدوم از چشم ها به تنهایی و بدون چرخوندن چشم ۱۶۷ درجه است. این تصویر منظورم رو بهتر نشون میده. میدان دید بعدا در طراحی دوربین ها خیلی اهمیت داره.

1024px-FOV_both_eyes.svg.png


همونطور که قبلا گفتیم واقعیت مجازی ای خوب هست که کاربر نتونه بین دنیای واقعی و مجازی تفاوتی قایل بشه و بتونه کاملا در اون دنیا در اصطلاح غرق شه(immersion) حالا درمورد عمق و درک سه بعدی میخوایم صحبت کنیم. اینکه ما آدم ها چطوری اشیا رو سه بعدی درک میکنیم. این مساله رو از دو شیوه میشه بهش نگاه کرد: یکی روانشناسی و دیگری فیزیولوژی.
دیدگاه روانشناسی که در واقع اون چیزی که ذهن ما درک میکنه: مثلا پرسپکتیو، مانعی که جلو یا پشت شی قرار داره، نور و سایه روشن ها. مسایل روانشناسی رو معمولا میتونیم با خطاهای ذهنی هم ایجاد کنیم اما مسایل فیزیولوژی رو نه.
دیدگاه فیزیولوژی یا اون چیزی که واقعا عمل میکنه و کارکرد محسوب میشه: این که ما دو تا چشم داریم و هرکدوم از چشم ها رو میتونیم بچرخونیم یا به کمک ماهیچه های مژگانی میتونیم لنز چشم رو برای فاصله های مختلف تطبیق بدیم و اینکه میتونیم سرمون رو تکون بدیم و اجسام رو در زوایای مختلف ببینیم.
تو کامپیوتر گرافیک بیشتر به مسایل مربوط به روانشناسی توجه شده ولی فیزیولوژی تو واقعیت مجازی خیلی مهم و کلیدی هست.
خب اول درمورد مثال های مربوط به روانشناسی میگم.
پرسپکتیو
پرتوهایی که از شی به چشم ما میرسن ابعاد شی رو مشخص میکنن و در واقع هرچی که چیزی به ما نزدیک تر باشه اون رو بزرگ تر میبینیم و اگه دورتر باشه کوچیکتر. اما از اونجا که مغز ما یه شناختی از ابعاد تقریبی اجسام داره، میاد این کوچک و بزرگی رو با فاصله مپ میکنه. مثلا میدونیم قد معمول انسان ۱۶۵ سانت هست ولی وقتی فردی از ما دور هست اون رو شاید نیم متر ببینیم ولی چون مغزمون در واقع میدونه که نیم متر نیست و ۱.۵ متر هست پس حساب میکنه که این آدم اینقدر باهات فاصله داره. اما ممکن هم هست واقعا اون آدم قدش کوتاه باشه و نزدیک باشه ولی اگه هیچ سرنخ دیگه ای نداشته باشیم خب فاصله رو ممکنه کاملا اشتباه تخمین بزنیم! اگه Perspective: Optical Illusions رو سرچ کنین کلی از این خطا های جالب میتونین ببینین.
همپوشانی یا Occlusion
درصورتی که دو شی باهمدیگه همپوشانی داشته باشن ممکنه ما هیچ وقت نتونیم تشخیص بدیم که شی ای که پشت پنهان شده واقعا چی بوده. ذهن ما ممکنه با توجه به تجربیاتی که داره حدس هایی بزنه اما نمیتونیم مطمعن باشیم. مثلا توی شکل زیر ممکنه در نگاه اول بگین یه مثلث سفید بی رنگ روی مثلث زیری قرار گرفته و گوشه هاش روی سه تا دایره قرار گرفتن اما اگه بیشتر دقت کنین ممکنه بگین نه اینا دایره نیستن و فقط قسمتی از دایره هستن که باعث خطای دید شده. به هر حال ما نمیتونیم با قاطعیت بگیم کدوم یک از این دو حالت هست! مثال واسش خیلی خیلی زیاده.
1024px-Kanizsa_triangle.svg.png

درمورد پرسپکتیو و همپوشانی از نظر کامپیوترگرافیک و الگوریتم هاش تو پست بعدی صحبت میکنیم.
سایه روشن
شاید این عکس مثال خوبی از این خطای ذهنی باشه. سایه ی حلقه باعث شده به صورت قلب دیده بشه. حالا اگه فقط سایه رو میدیدیم نمیتونستیم به هیچ وجه حدس بزنیم که واقعیت چی بوده.
ring-and-shadow.jpg

قایق پرنده و خط عابر پیاده ی شناور هم مثال های جالب دیگه ای هستن که میتونین خودتون تصاویرش رو ببینین!
پرسپکتیو جوی
اما آخرین مثالی که از دیدگاه روانشناسی بررسی میکنم پرسپکتیو جوی هست که درواقع جو باعث میشه چیزهایی که در فاصله زیادی از ما قرار دارن به صورت کدر و محو و با رنگ کمتری دیده شن. مثلا تو تصویر زیر کوه جلویی رو با رنگ خودش میبینیم اما کوه های دورتر چون جو (هوا) بین ما و کوه ها وجود داره تاثیر میذاره و کوه ها رو ما وضوح کمتر میبینیم. پس درواقع هوا و جو کاملا شفاف نیستن! وقتی ضخامتش زیاد شه تاثیرش رو میذاره!
Aerial-perspective-in-art.jpg

یا روزهایی که هوا آلوده هست نمیتونیم فاصله های نزدیک رو هم درست و واضح ببینیم که نتیجه ی این تاثیر هست.

خب خب بریم سراغ مسایل مربوط به فیزیولوژی
دید دو چشمی یا Stereopsis

دیدن به کمک دو چشم هست که به ما کمک میکنه عمق رو تشخیص بدیم. کافیه یکی از چشم هاتون رو بپوشونین و سعی کنید که فقط با یکی از چشم هاتون نگاه کنید. در این صورت نمیتونید بعد سوم رو ببینید! (ممکنه اولش به خاطر اینکه مغز باهوشی دارین گول بخورین اما اگه چند دقیقه صبر کنین مغزتون یادش میره!)
بین چشم های ما تقریبا ۶ سانتی متر فاصله هست و این تشخیص عمق تا فاصله های حدودا ۷ متری کار میکنه. چیزی که روی شبکیه های چشم ها میفته با هم دیگه ناسازگاری داره که باید بره کورتکس مغز و اونجا پردازش بشه.
از اینجا میتونید مثالش رو که گیف هست ببینید. این گیف متشکل از دو صحنه هست. یکی فقط با چشم راست و دیگری با چشم چپ. و وقتی بین این دو سریع سوییچ میشه، میتونید عمق رو کاملا حس کنید.
اختلاف منظر حرکتی یا Motion Parallax
این پدیده به این برمیگرده که وقتی چیزی رو از جهات مختلفی بهش نگاه کنی اون رو متفاوت میبینی. اگه از پنجره ماشین در حال حرکت بیرون رو نگاه کنید میبینید که اجسامی که نزدیک هستن حیلی سریع از جلو چشماتون عبور میکنن ولی اجسامی که دورتر هستن با سرعت کمتری حرکت میکنن. این در واقع ناشی از حرکت ما هست وگرنه اون اجسام که ساکن هستند.
واگرایی یا همگرایی
چشم میتونه حرکت کنه و مثلا وقتی خودکار رو بیارین بچسبونین نزدیک بینی بین دو چشم، مردمک ها حرکت کردن و اومدن وسط. یا اگه سعی کنین به یه پاندول نگاه کنین چشم هم باهاش حرکت میکنه. در واقع چشم ها در خلاف جهت همدیگه حرکت میکنن تا یک دید دو چشمی رو ایجاد کنن.
وقتی میخوایم به چیزی که در فاصله کمی از ما قرار داره نگاه کنیم هم باید توپک چشم ها رو بچرخونیم و بیاریمشون نزدیک به همدیگه و هم اینکه لنز چشم توسط ماهیچه های مژگانی کشیده بشن (لنز در حالت استراحت فاصله های دور رو میبینه). Autostereogram تصویری هست که کاملا نویزی به نظر میرسه اما اگه بتونین فقط یکی از این دو مکانیسم بینایی رو برای دیدن به کار بگیرین میتونین از این تصویر نویزی، تصویر سه بعدی ببینید.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #13

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
تو این پست خیلی کوتاه درمورد ریاضیات پرسپکتیو و همپوشانی صحبت میکنیم.
اول تعریف کوتاهی داشته باشیم از حجم تماشا یا View Volume: حجم تماشا از ترکیبی از تبدیل تماشا و تبدیل پروجکشن حاصل میشه. تبدیل تماشا مشخص میکنه که چشم ما کجاست و از چه زاویه ای داریم تماشا میکنیم و تبدیل پروجکشن میگه که چه مقدار از صحنه قابل دیدن هست. مثلا فرض کنید داریم از داخل یه جعبه به بیرون نگاه میکنیم و دیدمون توسط کادر این جعبه محدود شده. میتونیم همراه با جعبه حرکت کنیم(تغییر تبدیل تماشا) اما همیشه دید محدود شده(تبدیل پروجکشن)
به همین ترتیب صفحه نزدیک و صفحه دور داریم که دو صفحه خیالی هستن که به فاصله هایی از چشم(یا دوربین) قرار دارن و فقط چیزهایی که بین این دو صفحه باشن رندر میشن. البته یه پنجره تماشا هم داریم که چیزایی که بین صفحه نزدیک و صفحه دور قراره رندر بشه رو میندازه رو پنجره تماشا و نشون میده. پنجره ی تماشا بین صفحات نزدیک و دور قرار داره.
خب حالا پرسپکتیو چطوری تو کامپیوترگرافیک نشون داده میشه؟ خیلی ساده. میاییم اشکال سه بعدی رو پروجکت میکنیم رو پنجره ی تماشا. به این صورت که پرتوهای رو از چشم وصل میکنیم به شکل سه بعدی و محل تقاطع با پنجره ی تماشا رو به عنوان تصویر روی صفحه تماشا در نظر میگیریم. از اونجا که هرچی شکل دورتر باشه روی صفحه پنجره ی کوچکتر نشون داده میشه، درک خوبی از پرسپکتیو میتونه بهمون بده. حساب کتاب کردن ریاضیاتیش هم از طریق تشابه مثلث های هندسی هست. کافیه چشم رو توی مبدا دستگاه مختصات در نظر بگیریم.

اینجا یه تعریف کوتاه میارم که بعدا مفصل تر توی سیستم های واقعیت مجازی بررسی ش میکنیم و اون egocentric perspective هست که به معنای این هست که پروجکشن و رسم تصاویر کاملا هماهنگ و منطبق با نقطه ی مشاهده ی کاربر هست. یعنی خب همون طور که ممکنه سرمون رو تکون بدیم و حجم تماشا تغییر کنه، لازمه که دوباره تبدیل پروجکشن حساب شه. و لازمه هربار مکان چشم به عنوان مبدا دستگاه مختصات جدید در نظر گرفته بشه. برای این کار لازمه که به صورت ریل تایم حرکات سر رو ردیابی و دنبال کنیم و در صورتیکه تاخیر هرچند جزیی داشته باشیم حرکت زدگی ممکنه ایجاد کنه.
خب مفهوم دیگه یا هم داریم به نام پروجکشن موازی که برخلاف پرسپکتیو که از یه مبدا به صورت مخروطی می تابه، پرتوها موازی هم هستن و در نتیجه پرسپکتیو که با فاصله ابعاد کوچیک میشن رو نشون نمیده. و حجم تماشا به صورت مکعب هست برخلاف طرح پرسپکتیو که حجم تماشا به صورت هرمی هست.
خوبی روش موازی اینه که پرتوها رو فقط در یک راستا لازمه چک کنیم اما تو روش پرسپکتیو پرتو در دو راستا حرکت میکنه.
این از پرسپکتیو. بریم سراغ همپوشانی.
وقتی دو جسم یا قسمتی از یک شکل (پشتش) واسه ما قابل دیدن نیست پس کلا نباید اون قسمت رو رندر کنیم. این البته به ما در سرعت بخشیدن به کارمون کمک میکنه. خب حالا از کجا بفهمیم پس زمینه قابل دیدن هست یا نه؟ الگوریتمش اینه که اگه زاویه بین بردار نرمال و پرتویی که از چشم به سطح میرسه(خط دیدن یا line of sight) کمتر از ۹۰ در جه باشه اون قسمت واسه ما قابل دیدنه و اگه بیشتر از ۹۰ باشه قابل دیدن نیست. (اما اینکه چطوری بردار نرمال و خط دیدن رو به دست بیاریم مطمعن نیستم :؟)
خب اگه با تکنیکی که گفتم بیاییم قسمت هایی که قابل دیدن نیستن رو حذف کنیم همچنان مشکل قرار گرفتن یک جسم جلوی جسم دیگه رو حل نکردیم. برای این کار باید از تکنیک <<حذف سطح پنهان شده>> استفاده کرد. برای این کار از بافر زد استفاده میکنیم که در واقع یک مموری توی کارت گرافیک هست که برای هر پیکسل یک ورودی داره. پس میاد هر پیکسل رو بررسی میکنه و در صورتی که تو یه پیکسل دو تا شی داشته باشیم که مقدار زد یکیش بیشتر از اون یکی باشه، اونی که زد بزرگتری داره رو جایگذاری میکنه و شکلی که زد کمتری داره رو حذف میکنه. پس اگه شکلی عمق بیشتری داشته باشه یا در فاصله دورتری قرار داشته باشه رندر نمیشه. طول هر کلمه ی این مموری ۲۴ بیت بر پیکسل هست. یعنی هر پیکسل رو با ۲۴ بیت نشون میده. اگه این طول کمتر باشه عمقی که میتونه تشخیص بده هم کمتر میشه. این طول دقت رو نشون میده. اگه طول ۸ بیت بر پیکسل بود یعنی فقط میتونست ۲۵۶ سطح عمق مختلف رو نشون بده که خیلی کمه اما با ۲۴ تا میتونه ۲ به توان ۲۴ سطح عمق مختلف رو نشون بده. این صفحات عمق به صورت یکنواخت فاصله بین صفحه نزدیک و دور -که قبلا معرفی کردم- رو تقسیم میکنن.
البته مشکلی که ممکنه به وجود بیاد واسه شکل هایی که خیلی نزدیک بهم هستن و حتی با ۲ به توان ۲۴ سطح هم نتونیم نشون بدیم. راه حل هم اینه که یا از گرافیک قوی تری مثلا ۳۲ بیت بر پیکسل استفاده کنیم یا این دو تا شکل رو یکم بیشتر فاصله بدیم تا توی ۲ به توان ۲۴ سطح جا شن.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #14

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
گفتیم برای درک سه بعدی اجسام از دو جنبه روانشناسی و فیزیولوژی نیاز داریم. جنبه روانشناسی ش رو از طریق خطاهای دید و به کمک کامپیوتر گرافیک میتونیم انجام بدیم. اما برای پیاده سازی جنبه فیزیولوژی (دید دوچشمی، ردیابی حرکتی، اختلاف منظر حرکتی و ...) نیاز داریم که از دوربین استفاده کنیم.
برای اینکار از نمایشگر روی سر یا Head-Mounted Displays یا به صورت خلاصه شده نمایشگر استفاده میکنیم.
اصول این نمایشگرها چی هستن؟
اول اینکه برای هرکدوم از چشم چپ و راست صفحه و پنجره نمایش مجزا باید داشته باشیم. البته لزومی نداره از نظر سخت افزاری دو تا باشن. ساده ترین نوع این نمایشگرها که از اسمارت فون استفاده میکنن اینطوری هستن که صفحه گوشی رو با یک خط فرضی به دو قسمت مساوی تقسیم میکنن که مجزا از هم نمایش داده میشه. این به این دلیل هست که همونطور که قبلا گفتیم به خاطر فاصله چشم ها، متفاوت از همدیگه میبینن.
این صفحه ها با حرکت سر کاربر تغییر میکنن. برای اینکه کاربر بتونه کاملا در دنیای مجازی غرق بشه این صفحه ها کاملا چسبیدن به چشم کاربر و هیچ مانعی بینشون نیست. البته اگه امتحان کنید و گوشی تون رو روی چشم هاتون بگیرید چون چشم ها نمیتونن متمرکز شن هیچی نمیبینید. به خاطر همین بین چشم و صفحه ی نمایشگر لنز میذارن که عملیات تمرکز انجام بشه. وقتی چشم تونست متمرکز بشه این قابلیت رو خواهیم داشت که تصاویر بزرگی رو در فواصل دورتر هم نمایش بدیم.
کیفیت نمایشگرها به یه سری عوامل از جمله رزولوشن، میدان دید، ارگونومی و ... بستگی داره.
رزولوشن
در مورد رزولوشن نمایشگرها باید فریم ریت بالایی داشته باشیم چون صفحه نمایشگر دقیقا چسبیده رو چشم هامون و با کوچکترین حرکتی چیز جدیدی باید رندر بشه. پس به فریم ریتی در حدود ۹۰ هرتز نیاز داریم. یعنی در هر ثانیه بتونیم ۹۰ فریم رو رندر کنیم. قاعدتا تاخیر باید خیلی کم باشه (زیر ۲۰ میلی ثانیه) تا حرکت زدگی - که قبلا بهش اشاره شد- اتفاق نیفته. حواسمون هم باید باشه که این رزولوشن رو برای هر دو چشم باید رعایت کنیم. خب چیزی که تو بازار هست رزولوشن ۵ مگاپیکسل داره که خب مرتب داره پیشرفت میکنه و بهتر میشه ولی با این کیفیت چیز قابل قبولی داریم.
البته تو بحث رزولوشن باید دقت کنیم که داریم تعداد کل پیکسل ها رو میگیم یا پیکسل بر درجه منظور بحث هست! مثلا وقتی به صفحه نمایش لپ تاپ نگاه میکنیم میدان دیدی حدود ۴۵ درجه داریم. میدان دید معمول در نمایشگرهای واقعیت مجازی ۹۰ درجه هست. پس اگه تعداد یکسانی پیکسل قرار باشه نمایش داده بشه، این پیکسل ها تو نمایشگر نسبت به لپ تاپ باید کشیده بشن که رزولوشن رو خیلی پایین میاره. بعضی از لپ تاپ ها که قابلیت این رو دارن که رزولوشنی حدود دو برابر (در هر بعد افقی و عمودی) و فریم ریت ۹۰ هرتز رو تامین کنن رو میگیم که اینا قابلیت استفاده برای کاربرد واقعیت مجازی دارن. که خب لپ تاپ های گرونی با گرافیک خفنی نیاز خواهد بود. درمورد اینکه جی پی یو باید چطوری باشه و از چه تکنیکی استفاده میتونیم بکنیم تا این قابلیت فراهم شه، بعدا در یک پست دیگه مفصل صحبت میکنیم.
میدان دید
قبلا درمورد میدان دید خلاصه ای گفتم اما اینجا میخوام انواع میدان های دید رو معرفی کنم.
۱- میدان دید ویژوال: اگه سرمون و چشم هامون رو ثابت نگه داریم و به فضای سه بعدی مقابل نگاه کنیم اون میزان از فضا که قابل دیدن هست رو میگن میدان دید ویژوال.
۲- میدان دید نگاهی: میدان دیدی که سرمون ثابته اما هر کدوم از چشم ها میتونن بچرخن و فضا رو نگاه کنن.
۳- میدان دید چشم انداز: میدان دید دستگاه های نوری مثلا دوربین یا تلسکوپ یا هر دیوایس دیگه.
۴- میدان دید توجه: میدان دید در صورتی که اجازه چرخش سر و چشم ها رو داشته باشیم. (بدن نمیتونه کاملا ۱۸۰ درجه بچرخه پس میدان دید ۳۶۰ درجه نیست و حدودا ۲۲۰ درجه ست.)
میدان دیدی که میخوایم در نمایشگرهای سربند داشته باشیم از نوع میدان دید توجه هست. البته یک سری نمایشگرهایی که توی بازار هستن هنوز نتونستن به میدان دید توجه نزدیک به چیزی که باید باشه -۲۲۰ درجه- برسن ولی خب مرتب درحال افزایش این میدان دید هستن.
انحراف لنز
اهمیت لنز رو برای کمک به لنز چشم برای تطبیق فاصله ها گفتیم. اما تکنولوژی ساخت لنز به صورتی هست که انحرافی که توی تصویر زیر میبینید رو ایجاد میکنه.
barrel-distortion-to-counteract-the-lense-based-pincushion-distortion-of-the-HMD-Image.png

معمولا وسط خود لنز دید خوب و ثابتی میده و لبه ها خراب میشن. تاثیر انحراف این لبه ها روی تشخیص رنگ هم هست چون رنگ های مختلف طول موج مختلفی دارن و انحراف لنز ها باعث میشه هر نور سفید بشکنه و به رنگ های سازندش تجزیه بشه.
برای جبران تاثیر این انحراف میتونیم از ترکیبی از این دو لنز استفاده کنیم که همدیگه رو جبران کنن اما توضیح مفصلش رو بعدا توی پست مربوط به گرافیک میدم.
تاثیر منافذ در نمایشگر
اگه از این توری هایی که سوراخ خیلی ریز دارن( یا معادلش الک) سعی کرده باشین به اون ور توری نگاه کرده باشین با تاثیر منافذ آشنا هستین. این اتفاق به خاطر تکنولوژی ساخت کریستال ها تو نمایشگر اتفاق میفته و چون نزدیک به چشم هست این خطوط ممکنه دیده بشه. البته سعی کردن که با افزایش رزولوشن و یک سری تکنیک ها کیفیت نمایشگر رو از نظر این منافذ کم کنن.
ارگونومی
آخرین چیزی که باید در کیفیت ساخت نمایشگرها مورد توجه قرار بدیم ارگونومی ش هست که کار کردن و پوشیدنش چقدر راحت یا سخت هست و آیا همه میتونن ازش استفاده کنن و اینا. یک مثال خیلی بد از ارگونومی بد رو در تصویر زیر میبینید که ساخت توشیبا هست. البته این مدل میدان دید خیلی خوبی داشته اما از نظر ارگونومی میتونید حس کنید که چقدر فاجعه است که همچین چیز بزرگی رو بخوایم بذاریم رو سرمون. اکسیژن کم نیاوردن؟ :D
zuoYQNKGMlApuxgHA72lgHVEbHtup0oioOmY9b3omUo.jpg

در کنار این مدل هزاران مدل دیگه هم هست که توی این عکس چندتاشو میبینید و اگه دوست داشتین با سرچ کردن head mounted display میتونید باقی مدل ها رو ببینید.
Popular-models-of-Head-Mounted-Displays-for-VR-and-AR-in-2016.png

اولین نمایشگر سال ۱۹۶۵ به صورت مکانیکی ساخته شد و بعد از اون از سال ۱۹۸۹ این صنعت مرتب در حال پیشرفت بوده و شرکت های مختلف سعی داشتن نمایشگرهایی با کیفیت بهتر و قیمت ارزان تر ارايه بدن. حتی یه مدل کاغذی که تو عکس بالا (ستون وسط ردیف اول) میبینیید ساخته شده که البته جایی داره که گوشی رو اونجا قرار بدید و متناسب با رزولوشن اسمارت فون، واقعیت مجازی خواهید داشت.

البته نباید خیلی به این نمایشگرها متکی بود و واقعیت مجازی رو تو این صفحه نمایش ها خلاصه کرد. مثلا با این نمایشگرها نمیتونیم دست و پاهای خودمون رو ببینیم و در واقع این نمایشگرها ما رو از دنیای واقعی جوری جدا میکنن که ممکنه به در و دیوار بخوریم چون نمیبینیم که در و دیوار کجاست! یا اگه قرار باشه چند نفر با هم اینتراکشن داشته باشن نمیتونیم به کمک این نمایشگرها همدیگه رو ببینیم. خب پیشرفت هایی حاصل شده مثلا بقیه افراد رو به صورت آواتار نشون میدن اما هنوز راه درازی در پیش هست.
به خاطر همین رو میاریم به نمایشگرهای اتاقکی که در پست بعد درموردش صحبت میکنیم.
 
  • شروع کننده موضوع
  • #15

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست میخوام درمورد نمایشگر اتاقکی (room-mounted display) یا دنیای ثابت (world-fixed) صحبت کنم. این نمایشگرها پیچیده تر از نمایشگر روی سر که قبلا درموردش صحبت کردیم هست و به همین دلیل بیشتر موضوعات بیشتری برای صحبت کردن داره.
اول مقایسه ای داشته باشیم درمورد اصول نمایشگر های اتاقکی و نمایشگرهای سری.
در نمایشگرهای روی سر دو صفحه داریم که برای چشم چپ و راست فرق داره که این صفحات با تغییر سر، تغییر میکنن اما در نمایشگر اتاقکی تنها یک صفحه داریم منتها دو پنجره مشاهده برای هرکدوم از چشم ها داریم و ثابت هست.
غرق شدگی یا Immersion در مدل سری ناشی از اینه که با تغییر جهت سر، صفحات جلوی چشم کاربر قرار میگیرند اما در مدل اتاقکی ناشی از سایز و تعداد صفحات هست.
و اینکه برای ایجاد اختلاف منظر حرکتی در مدل روی سری فقط کافیه جای چشم ها رو حساب کنیم و پنجره مشاهده رو به چشم ها متصل کنیم و Motion parallax خود به خود ایجاد میشه اما در مدل اتاقکی بعد از حساب کردن جای چشم ها، لازمه که ماتریس پروجشکن رو در هر تغییر جایگاه آپدیت کنیم. و پنجره مشاهده با جابه جایی تغییر میکنه. توی این پست بیشتر توضیح میدم که این اتافاقات چطوری رخ میده.
همونطور که گفتم برای نمایشگرهای اتاقکی ما یک صفحه داریم. خب جالا چطوری به کمک یه صفحه(چیز دو بعدی) بیاییم شکل سه بعدی رو نمایش بدیم؟ اگر سینما سه بعدی رفته باشید دیدین که عینک میدن که بزنیم. این عینک ها برای چشم چپ و چشم راست فیلترهای متفاوتی دارن که باعث میشه ما با هرکدوم از چشم هامون یه چیز رو از دو زاویه مختلف ببینیم و تو ذهنمون سه بعدی درکش کنیم. مثلا تاس زیر رو در واقعیت نظر بگیرید:
images

در حقیقت چشم چپمون سمت چپ (۶) رو بیشتر میبینه و چشم راست سمت راست(۴) رو و این تصویر سه بعدی ایجاد میکنه. حالا برای اینکه همچین چیزی رو ما رو پرده بخوایم سه بعدی نشون بدیم باید در واقع دو تا تصویر نشون بدیم که یکیش مربوط به چشم چپه و دیگری چشم راست و از اونجا که با چشم راست بخشی از تصویر مربوط به چشم چپ رو هم میبینیم پس باید تصویر رو برای هرکدوم از چشم ها فیلتر کنیم.
خب این سینماهای در اصطلاح سه بعدی تکنولوژی جدیدی نیست و برای اولین بار در سال ۱۹۲۲ (تقریبا صد سال پیش) مطرح شده بود و تو دهه ۵۰ میلادی در آمریکا به شدت محبوب بودن.
عبارت علمی این دیدن سه بعدی در واقع طرح برجسته بین یا Stereoscopic Projection هست و تکنیک های مختلفی داره که دو دسته اصلی غیر فعال و فعال رو شامل میشه.
ساده ترین تکنیک آناگلیف هست که دو تا تصویر که فیلتر رنگی شدن(یکی فیلتر سبز و دیگری قرمز) رو روی هم میندازیم و عینکی که استفاده میکنیم یکیش فیلتر سبز داره و دیگری فیلتر(تلق) قرمز و اینطوری هر کدوم از چشم هامون تصویر رو جدا میکنه. تصویر زیر یک تصویر آناگلیف و عینکش رو نشون میده.
220px-Hammer_anaglyph_%2814656149338%29.jpg
images


البته روش پیچیده تر آناگلیف، تکنیک INFITEC هست که نیمی از طیف سبز-آبی-قرمز رو در چشم چپ و نیم دیگر رو در چشم راست نشون میده.
تکنیک بعدی، پلاریزاسیون یا قطبش هست (خطی و دایروی). در قطبش خطی، نور رو به صورت موجی در نظر میگیریم که تنها در یک جهت نوسان میکنه و بالا و پایین میره. این نوسان میتونه یا به کمک فیلتر عمودی باشه یا فیلتر افقی. در سینما کاری که میکنن اینه که از دو پروژکتور استفاده میکنن و یکبار پلاریزاسیون افقی و بار دیگه پلاریزاسیون عمودی استفاده میکنن و عینک مورد نظر هم این فیلتر رو داره و در نتیجه باعث میشه با یک چشم تصویر افقی ببینیم و با دیگری تصویر عمودی که ترکیب این دو، تصویر جدا شده ای در ذهن ایجاد میکنه. ایراد این روش اینه که اگر سرمون رو یکم خم کنیم و از زاویه مستقیم نگاه نکنیم، دیگه قطبش خطی به چشممون نمیرسه. مثلا اگر یک خط صاف عمودی رو از جهت های غیر مستقیم بهش نگاه کنیم، خط رو ممکنه کج ببینیم.
قطبش دایروی ترکیبی از دو قطبش خطی افقی و عمودی هست. که بین این قطبش ها اختلاف فاز ۱/۴ هست که باعث میشه برآیند دو قطبش رو به صورت دایروی ببینیم. (اگر اختلاف فاز نداشته باشیم برآیند به صورت قطبش خطی قطری دیده میشه.) برای یکی از چشم ها اختلاف فاز ۱/۴+ و دیگری ۱/۴- ایجاد میکنیم و این اختلاف فاز باید میشه بتونیم به کمک عینک فیلتر دار تصویر سه بعدی ببینیم. توی پلاریزاسیون دایروی، دایره رو از هر جهت دایره میبینیم و دیگه اون مشکلی که واسه قطبش خطی داشتیم رو نخواهیم داشت.
تکنیک بعدی تکنیک فعال هست به نام شاتر. این روش از ادغام زمانی به دست اومده و به این شیوه هست که از دو پروژکتور استفاده میکنیم. پروژکتور ۱ برای چشم چپ و ۲ برای چشم راست که هر کدوم از پروژکتورها به ترتیب با فرکانس ۶۰ هرتز خاموش و روشن میشن. عینک مربوطه هم باید کاملا سینک باشه و همزمان خاموش و روشن شه. به این ترتیب یکبار تصویر مربوط به چشم چپ و یکبار دیگه تصویر مربوط به چشم راست رو میبینیم که باعث میشه از ترکیبشون تصویر سه بعدی ببینیم. چرا به این روش میگیم فعال؟ چون برای خاموش و روشن شدن لنزهای عینک نیاز به مدار الکتریکی داخل عینک داریم. سینک شدن بین عینک و پروژکتور به کمک تکنولوژی فروسرخ وایرلس اتفاق میفته که البته گاهی خطا داره. البته امروزه از روش های پیشرفته تری استفاده میکنن. یه ورژن دیگه از این روش فقط از یک پروژگتور استفاده میکنه که البته نیاز داره با فرکانس دو برابر یعنی ۱۲۰ هرتز کار کنه. که این روش کمی مقرون به صرفه تر هست اما نیاز داره خود پروژکتور پیچیده تر هست.

خب حالا بیاییم مقایسه کنیم و بگیم کدوم روش بهتره. اما برای اینکه مقایسه درستی داشته باشیم باید اول ببینیم معیارهای کیفیتمون یا quality criteria چیا هستن:
۱- کیفیت تصویر: رنگ تصویر، کنتراست یا میزان روشنایی و brightness، میدان دید و پدیده ی ghosting که بعدا درموردش صحبت میکنم.
۲- ارگونومی: اینکه کدوم روش راحت تره
۳- سینک شدن: تو روش فعال به سینک شدن عینک و پروژگتور نیاز داشتیم. البته در بقیه روش ها به سینک شدن بین چشم چپ و راست هم احتیاج داریم.
۴- کیفیت صفحه: صفحه نمایش یا صفحات عینک باید از متریال خوبی ساخته شده باشه تا روشنایی و کنتراست رو تحت تاثیر قرار نده.
۵- هزینه: اینکه آیا به باتری احتیاج داریم یا نه، نوع و تعداد پروژکتورها و هزینه ی مورد نیاز برای ساخت عینک
پس اگه بخوایم بگیم کدوم روش بهتره باید از جهات مختلف بررسی کنیم و ببینیم مثلا هزینه تمام شده ی کدوم روش کمتره یا کیفیت تصویر از نظر رنگ و کنتراست برای کدوم بهتره!
خب اول یه مقایسه داشته باشیم بین روش های پسیو پلاریزاسیون و عینک INFITEC:
اینجا یه نمونه عینک INFITEC میبینید. اگه دقت کنید میبینید که سعی شده اطرافش رو خوب بپوشونن تا نور های پراکنده از جاهای دیگه به چشم نرسه. به همین خاطر میدان دید در این روش خیلی محدود هست.
219d70088bb991c8dc3585e152b24fea.jpg

اما عینک پلاریزاسیون شبیه عینک آفتابی هست و اینطوری اطرافش محکم کاری نشده و میدان دید بیشتر و بهتری خواهیم داشت.
همینطور در روش INFITEC به خاطر اینکه طیف های رنگی برای چشم چپ و راست یه مقدار فرق داره، رنگ ها با اون چیزی که باید واقعا باشن یه مقدار فرق دارن.
چون هر دو نوع عینک فیلتر دارن، روشنایی و کنتراست تصویر خیلی جالب نیست چون همه ی فیلتر ها نور جذب میکنن.
از نظر هزینه هم هر دو نوع تکنیک به دو تا پروژکتور احتیاج دارن اما عینک های پلاریزاسیون ارزون قیمت تر از عینک های INFITEC هستن.

خب یه ارزیابی از روش اکتیو شاتر هم داشته باشیم. این روش کیفیت رنگ ها ثابت میمونه اما میدان دید محدود هست و به خصوص درمورد تلویزیون که صفحه ی کوچکی داره خیلی قابل استفاده نیست چون باعث میشه immersion اتفاق نیفته. اما در سینما بیشتر کاربرد داره که صفحه ی بزرگی داره. عینک شاتر روشنایی و کنتراست رو کم میکنه و همونطور که قبلا گفتم به سینکرونیزیشن دقیقی نیاز هست. درمورد هزینه م بگم که به دو تا پروژگتور یا یه پروژکتور قوی تر نیاز داریم. هزینه عینک هم قدیما خیلی زیاد بوده اما الان خیلی کم شده.

خب حالا خاصیت شبح یا ghosting چیه؟
در صورتی که تصویر مربوط به چشم چپ توسط چشم راست دیده بشه یا برعکس، تصویر مربوط به چشم راست توسط چشم چپ دیده بشه: مثل تصویر زیر
YY2_OYRoFvBT5Lu0KHC59mNkFKMt8oXtvC2QFxQkgSI1f1usggwOdBYflkVkjFFim-VjlZt64W3cIU7lEbLeqvObkIqGOD_lLg

توی عینک های INFITEC چون طیف مربوط به هر چشم کاملا مجزا هست ما اصلا خاصیت شبح رو نمیبینیم. در عینک های شاتر هم این اتفاق خیلی کم میفته اما در عینک های قطبش یا پلاریزاسون معمولا این مشکل وجود داره که برای رفع این مشکل گین صفحه رو بالا میبرن. اما با بالابردن گین صفحه، یکنواختی روشنایی و کنتراست کم میشه پس بین خاصیت شبح و یکنواختی روشنایی ترید آف خواهیم داشت.

توی پست بعدی درمورد پارالکس در اتاقک های نمایشگر حرف میزنم. البته واقعا مبحث پیچیده و سختی هست!
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #16

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
از اینجا به بعد درمورد پارالکس و egocentric projection یا به فارسی طرح خودمحوری حرف میزنیم. داستان از اونجا شروع میشه که میگیم یه واقعیت مجازی خوب، دنیایی هست که ما رو کاملا توی خودش غرق کنه و نتونیم اون رو از دنیای واقعی تفکیک کنیم و تشخیص بدیم. برای این کار لازمه که مکان چشم ها رو هر لحظه از ردیاب ورودی دریافت کنیم و ماتریس پروجکشن هرلحظه مطابق با مکان جدید آپدیت شه. در اتاقک نمایشگر تنها یک صفحه وجود داره و ما خودمون هستیم که جابه جا میشیم پس در واقع حجم مشاهده هم درحال تغییر هست. گفتیم پنجره مشاهده برای چشم چپ و راست فرق داره و همین کمک میکنه که از تکنیک هایی استفاده کنیم که تصویر سه بعدی بهمون میده.
پارالکس خودش یعنی اینکه شی رو از زاویه های مختلف متفاوت ببینیم. درصورتی که محل تقاطع دو پرتو از چشم چپ و راست روی صفحه نمایش بیفته میگیم پارالکس صفر هست و اگر محل تقاطع جلوتر از صفحه نمایش باشه پارالکس منفی (متقاطع) هست و اگر پشت صفحه بیفته پارالکس مثبت (غیرمتقاطع) هست.
مساله اینه که برای یک تصویر مشخص روی صفحه اگر پارالکس متقاطع داشته باشیم با جابه جایی ما محل تقاطع هم تغییر میکنه و به جای اینکه ثابت بمونه به ما نزدیک تر میشه. یعنی با حرکت ما جسم هم در حال جابه جایی هست. پس باید حواسمون باشه که پروجکشن رو به محل تماشای کاربر منطبق کنیم. چون در غیر این صورت یه مکعب با سطح صاف ممکنه کاملا خم و کج و کوله دیده شه. مثال محسوس تر توی سینما سه بعدی هست. اگر یکم سرمون رو خم کنیم و تکون بدیم، تصویری که میبینیم از حالت طبیعی و مد نظر خارج میشه. اما توی سینما شاید خیلی محسوس و اذیت کننده نباشه چون قرار نیست خیلی حرکت کنیم اما تو اتاقک که قراره مرتب جابه جا شیم و تغییر مکان بدیم خیلی مهمه که تصویر رو منطبق با محل تماشا کنیم. پس نقطه ی تماشا از حالت نرمال و عادی خودش که فرض بر این هست که متقارن هست و از یک نقطه ثابت به مانیتور نگاه میکنیم خارج میشه و حالت نامتقارنی به خودش میگیره.
ماتریس پروجکشن رو باید با هر تغییر آپدیت کنیم به خاطر همین لازمه که یه فرم بسته واسش پیدا کنیم. برای این کار یک سری پارامتر داریم که در صورتی که صفحه ثابت باشه تغییر نمیکنه و شامل مختصات چپ و راست و بالا و پایین و صفحات نزدیک و دور میشه. یک دسته دیگه هم متغیرها هستن که مختصات x,y,z چشم هست.
اولین مرحله برای اینکار اینه که دستگاه مختصات نامتقارن رو به کمک تبدیل shearing متقارن کنیم. و در نهایت تبدیل میکنیم به دستگاه کانونیکال که موازی هست. برای تبدیل دستگاه متقارن به کانونیکال باید پنج مرحله طی کنیم که یه مقدار پیچیده هست و سعی میکنم خیلی کلی و اجمالی توضیح بدم.
مرحله اول این هست که نقطه مشاهده رو منتقل کنیم به مبدا مختصات.
توی مرحله دوم پنجره مشاهده رو نرمالایز میکنیم تا تبدیل بشه به مستطیل واحد.
مرحله سوم پنجره مشاهده رو به عنوان تابعی در راستای محور z اسکیل میکنیم در نتیجه نسبت به محور x,y ثابت میشه و فقط در راستای محور z تغییر میکنه.
تو مرحله چهارم مستطیل رو در راستای محور z اسکیل میکنیم تا تبدیل به مربع واحد شه.
در نهایت تو مرحله پنجم به اندازه کافی مربع رو شیفت میدیم تا مرکزش در مبدا مختصات قرار بگیره.
البته تو ماتریس پروجکشن تمام این مراحل علاوه بر مرحله تبدیل shearing لحاظ شده و همه در هم ضرب میشن و یک ماتریس خروجی میده که کافیه در هربار آپدیت، مقادیر رو جایگذاری کنیم.

خب این قسمت یکم سخت بود. قسمت بعدی راحت تر هست. اینجا میخوایم درمورد انواع اتاقک های نمایش صحبت کنیم.
۱- مانیتور: مانیتور ها میتونن به عنان ابزار واقعیت مجازی استفاده بشن که ارزون ترین مدل هستن. البته شباهتی به اتاقک ندارن!
۲- نمایشگر عمودی بزرگ یا پاور وال یا دیوار قدرت (power wall)
میتونیم به عنوان یک غار در نظر بگیریمش که تنها یک سمت داره. چون صفحه خیلی بزرگی داره، میدان دید وسیعی هم داره اما میدان توجه (میدان دید در صورت چرخش سر) کم هست. چون مثلا اگه ۱۸۰ درجه بچرخیم پشت سرمون دیگه نمایشگر نداریم.
پروژکتور رو از پشت میذارن برای اینکه سایه مون نیفته روی صفحه و معمولا از سطح زمین شروع میشه و میاد بالا برای اینکه حس بهتری به کاربر بده. و امکان رابط کاربری سه بعدی رو هم بهمون میده.
ابعاد صفحه نمایش و جنس صفحه خیلی مهم هست. صفحه میتونه سخت باشه یا منعطف. به علاوه چون ابعاد صفحه خیلی بزرگ هست معمولا از چندتا پروژکتور در یک ردیف استفاده میکنیم که رزولوشن، روشنایی و کنتراست تصاویر خیلی مهم هست. البته تعدد پروژکتور ها برای اینکه تعداد پیکسل ها بیشتر باشه و درنتیجه رزولوشن بهتری داشته باشیم هم اهمیت داره. خب حالا ممکنه این سوال پیش بیاد که وقتی چندتا پروژکتور رو میذاریم کنار همدیگه ناحیه ای که با هم همپوشانی دارن چی میشه. درصورتی که پروژکتورها رو جوری کنار هم قرار بدیم که اصلا همپوشانی نداشته باشن تصویر مطلوب خواهد بود اما اگه در حد یک پیکسل از هم فاصله داشته باشن اون ناحیه خالی میفته یا اگه یک پیکسل روی هم بیفته اون ناحیه روشن تر میشه. یا حتی اگه یکی از پروژکتورها روشناییش یکم از بغلیش بیشتر باشه کیفیت اون ناحیه خراب میشه. راه حل این کار ترکیب لبه هاست. به این صورت که روی لبه پروژکتور روی ناحیه ای که همپوشانی داریم فیلتر میذاریم که به تدریج روشنایی کم شه و اینطوری با ترکیب دو ناحیه در واقع تصویر با کیفیت اصلی تولید میشه. معمولا از فیلتر خطی یا گاوسی استفاده میکنیم. در صورتی که پروژکتورها رو به صورت دو بعدی (بالا و پایین و چپ و راست همدیگه) بذاریم هم باید حواسمون باشه که ناحیه های همپوشانی افزایش پیدا میکنن و فیلتر رو باید در جهت های مختلف تنظیم کنیم. این فیلتر گذاشتن رو میشه به صورت سخت افزاری یا نرم افزاری تنظیم کرد. روش سخت افزاریش به این صورت هست که جلوی لنز پروژکتور فیلتر میذاریم و به کمک FPGA تنظیم میکنیم. البته روش سخت افزاری یکم هزینه بر هست و روش نرم افزاری که به کمک GPU انجام میشه مقرون به صرفه تر هست که بعدا درموردش صحبت میکنیم.
اینجا یک مثال از پاوروال رو میبینید
VR-Powerwall-FH-Aachen-_01.jpg

پاوروال های زیادی وجود دارن که از تکنیک های مختلفی استفاده میکنن. مثلا یک نوع از عینک های با قطبش دایروی استفاده میکنه و کیفیت ۴k داره اما ابعاد نه چندان بزرگی داره. مدل دیگه ای هست که از عینک های INFITEC استفاده میکنه و ۴۸ تا پروژکتور استفاده کرده که با وجود اینکه هرکدوم از پروژکتورها کیفیت خیلی بالایی ندارن اما درمجموع با ۴۸ تا پروژکتور کیفیت خوبه.
نوع دیگه ای پاوروال ها که بیشتر در حوزه ریسرچ هستن به جای پروژکتور از پنل های LCD استفاده میکنن. که کنتراست خیلی خوبی دارن اما مشکلی که داره اینه که پارالکس منفی ایجاد میکنه و تصویر رو پشت صفحه نمایش نشون میده و نمیتونیم پارالکس مثبت ایجاد کنیم.
۳- نمایشگرهای افقی با سایز میز یا نیمکت واکنشی یا responsive workbench:
صفحه ی افقی که از اسمش مشخصه. به جای پاوروال که عمودی بود یه میز هست که افقیه. و پروژکتور از پشت میزنه تا سایه ما روش نیفته. یه حالت دیگه هم اینه که به صورت L شکل هست و ترکیب افقی و عمودی هست. این میز ها معمولا ابعاد خیلی بزرگی ندارن و برای تعامل داشتن با چیزهای در ابعاد نه چندان بزرگ و ویژوالیزیشن چیزهای مینیاتوری مناسب هستن. مثلا به جای اینکه معماران ماکت رو با کاغذ و مقوا بسازن میتونن از این میزها استفاده کنن که رابط لمسی هم داره. البته این میز ها immersion نداریم و امروزه بیشتر در ترکیب با واقعیت افزوده به کار میره.
۴- غار
اتاقک های غار مانند تنها مدلی از نمایشگرهای اتاقکی هستن که غرق شدگی immersion رو به صورت کامل میتونیم تجربه کنیم. این غار ها معمولا در ابعاد یک اتاق هستن و درمورد مدل های مختلف غار که تو دنیا وجود داره و ویژگی هاشون چندتا مثال میارم. استاندارد غار سه تا دیوار و یک کف هست. غار پنج جهته علاوه بر کف، سقف هم داره. غاری که توی دانشگاه ما RWTH وجود داره ۴ تا دیوار داره که یکی از دیوار هاش به عنوان راه ورود و خروج باز و بسته میشه.
هدف از غار واقعیت مجازی این هست که بتونیم توی غار حرکت کنیم و کاملا توی محیط مجازی غرق بشیم. همونطور که گفتم تعداد دیوار ها میتونه متفاوت باشه اما در غارهایی که ۴ تا دیوار دارن باید حواسمون به مساله امنیت باشه. این اتاقک ها کاملا ایزوله هستن و اکسیژن نمیتونه وارد و خارج شه پس اگه یکی یهو سرش گیج رفت و اکسیژن تموم کرد و حالش بد شد باید راه خروجی براش راحت باشه. به خاطر همین اتاقک هایی که ۴ تا دیوار دارن یه مقدار باید این مسایل رو جدی تر بگیرن. همچنین ابعاد کف و سقف مهمه. و باید به اندازه ای بزرگ باشه که بتونیم حرکت کنیم و اگر خواستیم با چند نفر وارد شیم مشکلی نباشه.
پروژکتور ها رو معمولا از عقب میذارن تا با مشکل سایه افتادن رو به رو نشن. رزولوشن و روشنایی و کنتراست پروژکتورها مهمه. همینطور تعداد پروژکتور ها. تکنولوژی stereoscopic که توی پست قبل مطرح کردیم هم در غارهای مختلف فرق میکنه. البته جنس دیوار ها که میتونه سخت باشه مثل شیشه یا منعطف باشه مثل پارچه پروژکتورها.
اولین مثالی که میخوام درموردش صحبت کنم اولین غاری بوده که توی دانشگاه RWTH ساخته شده. که ۴ تا در داشته و یک در اسلایدینگ که با دست باز و بسته میشه و یک کف که برای کف از پروژکتورهای از جلو استفاده شده. ابعاد کف ۳.۳*۲.۷ متر بوده و ارتفاع دیوار ها ۲.۷. تعداد پیکسل ها ۹ میلیون پیکسل هست که با توجه به سایز دیوارها ابعاد هر پیکسل در میاد ۲.۳*۲.۳ میلیمتر. اگه از فاصله ۲۰ سانتی متری به دیوارها نگاه کنیم پیکسل ها رو میبینیم ولی از فاصله یکم دورتر قابل قبول هست. تکنولوژی استریو که استفاده شده قطبش دایروی هست. این غار سال ۲۰۰۴ ساخته شد و سال ۲۰۱۲ خرابش کردن که مدل بعدی رو بسازن.
غاری که سال ۲۰۱۲ ساخته شد ۴ دیوار داشت منتها در ورود و خروج به صورت برقی باز و بسته میشه. برای کف هم از پروژکتورهای از عقب استفاده شده. ابعاد کف ۵.۲۵*۵.۲۵ هست که به نسبت از قبلی برگتر هست(حدودا ۲.۵ برابر میشه) رزولوشن بالاتری استفاده شده با ۴۰ میلیون پیکسل و ابعاد هر پیکسل در میاد ۱.۵*۱.۵ میلیمتر. تکنولوژی استریو عینک های شاتر هستن.
show_picture.asp

نوع دیگه ای از غار که توی دانشگاه IOWA ساختن و جالبه، ۶ جهت داره و رزولوشن خیلی بالایی داره و ابعاد هر پیکسل ۰.۷۵*۰.۷۵ میلیمتر هست. اما برای مسایل امنیتی دیوار هاش رو از ماده منعطف (پارچه پروژکتوری) ساختن که خیلی راحت و با چاقو پاره میشه. به همین خاطر رزولوشن بالا روی پارچه کمی بی کیفیت نشون داده میشه. ابعاد کف ۳*۳ و ارتفاع دیوار ها ۳ متر هست. تکنولوژی استریو هم پلاریزاسیون دایروی هست.
مدل دیگه ای هست که از پنل های LCD استفاده کردن اما کف نداره (نمیتونیم برای کف از LCD استفاده کنیم). البته رزولوشن خیلی خیلی بالاست و قاعدتا به قدرت پردازشی خیلی زیادی هم احتیاج داره. اما بین پنل ها خطوط سیاه رنگی مشاهده میشه که از حس واقعیت مجازی بودن ما رو دور میکنه.
۵- نمایشگرهای خمیده:
آخرین نمونه از نمایشگرهای اتاقکی مدل خمیده هستن که به جای اینکه دیوار ها صاف باشن و گوشه داشته باشن، خمیده هستن و مثل استوانه یا کره یا نیم کره میمونن. ساخت این اتاقک های خمیده خیلی دشوار هست چون تنظیم کردن پروژکتور برای سطوح خمیده مشکل هست. اما توی اسراییل یه مدل کاملا کروی رو ساختن که برای شبیه سازی های آموزش پرواز نظامی استفاده میشه و چیز بسیار خفنی هست.
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #17

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست میخوام درمورد فوتومتری صحبت کنم. فوتومتری بخشی از مبحث اپتیک در فیزیک هست و در واقع علم اندازه گیری امواج الکترومغناطیس در طیف ۳۸۰ تا ۷۸۰ نانومتر هست که میشه همون نور. پس فوتومتری علم مربوط به نور قابل دیدن میشه.
امواج الکترومغناطیسی همونطور که میدونید طیف گسترده ای رو از ۱۰ به توان -۱۴ تا یک میلیون متر شامل میشن که در این بین فقط ۴۰۰ نانومترش رو نور قابل دیدن ما در برمیگیره. داشتم با خودم فکر میکردم که حالا که فقط با ۴۰۰ نانومتر این همه کار میتونیم بکنیم(دیدن) اگه تمام این طیف الکترومغناطیس واسه ما آدما قابل درک بود چی میشد!
اندازه گیری نور کار سخت و پیچیده ای هست. چرا؟ چون نور در محیط سه بعدی پراکنده میشه و تاثیرات خیلی زیادی مثل بازتاب، شکست و ... داریم که البته چیزی که پیچیده ترش میکنه اینه که واسه هر طول موج این اتفاقات متفاوت میفته. به علاوه میزان روشنایی که اندازه گیری میشه با چیزی که انسان ها دریافت میکنن متفاوته چون میزان حساسیت آدم ها با هم فرق داره. روش های مختلفی واسه اندازه گیری وجود داره و همینطور واحد های مختلفی هم داریم که در ادامه بهشون اشاره میکنیم.
تعاریف مختلفی که در نور وجود داره (منتها با اینکه در انگلیسی فرق دارند تو فارسی معادل های درست و حسابی نداریم) عبارتند از:
شار درخشندگی یا luminous flux با واحد لومن که در واقع قدرت لامپ هست.
روشنایی یا illuminance (ممکنه با brightness اشتباه گرفته بشه) با واحد لوکس که میزان روشنایی جسم و یا صفحه ای که بهش نور تابیده رو بیان میکنه. لوکس برابر با لومن بر متر مربع هست.
شدت درخشندگی (Luminous Intensity) که واحدش کاندلا هست و برابر با شار درخشندگی بر واحد زاویه هست یعنی شدت درخشندگی رو در یک جهت خاص نشون میده. مثلا یک حباب لامپ در جهت های مختلف میزان درخشندگیش متفاوت هست و چون شدت هست مستقل از فاصله از منبع نور هست.
درخشندگی یا Luminance با واحد کاندلا بر متر مربع یا نیتس که میزان درخشندگی دریافتی فرد رو نشون میده.
تعداد سنسور های مخروطی و استوانه ای چشم بین ۱۰ به توان -۶ و صد میلیون کاندلا بر متر مربع هست.
تابع درخشندگی میزان حساسیت روشنایی چشم رو مشخص میکنه. و درحالتی که میزان نور محیط کم یا زیاد باشه فرق میکنه. به علاوه برای طیف های مختلف نور هم متفاوت هست. مثلا چشم ما به نور سبز نسبت به نور قرمز حساس تر هست و اگه شما به دو تا ال ای دی که میزان شار درخشندگی یکسانی دارن نگاه کنین نور سبز رو روشن تر میبینید. در واقع این تابع برای طول موج ۵۵۰ نانومتر بیشترین مقدار رو داره و اگه بخوایم برای نور شامل چند طیف حساب کنیم باید واسه روی رنگ های موجود انتگرال بگیریم.
کندلا در واقع از کندل به معنی شمع میاد. شار درخشندگی یک شمع رو برابر با ۱۲ لومن میتونیم بگیریم که در فضای ۴ پی استرادینت پخش میشه و این شدت درخشندگی برابر با یک کندلا است.


موضوع بعدی که میخوام بهش اشاره کنم تکنولوژی پروژکتور و سیستم های پروژکتور هست. هر سیستم پروژکتور از یک پروژکتور و یک اسکرین تشکیل شده. خب چرا اصلا میخوایم درمورد پروژکتور صحبت کنیم؟ توی پست قبل اشاره کردیم که غارها رو به کمک پروژکتور میسازن. البته پنل های LCD هم اخیرا زیاد شدن اما به هرحال پروژکتورها جایگاه خودشون رو دارن.
خب اولین موردی که درمورد پروژکتورها باید بگم واحد اندازه گیری روشنایی شون هست. قبلا اشاره کردم که شار درخشندگی رو با لومن اندازه گیری میکنن اما درمورد پروژکتورها که طرح روی صفحه میفته ممکنه مرکز صفحه درخشندگی بیشتری نسبت به کناره های صفحه داشته باشه به خاطر همین واحدی به نام آنزی لومن (ANSI LUMEN) معرفی میشه که میزان یکنواختی درخشندگی رو در نقاط مختلف حساب کنه. رنج پروژکتورها هم از ۳۰۰۰ آنزی لومن شروع میشه تا ۱۲۰۰۰ آنزی لومن به بالا.
یک از اولین پروژکتورها مربوط به سال ۱۹۰۰ هست که سه تا فیلتر رنگی هم داره. پروژکتور معروف دیگه همون CRT هست پروژکتور آنالوگ محسوب میشه. پروژکتورهای دیجیتال LCD/DLP کنتراست و روشنایی بهتری نسبت به مدل های آنالوگ دارن. در مدل های آنالوگ چون کنتراست خیلی پایین بود، مجبور بودن اتاق رو کاملا تاریک کنن چون اگه کمترین میزان نور از بیرون وارد میشد باعث میشد کنتراست و روشنایی تصویر خیلی خیلی پایین تر بیاد. اما تصویر در پروژکتروهای آنالوگ طبیعی تر به نظر میرسه. از نظر هزینه ساخت پروژکتورهای دیجیتال مقرون به صرفه تر هست. درمورد تطبیق، چون در مدل آنالوگ یک پرتو داریم میتونیم این پرتو رو پروگرام کنیم تا مثلا در گوشه ها اونطوری که میخوایم نشون داده بشه اما در مدل دیجیتال محل تصویر و پیکسل ها و همه چیز از قبل فیکس شده و نمیتونیم به راحتی منطبقش کنیم. به علاوه در پروژکتور های دیجیتال اگه از خیلی نزدیک نگاه کنیم خطوط سیاه جداکننده رو میبینیم(همون اثر توری که قبلا درموردش گفتم) اما در پروژکتور آنالوگ این تاثیر رو نمیبینیم.
حالا یکم درمورد ساختار پروژکتورهای LCD هم بگیم:
LCD مخفف شده ی Liquid Crystal Display هست یعنی نمایشگر کریستال مایع. یک لامپ داریم که پرتوهاش به صورت موازی میتابه به یک لنز و بعد از فیلتر رنگی عبور داده میشه و بعد میرسه به این کریستال های مایع. در نهایت هم لنز پروژکتور قرار داره.
مدل دیگه ای که از پروژکتور LCD وجود داره و با کیفیت تر و گرون تر هست از سه تا چیپ جداگونه کریستال واسه رنگ های قرمز و سبز و آبی تشکیل شده.
نوع دیگه ی پروژکتور LCOS(Liquid Crystal on Silicon) هست که به جای اینکه نور ازش عبور کنه نور رو بازتاب میکنه و تفاوتی که در خروجی واسه ما قابل مشاهده هست اینه که دیگه خطوط سیاه رنگ ناشی از LCD رو نمبینیم و به جاش محو شدگی و پراکندگی میبینیم. اما این تکنولوژی حساس تر هست و طول عمر کمتری داره. درمورد تکنولوژی LCOS هم مدل با کیفیت تر با سه چیپ جداشده داریم.
تکنولوژی دیگه ای که واسه پروژکتورها داریم تکنولوژی DLP یا Digital Light Processing هست که چیپی به نام DMD یا آینه های جهت دار داره و نور اول از لنز و فیلتر رنگی عبور میکنه و میرسه به این آینه ها و بعد از آینه بازتاب میشه و میره به لنز پروژکتور. ایرادی که این روش داره اینه که در بعضی موارد طیف های رنگی دیده میشه که میفته روی تصویر به خاطر همین از سه تا چیپ DMD برای هر کدوم از نگ های اصلی استفاده میکنن که چون این چیپ ها خیلی گرون هستن قیمت تموم شده ی این پروژکتور زیاده.
در نهایت هم پروژکتور با نور لیزری داریم که طیف رنگی گسترده ای داره و روشنایی خیلی زیادی داره که در صورت مشاهده مستقیم به چشم آسیب میرسونه. یکنواختی روشنایی فوق العاده بالایی هم داره. از این تکنولوژی نور لیزری به عنوان منبع نور در پروژکتورهای دیگه استفاده میشه که در سینما استفاده میکنن. این نوع پروژکتورها خیلی گرون هستند.

خب همونطور که گفتم سیستم پروژکتور شامل خود پروژکتور میشه و صفحه اش که تاثیر خیلی مهمی داره در کیفیت نمایش. اینجا میخوام درمورد screen یا صفحه صحبت کنم.
میدونید که کیفیت پروژکتور رو برحسب آنزی لومن بیان میکنن. اما چیزی که روی صفحه میفته درخشندگی برحسب لومن بر متر مربع یا لوکس خواهد بود و چیزی که برای ما مهم تره کیفیت دریافت تصویر توسط آدم هاست که درخشندگی با واحد نیتس یا کاندلا بر متر مربع بیان میشه.
یک تعریف مهم که درمورد صفحه داریم گین صفحه یا فاکتور چگالی نور Light density factor هست. اگه استاندارد سفید حالتی رو در نظر بگیریم که وقتی پروژکتور به صفحه میتابه کاملا به طور یکنواخت و در تمام جهت ها به یک اندازه بازتاب شه، نسبت حالتی که واقعا در عمل داریم به استاندارد سفید گین صفحه رو مشخص میکنه. منحنی آبی در شکل زیر استاندارد سفید هست و منحنی قرمز اون چیزی هست که به عنوان مثال یک صفحه نمایش در واقعیت داره. پس میبینیم که گین صفحه در زاویه صفر درجه بیشتر از یک، در زاویه ۴۰ درجه برابر یک و در زاویه ۶۰ درجه کمتر از یک هست.
Leinwand09.gif

وقتی میخوایم صفحه بخریم توی بازار معمولا پیک گین رو بهمون میگن که گین در زاویه صفر درجه هست و چیزی بین ۰.۸ تا ۲.۵ هست معمولا. اما چیزی که شاید بهتر باشه در نظر بگیریم زاویه ای هست که گین در اون نصف پیک گین هست. اینطوری میتونیم ببینیم صفحه چند درجه رو پوشش میده و از کجا به بعد خوب نمایش نمیده.
این مساله واسه کلاس درس و خونه هم مهمه. واسه کلاس درس که میخوایم روشنایی به دانش آموزان ردیف آخر هم برسه پیک گین زیاد مهمه ولی معمولا چون کلاس پهن نیست نمیخوایم که زاویه ی نصف گین اونقدرا بزرگ باشه. اما در خونه که میخوایم از زوایای زیادی صفحه قابل نمایش باشه خوبه که به نصف گین بیشتر توجه کنیم.
درمورد غارهای واقعیت مجازی ترجیح میدیم از صفحاتی استفاده کنیم که زوایای مختلف رو پوشش میدن و به اصطلاح دیفیوز یا پخش هستن تا توجه کاربر رو فقط به یک نقطه عطف نکنن. اگه از صفحه ای استفاده کنیم که پیک گین زیادی داره صفحه های جهت های دیگه که بهشون توجه نداریم تاریک به نظر میرسه و این خوب نیست.
در تکنولوژی های استریو که داشتیم بحث میکردیم میگفتم که جنس صفحه نمایش مهم هست. اهمیتش اونجاست که در پلاریزاسیون دایروی بهتره از صفحه با گین زیاد استفاده کنیم چون صفحه های پخش پلاریزاسیون رو بهم میریزن و حتی اثر ghosting یا شبح هم زیاد میشه. اما در تکنولوژی شاتر صفحه پخش با گین کم یکنواختی بهتری بهمون میده.


خب همه ی اینا رو گفتیم که چی؟ چه ربطی به واقعیت مجازی داشت؟ ربطش این بود که توی واقعیت مجازی یک هدف اصلی دارریم و اون immersion یا غرق شدگی هست و تمام این ها رو در گفتیم که بگیم برای اینکه immersion اتفاق بیفته باید چیکار کنیم. البته اگه خاطرتون باشه گفتیم برای ایجاد immersion نیاز داریم که از دو سمت فیزیولوژیکی و روان شناختی به مساله نگاه کنیم. مبحث روان شناختی به کمک کامپیوتر گرافیک حل میشد و جنبه فیزیولوژیکی شامل اختلاف منظر حرکتی و دید استریوسکوپیک و فاکتور حرکتی چشم بود. اختلاف منظر حرکتی و دید استریو رو درموردش صحبت کردیم.
اما درمورد فاکتور حرکتی چشم:
برای اینکه جسمی رو در فاصله های مختلف مشاهده کنیم لازمه که هم چشممون رو بچرخونیم و هم لنز داخلی چشممون خودش رو منطبق میکنه. مثلا وقتی به جسمی در نزدیک نگاه میکنیم مردمک ها میچرخن و بهم نزدیک میشن و لنز جمع میشه و بالعکس. (در واقعیت) اما در واقعیت مجازی حالتی ممکنه پیش بیاد که جسم پشت صفحه هست(پارالکس مثبت) یا جلوی صغحه(پارالکس منفی). اینطوری هم باید چشممون رو جوری بچرخونیم که صغحه رو ببینیم و هم لنز چشمی رو جوری تنظیم کنیم که جسم که پشت یا جلوی صفه هست رو ببینیم. و این مساله میتونه باعث سردرد شه.
مساله دیگه ای که هست اگه یک شی ای رو در نظر بگیریم که داخلش گود تر از اطرافش هست، در واقعیت که به مرکزش نگاه میکنیم اطرافش رو محو شده میبینیم و مرکز رو با وضوح زیاد. اما در واقعیت مجازی همه چیز با وضوح یکسان نشون داده میشه که باعث میشه از واقعی دیده شدن جلوگیری شه.
نکته دیگه ای که در واقعیت مجازی وجود داره و هنوز دیللی واسش پیدا نشده اینه که معمولا مغزما فاصله رو از اون چیزی که هست و باید باشه کمتر تخمین میزنه. دلیل هایی که حدس میزنن ممکنه باعث این اتفاق شه ایناست:(اینم اضاف کنم که نتایج تحقیقاتی که شده خیلی هاش باهم تناقض دارن)
۱- فاکتور حرکتی چشم
۲- کیفیت رندرینگ
۳- سرعت رندرینگ
۴- مسایل سخت افزاری و رزولوشن و یکنواختی روشنایی

خب بریم سراغ آخرین مبحث این تاپیک: مقایسه بین نمایشگرهای روی سر HMD و نمایشگرهای اتاقکی RMD؛ کدومش بهتره؟
مثل قبل باید یک سری معیار های کیفیتی داشته باشیم که این دو نوع رو بتونیم با هم مقایسه کنیم.
۱- رزولوشن: رزولوشن در اتاقک ها بالاتر هست به دیلیل اینکه میتونیم از هرچند تا پروژکتور با کیفیت که بخوایم استفاده کنیم اما در HMD محدودیت داریم. اما در اتاقک ها با نزدیک شدن به صفحه رزولوشن کاهش پیدا میکنه.
۲- نرخ رفرش و نرخ فریم: در HMD به دلیل اینکه روی سر قرار گرفته و با کوچکترین تغییر سر باید فریم مشاهده تغییر کنه نیاز داریم که نرخ رفرش بالاتری داشته باشیم.
۳- میدان دید و میدان توجه: میدان دید برای HMD رو قبلا بررسی کردیم و گفتیم که محدودیت داریم اما میدان توجه اتاقک ها بیشتره. درمورد میدان توجه هم در صورتی که اتاقک شش جهته نباشه و کاملا توی غار قرار نگرفته باشیم پر واضحه که میدان توجه کاهش پیدا میکنه.
۴- اثر توری: در HMD قابل مشاهده و آزار دهنده میتونه باشه اما در اتاقک ها تنها درصورتی قابل مشاهده هست که به صفحه نزدیک شیم.
۵- ردیابی: وقتی HMD میخریم سیستم ردیابی هم باهاش هست و علاوه بر رزولوشن و میدان دید خوب باید حواسمون باشه که ردیابی هم به خوبی عمل کنه. اما در اتاقک ها سیستم ردیاب تقریبا جدا هست و تصمیم خودمون هست که از چه ردیابی بخوایم استفاه کنیم.
۶- هزینه: هزینه یک غار میتونه در حدود ۲-۳ میلیون یورو باشه در صورتی که هزینه HMD تا هزار یورو هم میاد پایین.
۷- ارگونومی: ارگونومی اتاقک ها خیلی بهتره چون نهایتا عینک های سبکی به چشم میزنیم، میتونیم جابه جا شیم و حرکت کنیم و خیلی راحت تره خلاصه.
۸- همکاری و ارتباط با دیگران: خب با HMD که حتی دست و پای خودمون رو هم نمیتونیم ببینیم چه برسه به اینکه با دیگران ارتباط برقرار کنیم! اما در اتاقک ها چند نفر با هم میتونن وارد شن و همکاری داشته باشن. نکته ای که هست اینه که سیستم ردیابی باید بتونه همزمان چند نفر رو ردیابی کنه در غیر این صورت فقط برای یک نفر خاصیت های واقعیت مجازی منطقی به نظر میرسه!
خب تمام این فاکتور ها رو در نظر میگیریم تا بگیم کدوم بهتره و باید کدوم رو داشته باشیم!
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #18

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست میخوام در ادامه پست قبل که همکاری و ارتباط با دیگران در محیط واقعیت مجازی هست بیشتر توضیح بدم. محیط واقعیت مجازی رو معمولا تنها برای یک نفر میسازن و بقیه افراد بسته به اینکه فاصلشون از فرد اصلی چقدر هست پرسپکتیو ناقص تری دارن. دلیلش هم اینه که سیستم ردیاب واسه یک نفر هست و اون چیزی که باید نمایش داده بشه یکبار و مطابق با تغییر حرکت یک نفر نمایش داده میشه. حالا اگه قرار باشه افراد دیگه ای هم اضافه بشن هم سیستم ردیابی پیچیده تر میشه و هم اینکه باید مکانیزم نمایش و رندرینگ رو تغییر بدیم. اما چطوری؟ البته قسمت ردیابی به هرحال اونقدرا سخت نیست چون افراد از هم مستقل هستن اما قسمت مربوط به نمایش و ویژوالیزیشن رو اینجا بیشتر بررسی میکنیم.
برای نمایش از کارت گرافیک های مستقل میتونیم استفاده کنیم و متناسب با موقعیت هر کاربر رندر کنیم اما ما فقط یک صفحه برای نمایش داریم و قابلیت استریو باید به صورتی باشه که از هم تفکیک بشن و قاطی نشن. اگه بخوام با مثال توضیح بدم باید بگم که فرض کنیم تو یه موزه واقعیت مجازی هستیم و یک مجسمه وجود داره. اگه یک کاربر در حال تماشا باشه روی صفحه نمایش فقط همون یک مجسمه نمایش داده میشه اما به ازای هر کاربر که اضافه بشه روی صفحه نمایش هم یک مجسمه جدید رندر میشه اما نکته اینه که کاربرها که عینک زدن فقط مجسمه ی مربوط به خودشون رو میبینن. برای این کار نیاز هست که به تعداد کاربرها پروژکتور داشته باشیم. (این کار تو دانشگاه وایمار انجام دادن و از پروژکتورهای DLP استفاده کردن و برای تا ۶ کاربر قابل استفاده هست.)
ساختار این پروژکتور به این صورت هست که از رینگ هایی استفاده میشه که به سه قسمت تقسیم شده و هر قسمت مربوط به یک کاربر هست. این رینگ با ریت خیلی بالایی میچرخه و به ترتیب تصویر مربوط به هر کاربر رو رندر میکنه. سه تا فیلتر رنگی قرمز و سبز و آبی استفاده شده برای اینکه تصویر رنگی بشه و برای اینکه ۶ کاربر بتونن استفاده کنن دو نوع پلاریزاسیون به کار رفته. تکنولوژی مورد استفاده ترکیبی از شاتر و قطبش هست. البته عینک های شاتر باید خیلی سریع تر از عینک های شاتر معمولی کار کنن چون الان به جای یک کاربر، سه کاربر رو پوشش میدن. البته این پروژه پاوروال هست که مربوط به سال ۲۰۱۱ بوده و امروزه پروژکتورهای خیلی قوی تری اومدن که فریم ریتشون خیلی بالاتر هست و بدون اینکه لازم باشه از حلقه برای سه نفر استفاده شه، میتونه سه تا کاربر رو پوشش بده.
اینم اضافه کنم که مثکه قراره غار دانشگاه آخن رو که در حال حاضر فقط برای یک یوزر کار میکنه با استفاده از این پروژکتورهای جدید به استفاده همزمان سه کاربر ارتقا بدن.
خب افرادی که توی محیط واقعیت مجازی قرار میگیرن ممکنه بخوان مسیریابی کنن و جا به جا شن. حالتی رو در نظر بگیرین که توی همون موزه هستیم و یک لیدر داریم که میخواد به کمک دسته ی مسیریاب حرکت کنه و مثلا از یک در عبور کنه. وقتی لیدر دسته رو جابه جا میکنه همه ی افراد میخوایم که باهاش جابه جا شن ولی یه حالتی که ممکنه پیش بیاد اینه که چون افراد پخش هستن حرکت کردنشون ممکنه معادل این باشه که به در و دیوار بخورن! خب راه حلی که واسش دادن اینه که همه ی افراد به صف شن و تا وقتی همه جمع نشدن لیدر نتونه حرکت کنه. راه حل دیگه اینه که قبل از اینکه یوزر به دیوار بخوره، دیوار محو شه! راه دیگه اینه که فقط وقتی قراره از در خارج شن جمع شن و بعد پراکنده شن. همه ی اینا برای اینه که تجربه کاربری خوب باشه.
تا اینجا واقعیت مجازی رو برای چند نفر با این شرط تعریف کردیم که همه در یک مکان باشن. حالا میخوایم یکم موضوع رو تغییر بدیم و بریم سمت تله کنفرانس. اگه دو نفر دو جای مختلف از دنیا باشن و بخوان با هم ارتباط داشته باشن، چه تکنولوژی ای واسه این کار داریم؟
جالبه بدونید در دهه ۹۰ میلادی (۲۷-۸ سال پیش!) پروژه بلو-سی در این مورد در دانشگاه زوریخ عملی شد. تکنولوژیش به این صورت هست که دو نفر در دو غار در دو نقطه متفاوت قرار دارند که این غار های تنظیمات مشابهی دارند و به جای اینکه فقط از عینک شاتر استفاده کنیم، کل غار از تکنولوژی شاتر استفاده میکنه. (شاتر یعنی با ریت خیلی بالایی دیافراگم دوربین ها باز و بسته میشن) وقتی شاتر باز هست از تمام جهت ها از کاربر عکس میگیره (از ۱۶ تا دوربین استفاده شده بوده) و وقتی بسته هست عکس اون یکی کاربر رو برامون نمایش میده.
البته اینم اضافه کنم که از بس این تکنولوژی واسه اون دهه پیچیده بوده با اینکه عملی شد ولی خیلی سریع هر سری یه قسمتیش خراب میشده و عمر کوتاهی داشته.
اگه دوست داشتین میتونین ویدیویی از کارهای دانشگاه وایمار رو از اینجا ببینید.
 
  • شروع کننده موضوع
  • #19

موازی

کاربر فوق‌حرفه‌ای
ارسال‌ها
595
امتیاز
15,408
نام مرکز سمپاد
سمپاد شیراز
شهر
شیراز
سال فارغ التحصیلی
93
دانشگاه
RWTH
رشته دانشگاه
مهندسی برق
توی این پست میخوام درمورد نور و سایه بگم. تکنیک های نورپرودازی البته برمیگرده به جنبه ی روان شناختی که به کمک کامپیوترگرافیک قابل دست یابی هست.
تکنیک های نور پردازی برای درک سه بعدی خیلی مهم هستن. اگه درست استفاده شن میتونن از یک تصویر دو بعدی، به ما درک سه بعدی بدن.
خب این شیوه ی بازتاب نور هست که درواقع منجر به سایه و سایه روشن میشه. بازتاب رو تقسیم میکنیم به دو نوع لوکال و گلوبال. بازتاب لوکال تعامل بین یک شی و منبع نور هست و ساده تر هست و به صورت ریل تایم و بلادرنگ قابل پیاده سازی هست اما بازتال گلوبال تعمال بین منبع نور و سطح شی و هم چنین بقیه اشیا رو هم نشون میده که پیچیده تر هست و معمولا در انیمیشن ها و فیلم ها که لازم نیست بلادرنگ باشه پیاده سازی میشه.
همون طور که میدونید سطوح زیر میکروسکوپ پستی و بلندی های زیادی دارن و وقتی نور به سطحی میخوره چندین حالت ممکنه پیش بیاد. ممکنه آینه وار بازتاب شه، اگه میزان پستی و بلندی سطح کم باشه، خط عمودش یکم از خط عمود آینه وار فاصله داره یا اینکه خط عمود خیلی از خط عمود آینه ای فاصله داشته باشه و چند بار با خود سطح برخورد کنه یا حتی مقدار زیادی جذب ماده شه.
حالا اگه بخوایم این موارد رو تو کامپیوتر مدل کنیم سه مولفه معرفی میکنیم به نام های مولفه پخش (Diffuse)، آینه وار (Specular) و محیطی یا Ambient.
مولفه پخش به کسینوس زاویه بین پرتو تابش و خط عمود بستگی داره. پس اگه پرتو نور به صورت افقی بتابه هیچی پخش نمیشه.
مولفه آینه وار به کسینوس زاویه بین بردار مشاهده و بردار بازتاب بستگی داره و به توان اندیس سختی سطح میرسه. پس هرچی که سطح خشن تر باشه مولفه آینه وار کوچکتر خواهد شد.
مولفه نور محیطی هم نوری هست که از بقیه اجسام اطراف میرسه. اگه این مولفه رو در نظر نگیریم مثل این میمونه که اجسام اطراف رو سیاه در نظر گرفتیم که غلطه. و شدت نور کل مجموع تمام این مولفه ها خواهد بود. (مدل بازتابی فونگ)
خب حالا این سایه زدن چطوری و با چه الگوریتمی باید انجام شه. در واقع سایه زدن یک مدل بازتابی هست که روی سطح چند ضلعی میفته و با حساب کردن شدت نور در گوشه های چند ضلعی و درون یابی بینشون ممکن هست. توی کامپیوتر گرافیک هرچیزی رو با چندضلعی مدل میکنیم. سه روش برای سایه زدن داریم که عبارتند از:
۱- سایه زنی تخت یا Flat Shading که ساده ترین نوع هست و هیچ درون یابی انجام نمیشه و هر چند ضلعی شدت یکسانی خواهد داشت. پس یه سری چند ضلعی خواهیم داشت که کاملا تاریک هستن و یک سری هم کاملا روشن و چند ضلعی های بینشون هم آروم آروم تغییر شدت نور میدن و هرچی که چند ضلعی هامون کوچکتر باشن طبیعی تر به نظر میرسه.
۲- سایه زنی گرور یا Gouraud Shading: شدت نور برای نقاط داخلی از درون یابی گوشه ها حاصل میشه. ایرادی که این روش داره اینه که اگه منبع نور وسط یک مستطیل باشه کل مستطیل شدت نور یکسانی میگیره که این غلطه و به هر حال شدت نور در گوشه ها کمتر باید باشه.
۳- سایه زنی فونگ: توی این روش به جای اینکه شدت نور رو درون یابی کنیم، بردار نرمال گوشه ها رو درون یابی میکنیم.


در پست بعدی باید در مورد رندر کردن توضیح بدم.
 
بالا