HBAO+ بهترین روش برای پراکنش محیطی نور است که موجب تاریکی گوشه‌ها و حفره‌ها می‌شود.

SSAO روشی سریع است که سرعت و دقت HBAO+ را ندارد و به همین علت است که در بازی‌های گرافیکی امروزی از تکنیک جدیدی که انویدیا وارد صنعت بازی کرده، به وفور استفاده می‌شود.

بازی با نور و سایه و چند سطر در اهمیت پراکنش محیطی نور

در مدل‌سازی سه‌بعدی با رعایت کردن پرسپکتیو (دوری و نزدیکی)، استفاده از افکت‌های متعدد مثل دود، مه، حرکات طبیعی و برگرفته از دینامیک واقعی اجسام و تعامل واقعی آنها، حرکت در اثر وزش باد و عبور سیالاتی مثل آب و در نهایت بازتاب‌های طبیعی، می‌توان به شبیه‌سازی دقیقی از دنیای واقعی رسید. اما از تمام موارد مهم‌تر، نورپردازی و سایه‌زنی است. نور و سایه چیزی است که عناصر ساده‌ی بازی‌ها را به عناصری نزدیک به واقعیت تبدیل می‌کند. این نقش اساسی را در بازی‌هایی مثل Assassin Creed: Unity به وضوح می‌بینیم، گویی که دنیای رندر شده، تصویری از واقعیت است: 

نور و سایه عمق بیشتری به مناظر می‌بخشد.

فرض کنید دیوار و کف کوچه‌ها دقیقاً از یک بافت تشکیل شده باشد. سایه تنها تفاوت بین این دو خواهد بود و در واقع بدون نور و سایه، برخی از عناصر گرافیکی درست مثل هم و غیرقابل تشخیص می‌شوند.

و موضوع فقط سایه‌ی معمولی نیست، نوع پراکنش سایه هم مهم است. سایه فقط به صورت یک مرز دقیق بین تیرگی و روشنی تعریف نمی‌شود بلکه واقعیتی مات و پراکنده دارد. گوشه‌ها و حفره‌ها سایه‌ی عمیقی دارند که صرفاً شامل دو رنگ تیره و روشن نیست.

تصویر زیر را ببینید و فرض کنید سایه‌ای پراکنده نداشتیم، آیا بدون سایه می‌توان چیزی جز سفید مطلق دید؟

سایه اجسام هم‌رنگ را از هم جدا می‌کند.

فلسفه‌ای متفاوت برای وجود سایه در بازی‌های امروزی

موضوع فقط واقعی شدن گرافیک بازی نیست، سایه در بازی‌هایی که گیمر مشغول هدایت کردن یک مأمور مخفی می‌شود یا بازی‌های شوتر بسیار مهم است چرا که به ما در شناسایی موقعیت دشمن کمک می‌کند. بازی Splinter Cell Blacklist از جمله بازی‌هایی است که با ایجاد سایه‌هایی طبیعی به گیمر در شناخت موقعیت دشمن کمک می‌کند.

سایه در یافتن مکان دشمن هم مفید است.

سایه ممکن است وسیله‌ی برای ایجاد رعب و وحشت باشد! مثلاً در بازی معروف هاف لایف 2 وقتی درون تونل‌ها و ساختمان‌ها در گردش هستید، ناگهان سایه‌ی یک زامبی را روی دیوار می‌بینید و از هیجان و ترسی که ایجاد شده، لذت می‌برید.

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

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

تمام این موارد بیانگر پیچیدگی محاسبات مربوط به سایه‌زنی است.

 پراکنش محیطی نور یا Ambient Occlusion چیست؟

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

به شخصه Ambient Occlusion را به جای انسداد محیطی، پراکنش محیطی نور ترجمه می‌کنم چرا که توصیف بهتری از مفهوم آن است.

به تصویر زیر دقت کنید، مورد سمت چپ واقعیت ندارد و مورد سمت راست هم اندکی سایه‌ی واضح دارد. در دنیای واقعی ما با مدل وسطی روبرو می‌شویم که مملو از سایه‌های پراکنده و ظریف در نقاط مختلف است:

پراکنش محیطی نور و طبیعی شدن مدل‌های کامپیوتری

یک مثال رندر شده‌ی دیگر، همه‌چیز سفید است اما پراکنش محیطی نور کاری کرده که برخی نقاط کاملاً سیاه و برخی کاملاً سفید هستند. به بیان دیگر پراکنش محیطی نور است که جزئیات اجسام را برجسته می‌کند:

پراکنش محیطی نور موجب نمایان شده جزئیات اجسام می‌شود.

SSAO ساده‌ترین روش محاسبه‌ی پراکنش محیطی نور

عبارت SSAO مخفف Screen Space Ambient Occlusion  و به معنی پراکنش محیطی نور در فضای صفحه است. این روش اولین بار در سال 2007 و در بازی معروف Crysis استفاده شد.

فضای صفحه و فضای شیء در ادامه‌ی مقاله به چه معنی هستند؟

منظور از فضای صفحه این است که عمل تشخیص انسداد پس از چرخش دستگاه مختصات و همین‌طور تشخیص مرئی بودن عناصر نسبت به موقعیت فعلی دوربین یا همان گیمر پردازش می‌شود. به این فضای دیداری، فضای صفحه (Screen Space) یا فضای تصویر (Image Space) می‌گوییم. نقطه‌ی مقابل آن فضای شیء (Object Space) است، فضایی که اجسام با مختصات واقعی خویش قرار گرفته‌اند و خبری از تصویر شدن برای نمایش به بیننده نیست.

موتور گرافیکی CryEngine همواره قابلیت‌های پیشرفته و خیره‌کننده‌ای را به صنعت گیم ارزانی داشته که SSAO یکی از مهم‌ترین‌های آن است؛ به همین جهت است که همیشه می‌گویم کرایسیس‌ها صرفاً بازی نیستند بلکه شاهکار گرافیکی هستند.

در SSAO پراکنش نور با سرعتی بالا و دقتی کافی تخمین زده می‌شود. الگوریتم کلی این است که پیکسل شیدر عمق (فاصله) یک پیکسل را با نمونه‌برداری از پیکسل‌های نزدیک محاسبه می‌کند و بدین ترتیب میزان انسداد یا همان سایه‌ی موضعی به دست می‌آید.

چنین روشی قطعاً بهینه نیست چرا که برای رسیدن به کیفیتی مطلوب و واقعی، به بیش از 200 بار خواندن بافر عمق برای هر پیکسل نیاز داریم. بنابراین از مقایسه‌ای تصادفی که با طرحی چرخان استفاده شده و در نهایت هم فیلتری برای مات کردن نویز استفاده می‌شود تا نتیجه واقعی‌تر به نظر برسد.

و توضیح دقیق‌تر در مورد روش کرایتک:

فضای صفحه شامل دو مختصه‌ی x و y است. مختصه‌ی Z هم به عنوان  عمق به کار می‌رود. یک پیکسل در فضای صفحه برای نمونه‌برداری از پیکسل‌های فضای اطرافش انتخاب می‌شود. در ادامه‌ی فرآیند سراغ فضای شیء می‌رویم؛ در فضای شیء (Object Space) با استفاده از بردارهای نمونه‌برداری به نقاط پیرامون نقطه‌ی مورد بحث می‌رسیم که هر یک موقعیت خاص و عمق خود را دارند. برخی درون جسم هستند و برخی در فضای خالی اطراف قرار دارند.

نسبت فضای پر به فضای خالی نشان می‌دهد که پیکسل مرکزی در چه موقعیتی است. مثلاً پیکسل روی سطحی صاف به نسبت 0.5 می‌رسد، نیمی از پیکسل‌های نمونه‌برداری شده در فضا هستند و نیمی درون جسم. نسبت 0 هم به معنی صفر بودن فضای پر است و این یعنی پیکسل موردبحث در نقطه‌ای نوک‌تیز قرار دارد. نسبت 1 هم به معنی انسداد کامل است.

دو اشکال اساسی این روش در نسبت 0 و 0.5 هویداست. در نسبت فضای پر به خالی 0 لبه‌هایی نوک‌تیز و کاملاً بدون سایه داریم! در نسبت 0.5 هم صفحاتی بدون هیچ نوع انسداد داریم. مثلاً زیر یک جعبه یا خودرو که سطحی صاف است، تاریک نمی‌شود!

در SSAO صفحات صاف زیر اجسام، تیره نمی‌شوند.

در ادامه با روش جالب‌تری به اسم HBAO آشنا می‌شویم.

HBAO و HBAO+ دو روش دقیق‌تر و سریع‌تر برای پراکنش محیطی نور

انویدیا در سال 2008 روش بهینه‌تری به اسم HBAO را معرفی کرد که مخفف Horizon Based Ambient Occlusion و به معنی پراکنش محیطی نور مبتنی بر افق است. تکنیک جدیدی که بر خلاف اقسام SSAO از الگوریتمی فیزیکی که به قرار گرفتن نقاط مجاور در فضای پر و خالی می‌پردازند، تکیه نمی‌کند و به جای آن مجموعی از فواصل نقاط اطراف در فضای صفحه را ملاک انسداد و میزان سایه‌زنی قرار می‌دهد. به بیان دیگر HBAO سایه‌هایی با کیفیت و دقت بیشتر ایجاد می‌کند.

ATI سابق یا AMD امروز هم در کارت گرافیک‌های خود از روش مشابهی به اسم HDAO استفاده می‌کند که مخفف High Definition Ambient Occlusion و به معنی پراکنش محیطی نور با کیفیت بالاست.

البته این دو مورد هم از نظر کیفی متفاوت هستند:

مقایسه‌ی کیفیت پراکنش محیطی نور به روش HBAO و HDAO

همان‌طور که مشاهده می‌کنید عمق تیرگی سطح زیر پوشش گیاهی در HBAO بیشتر از دو روش دیگر است.

اما ببینیم دقیقاً از چه الگوریتمی استفاده می‌شود:

ابتدا افق ناحیه‌ای تعریف می‌شود. منظور از افق ناحیه‌ای این است که از چند نمونه نقطه در فضای صفحه استفاده می‌شود و با محاسبه‌ی فاصله‌ی آنها تا دوربین، شیب متوسط سطوح کوچک تعیین می‌گردد. مثلاً در تصویر زیر از نقاط S0 تا S3 استفاده شده تا شیب متوسط افق ناحیه‌ای یعنی Horizon Angle به دست آید:

محاسبه‌ی افق و زاویه‌ی آن در روش HBAO

وقتی زاویه‌ی افق زیاد باشد به این نتیجه می‌رسیم که نقطه‌ی ابتدایی ما در مجاورت سطوحی با شیب کاملاً متفاوت قرار گرفته است. بنابراین با سطحی نزدیک به گوشه‌های جسم سر و کار داریم که به انسداد بیشتری نیاز دارد. شیب صفر هم به معنی رویارویی با سطح صاف است و هیچ انسدادی لازم نیست.

طرح تصادفی جهت نمونه‌برداری یا Jittering در این حالت هم استفاده می‌شود تا سرعت محاسبات به حد مطلوبی برسد. فیلتر مات‌کننده هم با در نظر گرفتن اهمیت لبه‌ها استفاده می‌شود.

و چگونه است که سطوح صاف زیر اجسام هم تیره می‌شوند؟

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

HBAO+ انویدیا چیست و چطور سایه‌هایی طبیعی‌تر از SSAO و HBAO ایجاد می‌کند؟

SSAO با صفحات باریک مشکل دارد اما HBAO به ضخامت اجسام کاری ندارد.

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

HBAO+ انویدیا چیست و چطور سایه‌هایی طبیعی‌تر از SSAO و HBAO ایجاد می‌کند؟

و اشکالات HBAO:

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

انویدیا برای حل مشکل HBAO از نظر کیفیت و سرعت اجرا، به کار خویش ادامه داد تا به HBAO+ رسید، روشی که 3 برابر سریع‌تر است و نیازی به رندر کردن پراکنش محیطی نور با رزولوشن نیمه‌کامل ندارد. HBAO+ در شناسایی تاریکی اجسامی مثل برگ و چمن و جزئیات ظریف دیگر هم توانمند است و مشکل یکنواختی سایه که در HBAO به چشم می‌خورد ندارد.

تصویر زیر نمونه‌ای ساده از تفاوت کیفیت سایه‌ها در HBAO و HBAO+ است، مقایسه کنید و به خصوص به سایه‌ی میان نرده‌ها توجه نمایید:

HDAO

HBAO+

همان‌طور که می‌بینید HBAO سایه‌ی میان نرده‌ها را به صورت یکنواخت در نظر گرفته است.

سرعت عمل و دقت روش‌های AO مختلف؛ HBAO+ سریع‌‌تر است یا SSAO؟

انویدیا برای پاسخ به این سوال دست به کار شده و بخشی از بازی Splinter Cell Blacklist  را با روش‌های پراکنش محیطی نور آزمایش کرده است. جدول زیر نتیجه‌ی این بررسی است:

مقایسه دقت و سرعت SSAO با HBAO و HBAO+

روش پراکنش محیطی نور

رزولوشن رندر

تعداد نمونه‌برداری برای تشخیص انسداد

مدت زمان رندر شدن یک فریم (میلی‌ثانیه)

SSAO

نصف

16

1.3

SSAO+

کامل

16

4.6

HBAO

کامل

4

1

HBAO+

کامل

36

2.4

همان‌طور که اشاره شد، SSAO روش اصلی است و سازندگان موتورهای گرافیکی و بازی‌ها می‌توانند روش‌های جانبی خاصی مثل SSAO+ را اضافه کنند. در این بازی خاص در روش HBAO+ با وجود استفاده از 36 نمونه که 9 برابر بیشتر از HBAO است، سرعت فقط 2.4 برابر کمتر شده است. بنابراین مشخص است که راهکار انویدیا از منظر کیفیت و سرعت عمل به سطح بسیار خوبی رسیده است.

صنعت گیم به استفاده از HBAO+ رویگردان است

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

جالب اینجاست که استفاده از HBAO+ بسیار ساده است به طوری که تنها 1 ساعت برای اضافه کردن آن به بازی Warmachine: Tactics که مبتنی بر موتور گرافیکی Unreal Engine 4 است، وقت صرف شده است، البته یک ساعت کاری تیمی بزرگ! آنریل انجین 4 موتور گرافیکی قدرتمندی است که اخیراً تبدیل به محصولی رایگان شده و در آینده بازی‌های بیشتری از آن قدرت می‌گیرند.

انویدیا با سازندگان بازی همکاری می‌کند تا از این روش سخت‌افزاری و سریع در بازی‌های خود استفاده کنند. حتی بازی‌های قدیمی مثل World of Warcraft هم به نورپردازی نوین انویدیا مجهز می‌شود و این مهم را در یکی از پچ‌های جدید این بازی شاهد هستیم، خودتان بررسی کنید:

HBAO+ انویدیا چیست و چطور سایه‌هایی طبیعی‌تر از SSAO و HBAO ایجاد می‌کند؟

HBAO+ انویدیا چیست و چطور سایه‌هایی طبیعی‌تر از SSAO و HBAO ایجاد می‌کند؟

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