آنچه میبینید فقط یک دکور خالی است! وقتی در جهان پهناور و بینظیر بازیهایی مثل Red Dead Redemption 2 یا Cyberpunk 2077 قدم میزنید، احساس میکنید در دنیایی واقعی و کاملا پویا حضور دارید؛ جهانی که تمام جزئیاتش، از کوههای دوردست گرفته تا شهروندان مشغول به کار، بهطور همزمان در حال پردازش و رندر شدن هستند. اما واقعیت این است که صنعت بازیسازی سالهاست یکی از خفنترین و بزرگترین خطاهای دید تاریخ را روی مخاطبان اجرا میکند! حقیقت فنی و ساختاری دنیای گیمینگ بسیار عجیبتر از تصورات ماست: دنیای پشت سر کاراکتر شما در بازی اصلا وجود ندارد. درست در همان لحظهای که به سمت جلو نگاه میکنید، تمام ساختمانها، درختان و اشیای پشت سرتان در یک کسر از ثانیه نابود و پاک میشوند و به محض اینکه دوربین را ۱۸۰ درجه میچرخانید، بازی آن بخش را از نو خلق کرده و دنیای قبلی را حذف میکند. در این مقاله از ویجیاتو، میخواهیم به بررسی دو تکنیک حیاتی و بنیادین در موتورهای بازیسازی بپردازیم که بدون آنها، هیچکدام از بازیهای مدرن امروزی حتی روی قدرتمندترین سیستمها هم قابل اجرا نبودند: Frustum Culling و Occlusion Culling. مخروط دید و جادوی Frustum Culling برای درک این موضوع، اول باید بدانیم بازیهای سهبعدی چطور دنیا را میبینند. در دنیای توسعه بازی، دوربین بازی کل صحنه را از درون یک هرمِ قطعشده یا یک مخروط سه بعدی میبیند که به آن Camera Frustum (مخروط دید دوربین) میگویند. قانون طلایی موتورهای بازیسازی بسیار ساده اما حیاتی است: هر چیزی که داخل این مخروط دید قرار داشته باشد، توسط کارت گرافیک (GPU) پردازش و رندر میشود. هر چیزی که خارج از این مخروط باشد، بهطور کامل توسط بازی نادیده گرفته شده و پاک میشود. به فرایند شناسایی و حذفِ اشیاءِ خارج از مخروط دید، Frustum Culling (فِراستِم کالینگ) گفته میشود. واژه Culling در لغت به معنای «درو کردن» یا «دور ریختن» است. یکی از معروفترین مثالهای تصویری این تکنیک، مربوط به پشتصحنه توسعه بازی Horizon Zero Dawn است که استودیوی گوریلا گیمز آن را منتشر کرد. وقتی کاراکتر «ایلوی» به سمت جلو نگاه میکند، تمام جنگل و صخرههای روبهرو رندر شدهاند؛ اما به محض چرخیدن دوربین، بیش از ۷۰ درصد از نقشه پشت سر او توامان غیب میشود! اگر این حقه ریاضی وجود نداشت، کارت گرافیک مجبور بود میلیاردها پالیگان را در هر ثانیه پردازش کند و فریمریت قدرتمندترین بازیها به ۲ یا ۳ فریم در ثانیه سقوط میکرد. تکنیک Bounding Box؛ وقتی هوش ریاضی به کمک پردازنده میآید شاید این سوال پیش بیاید که سیستم چگونه متوجه میشود چه چیزی داخل مخروط دید قرار دارد و چه چیزی خارج از آن است؟ مسئولیت این محاسبات بر عهده پردازنده (CPU) است. اما اینجا یک چالش ریاضی بزرگ وجود دارد: فرض کنید در یک بازی اکشن، با یک هیولا یا کاراکتر روبهرو میشوید که مدل سهبعدی آن از ۱ میلیون نقطه (Vertex) تشکیل شده است. اگر CPU بخواهد تکتک این یک میلیون نقطه را محاسبه کند تا ببیند آیا در مخروط دید دوربین هستید یا خیر، خودش باعث افت فریم و پردازش سنگین میشود! بازیسازان برای حل این مشکل، از الگوریتم ساده اما هوشمندانهای به اسم Bounding Box استفاده میکنند: موتور بازی دورِ آن مدل پیچیده و یک میلیونی، یک مکعب مستطیل کاملا ساده و توخالی فرض میکند. حالا CPU به جای بررسی ۱ میلیون نقطه، فقط ۸ نقطه (گوشههای مکعب) را محاسبه میکند! اگر آن مکعب ساده در دید دوربین باشد، CPU به کارت گرافیک دستور میدهد: «کاراکتر داخل دید است، مدل اصلیاش را رندر کن.» اگر حتی یک گوشه از مکعب هم در دید نباشد، پردازش مدل بهطور کامل لغو میشود. کاهش محاسبات ریاضی از یک میلیون نقطه به هشت نقطه، همان رازی است که باعث میشود بازیها فوقالعاده روان و بهینهسازیشده اجرا شوند. وقتی اجسام جلوی چشم هستند اما رندر نمیشوند! (Occlusion Culling) آیا کار Frustum Culling به تنهایی کافی است؟ خیر! تصور کنید کاراکتر شما در شهر شبکهای و شلوغی مثل «نایت سیتی» در بازی Cyberpunk 2077 ایستاده است. شما به سمت یک دیوار بتنی بزرگ نگاه میکنید. طبیعتا آن دیوار بتنی داخل مخروط دید شما قرار دارد و رندر میشود. اما ماشینها، درختها و ساختمانهای پشت آن دیوار چطور؟ آنها هم زاویه دیدشان داخل مخروط دوربین هست! اگر کارت گرافیک تمام چیزهای پشت دیوار را هم رندر کند، بخش زیادی از توان سیستم هدر میرود، چون پلیر اصلا نمیتواند پشت دیوار را ببیند. اینجاست که تکنیک مکمل یعنی Occlusion Culling (اُکلوژن کالینگ) وارد میدان میشود. در تکنیک Occlusion Culling، موتور بازی خطوط دید را بررسی میکند؛ اگر جسمی درون مخروط دید باشد اما توسط یک جسم دیگر (مثل دیوار، صخره یا ساختمان) مسدود شده باشد، بازی از رندر کردن آن خودداری میکند. به زبان سادهتر: در بازیهای جهانباز، شما فقط سطوحی را میبینید که پرتوی نورِ دید دوربین مستقیما به آنها برخورد میکند. پشت تمام دیوارها و داخل ساختمانها (تا زمانی که در باز نشود) رسما پوچ و خالی است! از مهآلود بودن سایلنت هیل تا شکافهای گاد آف وار تکنیکهای کالینگ تنها حقههای بازیسازان برای بهینهسازی نیستند. در طول تاریخ ویدیوگیم، سختافزارها همیشه محدودیت داشتهاند و بازیسازان مجبور بودهاند با خلاقیت این محدودیتها را دور بزنند: مهآلود کردن شهر در Silent Hill (کنسول پلیاستیشن ۱): در دهه ۹۰ میلادی، PS1 توان پردازش فواصل دور (Draw Distance) را نداشت. استودیوی سازنده سایلنت هیل به جای اینکه اجازه دهد بافتها جلوی چشم پلیر ظاهر شوند (Pop-in)، تمام شهر را پر از مه غلیظ کرد. این کار نه تنها محیط بازی را ترسناکتر کرد، بلکه محدوده دید را محدود ساخت تا پردازنده فقط چند متر جلوی پای پلیر را رندر کند! رد شدن از شکافهای باریک در God of War و Tomb Raider: تا حالا دقت کردهاید چرا کریتوس یا لارا کرافت در ط