ray tracing چیست و چگونه میتواند گرافیک سهبعدی بیدرنگ را ممکن بسازد؟
دنیای اطراف ما پر از میلیاردها اشعه نوری است که توسط خورشید و یا دیگر منابع نور مصنوعی منتشر میشوند. هنگامی که نور به اشیا و سطوح برخورد میکند، شعاعها میجهند، میشکنند و به روشهای مختلف منعکس میشوند تا سرانجام به چشم ما برسند. این تعامل پیچیده است که دیدار ما را از واقعیت ایجاد میکند. Ray Tracing (دنبال کردن اشعهها) یک تکنیک نورپردازی برای گرافیک سهبعدی است که این رویکرد دنیای واقعی را تقلید میکند و در عین حال که واقع گرایانه ترین نتایج را ارایه میدهد، این فرآیند به طور سنتی برای کامپیوترها بسیار پیچیده بوده و قادر به ایجاد گرافیک سهبعدی در زمان واقعی نمیباشد.
این تکنیک امروزه به طور گسترده برای ایجاد مدلهای فوقالعاده واقع گرایانه برای تبلیغات و فیلمها استفاده میشود، اما در این موارد هم، تولید هر فریم حتی در سرورهای محاسباتی بسیار قدرتمند امروزی میتواند ساعتها طول بکشد. دنبال کردن اشعه یک واژه ساده است که میزان زیادی هیجان (بسته به نقطهنظر شما) به عنوان راهی برای گرافیک فوری ایجاد میکند. در این مقاله، ما به ردیابی پرتو و آنچه که آن را به واقعیت تبدیل کردهاست، نگاهی میاندازیم.
نشان دادن مشکل در ray tracing
در یک بازی سهبعدی، جهان از اشیایی ساخته شدهاست که وقتی با هم ترکیب میشوند شامل میلیونها مثلث هستند. اساسیترین وظیفه ray tracing، ارسال پرتو و دنبال کردن مسیر آن در جهان سهبعدی برای تعیین محل اولین شی است که به آن میرسد تا مشخص کند چگونه باید آن را روشن کند. تست کردن حتی یک شعاع واحد با هر شی در صحنه برای دیدن اینکه آیا آنها متقاطع هستند یا نه، برای عملی شدن در زمان واقعی، بیش از حد پر مصرف توانی و از نظر محاسباتی گران است.
بنابراین برای استفاده از ردیابی اشعه، باید این مشکل را حل کنیم.
عکس این خرگوش با استفاده از ساختار سلسله مراتبی صحنه به جعبههایی تقسیم میشود.
این کار را میتوان با ساخت ساختار شتاب ردیابی پرتو انجام داد. برای انجام این کار، ما یک جعبه را در اطراف دنیای بازی رسم میکنیم و سپس آن را به جعبههای کوچکتر تقسیم میکنیم، و آن جعبهها را به جعبههای کوچکتر تقسیم میکنیم تا اینکه در نهایت، یک جعبه کوچک داریم که شامل تعدادی مثلث قابل مدیریت است. ما به این ساختار سلسلهمراتب صحنه میگوییم، و این به ما کمک میکند تا مشکل را به چیزی کاهش دهیم که پردازندههای گرافیکی فعلی بتوانند به طور موثر آن را اداره کنند.
این کار جواب میدهد چون وقتی ما یک اشعه را به دنیای بازی میفرستیم، اولین بار آن را در مقابل بزرگترین جعبه چک میکنیم. آیا اشعه ایکس به دنیای ما اصابت میکند؟ اگر بله، سطح بعدی جعبههای کوچکتر را بررسی میکنیم. در این مرحله، متوجه میشویم که اشعه ما به چند جعبه نفوذ کرده، اما نه به بقیه. بنابراین ما آنهایی را که از دست دادهاند حذف میکنیم و فقط در جعبههایی که با شعاع برخورد کردهاند عمیقتر فرو میرویم تا زمانی که بفهمیم اشعه در کجا با مثلثها برخورد کردهاست. در این مرحله، ما سرانجام محل برخورد خود را پیدا میکنیم.
این ساختار سلسله مراتبی ما را قادر میسازد تا نزدیکترین تقاطع پرتو و مثلث را بدون نیاز به آزمایش هر مثلث در صحنه پیدا کنیم. این کار تا حد زیادی مشکل را ساده میکند، بنابراین میتواند خیلی سریعتر انجام شود.
بعد از مرحله پردازش هندسی که در آن سختافزار کار انیمیشن کردن اشیا را انجام میدهد، ما آن مثلثها را به یک قطعه سختافزاری خاص به نام مولد سلسلهمراتب صحنه وارد میکنیم که ساختار شتاب توصیفشده در بالا را تولید میکند.
گام بعدی زمانی که سختافزار مشخص کرد که یک پرتو به یک مثلث برخورد کردهاست، چیست؟
ما همچنین تعدادی آزمایشگر اشعه یا کادر یا مثلث اضافه کردهایم که برای ردیابی پرتو از طریق این ساختار شتاب دهنده به سختافزار تابع ثابت اختصاصداده شدهاند و محل تقاطع شعاعها و مثلثها را تعیین میکنند. انجام تمام این کارها در سختافزار اختصاصی بسیار سریعتر از استفاده از خطوط پایپلاین قابلبرنامهریزی نرمافزاری است.
ما یک شکلدهنده قطعه را راهاندازی میکنیم، یک برنامه کوچک که رنگ را در آن مکان خاص آن مثلث تعیین میکند، مرحلهای که اساسا مشابه render کردن سنتی است. سپس از این برنامه شکلدهنده قطعه، پرتوهای بیشتری را به دنیای سهبعدی میفرستیم، و همانطور که این فرآیند تکرار میشود، صحنه ردیابی اشعهی ما را میسازد.
مشکل وابستگی
ولی ما الان به یک مشکل جدید بر میخوریم. ما پرتوهای زیادی به صحنه میفرستیم، اما چطور میتوانیم به طور موثر همه آنها را پردازش کنیم؟ ما باید جعبه و مثلث را از ساختار شتاب خود در حافظه با هر اشعه که هر بار که به یک شی برخورد میکند، برنامه مخصوص را راهاندازی کنیم.
متاسفانه، اشعهها چیزهای نامنظمی هستند و لزوما در یک جهت حرکت نمیکنند. به بیان فنی، ما این را به عنوان عدم وابستگی توصیف میکنیم که مشکلساز است. دسترسی به دادههای غیر منسجم برای پردازندههای گرافیکی مدرن بد است. کمی شبیه این است که سعی کنیم اطلاعات را در یک فرهنگ لغت الفبایی جستجو کنیم، اما این نامها به صورت کاملا تصادفی به ما داده میشوند. بسیاری از آنها وقت و انرژی با ارزش صرف میکنند.
ساختار های ray tracing
بدتر از آن، وقتی که شعاعها به طور تصادفی بازتاب میشوند، به اشیا و مثلثهای مختلف نیز برخورد میکنند، که باید به طور متفاوت رنگآمیزی و سایهدار شوند، که باعث ایجاد برنامههای مختلف سایه دهی میشوند. با این حال، GPU ها دوست دارند سایه ساز ها را به روش موازی پردازش کنند. این دقیقا همان جایی است که GPU ها قوی هستند: در توانایی آنها برای پردازش دادهها به روشی بسیار موازی که به آنها مزیتی نسبت به سایر پردازشگرها مانند CPU ها میدهد. این به این دلیل است که واحدهای منطقی ریاضی آنها (ALU)، تک دستوره و چند رشتهای (SIMT) هستند. اگر هر پرتو یک سایهساز متفاوت را راهاندازی کند، بر روی یک GPU کار نخواهد کرد، زیرا به یک معماری چند رشتهای (MIMT) نیاز دارد، که مساحت و توان سیلیکون برای ساخت آن کافی نیست.
یک راهحل موتور همدوسی توسعهیافته توسط فنآوریهای تصویر سازی است، که اشعهها را ردیابی میکند و نظم را در میان هرج و مرج تمام اشعهها در یک صحنه پیدا میکند.
اگر به تصاویر زیر نگاه کنید، اشعههای نور ممکن است در ابتدا تصادفی به نظر برسند. با این حال، اگر دقیقتر نگاه کنید، متوجه خواهید شد که در واقع وابستگی وجود دارد.
تصویر۲
برای توضیح، توجه داشته باشید که چگونه برخی از قسمتهای شی، همان شی زرد را منعکس میکنند. با وجود هرج و مرج ظاهری، برخی از شعاعها در یک جهت حرکت میکنند و به اشیا مشابه برخورد میکنند. موتور همدوسی ما به دنبال این موضوع است، این شعاعها را به صورت گروهی طبقهبندی میکند و در نتیجه پردازش آنها را برای GPU آسانتر میسازد. این راز اصلی است، چرا که ما دسترسی به دادهها و کارآیی اجرا را به دست میآوریم و در نتیجه قدرت و پهنای باند را در پردازشمان کاهش میدهیم.
مزایای render کردن ترکیبی
پس این عالی است؛ در حال حاضر می توان پرتو را با ray tracing ردیابی کرده و آن را به نحو موثری انجام داد. با این حال، همانطور که قبلا گفتیم، واقعیت میلیاردها پرتو را در اطراف ما بازتاب میکند تا تصاویری که چشمان ما میبینند را ایجاد کند، بنابراین حتی با تمام سودمندی ما، ایجاد یک صحنه کامل با استفاده از ردیابی اشعه هنوز هم مشکلساز خواهد بود. جواب؟ render کردن ترکیبی.
در حالی که روشهای render کردن سنتی، امروزه به خوبی کار میکنند، اما با تعاملات فضایی مانند سایهها و روشناییها، بازتابها و انکسار به طور دقیق در چیزهای پیچیدهای که ردیابی اشعه در آنها خوب است، دست و پنجه نرم میکنند. با رندر ترکیبی، ما بهترین های هر دو جهان را با استفاده از rasterization برای اشیا ساده بدست میآوریم و سپس پرتوهای ساطع شده از سایهسازها را برای ایجاد تعداد محدودی از امواج ردیابی شده اشعه فضایی برای ایجاد سایههای فوق واقعبینانه، اثرات روشنایی، و دقیق استفاده میکنیم.
با استفاده از این روش ترکیبی، ما به طور گسترده تعداد اشعههای مورد نیاز برای ray tracing را کاهش میدهیم، که در نهایت ما را به حوزه عملکرد زمان واقعی میرساند.
ray tracing بر روی گوشی همراه، آیا امکانپذیر است؟
پاسخ ساده بله است. GPUهای موجود در گوشیهای هوشمند امروزی از زمان راهاندازی تاکنون گامهای بلندی برداشته اند، نه تنها از نظر ویژگی، بلکه از نظر عملکرد دستیافتنی در دنیای واقعی. در واقع، گوشیهای هوشمند ویژه در حال حاضر از مانع محاسباتی ۱TFLOPS، که قبلا عرصه انحصاری کنسولهای بازی اختصاصی بود، عبور کرده اند. سوال اصلی در اینجا کارایی است. گوشیهای هوشمند به عمر باتری بستگی دارند، و از آنجا که ردیابی اشعه کارآمدتر از روشهای سنتی render کردن است، این شانس خوبی است که به تجربه موبایلی اضافه شود.
با استفاده از نوآوریهایی که در بالا شرح داده شد، تصویرسازی امکان ray tracing را فراهم میکند. در گوشیهای هوشمند، هزینه ایجاد سایهها و بازتابها در بازیهای با محدود سازی سنتی بسیار بالا است. در یک موتور بازی مدرن، مانند Unity یا Unreal، بازتابها با استفاده از نقشههای سایه آبشاری تولید میشوند. این امر نیازمند بارها رندر کردن آرایه هندسه صفحه نمایش و نوشتن جداول جستجوی نقشه سایه برای حافظه است، که هزینه شدیدی را بر چرخههای اجرا و پهنای باند میگذارد و باعث مصرف بسیار زیاد GPU و همچنین توان سیستم میشود.
با ردیابی پرتو، ما یک پرتو واحد را به منبع نور میفرستیم، و اگر آن پرتو به هر چیزی به جز نور برخورد کند، میدانیم که قطعه در سایه است. این کار با استفاده از راهحل ردیابی پرتو بهینهشده خطی ما بسیار سادهتر است و از این رو یک راهحل با مصرف توان پایینتر از پیشپردازش مورد نیاز برای نقشههای ایجاد شده با سایه آبشاری است.
بیشتر بخوانید: ARM واحد اینترنت اشیای خود را واگذار میکند
هنگام تجزیه و تحلیل سختافزار نمونه اولیه ما از سال ۲۰۱۶ متوجه شدیم که برای سایهها، بازتابها و تکنیکهای دیگر، توان مصرفی اغلب کمتر از نصف شده است، و کیفیت حاصل بسیار بالاتر است. درک این موضوع در اینجا این است که یک تکنیک پیچیده و در عین حال “جعلی” توان بیشتری نسبت به تکنیک ساده ای مثل ردیابی اشعه مصرف میکند، که نتایج بسیار واقع گرایانه تری میدهد، و آن را نه تنها برای گوشیهای هوشمند کارا، بلکه مطلوب میسازد.
هوش مصنوعی و قدرت تفکیک بالا
در حالی که ردیابی اشعه مبتنی بر گوشیهای هوشمند یک گزینه است، ما به همان اندازه از محبوبیت رو به افزایش بازیهای مبتنی بر ارتباطات ابری هیجانزده هستیم.
که با رشد شبکههای ۵G و محاسبات لبه تقویت شدهاست.
در اینجا هم بازده پهنای باند و توان فعال شده توسط معماری ردیابی پرتو ما احتمالا مهم خواهد بود.
نوآوری همیشه برای ارائه بیشتر به ازای کمتر مورد نیاز است، و به این ترتیب، ما از پیشرفتهای سریع در پردازش هوش مصنوعی بسیار هیجانزده هستیم. اینها میتوانند همراه با شبکههای عصبی با ray tracing ترکیب شوند تا حتی بازده بالاتری را ارایه دهند. به عنوان مثال، از آنجا که ما تنها یک اشعه نسبی را برای بازده ردیابی میکنیم، ممکن است نتایج را بصورت نویزی به دست آوریم. شبکههای عصبی وعده بزرگی برای کاهش نویز برای پر کردن جزئیات از دست رفته با استفاده از “هوش” آموختهشده، نشان میدهند. باز هم، واقعیت این گونه عمل میکند چون مغز ما بسیاری از شکافهای باقی مانده توسط سیستم بینایی محدود انسان را نیز پر میکند.
شبکههای عصبی میتوانند برای بهبود کیفیت بدون نیاز به رفتن به راهحلهای سطح بالاتر هم مورد استفاده قرار گیرند.
یک مفهوم بالقوه بزرگ دیگر، قدرت تفکیک بالا است. این امر مجددا قدرت شبکههای عصبی را نشان میدهد، این بار به طور هوشمندانه یاد میگیرد که چگونه جزئیات از دست رفته را پر کند تا به GPU ها اجازه دهد تا با قدرت تفکیک کمتری عمل کنند و در نتیجه عملکرد را افزایش دهند و مصرف برق را کاهش دهند، در حالی که هنوز کیفیت بصری را حفظ میکنند.
آینده
بنابراین شکی نیست که ray tracing در زمان واقعی، آینده درخشانی دارد که این بدون شک برای هر کسی است که به گرافیک سهبعدی علاقهمند است، زمان هیجان انگیزی خواهد بود. از آنجا که بر پایه فیزیک جهان واقعی است، ردیابی پرتو بالاترین سطح واقعگرایی را ارائه میدهد، اما در مقابل دوگانگیها و تقریبهایی که ما تا کنون از آنها استفاده کردهایم، کارایی بسیار بالاتری دارد. این تکنولوژی جدید ردیابی اشعه و نوآوری های جدید در هوش مصنوعی با هم ترکیب میشوند تا گرافیک را به سطح بعدی برسانند.
دیدگاهتان را بنویسید