نبرد اشیاء در برابر پیکسلها: چگونه رندرینگ Forward و Deferred سرنوشت عملکرد بازی را رقم میزنند
موتورهای بازیسازی مدرن، توسعهدهندگان را مجبور به یک انتخاب بیرحمانه میکنند: رندر کردن هندسه یا رندر کردن نور. محاسبه دقیق هزینه عملکرد در سایهزنی Forward در برابر Deferred، پرده از این راز برمیدارد که چرا نورپردازیهای خیرهکننده اغلب به قیمت نابودی متریالهای شفاف و آنتیالایزینگ تمام میشوند.
به قلم قاسم طباطبایی
این خبر را به اشتراک بگذارید
بهطور خلاصه
- رندرینگ Forward نورپردازی را برای هر شیء محاسبه میکند، که با افزایش تعداد نورهای پویا باعث افت نمایی عملکرد میشود.
- رندرینگ Deferred نورپردازی را برای هر پیکسل محاسبه میکند و اجازه میدهد تعداد عظیمی از نورهای پویا با یک هزینه پردازشی ثابت پردازش شوند.
- جیبافر (G-buffer) مورد نیاز برای رندرینگ Deferred پهنای باند حافظه عظیمی را میبلعد و در رزولوشن 4K به شدت افت عملکرد پیدا میکند.
تولیدکنندگان سختافزار مدام پردازندههای گرافیکی جدیدشان را با این وعده میفروشند که قدرت پردازشی خام بالاخره محدودیتهای نورپردازی را در هم شکسته است؛ وعدهای که به توسعهدهندگان القا میکند میتوانند بینهایت نور پویا را بدون هیچ عواقبی در صحنه رها کنند. اما واقعیت ریاضیاتی موتورهای بازیسازی مستقیماً این ادعا را نقض میکند. همانطور که در مستندات LearnOpenGL آمده است، پایپلاین سنتی رندرینگ Forward نورپردازی را با پیچیدگی O(اشیاء × نورها) محاسبه میکند.
اگر صحنهای شامل ۱۰۰۰ شیء و ۱۰۰ نور باشد، GPU باید ۱۰۰٬۰۰۰ محاسبه نوری انجام دهد، حتی برای اشیایی که پشت یک دیوار پنهان شدهاند. پرتاب کردن یک پردازنده گرافیکی سریعتر به سمت این معادله، این حقیقت را تغییر نمیدهد که ریاضیات به شکل نمایی رشد میکند؛ و دقیقاً به همین دلیل است که مسیرهای استاندارد رندرینگ Forward در موتورهایی مثل Unity از نظر تاریخی تعداد نورهای پویا را به ۴ تا ۸ نور برای هر شیء محدود میکردند.[1][2]
برای در هم شکستن این سقف سخت، صنعت بازیسازی زمین بازی را به سمت یک گلوگاه سختافزاری کاملاً متفاوت تغییر داد: پهنای باند حافظه. سایهزنی Deferred (به تعویقافتاده)، همانطور که در مستندات جامعه توسعهدهندگان Valve به تفصیل شرح داده شده، فرآیند رندرینگ را به دو مرحله کاملاً مجزا تقسیم میکند.
در مرحله اول، موتور بازی هندسه صحنه را بدون هیچگونه نورپردازی رندر میکند و دادههایی مانند عمق، نرمالها و رنگ را در یک مجموعه تکسچر عظیم به نام G-buffer ذخیره میکند. در مرحله دوم، موتور بازی نورپردازی را تنها با استفاده از پیکسلهای قابل مشاهده روی صفحه محاسبه میکند. در اینجا پیچیدگی محاسباتی به O(پیکسلها × نورها) سقوط میکند و هزینه نورپردازی را به طور کامل از تراکم هندسی صحنه جدا میسازد.[4][5][6]
اما این جداسازی، یک مالیات سنگین و غیرقابل اجتناب را بر حافظه GPU تحمیل میکند. یک G-buffer استاندارد برای هر تکپیکسل روی صفحه به ۱۶۰ تا ۲۵۶ بیت داده نیاز دارد. در رزولوشن 1080p، این حجم قابل مدیریت است. اما در رزولوشن 4K، G-buffer به صدها مگابایت داده متورم میشود که باید در هر فریم نوشته و خوانده شود؛ اتفاقی که گذرگاه حافظه را پیش از محاسبه حتی یک نور، کاملاً اشباع میکند.
این دقیقاً همان بدهبستان عملکردی است که در انجمنهای تخصصی Computer Graphics Stack Exchange بر سر آن بحث میشود: رندرینگ Deferred پیچیدگی محاسباتی را با پهنای باند حافظه معامله میکند و رزولوشنهای بالا را به شکلی نامتناسب گران و پرهزینه میسازد.[3][6]
خطرات این بدهبستان دیکته میکند که یک بازی واقعاً چه چیزی را میتواند روی صفحه نشان دهد. از آنجا که رندرینگ Deferred نور را بر اساس دادههای نهایی و دوبعدی پیکسلها در G-buffer محاسبه میکند، از اساس متریالهای شفاف را در هم میشکند.
یک پنجره شیشهای و دیواری که پشت آن قرار دارد نمیتوانند به طور همزمان یک پیکسل واحد را در G-buffer اشغال کنند. در نتیجه، موتورهایی مانند Unreal مجبورند متریالهای شفاف را از طریق یک مسیر جداگانه و پرهزینه رندرینگ Forward که روی صحنه Deferred لایهبندی میشود پردازش کنند؛ کاری که عملاً GPU را برای یک فضای یکسان از صفحه نمایش، دو بار جریمه میکند.[1][5]
آنتیالایزینگ (Anti-aliasing) نیز به سرنوشت مشابهی دچار میشود. آنتیالایزینگ چندنمونهای سختافزاری (MSAA) با رندرینگ Forward بینقص کار میکند، زیرا GPU هنگام رسم هر شیء، لبههای هندسی دقیق آن را میشناسد. اما در یک پایپلاین Deferred، این لبههای هندسی پیش از اعمال نورپردازی در G-buffer تخت میشوند.
اعمال MSAA روی یک رندرکننده Deferred نیازمند راهکارهای پیچیدهای است که عملکرد را به شدت نابود میکند و صنعت را مجبور میسازد به سمت راهحلهای پسپردازشی مانند آنتیالایزینگ زمانی (TAA) برود؛ همان چیزی که باعث ایجاد سایه (Ghosting) و تاری در تصویر میشود و بازیکنان رقابتی از آن متنفرند.[7][8]
به همین دلیل است که مسیر رندرینگ، پلتفرم را تعیین میکند. واقعیت مجازی (VR) نیازمند رزولوشنهای فوقالعاده بالا و کمترین میزان تاخیر مطلق است، که همین امر پهنای باند سنگین حافظه و مشکلات آنتیالایزینگ در رندرینگ Deferred را به یک گزینه غیرممکن تبدیل میکند. در نتیجه، توسعهدهندگان VR تقریباً به طور انحصاری به پایپلاینهای بهینهشده رندرینگ Forward تکیه میکنند.
در نقطه مقابل، بازیهای عظیم جهانباز با چرخههای شبانهروز و صدها منبع نور پویا نمیتوانند از زیر بار ریاضیات O(اشیاء × نورها) در رندرینگ Forward جان سالم به در ببرند، و اینجاست که مالیات G-buffer در Deferred به یک هزینه اجباری برای ادامه کار تبدیل میشود.[4][8]
موتورهای مدرن در تلاشند تا این شکاف را از طریق رندرینگ Forward خوشهای (Clustered) و کاشیکاریشده (Tiled) پر کنند؛ روشی که صفحه را به یک شبکه تقسیم کرده و نورهایی را که روی کاشیهای خاص تاثیری ندارند حذف میکند.
این رویکرد هیبریدی، قابلیت «نورهای بینهایت» در رندرینگ Deferred را به پایپلاین Forward بازمیگرداند و آنتیالایزینگ سختافزاری و متریالهای شفاف را احیا میکند. با این حال، فیزیک بنیادین GPU دستنخورده باقی میماند: هر فریم یک بودجهبندی سختگیرانه از چرخههای پردازشی در برابر پهنای باند حافظه است و توسعهدهندگان باید انتخاب کنند که حاضرند کدام منبع را تا مرز نابودی مصرف کنند.[7][8]
دفعه بعد که با قدم گذاشتن به یک میدان شلوغ در شهر، نرخ فریم بازی شما نصف شد، یا یک پنجره شیشهای نتوانست انفجار نزدیکش را منعکس کند، بدانید که این یک شکست در بهینهسازی نیست. این موتور بازی است که دقیقاً همان بدهبستان ریاضیاتی را اجرا میکند که برایش برنامهنویسی شده است.
این موتور بازی است که دقیقاً همان بدهبستان ریاضیاتی را اجرا میکند که برایش برنامهنویسی شده است.
انتخاب بین رندرینگ Forward و Deferred یک شرطبندی دائمی روی این مسئله است که آیا سختافزار بازیکن در هستههای پردازشی گلوگاه ایجاد میکند یا در گذرگاه حافظه؛ و هیچ مقدار از ترافلاپسهای خام نمیتواند قوانین ریاضی را دور بزند.[9]
بررسی عمیق دیدگاهها
استدلال موافقان رندرینگ Forward
پهنای باند حافظه و انعطافپذیری متریالها را بر تعداد نورهای پویا ترجیح میدهد.
رندرینگ Forward زمانی میدرخشد که صحنه نیازمند آنتیالایزینگ سختافزاری (MSAA) و متریالهای شفاف پیچیده مانند شیشه، آب یا افکتهای ذرات باشد. از آنجا که GPU نورپردازی را همزمان با رسم هر شیء هندسی محاسبه میکند، ذاتاً عمق و لایههای شفاف همپوشان را درک میکند. شواهد کارایی آن در توسعه بازیهای موبایل و واقعیت مجازی (VR) نهفته است، جایی که پهنای باند حافظه به شدت محدود است. با این حال، این روش در صحنههایی با دهها نور پویای همپوشان به طرز فاجعهباری شکست میخورد، زیرا پیچیدگی O(اشیاء × نورها) هستههای پردازشی GPU را در هم میکوبد. این روش برای ساخت عناوین VR، بازیهای موبایل یا بازیهای سبکدار کامپیوتری با نورپردازی استاتیک پختهشده (Baked) بسیار مناسب است. اما برای ساخت جهانهای باز پویا با چرخههای شبانهروز و صدها منبع نور فعال، اصلاً جوابگو نیست.
استدلال موافقان رندرینگ Deferred
نورپردازی پویای نامحدود را با فدا کردن پهنای باند حافظه در اولویت قرار میدهد.
رندرینگ Deferred ستون فقرات بازیهای مدرن و جهانباز AAA است، زیرا پیچیدگی نورپردازی را از پیچیدگی هندسی جدا میکند. با تخت کردن هندسه صحنه در یک G-buffer در همان ابتدا، موتور میتواند هزاران نور پویا را با یک هزینه ثابت O(پیکسلها × نورها) رندر کند. شواهد تسلط این روش در هر عنوان مدرنی که دارای تغییرات بلادرنگ زمان روز و محیطهای شهری متراکم است، به وضوح دیده میشود. تاوان این کار، نیاز به پهنای باند حافظه عظیمی است که با افزایش رزولوشن نمایشگر به شکلی بیرحمانه بالا میرود، و همچنین ناتوانی بنیادین در مدیریت اشیاء شفاف بدون نیاز به یک پاس ثانویه Forward. این روش برای ساخت محیطهای متراکم با نورپردازی پویا که رزولوشن 1080p یا 1440p را روی پردازندههای گرافیکی دسکتاپ مدرن هدف قرار دادهاند، بسیار مناسب است. اما برای سختافزارهای دارای محدودیت حافظه، هدستهای VR یا صحنههایی که به شدت به سطوح شفاف همپوشان وابستهاند، اصلاً انتخاب درستی نیست.
- مدافعان رندرینگ Deferred
- نورپردازی پویای نامحدود و جداسازی پیچیدگی هندسی را برای صحنههای عظیم در اولویت قرار میدهند.
- مدافعان رندرینگ Forward
- بهرهوری پهنای باند حافظه، آنتیالایزینگ سختافزاری و پشتیبانی از متریالهای پیچیده را در اولویت قرار میدهند.
دیدگاههایی که این گزارش پوشش نداده
- معماران سختافزاری که سلسلهمراتب کش GPU را طراحی میکنند
- توسعهدهندگان موتورهای بازیسازی که در حال ساخت رندرهای هیبریدی Forward خوشهای (Clustered) هستند
منابع
[1]LearnOpenGLمدافعان رندرینگ DeferredDeferred Shading
مطالعه در LearnOpenGL →
[2]UnityRendering paths in Unity
مطالعه در Unity →
[3]Computer Graphics Stack ExchangeWhat is the performance tradeoff between forward and deferred rendering?
مطالعه در Computer Graphics Stack Exchange →
[4]Valve Developer Communityمدافعان رندرینگ DeferredDeferred renderer (shading & lighting)
مطالعه در Valve Developer Community →
[5]Unreal Art Optimizationمدافعان رندرینگ DeferredForward vs Deferred Shading
مطالعه در Unreal Art Optimization →
[6]Mighty Professional TutorialsDeferred Rendering & the G-buffer
مطالعه در Mighty Professional Tutorials →
[7]Bugnet Blogمدافعان رندرینگ ForwardForward vs Deferred Rendering: Which Should You Use
مطالعه در Bugnet Blog →
[8]GDC Vaultمدافعان رندرینگ ForwardForward Rendering Pipeline for Modern GPUs
مطالعه در GDC Vault →
[9]تیم سردبیری کوهستانتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
بیشتر در بازی و ورزشهای الکترونیک
مشاهده همه →درگیری سختافزاری کامپیوتر
آپدیت KB۵۱۲۱۰۰۳ ویندوز ۱۱ بازیهای کامپیوتری را از کار انداخت: مقایسه سه راهکار نجات
6 منبع
تامین مالی بازیهای ویدئویی
ادغام و تملکهای بازیهای ویدئویی در سهماهه دوم ۲۰۲۶ به ۲.۳ میلیارد دلار رسید؛ سرمایه بین تثبیت استودیوها و زیرساخت هوش مصنوعی تقسیم میشود
3 منبع
استراتژی سرویس زنده
سونی بازی سرویس زنده «هورایزن» را پس از بازخورد منفی بازیکنان بازسازی میکند
7 منبع
لجستیک ورزشهای الکترونیک
مکانیسم انتقال جام جهانی ورزشهای الکترونیک ۲۰۲۶: مگاسایت ریاض در برابر مدل المپیک پاریس
5 منبع
نظرات
هر زاویه. هر روز.
اخبار بازی و ورزشهای الکترونیک با پوشش کامل منابع و تحلیل دیدگاهها، هر روز و رایگان.





