تک پدیا: فیلتر بافت (Texture Filtering) چیست و چه تأثیری در گرافیک بازیها دارد؟
فیلترینگ همیشه بد نیست!
حتماً تا به حال در منو یا بخش تنظیمات گرافیکی بازیهای ویدیویی مختلف، گزینهای به نام Texture Filtering را مشاهده کردهاید. گزینهای که به شما اجازه میدهد نوع فیلتر بافتهای داخل بازی را تعیین کرده و شدت آن را نیز انتخاب کنید. اما تا به حال شده با خود فکر کنید که فیلتر بافت یا Texture Filtering دقیقاً چه معنایی دارد و چه تأثیری در گرافیک بازیها می گذارد؟ با قسمتی جدید از سری مطالب «تک پدیا» همراه لیون تک باشید تا این مفهوم را برایتان شرح دهیم.
پیش از این که به سراغ بحث اصلیمان برویم، بد نیست اشاره کنیم که فیلتر بافتها به صورت کلی تنها در بازیهای ویدیویی استفاده نمیشود و در بحث گرافیک سه بعدی و طراحیهای سه بعدی کاربرد بسیار زیادی دارد. با این حال، از آنجایی که معمولاً در لیون تک درباره سخت افزار و موارد فنی مربوط به بازیهای ویدیویی صحبت میکنیم، فیلتر بافتها را نیز در دنیای ویدیو گیم مورد بررسی قرار میدهیم. بیایید با دو نوع ابتدایی فیلتر بافت شروع کنیم.
فیلتر بافت Bilinear و Trilinear
به بیان ساده، فیلتر بافت یا Texture Filtering تعیین میکند که یک بافت (یک تصویر دو بعدی همراه با دادهها و جزئیات) چگونه روی یک مدل سه بعدی نمایش داده شود. یک پیکسل روی یک مدل سه بعدی، الزاماً به صورت مستقیم با پیکسل روی بافت خود که تکسل (texel) نامیده میشود، مطابقت ندارد. چرا این اتفاق رخ میدهد؟ به این دلیل که شما در یک بازی ویدیویی، مدل سه بعدی مورد نظر را از هر زاویه یا فاصلهای نگاه میکنید.
بنابراین، زمانی که میخواهیم رنگ یک پیکسل را تشخیص دهیم، نقطهای را روی بافت یا تکسچر پیدا میکنیم که با مدل سه بعدی مطابقت دارد. این نقطه، چند نمونه را از تکسلهای نزدیک خود برمیدارد و میانگین آنها را به مخاطب نشان میدهد. سادهترین روش برای فیلتر کردن بافتها در یک بازی ویدیویی، Bilinear Filtering (فیلتر دوخطی) است و دقیقاً کاری که شرح دادیم را انجام میدهد؛ زمانی که یک پیکسل در میان تکسلها قرار میگیرد، نمونه چهار تکسل پیرامون خود را برمیدارد و به این ترتیب رنگ خود را پیدا میکند.
با ذکر مثال…
زمانی که مفهومی به نام Mipmapping (نقشه برداری) را به فرمول اضافه کنیم، اوضاع پیچیدهتر میشود. دربارۀ مفهوم Mipmapping، صحبت بسیار است اما تنها این را بدانید زمانی که بافت افقی به صورت پرسپکتیو دیده میشود، در فواصل دور به خوبی نمایش داده نشده و تار میگردد. با وجود Mipmapping، تقریب درستی از بافت در افق به دیدگان گیمر یا فرد مشاهده کننده میرسد.
به عنوان مثال، تصور کنید زمینی که در بازی روی آن ایستادهاید، یک بافت آسفالت با جزئیات دارد اما زمانی که از فاصله و به صورت پرسپکتیو (در افق) به آن نگاه میکنید، جزئیات بافت رفته رفته کم میشود. زمانی که از این فاصله به زمین یا جاده نگاه میکنید و تنها چند پیکسل از آن قابل مشاهده است، منطقی نیست اگر از یک بافت با رزولوشن و کیفیت بالا، نمونه برداری شود.
برای بهبود عملکرد و جلوگیری از پیش آمدن پدیده Aliasing (در قسمتهای بعدی به شکل مفصل درباره Aliasing و Anti Aliasing صحبت خواهیم کرد) و همچنین برای از دست ندادن کیفیت کلی تصویر، بازی از یک بافت با رزولوشن پایینتر برای اشیاء قرار گرفته در دوردست استفاده میکند که به آن mipmap میگویند.
فیلتر بافتها در حالت پایه
زمانی که به این زمین یا جاده نگاه میکنیم، دوست نداریم ببینیم که یک Mipmap در یک نقطه به اتمام رسیده و Mimmap بعدی از پسِ آن نمایان شود، چرا که در این صورت، بافت زمین از حالت واقع گرایانه و معمولی خود خارج میشود. این دقیقاً جایی که است Bilinear Filtering نقطه ضعف بزرگ خود را نشان میدهد. فیلتر دوخطی میان Mipmapها هماهنگی ایجاد نمیکند، بنابراین از یک نقطهای به بعد، کاهش چشمگیر بافتها کاملاً مشاهده شده و وضعیتی به مانند تصویر قرار گرفته در را به وجود میآورد.
این مشکل در نوع بعدی فیلتر بافتها که با نام Trilinear Filtering (فیلتر سهخطی) شناخته میشود، رفع شده است. با استفاده از Trilinear Filtering که مدلی پیشرفتهتر، اما همچنان قدیمی در دنیای تکسچر فیلترینگ به حساب میآید، مشکل انتقال از یک میپمپ به میپمپ بعدی حل میشود و در افق، روی یک زمین، یک جاده یا به صورت کلی، یک سطح، تصویری یکپارچه و نرم را به ما ارائه میدهد. Trilinear Filtering این کار را با گرفتن نمونهها از هر دو میپمپ بعدی و قبلی انجام میدهد و با میانگین گرفتن، سطح را یکپارچه میسازد.
فیلتر بافت Anisotropic Filtering
با این که فیلتر سهخطی یا Trilinear Filtering نسبت به مدل فیلتر دوخطی بیشتر به ما کمک میکند اما زمین یا هر جسم دیگری در فاصله، همچنان بلوری و تار به نظر میرسد. با استفاده از یک روش مدرنتر که Anisotropic Filtering نامیده میشود، کیفیت بافتها به طرز چشمگیری افزایش مییابد و این کیفیت در فاصلهها و زاویههای مختلف، حفظ میشود.
برای درک بهتر کارکرد Anisotropic Filtering و تفاوت آن با روشهای قبلی، یک پنجرۀ مربع شکل (یک پیکسل از یک مدل سه بعدی) را تصور کنید که یک دیوار آجری دقیقاً پشت سر و مستقیم به آن قرار گرفته است. حال، تصور کنید که نور به داخل این پنجره بتابد و شکل یک مربع را روی دیوار پشتی به وجود بیاورد. این منطقۀ نمونۀ ما برای این پیکسل بوده و از تمام جهات نیز مساوی و برابر است. با وجود فیلترهای Bilinear و Trilinear، این دقیقاً حالتی است که بافتها نمونه برداری میشوند.
افتاد مشکلها…
اگر مدل مورد نظر مستقیماً و به صورت عمودی در مقابل و جلوی ما قرار بگیرد، همه چیز خوب و درست است اما اگر رفته رفته از ما دور شود یا بچرخد چه؟ اگر هنوز یک مربع را نمونه برداری کنیم، همه چیز شکل غلطی به خود میگیرد و در نتیجه، جسم بلوری میشود. حالا تصور کنید که بافت دیوار آجری نسبت به پنجره کج شود. پرتو نور به یک ذوزنقۀ لاغر و بلند تبدیل میشود که فضای عمودی بسیار بیشتری را نسبت به فضای افقی روی بافت پر میکند. با تصور کردن این مثال ما، حالا Anisotropic Filtering وارد عمل میشود. Anisotropic Filtering در واقع میپمپها را در یک جهت و طبق زاویهای که اجسام را مشاهده میکنیم، مقیاس و اندازه گیری میکند (دقیقاً به مانند کج شدن و چرخیدن دیوار دیوار ما).
اگر مثالهای زده شده یا مفاهیم توضیح داده شده را به سادگی درک نمیکنید هیچ مشکلی ندارد، چرا که درک این موضوعات سخت است. تنها با خواندن اطلاعات و نگاه کردن به تصاویر قرار گرفته در این مطلب، میتوانید پایه و اساس مفاهیم مربوط به فیلتر بافت را درک کنید و پس از این با دقت بیشتری درون بازیهای ویدیویی، فیلترینگ بافتها را زیر نظر بگیرید.
اعداد چه معنایی دارند؟
Anisotropic Filtering در دوره و زمانه امروزی، روشی است که بیشتر سازندگان و توسعه دهندگان در بازیهای خود برای فیلتر کردن بافتها استفاده میکنند. با این حال، درجه، شدت و مقیاس Anisotropic Filtering در منوی تنظیمات گرافیکی بازیها قابل تغییر است و این نوع فیلترینگ در انواع 2x و 4x و 8x و 16x ارائه میگردد. انویدیا (Nvidia) این نرخهای نمونه برداری را به صورت شیب زاویۀ فیلترینگ تعریف میکند. توضیحات رسمی انویدیا در این خصوص را در زیر مطالعه کنید:
Anisotropic Filtering میتواند با سطوح ناهمسانی میان 1 (بدون مقیاس) تا 16 (حداکثر درجهای که یک میپمپ میتواند اندازه گیری شود)، کار کند اما Anisotropic Filtering با قدرتهای 2x و 4x و 8x و 16x به کاربر پیشنهاد میشود. تفاوت میان این تنظیمات، حداکثر زاویهای است که Anisotropic Filtering بافت را با آن فیلتر میکند. به عنوان مثال، گزینۀ 4x بافتهایی را فیلتر میکند که 4 برابر نسبت به خط صاف شیب دارد اما همچنان فیلترینگ بافت 2x را در محدوده فاصله 2x (فاصله نزدیکتر) برای بافتها اعمال میکند تا با این روش، عملکرد ضربه سنگینی دریافت نکند.
در واقع هر چه دقت و قدرت Anisotropic Filtering بیشتر شود، زاویههای ریزتر و دقیقتر در فاصلههای دورتری فیلتر یا اصلاح میشوند.
فیلتر بافتها چقدر روی عملکرد بازی تأثیر میگذارد؟
خبر خوب برای کسانی که نگران نرخ فریم بازی خود هستند و با فعال کردن هر گزینه از آسیب دیدن عملکرد بازی میترسند، این است که فیلتر بافتها در هر نوع و شکل، به هیچ عنوان پرتقاضا نیست و روی عملکرد بازی ویدیویی مورد علاقه شما، تأثیر چندانی ندارد. به همین دلیل است که پس از اجرا کردن هر بازی، پیشنهاد میکنیم سریعاً به منوی تنظیمات گرافیکی رفته و Anisotropic Filtering را روی درجه آخر (16x) یا حداقل 8x قرار دهید.
به عنوان مثال، با بنچمارک گرفتن از بازی BioShock Infinite متوجه شدیم که نرخ فریم بازی میان گزینههای Bilinear Filtering و 16x Anisotropic Filtering، تنها 6 فریم بر ثانیه تغییر (کاهش یا افزایش) میکند. با توجه به این که Anisotropic Filtering با درجه 16x، کیفیت بصری و گرافیکی بازی مورد نظر را به طرز چشمگیری افزایش میدهد و بافتها را به خوبی به نمایش میگذارد، قطعاً این درصد محدود و ناچیز از کاهش یا افت عملکرد، ارزشش را دارد.
فیلتر بافت مهم است!
به یاد داشته باشید که قرار دادن تنظیمات کیفیت بافتها (Texture Quality) روی درجه Ultra در صورت استفاده نکردن از فیلترینگ بافتها، هیچ فایدهای ندارد و کار عاقلانهای محسوب نمیشود.
مفهوم و موضوع تکسچر فیلترینگ در دنیای گرافیک سه بعدی، یک موضوع اجباری است و اهمیت آن در بازیهای ویدیویی را نیز در این مطلب درک کردیم. تکسچر فیلترینگ نه تنها تقاضای سخت افزاری ناچیزی برای پردازنده گرافیکی شما به همراه دارد، بلکه بافتهای ضخیم و با کیفیتی که توسعه دهندگان برای خلق آنها تلاش کردهاند را به بهترین شکل ممکن به نمایش میگذارد.
نظر شما در مورد مقولۀ فیلتر بافتها چیست؟ آیا تا به حال به این موضوع یا نوع کارکرد Texture Filtering فکر کردهاید؟ نظرات خوب خود را با با ما به اشتراک بگذارید.