ثبت بازخورد

لطفا میزان رضایت خود را از ویجیاتو انتخاب کنید.

1 2 3 4 5 6 7 8 9 10
اصلا راضی نیستم
واقعا راضی‌ام
چطور میتوانیم تجربه بهتری برای شما بسازیم؟

نظر شما با موفقیت ثبت شد.

از اینکه ما را در توسعه بهتر و هدفمند‌تر ویجیاتو همراهی می‌کنید
از شما سپاسگزاریم.

راز بزرگ بازیسازان: چرا دنیای پشت سر شما در بازی‌ها اصلاً وجود ندارد؟
اخبار و مقالات

راز بزرگ بازیسازان: چرا دنیای پشت سر شما در بازی‌ها اصلا وجود ندارد؟

آنچه می‌بینید فقط یک دکور خالی است!

آتنا حسینی
نوشته شده توسط آتنا حسینی تاریخ انتشار: ۳۰ تیر ۱۴۰۵ | ۲۲:۰۰

وقتی در جهان پهناور و بی‌نظیر بازی‌هایی مثل Red Dead Redemption 2 یا Cyberpunk 2077 قدم می‌زنید، احساس می‌کنید در دنیایی واقعی و کاملا پویا حضور دارید؛ جهانی که تمام جزئیاتش، از کوه‌های دوردست گرفته تا شهروندان مشغول به کار، به‌طور هم‌زمان در حال پردازش و رندر شدن هستند. اما واقعیت این است که صنعت بازیسازی سال‌هاست یکی از خفن‌ترین و بزرگ‌ترین خطاهای دید تاریخ را روی مخاطبان اجرا می‌کند!

حقیقت فنی و ساختاری دنیای گیمینگ بسیار عجیب‌تر از تصورات ماست: دنیای پشت سر کاراکتر شما در بازی اصلا وجود ندارد. درست در همان لحظه‌ای که به سمت جلو نگاه می‌کنید، تمام ساختمان‌ها، درختان و اشیای پشت سرتان در یک کسر از ثانیه نابود و پاک می‌شوند و به محض اینکه دوربین را ۱۸۰ درجه می‌چرخانید، بازی آن بخش را از نو خلق کرده و دنیای قبلی را حذف می‌کند.

در این مقاله از ویجیاتو، می‌خواهیم به بررسی دو تکنیک حیاتی و بنیادین در موتورهای بازیسازی بپردازیم که بدون آن‌ها، هیچ‌کدام از بازی‌های مدرن امروزی حتی روی قدرتمندترین سیستم‌ها هم قابل اجرا نبودند: Frustum Culling و Occlusion Culling.

مخروط دید و جادوی Frustum Culling

برای درک این موضوع، اول باید بدانیم بازی‌های سه‌بعدی چطور دنیا را می‌بینند. در دنیای توسعه بازی، دوربین بازی کل صحنه را از درون یک هرمِ قطع‌شده یا یک مخروط سه بعدی می‌بیند که به آن Camera Frustum (مخروط دید دوربین) می‌گویند.

قانون طلایی موتورهای بازیسازی بسیار ساده اما حیاتی است:

  1. هر چیزی که داخل این مخروط دید قرار داشته باشد، توسط کارت گرافیک (GPU) پردازش و رندر می‌شود.
  2. هر چیزی که خارج از این مخروط باشد، به‌طور کامل توسط بازی نادیده گرفته شده و پاک می‌شود.

به فرایند شناسایی و حذفِ اشیاءِ خارج از مخروط دید، Frustum Culling (فِراستِم کالینگ) گفته می‌شود. واژه Culling در لغت به معنای «درو کردن» یا «دور ریختن» است.

                  [دوربین بازی]
                       /\
                      /  \
                     /    \
                    /      \  <-- محدوده Frustum (رندر می‌شود)
                   /________\
                  
   [ اشیاء پشت سر یا خارج از مخروط ] <-- 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:

تا حالا دقت کرده‌اید چرا کریتوس یا لارا کرافت در طول بازی مجبورند بارها و بارها از بین دو صخره یا شکاف‌های بسیار باریک با سرعتی کم عبور کنند؟ دلیل فنی آن ایجاد یک «صفحه لودینگ مخفی» است! در همان چند ثانیه‌ای که شما مشغول فشار دادن دکمه‌ها برای رد شدن از شکاف هستید، موتور بازی در حال پاک کردن (Cull) منطقه قبلی از رم (RAM) و بارگذاری (Load) منطقه جدید است تا شما هیچ صفحه لودینگی مشاهده نکنید.

استریمینگ پرسرعت در Spider-Man 2 (کنسول پلی‌استیشن ۵):

در بازی اسپایدرمن ۲، سرعت پرواز و تاب خوردن مرد عنکبوتی در شهر نیویورک فوق‌العاده بالاست. اگر سرعت حافظه SSD و تکنیک‌های Frustum Culling به‌صورت میلی‌ثانیه‌ای و دقیق همگام نباشند، با پدیده‌ای به نام Pop-In مواجه می‌شوید؛ یعنی ساختمان‌ها و ماشین‌ها ناگهان جلوی چشمتان ظاهر می‌شوند!

دنیای بازی‌ها، یک دکور سینمایی هوشمندانه

صنعت بازیسازی تلفیقی از هنر، ریاضیات و مهندسی خطای دید است. بازیسازان مانند معماران یک دکور تئاتر یا سینما رفتار می‌کنند؛ اونا فقط آن بخشی از صحنه را می‌سازند که پروژکتور و دوربین روی آن تافته است.

دفعه بعد که پای سیستم یا کنسول خود نشسته‌اید و غرق در گرافیک خیره‌کننده بازی مورد علاقه‌تان شده‌اید، چند لحظه مکث کنید و به این فکر کنید که درست پشت سر کاراکتر شما، هیچ چیزی جز یک تاریکی و فضای خالی وجود ندارد، فضایی که منتظر است شما بچرخید تا در یک کسر از ثانیه، متولد شود!

آتنا حسینی
آتنا حسینی

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

دیدگاه‌ها و نظرات خود را بنویسید

مطالب پیشنهادی