شیدرها در یک بازی چیست؟ چگونه شیدرها را در Minecraft نصب کنیم؟ چه سایه بان ها پاسخ می دهند.

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

بهینه ساز

به احتمال زیاد، شما یک بازیکن مشتاق Minecraft هستید و به همین دلیل است که متوجه شدید که چیست. لازم به ذکر است که مفهوم "شاهد" بی سر و صدا از این بازی جدا شده است و می تواند جدا از آن "زندگی" کند. درست مثل مدها بنابراین، لازم نیست که این دو مفهوم را محکم به هم متصل کنیم.

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

تفسیر

شیدر چیست؟ که توسط پردازنده های کارت گرافیک اجرا می شود. این ابزارها به زبان خاصی توسعه یافته اند. بسته به هدف، ممکن است متفاوت باشد. پس از آن، سایه زن ها به طور مشروط به دستورالعمل های پردازنده های شتاب دهنده گرافیکی تبدیل می شوند.

کاربرد

فوراً باید گفت که برنامه به طور کلی با هدف از پیش تعیین شده است. برنامه ها در پردازنده های کارت های ویدئویی تعبیه شده اند، به این معنی که آنها بر روی پارامترهای اشیاء و تصاویر گرافیکی سه بعدی کار می کنند. آنها می توانند کارهای زیادی از جمله کار با انعکاس، شکست، تاریکی، اثرات برشی و غیره را انجام دهند.

فرضیه

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

البته، برخی از فرآیندها هنوز در عملکرد کارت های ویدئویی ساخته شده بودند. توسعه دهندگان می توانند از چنین الگوریتم هایی استفاده کنند. اما آنها نتوانستند الگوریتم های خود را بر روی کارت گرافیک تحمیل کنند. دستورات غیر استاندارد را می‌توانست توسط CPU اجرا کند که کندتر از GPU بود.

مثال

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

دسترسی داشته باشید

بنابراین مشخص شد که حل چنین مشکلاتی ضروری است. شتاب دهنده های گرافیکی شروع به گسترش تعداد الگوریتم هایی کردند که در بین توسعه دهندگان محبوب بودند. مشخص شد که غیرممکن است که همه چیز را "هل" کنیم. لازم بود دسترسی متخصصان به کارت گرافیک باز شود.

قبل از اینکه بازی‌هایی مانند Minecraft با مدها و شیدرها وجود داشته باشند، به توسعه‌دهندگان این امکان داده شد تا با بلوک‌های GPU در خطوط لوله کار کنند که می‌توانستند مسئول دستورالعمل‌های مختلف باشند. بنابراین برنامه هایی با نام سایه بان شناخته شدند. برای ایجاد آنها، زبان های برنامه نویسی ویژه توسعه یافته است. بنابراین، کارت های ویدئویی نه تنها با "هندسه" استاندارد، بلکه با دستورالعمل های پردازنده نیز بارگیری شدند.

هنگامی که چنین دسترسی ممکن شد، امکانات جدید برنامه نویسی شروع به باز شدن کردند. متخصصان می توانند مسائل ریاضی را در GPU حل کنند. چنین محاسباتی به عنوان GPGPU شناخته شد. این فرآیند به ابزار خاصی نیاز داشت. از nVidia CUDA، از Microsoft DirectCompute، و همچنین چارچوب OpenCL.

انواع

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

نوع راس با رئوس اشکالی کار می کرد که وجه های زیادی دارند. ابزارهای زیادی در اینجا دخیل هستند. به عنوان مثال، ما در مورد مختصات بافت، بردارهای مماس، باینرمال ها یا نرمال ها صحبت می کنیم.

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

در بازی ها

اگر به دنبال سایه زن برای Minecraft 1.5.2 هستید، به احتمال زیاد فقط می خواهید تصویر را در بازی بهبود دهید. برای ایجاد این امکان، برنامه ها از «لوله های آتش، آب و مس» گذشت. سایه بان ها آزمایش شده و بهبود یافته اند. در نتیجه مشخص شد که این ابزار دارای مزایا و معایبی است.

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

از کاستی‌ها، فقط شایان ذکر است که باید یکی از زبان‌های برنامه‌نویسی را یاد بگیرید و همچنین در نظر بگیرید که مدل‌های مختلف کارت‌های ویدئویی میزبان مجموعه متفاوتی از الگوریتم‌ها هستند.

نصب و راه اندازی

اگر یک بسته سایه زن برای Minecraft پیدا کرده اید، باید بدانید که در نصب آن مشکلات زیادی وجود دارد. با وجود محبوبیت در حال محو شدن این بازی، هنوز هم طرفداران وفادار آن باقی مانده اند. همه گرافیک را دوست ندارند، به خصوص در سال 2017. برخی معتقدند که به لطف سایه بان ها می توانند آن را بهبود بخشند. از لحاظ نظری، این گفته صحیح است. اما در عمل، کمی تغییر خواهید کرد.

اما اگر هنوز به دنبال راه هایی برای Minecraft 1.7 هستید، اول از همه مراقب باشید. فرآیند به خودی خود دشوار نیست. در ضمن همراه با هر فایل دانلودی، دستورالعمل نصب آن نیز وجود دارد. نکته اصلی این است که نسخه های بازی و شیدر را بررسی کنید. در غیر این صورت، بهینه ساز کار نخواهد کرد.

مکان های زیادی در اینترنت وجود دارد که می توانید چنین ابزاری را نصب و دانلود کنید. در مرحله بعد، باید آرشیو را در هر پوشه ای از حالت فشرده خارج کنید. در آنجا فایل "GLSL-Shaders-Mod-1.7-Installer.jar" را خواهید یافت. پس از شروع، مسیر بازی به شما نشان داده می شود، اگر درست باشد، با تمام دستورالعمل های بعدی موافقت کنید.

پس از اینکه باید پوشه "shaderpacks" را به ".minecraft" منتقل کنید. اکنون هنگام راه اندازی لانچر، باید به تنظیمات بروید. در اینجا، اگر نصب به درستی انجام شود، خط "Shaders" ظاهر می شود. از کل لیست می توانید بسته مورد نظر را انتخاب کنید.

اگر برای Minecraft 1.7.10 نیاز به شیدر دارید، کافیست Shaderpack نسخه مورد نظر را پیدا کنید و همین کار را انجام دهید. نسخه های ناپایدار ممکن است در اینترنت یافت شوند. گاهی اوقات باید آنها را تغییر دهید، دوباره نصب کنید و به دنبال مورد مناسب بگردید. بهتر است به بررسی ها نگاه کنید و محبوب ترین ها را انتخاب کنید.

معرفی

دنیای گرافیک های سه بعدی، از جمله بازی ها، پر از اصطلاحات است. اصطلاحاتی که همیشه تنها تعریف درستی ندارند. گاهی اوقات چیزهای مشابه متفاوت نامیده می شوند، و بالعکس، همان افکت را می توان در تنظیمات بازی "HDR"، سپس "Bloom"، سپس "Glow" و سپس "Postprocessing" نامید. اکثر افرادی که از توسعه دهندگان به آنچه در موتور گرافیکی خود تعبیه کرده اند افتخار می کنند، مشخص نیست که منظور واقعاً چه بوده است.

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

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

فهرست اصطلاحات توضیح داده شده در مقاله:

سایه بان (Shader)

سایه بان در معنای وسیع برنامه ای است برای تعیین بصری سطح یک جسم. این می تواند توصیفی از نورپردازی، بافت، پس پردازش و غیره باشد. سایه بان ها از کار کوک (درختان سایه کوک) و پرلین (زبان جریان پیکسلی پرلین) رشد کردند. اکنون معروف ترین شیدرها زبان سایه زنی RenderMan هستند. شیدرهای قابل برنامه ریزی برای اولین بار در رندرمن پیکسار معرفی شدند، چندین نوع سایه زن تعریف شده است. وجود دارد: سایه‌زن‌های منبع نور، سایه‌زن‌های سطح، سایه‌زن‌های جابه‌جایی، سایه‌زن‌های حجم، سایه‌زنان تصویر. اما آنها قبلاً برای شتاب سخت افزاری طراحی شده بودند: سیستم PixelFlow (Olano و Lastra)، زبان Quake Shader (که توسط id Software در موتور گرافیکی بازی Quake III استفاده می شود، که رندر چند گذر را توصیف می کند) و غیره. Peercy و همکاران تکنیکی برای اجرای برنامه‌ها با حلقه‌ها و شرایط در معماری‌های سخت‌افزار سنتی با استفاده از چند پاس رندر. سایه‌زن‌های RenderMan به چندین تقسیم شدند. فقط پاس هایی که در فریم بافر ترکیب شده اند. بعداً زبان‌هایی ظاهر شدند که سخت‌افزار را در DirectX و OpenGL شتاب می‌دهیم. به این ترتیب سایه بان ها برای برنامه های گرافیکی بلادرنگ تطبیق داده شدند.

تراشه های ویدیویی اولیه قابل برنامه ریزی نبودند و فقط اقدامات از پیش برنامه ریزی شده (کارکرد ثابت) را انجام می دادند، به عنوان مثال، الگوریتم نورپردازی به شدت در سخت افزار ثابت بود و هیچ چیز قابل تغییر نبود. سپس، شرکت‌های تراشه‌های ویدئویی به تدریج عناصر برنامه‌پذیری را به تراشه‌های خود وارد کردند، در ابتدا قابلیت‌های بسیار ضعیفی داشت (NV10، معروف به NVIDIA GeForce 256، قبلاً قادر به اجرای برخی برنامه‌های ابتدایی بود)، که در Microsoft DirectX API پشتیبانی نرم‌افزاری دریافت نمی‌کرد. اما با گذشت زمان، امکانات به طور مداوم در حال گسترش است. گام بعدی برای NV20 (GeForce 3) و NV2A (تراشه ویدیویی مورد استفاده در کنسول بازی مایکروسافت ایکس باکس) بود که به اولین تراشه‌های با پشتیبانی سخت‌افزاری از DirectX API shader تبدیل شدند. نسخه Shader Model 1.0/1.1 که در DirectX 8 ظاهر شد، بسیار محدود بود، هر سایه زن (مخصوصاً پیکسل ها) می توانست طول نسبتاً کوچکی داشته باشد و مجموعه بسیار محدودی از دستورات را ترکیب کند. بعدها، Shader Model 1 (به اختصار SM1) با Pixel Shaders نسخه 1.4 (ATI R200) ​​بهبود یافت که انعطاف پذیری بیشتری را ارائه می داد اما همچنین بسیار محدود بود. شیدرهای آن زمان به زبان به اصطلاح اسمبلی شیدر نوشته می شدند که نزدیک به اسمبلر برای پردازنده های جهانی است. سطح پایین آن درک کد و برنامه نویسی را دشوار می کند، به خصوص زمانی که کد برنامه بزرگ باشد، زیرا از ظرافت و ساختار زبان های برنامه نویسی مدرن دور است.

Shader Model 2.0 (SM2)، که در DirectX 9 ظاهر شد (که توسط تراشه ویدیویی ATI R300 پشتیبانی می‌شد، که اولین پردازنده گرافیکی بود که از مدل Shader نسخه 2.0 پشتیبانی می‌کرد)، قابلیت‌های سایه‌زن‌های بلادرنگ را تا حد زیادی گسترش داد و طولانی‌تر و بیشتر را ارائه کرد. سایه بان های پیچیده و مجموعه ای از دستورات به طور قابل توجهی گسترش یافته است. امکان محاسبات ممیز شناور در سایه زن های پیکسل اضافه شد که یک پیشرفت بزرگ نیز بود. DirectX 9 در قالب قابلیت های SM2 یک زبان سایه زن سطح بالا (HLSL) را نیز معرفی کرد که شباهت زیادی به زبان C دارد. و یک کامپایلر کارآمد که برنامه های HLSL را به کدهای سطح پایین "قابل درک" توسط سخت افزار ترجمه می کند. علاوه بر این، چندین پروفایل در دسترس هستند که برای معماری های سخت افزاری مختلف طراحی شده اند. اکنون، یک توسعه دهنده می تواند یک کد سایه زن HLSL بنویسد و آن را با استفاده از DirectX در یک برنامه بهینه برای تراشه ویدئویی نصب شده توسط کاربر کامپایل کند. پس از آن، تراشه‌های NVIDIA، NV30 و NV40 به بازار آمدند که قابلیت‌های سایه‌زن‌های سخت‌افزاری را یک گام دیگر بهبود بخشیدند، سایه‌زن‌های طولانی‌تر، امکان انتقال پویا در سایه‌زن‌های راس و پیکسل، امکان واکشی بافت‌ها از سایه‌زن‌های راس، و غیره از آن زمان تاکنون هیچ تغییر کیفی صورت نگرفته است، انتظار می رود تا پایان سال 2006 در DirectX 10 ...

در مجموع، شیدرها امکانات جدید زیادی را به خط لوله گرافیکی اضافه کرده اند تا رئوس را تبدیل و نورپردازی کنند و پیکسل ها را به روشی که توسعه دهندگان هر برنامه خاص می خواهند شخصی سازی کنند. با این حال، هنوز قابلیت‌های شیدرهای سخت‌افزار به طور کامل در برنامه‌ها آشکار نشده است و با افزایش قابلیت‌های آن‌ها در هر نسل جدید سخت‌افزار، به زودی شاهد سطح همان شیدرهای RenderMan خواهیم بود که زمانی برای شتاب‌دهنده‌های ویدیوی بازی دست نیافتنی به نظر می‌رسید. . تا کنون، تنها دو نوع سایه‌زن در مدل‌های شیدر بلادرنگ که در حال حاضر توسط شتاب‌دهنده‌های ویدئویی سخت‌افزار پشتیبانی می‌شوند، تعریف شده‌اند: و (در تعریف DirectX 9 API). در آینده، DirectX 10 قول اضافه کردن .

سایه بان راس (راس سایه زن)

سایه زن ها برنامه هایی هستند که توسط تراشه های ویدیویی اجرا می شوند که عملیات ریاضی را با راس انجام می دهند (راس، اشیاء سه بعدی را در بازی ها می سازند) به عبارت دیگر توانایی اجرای الگوریتم های قابل برنامه ریزی برای تغییر پارامترهای راس و نورپردازی آنها را فراهم می کنند (T&L - Transform & نورپردازی). هر رأس با چندین متغیر تعریف می شود، به عنوان مثال، موقعیت یک راس در فضای سه بعدی با مختصات: x، y و z تعریف می شود. راس ها را می توان با ویژگی های رنگ، مختصات بافت و غیره نیز توصیف کرد. سایه زن های راس، بسته به الگوریتم ها، این داده ها را در طول کار خود تغییر می دهند، مثلاً با محاسبه و نوشتن مختصات و/یا رنگ جدید. به این معنا که ورودی سایه زن رأس، داده های مربوط به یک راس از هندسه است که در حال حاضر در حال پردازش است. معمولاً این مختصات در فضا، معمولی، اجزای رنگ و مختصات بافت هستند. داده های حاصل از برنامه اجرا شده به عنوان ورودی قسمت بعدی خط لوله عمل می کند، شطرنجگر یک درون یابی خطی از داده های ورودی برای سطح مثلث ایجاد می کند و برای هر پیکسل سایه زن پیکسل مربوطه را اجرا می کند. یک مثال بسیار ساده و خشن (امیدوارم گویا): سایه‌زن راس به شما اجازه می‌دهد یک شی کره سه‌بعدی بگیرید و از سایه‌زن رأس برای تبدیل آن به مکعب سبز استفاده کنید :).

قبل از ظهور تراشه ویدئویی NV20، توسعه‌دهندگان دو راه داشتند: یا از برنامه‌ها و الگوریتم‌های خود استفاده می‌کردند که پارامترهای رأس را تغییر می‌داد، اما سپس تمام محاسبات توسط CPU (نرم‌افزار T&L) انجام می‌شد، یا به الگوریتم‌های ثابت در ویدئو تکیه می‌کردند. تراشه هایی با پشتیبانی از تبدیل سخت افزار و روشنایی (سخت افزار T&L). اولین مدل سایه زن DirectX به معنای یک گام بزرگ به جلو از توابع ثابت برای تبدیل و نورپردازی راس به الگوریتم های کاملاً قابل برنامه ریزی بود. برای مثال امکان اجرای الگوریتم پوسته برداری به طور کامل بر روی تراشه های ویدئویی وجود داشت و قبل از آن تنها امکان اجرای آنها بر روی پردازنده های مرکزی جهانی بود. اکنون با بهبود قابل توجهی از قابلیت‌ها از زمان تراشه NVIDIA ذکر شده، می‌توانید با استفاده از سایه‌زنان راس کارهای زیادی را با راس‌ها انجام دهید (به جز ایجاد آنها، شاید).

نمونه هایی از نحوه و مکان استفاده از سایه زن های راس:

سایه زن پیکسل

سایه‌زن‌های پیکسل برنامه‌هایی هستند که توسط تراشه ویدیویی در طول شطرنجی‌سازی برای هر پیکسل از تصویر اجرا می‌شوند، آنها نمونه‌برداری بافت و/یا عملیات ریاضی را روی مقدار رنگ و عمق (Z-buffer) پیکسل‌ها انجام می‌دهند. تمام دستورالعمل های سایه زن پیکسل پس از اتمام عملیات تبدیل هندسه و روشنایی پیکسل به پیکسل اجرا می شوند. سایه زن پیکسل، در نتیجه کار خود، مقدار رنگ پیکسل نهایی و مقدار Z را برای مرحله بعدی خط لوله گرافیکی، یعنی ترکیب، تولید می کند. ساده‌ترین مثالی از سایه‌زن پیکسلی که می‌توان ارائه کرد، چند بافتی پیش پا افتاده است، که فقط دو بافت (مثلاً Diffuse و Lightmap) را با هم مخلوط کرده و نتیجه محاسبه را روی یک پیکسل اعمال می‌کند.

قبل از ظهور تراشه‌های ویدیویی با پشتیبانی سخت‌افزاری از سایه‌زن‌های پیکسل، توسعه‌دهندگان تنها قابلیت‌های معمول چند بافتی و ترکیب آلفا را داشتند که به‌طور قابل‌توجهی امکانات بسیاری از جلوه‌های بصری را محدود می‌کرد و اجازه نمی‌داد کارهای زیادی را که اکنون در دسترس است انجام دهند. و اگر می شد کار دیگری را به صورت برنامه ریزی شده با هندسه انجام داد، پس با پیکسل ها - نه. نسخه های اولیه DirectX (تا و از جمله 7.0) همیشه تمام محاسبات را در هر رأس انجام می دادند و عملکرد نورپردازی در هر پیکسل بسیار محدود را ارائه می دادند (به یاد داشته باشید EMBM - محیط bump mapping و DOT3) در نسخه های اخیر. سایه زن های پیکسل با استفاده از موادی که توسط توسعه دهندگان برنامه ریزی شده بودند، هر سطحی را پیکسل به پیکسل روشن می کردند. سایه‌زن‌های پیکسلی نسخه 1.1 که در NV20 ظاهر شدند (به معنای DirectX) نه تنها می‌توانستند چند بافت را انجام دهند، بلکه می‌توانستند خیلی بیشتر نیز انجام دهند، اگرچه اکثر بازی‌هایی که از SM1 استفاده می‌کنند به سادگی از چند بافت سنتی در بیشتر سطوح استفاده می‌کنند، و سایه‌زن‌های پیکسلی پیچیده‌تری را تنها در بخشی از آن انجام می‌دهند. سطوح، برای ایجاد انواع جلوه های ویژه (همه می دانند که هنوز هم آب رایج ترین نمونه استفاده از سایه زن های پیکسل در بازی ها است). اکنون، پس از ظهور SM3 و تراشه‌های ویدئویی که از آن‌ها پشتیبانی می‌کنند، امکانات سایه‌زن‌های پیکسل به حدی افزایش یافته است که حتی می‌توان با کمک آن‌ها ردیابی پرتوها را انجام داد، البته در حال حاضر با محدودیت‌هایی.

نمونه هایی از استفاده از سایه زن های پیکسل:

بافت های رویه ای (بافت های رویه ای)

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

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

متأسفانه، بافت‌های رویه‌ای هنوز به درستی در بازی‌ها مورد استفاده قرار نگرفته‌اند، در برنامه‌های کاربردی واقعی هنوز هم بارگذاری یک بافت معمولی آسان‌تر است، حجم حافظه ویدیویی با سرعت زیاد در حال افزایش است، مدرن‌ترین شتاب‌دهنده‌ها در حال حاضر ۵۱۲ مگابایت حافظه ویدیویی اختصاصی دارند. که شما به بیش از - برای اشغال نیاز دارید. علاوه بر این، آنها هنوز هم اغلب برعکس عمل می کنند - برای سرعت بخشیدن به ریاضیات در سایه زن های پیکسل، از جداول جستجو (LUTs) استفاده می شود - بافت های ویژه حاوی مقادیر از پیش محاسبه شده که در نتیجه محاسبات به دست می آیند. برای اینکه چندین دستور ریاضی را برای هر پیکسل شمارش نکنند، آنها به سادگی مقادیر از پیش محاسبه شده را از بافت می خوانند. اما هر چه دورتر، تاکید بیشتری باید دقیقاً روی محاسبات ریاضی معطوف شود، همان تراشه‌های ویدئویی ATI نسل جدید را در نظر بگیرید: RV530 و R580 که به ترتیب دارای پردازنده‌های 12 و 48 پیکسلی برای هر 4 و 16 واحد بافت هستند. به خصوص در مورد بافت های سه بعدی، زیرا اگر بافت های دو بعدی را بتوان بدون هیچ مشکلی در حافظه محلی شتاب دهنده قرار داد، بافت های سه بعدی به حافظه بسیار بیشتری نیاز دارند.

نمونه هایی از بافت رویه ای:

Bump Mapping/Specular Bump Mapping

Bumpmapping تکنیکی برای شبیه‌سازی برجستگی‌ها (یا ریزرلیف، در صورت تمایل) روی یک سطح صاف بدون تلاش محاسباتی زیاد و تغییرات هندسی است. برای هر پیکسل از سطح، محاسبه روشنایی بر اساس مقادیر موجود در یک نقشه ارتفاع خاص به نام bumpmap انجام می شود. این معمولاً یک بافت سیاه و سفید 8 بیتی است و مقادیر رنگ بافت مانند بافت های معمولی ترسیم نمی شود، اما برای توصیف ناهمواری سطح استفاده می شود. رنگ هر تکسل ارتفاع نقطه مربوطه را در زمین تعیین می کند، مقادیر بزرگتر به معنی ارتفاع بیشتر از سطح اصلی و مقادیر کوچکتر به ترتیب کمتر است. یا برعکس.

درجه روشنایی یک نقطه به زاویه تابش پرتوهای نور بستگی دارد. هر چه زاویه بین پرتو معمولی و نور کمتر باشد، روشنایی نقطه سطح بیشتر است. یعنی اگر یک سطح صاف بگیریم، نرمال در هر نقطه یکسان و روشنایی نیز یکسان خواهد بود. و اگر سطح ناهموار باشد (در واقع تقریباً همه سطوح در واقعیت)، در آن صورت نرمال در هر نقطه متفاوت خواهد بود. و روشنایی متفاوت است، در یک نقطه بیشتر خواهد بود، در نقطه دیگر - کمتر. از این رو اصل bumpmapping - برای شبیه سازی بی نظمی برای نقاط مختلف چند ضلعی، نرمال های سطح تنظیم می شود که هنگام محاسبه روشنایی هر پیکسل در نظر گرفته می شود. در نتیجه، تصویر طبیعی تری از سطح به دست می آید، برجستگی به سطح جزئیات بیشتری مانند برجستگی روی آجر، منافذ روی پوست و غیره می دهد، بدون اینکه پیچیدگی هندسی مدل را افزایش دهد، زیرا محاسبات انجام می شود. در سطح پیکسل علاوه بر این، هنگامی که موقعیت منبع نور تغییر می کند، روشنایی این بی نظمی ها به درستی تغییر می کند.

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

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

اجزای روشنایی:

و حالا بیایید bumpmapping را به این اضافه کنیم:

جزء روشنایی یکنواخت (محیط) - تقریب، نور "اولیه" برای هر نقطه از صحنه، که در آن همه نقاط به طور مساوی روشن می شوند و روشنایی به عوامل دیگر بستگی ندارد.
جزء پراکنده روشنایی به موقعیت منبع نور و نرمال سطح بستگی دارد. این جزء نور برای هر رأس جسم متفاوت است که به آنها حجم می دهد. نور دیگر سطح را با همان سایه پر نمی کند.
جزء خیره کننده (اختصاصی) روشنایی در تابش خیره کننده انعکاس پرتوهای نور از سطح ظاهر می شود. برای محاسبه آن، علاوه بر بردار موقعیت منبع نور و بردار معمولی، از دو بردار دیگر استفاده می شود: بردار جهت نگاه و بردار بازتاب. مدل نورپردازی خاص اولین بار توسط Phong (Phong Bui-Tong) ارائه شد. این هایلایت ها به میزان زیادی واقع گرایی تصویر را افزایش می دهند، زیرا سطوح واقعی کمیاب نور را منعکس نمی کنند، بنابراین مولفه اسپکولار بسیار مهم است. به خصوص در حرکت، زیرا تابش خیره کننده بلافاصله تغییر در موقعیت دوربین یا خود جسم را نشان می دهد. در آینده، محققان با در نظر گرفتن توزیع انرژی نور، جذب آن توسط مواد و پراکندگی به شکل یک جزء پراکنده، روش‌های دیگری را برای محاسبه این جزء، پیچیده‌تر (بلین، کوک-تورنس، وارد) ارائه کردند.

بنابراین، Specular Bump Mapping به این صورت به دست می آید:

و بیایید همین را در مثال بازی Call of Duty 2 ببینیم:


قطعه اول عکس رندر بدون bumpmapping () است، دومی (بالا سمت راست) bumpmapping بدون کامپوننت اسپیکولار، قطعه سوم با یک کامپوننت اسپیکولار در اندازه معمولی است که در بازی استفاده می شود و آخرین مورد، در سمت راست پایین، با حداکثر مقدار ممکن مولفه specular است.

در مورد اولین برنامه سخت افزاری، برخی از انواع نقشه برداری (Emboss Bump Mapping) در زمان کارت های ویدیویی مبتنی بر تراشه های NVIDIA Riva TNT مورد استفاده قرار گرفتند، اما تکنیک های آن زمان بسیار ابتدایی بودند و به طور گسترده مورد استفاده قرار نمی گرفتند. نوع شناخته شده بعدی، Environment Mapped Bump Mapping (EMBM) بود، اما در آن زمان فقط کارت‌های ویدئویی Matrox از آن در DirectX پشتیبانی می‌کردند و باز هم استفاده از آن بسیار محدود بود. سپس Dot3 Bump Mapping آمد و تراشه‌های ویدئویی آن زمان (GeForce 256 و GeForce 2) برای اجرای کامل چنین الگوریتم ریاضی به سه پاس نیاز داشتند، زیرا آنها به دو بافت استفاده می‌شوند به طور همزمان. با شروع NV20 (GeForce3)، انجام همین کار در یک پاس با استفاده از سایه زن های پیکسل ممکن شد. علاوه بر این. آنها شروع به استفاده از تکنیک های مؤثرتری کردند، مانند.

نمونه هایی از استفاده از bumpmapping در بازی ها:


نقشه جابجایی روشی برای افزودن جزئیات به اشیاء سه بعدی است. بر خلاف bumpmapping و سایر روش‌های پیکسل به پیکسل، زمانی که نقشه‌های ارتفاع به درستی تنها نور یک نقطه را مدل‌سازی می‌کنند، اما موقعیت آن در فضا تغییر نمی‌کند، که تنها توهم افزایش پیچیدگی سطح را ایجاد می‌کند، نقشه‌های جابه‌جایی به شما امکان می‌دهند پیچیده واقعی را بدست آورید. اشیاء سه بعدی از راس ها و چند ضلعی ها، بدون محدودیت، ذاتی روش های پیکسل به پیکسل. این روش موقعیت رئوس مثلث ها را تغییر می دهد و آنها را بر اساس مقادیر موجود در نقشه های جابجایی در امتداد نرمال جابجا می کند. نقشه جابجایی معمولاً یک بافت سیاه و سفید است و از مقادیر موجود در آن برای تعیین ارتفاع هر نقطه از سطح جسم استفاده می شود (مقادیر را می توان به صورت اعداد 8 بیتی یا 16 بیتی ذخیره کرد). شبیه به bumpmap غالباً از نقشه های جابجایی (که در این صورت نقشه ارتفاع نیز نامیده می شود) برای ایجاد سطح زمین با تپه ها و دره ها استفاده می شود. از آنجایی که زمین با یک نقشه جابجایی دو بعدی توصیف می شود، تغییر شکل آن در صورت لزوم نسبتا آسان است، زیرا فقط نیاز به اصلاح نقشه جابجایی و رندر کردن سطح از آن در قاب بعدی دارد.

به صورت بصری، ایجاد یک منظره با استفاده از همپوشانی نقشه های جابجایی در تصویر نشان داده شده است. موارد اولیه 4 قله و 2 چند ضلعی بودند، در پایان یک قطعه کامل از منظره به دست آوردیم.

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


تعداد مثلث های ایجاد شده توسط تسلاسیون باید به اندازه ای باشد که تمام جزئیات ارائه شده توسط نقشه جابجایی را به تصویر بکشد. گاهی اوقات مثلث های اضافی به طور خودکار با استفاده از N-patch یا روش های دیگر ایجاد می شوند. نقشه‌های جابه‌جایی بهتر است همراه با bumpmapping برای ایجاد جزئیات دقیق در جایی که نور پیکسل به پیکسل مناسب کافی است استفاده شود.

نقشه جابجایی اولین بار در DirectX 9.0 پشتیبانی شد. این اولین نسخه از این API بود که از تکنیک Displacement Mapping پشتیبانی می کرد. DX9 از دو نوع پوشش نقشه جابجایی، فیلتر شده و پیش نمونه برداری شده پشتیبانی می کند. روش اول توسط تراشه ویدئویی MATROX Parhelia که قبلاً فراموش شده بود و روش دوم توسط ATI RADEON 9700 پشتیبانی می شد. روش فیلتر شده از این جهت متفاوت است که امکان استفاده از سطوح mip را برای نقشه های جابجایی و اعمال فیلتر سه خطی برای آنها فراهم می کند. در این روش، سطح mip نقشه جابجایی برای هر راس بر اساس فاصله راس تا دوربین انتخاب می شود، یعنی سطح جزئیات به طور خودکار انتخاب می شود. به این ترتیب، زمانی که مثلث ها تقریباً به یک اندازه باشند، یک تقسیم تقریباً یکنواخت صحنه حاصل می شود.

همپوشانی نقشه‌های جابه‌جایی اساساً می‌تواند به عنوان روشی برای فشرده‌سازی هندسه در نظر گرفته شود، استفاده از نقشه‌های جابه‌جایی میزان حافظه مورد نیاز برای مقدار معینی از جزئیات را در یک مدل سه‌بعدی کاهش می‌دهد. داده های هندسی دست و پا گیر با بافت های جابجایی دو بعدی ساده، معمولاً 8 بیتی یا 16 بیتی جایگزین می شوند. این امر باعث کاهش حافظه و پهنای باند مورد نیاز برای تحویل داده های هندسی به تراشه ویدیویی می شود و این محدودیت ها یکی از اصلی ترین محدودیت ها برای سیستم های امروزی است. یا، برای پهنای باند و نیازهای حافظه برابر، روی نقشه‌های جابجایی، مدل‌های سه‌بعدی بسیار پیچیده‌تر هندسی را امکان‌پذیر می‌کند. استفاده از مدل هایی با پیچیدگی بسیار کمتر، زمانی که به جای ده ها یا صدها هزار مثلث از واحدهای هزار استفاده می شود، سرعت انیمیشن آنها را نیز ممکن می سازد. یا با استفاده از الگوریتم ها و تکنیک های پیچیده تر، مانند شبیه سازی پارچه، آن را بهبود بخشید.

مزیت دیگر این است که استفاده از نقشه های جابجایی، مش های پیچیده سه بعدی چند ضلعی را به بافت های دو بعدی متعددی تبدیل می کند که دستکاری آنها آسان تر است. به عنوان مثال، برای یک سازمان، می توانید از mipmapping معمولی برای همپوشانی نقشه های جابجایی استفاده کنید. همچنین، به جای الگوریتم های نسبتاً پیچیده برای فشرده سازی مش های سه بعدی، می توانید از روش های معمول فشرده سازی بافت، حتی شبیه به JPEG استفاده کنید. و برای ایجاد رویه ای اشیاء سه بعدی، می توانید از الگوریتم های معمول برای بافت های دو بعدی استفاده کنید.

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

به عنوان مثالی از بازی‌های واقعی، بازی‌ای را ارائه می‌دهم که از واکشی بافت از سایه‌زن رأس استفاده می‌کند، ویژگی که در تراشه‌های ویدئویی NVIDIA NV40 و سایه‌زن مدل 3.0 ظاهر شد. تکسچر راس را می توان برای روشی ساده برای پوشاندن نقشه های جابجایی، که به طور کامل توسط تراشه ویدیویی انجام می شود، بدون تسلاسیون (تقسیم به مثلث های بیشتر) استفاده کرد. استفاده از چنین الگوریتمی محدود است، آنها فقط در صورتی معنا پیدا می کنند که نقشه ها پویا باشند، یعنی در فرآیند تغییر خواهند کرد. به عنوان مثال، این یک رندر از سطوح بزرگ آب است، کاری که جنگنده‌های اقیانوس آرام انجام دادند:


Normalmapping یک نسخه بهبود یافته از تکنیک bumpmapping است که قبلا توضیح داده شد، یک نسخه توسعه یافته از آن. Bumpmapping توسط Blinn در سال 1978 توسعه یافت، نرمال های سطح این روش نقشه برداری زمین بر اساس اطلاعات نقشه های دست انداز اصلاح شده است. در حالی که bumpmapping فقط نرمال موجود را برای نقاط سطحی تغییر می‌دهد، نرمال نگاشت با واکشی مقادیر آن‌ها از یک نقشه نرمال تهیه شده به‌طور کامل جایگزین نرمال‌ها می‌شود. این نقشه‌ها معمولاً بافت‌هایی با مقادیر نرمال از پیش محاسبه‌شده ذخیره‌شده در آن‌ها هستند که به‌عنوان اجزای رنگی RGB نشان داده می‌شوند (البته، فرمت‌های خاصی برای نقشه‌های معمولی، از جمله نقشه‌های فشرده‌شده وجود دارد)، برخلاف نقشه‌های ارتفاع سیاه و سفید ۸ بیتی در bumpmapping

به طور کلی، مانند bumpmapping، این نیز یک روش «ارزان» برای افزودن جزئیات به مدل‌هایی با پیچیدگی هندسی نسبتا کم است، بدون استفاده از هندسه واقعی‌تر، فقط پیشرفته‌تر. یکی از جالب‌ترین کاربردهای این تکنیک افزایش قابل توجه جزئیات مدل‌های کم پلی با استفاده از نقشه‌های معمولی به‌دست‌آمده از پردازش همان مدل با پیچیدگی هندسی بالا است. نقشه های معمولی شامل توصیف دقیق تری از سطح نسبت به bumpmapping هستند و به شما امکان می دهند اشکال پیچیده تری را نشان دهید. ایده هایی برای به دست آوردن اطلاعات از اشیاء با جزئیات بالا در اواسط دهه 90 قرن گذشته مطرح شد، اما پس از آن استفاده از آن برای . بعدها، در سال 1998، ایده هایی برای انتقال جزئیات نقشه معمولی از مدل های با پلی بالا به مدل های کم پلی ارائه شد.

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

نقشه های معمولی معمولاً از دو نسخه از یک مدل، یک low poly و یک high poly ایجاد می شوند. مدل low poly شامل حداقل هندسه، اشکال اصلی جسم است و مدل high poly شامل همه چیزهایی است که برای حداکثر جزئیات لازم است. سپس با کمک ابزارهای خاص، آنها را با یکدیگر مقایسه می کنند، تفاوت محاسبه شده و در بافتی به نام نقشه معمولی ذخیره می شود. هنگام ایجاد آن، می توانید علاوه بر این، از یک نقشه برآمدگی برای جزئیات بسیار کوچک استفاده کنید که حتی در مدل های پلی بالا نیز قابل مدل سازی نیستند (منافذ پوست، سایر فرورفتگی های کوچک).

نقشه‌های معمولی در ابتدا به‌عنوان بافت‌های RGB معمولی نمایش داده می‌شدند، جایی که اجزای رنگی R، G و B (از 0 تا 1) به صورت مختصات X، Y و Z تفسیر می‌شوند. هر تکسل در یک نقشه معمولی به عنوان یک نقطه سطحی عادی نشان داده می‌شود. نقشه های معمولی می توانند دو نوع باشند: با مختصات در فضای مدل (سیستم مختصات عمومی) یا فضای مماس (اصطلاح در روسی "فضای مماس" است، سیستم مختصات محلی یک مثلث). گزینه دوم بیشتر مورد استفاده قرار می گیرد. وقتی نقشه‌های معمولی در فضای مدل ارائه می‌شوند، باید سه جزء داشته باشند، زیرا همه جهات را می‌توان نشان داد، و زمانی که در فضای مماس هستند، می‌توانید با دو مؤلفه کنار بیایید و سومی را در سایه‌زن پیکسل دریافت کنید.

برنامه‌های بلادرنگ مدرن هنوز از نظر کیفیت تصویر بسیار عقب‌تر از انیمیشن‌های از پیش رندر شده هستند، این موضوع در درجه اول به کیفیت نور و پیچیدگی هندسی صحنه‌ها مربوط می‌شود. تعداد راس ها و مثلث های محاسبه شده در زمان واقعی محدود است. بنابراین، روش های کاهش مقدار هندسه بسیار مهم است. قبل از نقشه برداری معمولی، چندین روش از این دست توسعه داده شد، اما مدل های کم پلی، حتی با نقشه برداری برآمدگی، به طور قابل توجهی بدتر از مدل های پیچیده تر ظاهر می شوند. اگرچه نگاشت معمولی دارای چند معایب است (بدیهی ترین آنها این است که از آنجایی که مدل کم پلی است، این به راحتی از مرزهای زاویه ای آن قابل مشاهده است)، کیفیت رندر نهایی به طور قابل توجهی بهبود می یابد و پیچیدگی هندسی مدل ها پایین می ماند. اخیرا افزایش محبوبیت این تکنیک و استفاده از آن در تمامی موتورهای بازی سازی محبوب به وضوح قابل مشاهده است. دلیل این امر ترکیبی از کیفیت عالی حاصل و کاهش همزمان الزامات پیچیدگی هندسی مدل ها است. تکنیک معمولی نقشه برداری تقریباً در همه جا استفاده می شود، همه بازی های جدید تا حد امکان از آن استفاده می کنند. در اینجا فقط لیست کوتاهی از بازی‌های معروف رایانه‌های شخصی با استفاده از نقشه‌برداری معمولی آورده شده است: Far Cry، Doom 3، Half-Life 2، Call of Duty 2، FEAR، Quake 4. همه آن‌ها بسیار بهتر از بازی‌های گذشته به نظر می‌رسند. به استفاده از نقشه های نرمال.

استفاده از این تکنیک تنها یک پیامد منفی دارد - افزایش حجم بافت ها. از این گذشته، نقشه معمولی تا حد زیادی بر ظاهر شی تأثیر می‌گذارد، و باید از وضوح کافی برخوردار باشد، بنابراین الزامات حافظه ویدیویی و پهنای باند آن دو برابر می‌شود (در مورد نقشه‌های معمولی فشرده نشده). اما در حال حاضر کارت های ویدئویی با 512 مگابایت حافظه محلی در حال تولید هستند، پهنای باند آن به طور مداوم در حال افزایش است، روش های فشرده سازی به طور خاص برای نقشه های معمولی توسعه داده شده است، بنابراین این محدودیت های کوچک در واقع خیلی مهم نیستند. تأثیری که نگاشت معمولی می دهد بسیار بیشتر است و امکان استفاده از مدل های نسبتاً کم پلی را می دهد، نیازهای حافظه برای ذخیره سازی داده های هندسی را کاهش می دهد، عملکرد را بهبود می بخشد و نتیجه بصری بسیار مناسبی را ارائه می دهد.

نقشه برداری اختلاف منظر / نقشه برداری افست

Normalmapping که در سال 1984 توسعه یافت، به دنبال آن Relief Texture Mapping توسط Olivera و Bishop در سال 1999 معرفی شد. این روشی برای نگاشت بافت بر اساس اطلاعات عمق است. این روش در بازی ها کاربرد پیدا نکرد، اما ایده آن به ادامه کار بر روی نقشه برداری اختلاف منظر و بهبود آن کمک کرد. کانکو در سال 2001 نگاشت اختلاف منظر را معرفی کرد که اولین روش کارآمد برای نمایش اثر اختلاف منظر در هر پیکسل بود. در سال 2004، ولز استفاده از نگاشت اختلاف منظر را بر روی تراشه های ویدئویی قابل برنامه ریزی نشان داد.

این روش احتمالاً متفاوت ترین نام ها را دارد. من مواردی را که با آنها ملاقات کردم فهرست می کنم: نقشه برداری اختلاف منظر، نقشه برداری افست، نگاشت جابجایی مجازی، نگاشت جابه جایی در هر پیکسل. در مقاله برای اختصار از نام کوچک استفاده شده است.
Parallaxmapping جایگزین دیگری برای تکنیک‌های bumpmapping و normalmapping است که جزئیات بیشتری از سطح را به شما می‌دهد، نمایشی طبیعی‌تر از سطوح سه‌بعدی، همچنین بدون جریمه عملکرد بیش از حد. این تکنیک شبیه نگاشت جابجایی و نگاشت معمولی در همان زمان است، چیزی در میان است. این روش همچنین برای نمایش جزئیات سطح بیشتر از مدل هندسی اصلی طراحی شده است. این شبیه به نقشه برداری معمولی است، اما تفاوت این است که این روش با تغییر مختصات بافت، نگاشت بافت را مخدوش می کند به طوری که وقتی از زوایای مختلف به سطح نگاه می کنید، محدب به نظر می رسد، اگرچه در واقعیت سطح صاف است و تغییر نمی کند. . به عبارت دیگر نقشه برداری اختلاف منظر تکنیکی است برای تقریب اثر جابجایی نقاط سطح بسته به تغییر در دیدگاه.

این تکنیک مختصات بافت را جابه‌جا می‌کند (به همین دلیل است که این تکنیک گاهی اوقات نگاشت افست نامیده می‌شود) تا سطح حجیم‌تر به نظر برسد. ایده روش برگرداندن مختصات بافت نقطه ای است که بردار دید سطح را قطع می کند. این به ردیابی پرتو برای ارتفاع نقشه نیاز دارد، اما اگر مقادیر زیادی در حال تغییر («صاف» یا «صاف») نداشته باشد، می‌توانید با یک تقریب از آن عبور کنید. این روش برای سطوحی که ارتفاع آنها به آرامی در حال تغییر است، بدون محاسبه تقاطع ها و مقادیر افست بزرگ مناسب است. چنین الگوریتم ساده ای با نگاشت معمولی تنها در سه دستورالعمل سایه زن متفاوت است: دو دستورالعمل ریاضی و یک واکشی بافت اضافی. پس از محاسبه مختصات بافت جدید، از آن برای خواندن سایر لایه‌های بافت استفاده می‌شود: بافت پایه، نقشه معمولی و غیره. این روش نگاشت اختلاف منظر بر روی تراشه های ویدئویی مدرن تقریباً به اندازه نگاشت بافت معمولی مؤثر است و نتیجه آن نمایش واقعی تر سطح در مقایسه با نقشه برداری معمولی ساده است.

اما استفاده از نگاشت اختلاف منظر معمولی به نقشه های ارتفاعی با اختلاف کمی در مقادیر محدود می شود. برآمدگی های "تند" به اشتباه توسط الگوریتم پردازش می شوند، مصنوعات مختلف ظاهر می شوند، "شناور" بافت ها، و غیره. چندین روش اصلاح شده برای بهبود تکنیک نگاشت اختلاف منظر ایجاد شده است. چندین محقق (Yerex، Donnelly، Tatarchuk، Policarpo) روش های جدیدی را توصیف کرده اند که الگوریتم اولیه را بهبود می بخشد. تقریباً همه ایده‌ها بر اساس ردیابی پرتو در سایه‌زن پیکسلی برای تعیین تقاطع جزئیات سطح با یکدیگر هستند. روش های اصلاح شده چندین نام مختلف دریافت کرده اند: نقشه برداری اختلاف منظر با انسداد، نگاشت اختلاف منظر با توابع فاصله، نقشه انسداد پارالکس. برای اختصار، همه آنها را Parallax Occlusion Mapping می نامیم.

روش‌های نقشه‌برداری انسداد پارالکس همچنین شامل ردیابی پرتو برای تعیین ارتفاع و در نظر گرفتن دید تکل‌ها می‌شود. از این گذشته، وقتی به صورت زاویه ای نسبت به سطح مشاهده می شود، تکل ها یکدیگر را مسدود می کنند، و با توجه به این، می توانید عمق بیشتری به جلوه منظر اضافه کنید. تصویر حاصل واقعی‌تر می‌شود و چنین روش‌های بهبود یافته‌ای را می‌توان برای زمین‌های عمیق‌تر استفاده کرد، برای به تصویر کشیدن دیوارهای آجری و سنگی، سنگ‌فرش و غیره عالی است. به ویژه باید توجه داشت که تفاوت اصلی بین نقشه‌برداری Parallax و نقشه جابجایی در این است که همه محاسبات انجام می‌شود. در هر پیکسل هستند و زیاده‌روی نمی‌کنند. به همین دلیل است که این روش دارای نام هایی مانند Virtual Displacement Mapping و Per-Pixel Displacement Mapping است. به تصویر نگاه کنید، باورش سخت است، اما سنگ‌های پیاده‌روی اینجا فقط یک اثر پیکسل به پیکسل هستند:

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

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

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

پس پردازش

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

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

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

در اینجا چند نمونه واضح از پس پردازش در برنامه های بازی آورده شده است:

محدوده دینامیکی بالا (HDR)

محدوده دینامیکی بالا (HDR)، همانطور که در گرافیک سه بعدی اعمال می شود، در یک محدوده دینامیکی گسترده رندر می شود. ماهیت HDR توصیف شدت و رنگ توسط مقادیر فیزیکی واقعی است. مدل معمول توصیف تصویر RGB است، که در آن همه رنگ‌ها به صورت مجموع رنگ‌های اصلی نمایش داده می‌شوند: قرمز، سبز و آبی، با شدت‌های مختلف به عنوان مقادیر صحیح ممکن از 0 تا 255 برای هر کدام، کدگذاری شده با هشت بیت در هر رنگ. نسبت حداکثر شدت به حداقل موجود برای نمایش توسط یک مدل یا دستگاه خاص، محدوده دینامیکی نامیده می شود. بنابراین، محدوده دینامیکی مدل RGB 256:1 یا 100:1 cd/m2 (دو مرتبه بزرگی) است. این مدل برای توصیف رنگ و شدت معمولاً به عنوان محدوده دینامیکی پایین (LDR) شناخته می شود.

مقادیر LDR ممکن برای همه موارد به وضوح کافی نیست، فرد می‌تواند محدوده بسیار بزرگ‌تری را ببیند، به خصوص در شدت نور کم، و مدل RGB در چنین مواردی (و در شدت‌های بالا نیز) بسیار محدود است. محدوده دینامیکی بینایی انسان از 10 -6 تا 108 cd/m2 است، یعنی 100000000000000:1 (14 مرتبه بزرگی). در عین حال، ما نمی توانیم کل محدوده را ببینیم، اما محدوده قابل مشاهده با چشم در هر زمان معین تقریباً برابر با 10000:1 (چهار مرتبه قدر) است. بینایی به تدریج با مقادیری از قسمت دیگری از محدوده نور سازگار می شود، به کمک اصطلاحاً سازگاری، که به راحتی می توان آن را به عنوان وضعیت خاموش کردن چراغ های اتاق در شب توصیف کرد - در ابتدا چشم ها بسیار می بینند. کم است، اما به مرور زمان با شرایط نوری تغییر یافته سازگار می شوند و چیزهای بیشتری می بینند. هنگام تغییر محیط تاریک به روشنایی، همین اتفاق می افتد.

بنابراین، محدوده دینامیکی مدل توصیف RGB برای نمایش تصاویری که شخص قادر به دیدن آنها در واقعیت است کافی نیست، این مدل مقادیر احتمالی شدت نور را در قسمت‌های بالایی و پایینی محدوده به میزان قابل توجهی کاهش می‌دهد. رایج ترین مثال ارائه شده در مواد HDR تصویری از یک اتاق تاریک با پنجره ای به یک خیابان روشن در یک روز آفتابی است. با مدل RGB، می توانید یک نمایش معمولی از آنچه در خارج از پنجره است یا فقط آنچه در داخل اتاق است را دریافت کنید. مقادیر بیشتر از 100 cd/m 2 معمولاً در LDR بریده می شوند، به همین دلیل است که رندر 3 بعدی به درستی منابع نور روشن را مستقیماً روی دوربین دشوار می کند.

تاکنون، خود دستگاه های نمایش داده را نمی توان به طور جدی بهبود بخشید، اما منطقی است که LDR را در محاسبات رها کنید، می توانید از مقادیر فیزیکی واقعی شدت و رنگ (یا به نسبت خطی) استفاده کنید و حداکثر آن را نمایش دهید. قوطی روی مانیتور ماهیت نمایش HDR این است که از مقادیر شدت و رنگ در مقادیر فیزیکی واقعی یا متناسب خطی استفاده کنید و از اعداد صحیح استفاده نکنید، بلکه از اعداد ممیز شناور با دقت بالا (مثلاً 16 یا 32 بیت) استفاده کنید. با این کار محدودیت های مدل RGB حذف می شود و دامنه دینامیکی تصویر به میزان قابل توجهی افزایش می یابد. اما پس از آن هر تصویر HDR را می توان بر روی هر رسانه نمایشی (همان مانیتور RGB) با بالاترین کیفیت ممکن برای آن با استفاده از الگوریتم های خاص نمایش داد.

رندر HDR به ما امکان می دهد پس از رندر کردن تصویر، نوردهی را تغییر دهیم. این امکان را به شما می دهد تا اثر انطباق بینایی انسان را شبیه سازی کنید (حرکت از فضاهای باز روشن به اتاق های تاریک و بالعکس)، به شما امکان می دهد نورپردازی صحیح فیزیکی را انجام دهید و همچنین یک راه حل واحد برای اعمال اثرات پس از پردازش است (نور، شعله ور شدن، شکوفایی، تاری حرکت). الگوریتم های پردازش تصویر، تصحیح رنگ، تصحیح گاما، تاری حرکت، بلوم و سایر روش های پس پردازش در نمایش HDR بهتر انجام می شوند.

برنامه های رندر سه بعدی بلادرنگ (عمدتاً بازی ها) چندی پیش شروع به استفاده از رندر HDR کرده اند، زیرا به محاسبات و پشتیبانی از هدف در قالب های ممیز شناور نیاز دارد که برای اولین بار فقط بر روی تراشه های ویدیویی با پشتیبانی DirectX 9 در دسترس قرار گرفت. مسیر معمول رندر HDR در بازی هایی مانند رندر کردن یک صحنه به یک بافر ممیز شناور، پس پردازش تصویر در محدوده رنگی گسترده (تغییر کنتراست و روشنایی، تعادل رنگ، تابش خیره کننده و جلوه های تاری حرکت، شعله ور شدن لنز و موارد مشابه) ، با استفاده از نگاشت تن برای نمایش تصویر HDR نهایی در دستگاه نمایشگر LDR. گاهی اوقات از نقشه های محیطی در فرمت های HDR برای انعکاس های ایستا بر روی اجسام استفاده می شود، استفاده از HDR در شبیه سازی انکسارها و انعکاس های دینامیکی بسیار جالب است، برای این کار می توان از نقشه های پویا در فرمت های ممیز شناور نیز استفاده کرد. به این کار، می‌توانید نقشه‌های نوری (نقشه‌های سبک)، از پیش محاسبه‌شده و ذخیره‌شده در فرمت HDR را اضافه کنید. بسیاری از موارد بالا، به عنوان مثال، در Half-Life 2: Lost Coast انجام شده است.

رندر HDR برای پس پردازش های پیچیده و با کیفیت بالاتر نسبت به روش های معمولی بسیار مفید است. هنگامی که در مدل نمایش HDR محاسبه شود، همان شکوفایی واقعی تر به نظر می رسد. به عنوان مثال، همانطور که در بازی Far Cry کرایتک انجام شد، از تکنیک‌های استاندارد رندر HDR استفاده می‌کند: فیلترهای بلوم معرفی‌شده توسط Kawase و اپراتور نقشه‌برداری صدا راینهارد.

متأسفانه، در برخی موارد، توسعه دهندگان بازی می توانند تنها یک فیلتر شکوفه را که در محدوده معمول LDR محاسبه می شود، تحت نام HDR پنهان کنند. و در حالی که اکثر کارهایی که در حال حاضر در بازی‌های با رندر HDR انجام می‌شود، شکوفایی با کیفیت بهتر است، مزایای رندر HDR به این یک پس افکت محدود نمی‌شود، بلکه ساده‌ترین کار است.

نمونه های دیگر استفاده از رندر HDR در برنامه های بلادرنگ:


Tone Mapping فرآیند تبدیل محدوده روشنایی HDR به محدوده LDR نمایش داده شده توسط یک دستگاه خروجی مانند مانیتور یا چاپگر است، زیرا خروجی تصاویر HDR به آنها نیازمند تبدیل محدوده دینامیکی و گستره مدل HDR به محدوده مربوطه است. محدوده دینامیکی LDR، معمولاً مدل RGB. از این گذشته، دامنه روشنایی ارائه شده در HDR بسیار گسترده است، چندین مرتبه از محدوده دینامیکی مطلق در یک زمان، در یک صحنه است. و محدوده ای که می توان در دستگاه های خروجی آشنا (مانیتورها، تلویزیون ها) بازتولید کرد، تنها حدود دو مرتبه دامنه دینامیکی قدر است.

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

مشاهده می شود که تنها با استفاده از نگاشت تون غیر خطی می توانید حداکثر جزئیات را در تصویر بدست آورید و اگر HDR را به صورت خطی به LDR بیاورید، بسیاری از چیزهای کوچک به سادگی از بین می روند. هیچ الگوریتم نگاشت تن صحیحی وجود ندارد، چندین عملگر وجود دارد که در موقعیت های مختلف نتایج خوبی ارائه می دهند. در اینجا یک مثال تصویری از دو عملگر مختلف نگاشت تون آورده شده است:

همراه با رندر HDR، اخیراً از نگاشت تن در بازی ها استفاده شده است. تقلید اختیاری از خواص بینایی انسان امکان پذیر شد: از دست دادن وضوح در صحنه های تاریک، سازگاری با شرایط نوری جدید هنگام انتقال از مناطق بسیار روشن به مناطق تاریک و بالعکس، حساسیت به تغییرات کنتراست، رنگ ... اینگونه است. تقلید از توانایی دید برای انطباق در Far Cry به نظر می رسد. اسکرین شات اول تصویری را نشان می دهد که بازیکن زمانی که از یک اتاق تاریک به یک فضای باز با نور روشن تبدیل شده است، می بیند و تصویر دوم همان تصویر را پس از چند ثانیه پس از تطبیق نشان می دهد.

شکوفه

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

در گرافیک بلوم سه بعدی، فیلتر با کمک پس پردازش اضافی ساخته می شود - مخلوط کردن قاب آغشته به فیلتر تاری (کل قاب یا مناطق روشن جداگانه آن، فیلتر معمولاً چندین بار اعمال می شود) و فریم اصلی. یکی از رایج ترین موارد مورد استفاده در بازی ها و سایر برنامه های بلادرنگ، الگوریتم bloom post-filter است:

  • صحنه در فریم بافر رندر می شود، شدت درخشش (درخشش) اشیا در کانال آلفای بافر ثبت می شود.
  • فریم بافر برای پردازش در بافت خاصی کپی می شود.
  • وضوح بافت، به عنوان مثال، ضریب 4 کاهش می یابد.
  • فیلترهای صاف کننده (تار) بر اساس داده های شدت ثبت شده در کانال آلفا چندین بار روی تصویر اعمال می شوند.
  • تصویر حاصل با فریم اصلی در فریم بافر مخلوط می شود و نتیجه روی صفحه نمایش داده می شود.

مانند سایر انواع پس پردازش، Bloom بهتر است هنگام رندر در محدوده دینامیکی بالا (HDR) استفاده شود. نمونه های اضافی از پردازش تصویر شکوفه نهایی با فیلتری از برنامه های سه بعدی بلادرنگ:

تاری حرکت

تاری حرکت در عکاسی و فیلمبرداری به دلیل حرکت اجسام در کادر در طول زمان نوردهی کادر، در حالی که شاتر لنز باز است، رخ می دهد. فریم گرفته شده توسط دوربین (عکس، فیلم) عکس فوری گرفته شده را با مدت زمان صفر نشان نمی دهد. با توجه به محدودیت های تکنولوژیکی، قاب یک بازه زمانی مشخص را نشان می دهد که در این مدت اشیاء درون قاب می توانند مسافت مشخصی را جابجا کنند و اگر این اتفاق بیفتد، تمام موقعیت های جسم متحرک در مدت زمانی که شاتر لنز باز است، خواهد بود. بر روی قاب به عنوان یک تصویر تار در امتداد بردار حرکت ارائه شده است. اگر جسم نسبت به دوربین یا دوربین نسبت به جسم در حال حرکت باشد، این اتفاق می‌افتد، و میزان تاری به ما تصوری از سرعت حرکت جسم می‌دهد.

در انیمیشن سه بعدی، در هر لحظه خاص از زمان (فریم)، ​​اشیاء در مختصات خاصی در فضای سه بعدی قرار می گیرند، مشابه دوربین مجازی با سرعت شاتر بی نهایت بالا. در نتیجه، هیچ تاری مانند آنچه دوربین و چشم انسان در هنگام نگاه کردن به اجسام متحرک سریع تجربه می کنند، وجود ندارد. غیر طبیعی و غیر واقعی به نظر می رسد. یک مثال ساده را در نظر بگیرید: چندین کره حول یک محور خاص می چرخند. در اینجا تصویری از این است که این حرکت با و بدون تار شدن چگونه خواهد بود:

از روی یک تصویر بدون تار شدن، حتی نمی توانید تشخیص دهید که کره ها در حال حرکت هستند یا نه، در حالی که تاری حرکت ایده واضحی از سرعت و جهت حرکت اجسام می دهد. به هر حال، فقدان تاری حرکت نیز دلیلی است که حرکت در بازی ها با سرعت 25 تا 30 فریم بر ثانیه تند به نظر می رسد، اگرچه فیلم ها و ویدیوها با نرخ فریم یکسان عالی به نظر می رسند. برای جبران فقدان تاری حرکت، یا نرخ فریم بالا (60 فریم در ثانیه یا بالاتر) یا استفاده از تکنیک های پردازش تصویر اضافی برای شبیه سازی جلوه تاری حرکت مطلوب است. این هم برای بهبود نرمی انیمیشن و هم برای تأثیر رئالیسم عکس و فیلم به طور همزمان استفاده می شود.

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

کاربردهای احتمالی افکت motion blur در بازی ها: همه بازی های مسابقه ای (برای ایجاد جلوه حرکت با سرعت بسیار بالا و استفاده در هنگام تماشای تکرارهای تلویزیون مانند)، بازی های ورزشی (همان تکرارها، اما در خود بازی، تاری می تواند باشد. برای اجسام متحرک بسیار سریع، مانند توپ یا جن، بازی‌های مبارزه (حرکات سریع سلاح‌های غوغا، بازوها و پاها)، بسیاری از بازی‌های دیگر (در طول صحنه‌های برش سه‌بعدی درون بازی روی موتور) اعمال می‌شود. در اینجا چند نمونه از اعمال پس افکت موشن تاری از بازی ها آورده شده است:

عمق میدان (DOF)

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

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

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

سطح جزئیات (LOD)

سطح جزئیات (سطح جزئیات) در برنامه های سه بعدی روشی برای کاهش پیچیدگی رندر یک فریم، کاهش تعداد کل چند ضلعی ها، بافت ها و سایر منابع در یک صحنه، کاهش کلی پیچیدگی آن است. یک مثال ساده: مدل شخصیت اصلی از 10000 چند ضلعی تشکیل شده است. در مواردی که در صحنه پردازش شده نزدیک به دوربین قرار می گیرد، مهم است که از همه چند ضلعی ها استفاده شود، اما در فاصله بسیار زیاد از دوربین در تصویر نهایی تنها چند پیکسل را اشغال می کند و وجود ندارد. نقطه در پردازش تمام 10000 چند ضلعی. شاید در این حالت صدها چند ضلعی یا حتی چند تکه و یک بافت مخصوص برای نمایش تقریباً مشابه مدل کافی باشد. بر این اساس، در فواصل متوسط، استفاده از مدلی متشکل از تعدادی مثلث بزرگتر از ساده ترین مدل، و کمتر از پیچیده ترین مدل، منطقی است.

روش LOD معمولاً هنگام مدل‌سازی و رندر صحنه‌های سه‌بعدی، با استفاده از چندین سطح پیچیدگی (هندسی یا غیره) برای اجسام متناسب با فاصله آنها از دوربین استفاده می‌شود. این روش اغلب توسط توسعه دهندگان بازی برای کاهش تعداد چند ضلعی ها در یک صحنه و بهبود عملکرد استفاده می شود. هنگامی که به دوربین نزدیک است، از مدل هایی با حداکثر جزئیات (تعداد مثلث، اندازه بافت، پیچیدگی بافت) برای بالاترین کیفیت تصویر ممکن استفاده می شود و برعکس، زمانی که مدل ها از دوربین دورتر هستند، از مدل هایی با مثلث کمتر استفاده می شود. افزایش سرعت رندر تغییر پیچیدگی، به‌ویژه تعداد مثلث‌ها در مدل، می‌تواند به طور خودکار بر اساس یک مدل سه‌بعدی با حداکثر پیچیدگی، یا شاید بر اساس چندین مدل از پیش آماده‌شده با سطوح مختلف جزئیات اتفاق بیفتد. با استفاده از مدل‌هایی با جزئیات کمتر برای فواصل مختلف، پیچیدگی رندر محاسبه‌شده کاهش می‌یابد و تقریباً هیچ کاهشی در جزئیات کلی تصویر وجود ندارد.

این روش به ویژه در صورتی مؤثر است که تعداد اشیاء در صحنه زیاد باشد و در فواصل مختلف از دوربین قرار گرفته باشند. به عنوان مثال، اجازه دهید یک بازی ورزشی، مانند هاکی یا شبیه ساز فوتبال را در نظر بگیرید. مدل‌های کاراکتر کم پلی زمانی استفاده می‌شوند که از دوربین دور باشند و در هنگام نزدیک شدن، مدل‌ها با تعداد زیادی چند ضلعی جایگزین مدل‌های دیگری می‌شوند. این مثال بسیار ساده است و ماهیت روش را بر اساس دو سطح از جزئیات مدل نشان می دهد، اما هیچ کس زحمت ایجاد چندین سطح از جزئیات را نمی دهد تا تأثیر تغییر سطح LOD خیلی محسوس نباشد، به طوری که جزئیات به تدریج با نزدیک شدن به شی "رشد" می کنند.

علاوه بر فاصله از دوربین، عوامل دیگری نیز می توانند برای LOD مهم باشند - تعداد کل اشیاء روی صفحه (زمانی که یک یا دو کاراکتر در کادر وجود دارد، از مدل های پیچیده استفاده می شود، و زمانی که 10-20 کاراکتر هستند، آنها به ساده تر تغییر دهید) یا تعداد فریم ها در ثانیه (محدودیت مقادیر FPS تعیین می شود که در آن سطح جزئیات تغییر می کند، به عنوان مثال، در FPS زیر 30، پیچیدگی مدل های روی صفحه را کاهش می دهیم، و در 60 برعکس آن را افزایش می دهیم). سایر عوامل احتمالی موثر بر سطح جزئیات عبارتند از: سرعت حرکت یک شی (بعید است زمانی برای دیدن موشک در حال حرکت داشته باشید، اما حلزون آسان است)، اهمیت شخصیت از دیدگاه بازی (در نظر بگیرید). همان فوتبال - برای مدل بازیکنی که کنترل می‌کنید، می‌توانید از هندسه و بافت‌های پیچیده‌تر استفاده کنید، آن را نزدیک‌ترین و اغلب اوقات می‌بینید). این همه به خواسته ها و توانایی های یک توسعه دهنده خاص بستگی دارد. نکته اصلی این است که زیاده روی نکنید، تغییرات مکرر و قابل توجه در سطح جزئیات آزار دهنده است.

اجازه دهید به شما یادآوری کنم که سطح جزئیات لزوماً فقط برای هندسه اعمال نمی شود، این روش می تواند برای ذخیره منابع دیگر نیز استفاده شود: هنگام بافت سازی (اگرچه تراشه های ویدیویی قبلاً از mipmapping استفاده می کنند، گاهی اوقات تغییر بافت ها در حال پرواز به دیگران منطقی است. با جزئیات مختلف)، تکنیک های نورپردازی (اشیاء مشابه طبق یک الگوریتم پیچیده روشن می شوند، و موارد دور - طبق یک الگوریتم ساده)، تکنیک بافت (نقشه منظر پیچیده در سطوح نزدیک استفاده می شود، و نقشه برداری معمولی در سطوح دور استفاده می شود) ، و غیره.

نشان دادن یک مثال از بازی چندان آسان نیست، از یک طرف، LOD تقریباً در هر بازی تا حدودی استفاده می شود، از طرف دیگر، همیشه نمی توان این را به وضوح نشان داد، وگرنه نکته کمی وجود دارد. در خود LOD

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

روشنایی جهانی

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

الگوریتم های روشنایی را می توان به دو مدل تقسیم کرد: روشنایی مستقیم یا محلی و روشنایی سراسری (نور مستقیم یا محلی و روشنایی سراسری). مدل روشنایی محلی از محاسبه روشنایی مستقیم استفاده می کند، نور از منابع نور تا اولین تقاطع نور با سطح مات، برهمکنش اجسام با یکدیگر در نظر گرفته نمی شود. اگرچه این مدل سعی می کند این را با اضافه کردن نور پس زمینه یا محیط جبران کند، اما این ساده ترین تقریب است، یک نورپردازی بسیار ساده شده از همه منابع نور غیرمستقیم، که رنگ و شدت روشنایی اشیا را در غیاب منابع نور مستقیم تنظیم می کند.

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

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

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

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

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

اما چیزی که برای مدت طولانی مورد استفاده قرار گرفته است، روشنایی جهانی از پیش محاسبه شده ثابت است که برای صحنه هایی بدون تغییر موقعیت منابع نور و اجسام بزرگ که به شدت بر نور تاثیر می گذارند قابل قبول است. از این گذشته ، محاسبه روشنایی جهانی به موقعیت ناظر بستگی ندارد و اگر موقعیت چنین اشیاء صحنه و پارامترهای منابع نور در صحنه تغییر نکند ، می توان از مقادیر روشنایی از پیش محاسبه شده استفاده کرد. این در بسیاری از بازی ها با ذخیره داده های محاسبه GI به شکل lightmaps (lightmaps) استفاده می شود.

همچنین الگوریتم های قابل قبولی برای شبیه سازی روشنایی سراسری در دینامیک وجود دارد. به عنوان مثال، این روش ساده برای استفاده در کاربردهای بلادرنگ برای محاسبه روشنایی غیرمستقیم یک شی در یک صحنه وجود دارد: رندر ساده شده از همه اشیا با جزئیات کاهش یافته (به جز مواردی که نور برای آن در نظر گرفته می شود)، به یک نقشه مکعبی با وضوح پایین (همچنین می‌توان از آن برای نمایش بازتاب‌های پویا روی سطح جسم استفاده کرد)، سپس آن بافت را فیلتر کرد (چند گذر از فیلتر تاری)، و آن شی را با داده‌های بافت محاسبه‌شده به عنوان مکملی برای نور مستقیم روشن کرد. در مواردی که محاسبات دینامیکی بیش از حد سنگین است، می توان از نقشه های رادیوزیته ساکن صرف نظر کرد. نمونه ای از بازی MotoGP 2 که به وضوح اثرات مفید حتی یک تقلید ساده از GI را نشان می دهد:



"itemprop="image">

"سایدرها چیست؟" سوال بسیار رایج بازیکنان کنجکاو و توسعه دهندگان تازه کار است. در این مقاله به طور قابل فهم و واضح در مورد این شیدرهای وحشتناک به شما خواهم گفت.

من بازی‌های رایانه‌ای را موتور پیشرفت به سمت تصاویر واقعی در گرافیک رایانه‌ای می‌دانم، بنابراین بیایید در مورد آنچه که «سایدرها» در زمینه بازی‌های ویدیویی هستند صحبت کنیم.

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

کشیدن یک قاب در واقع یک کار طاقت فرسا است: شما باید "هندسه" - مدل های چند ضلعی (جهان، شخصیت، سلاح ها و غیره) را بگیرید و آن را شطرنجی کنید. شطرنجی چیست؟ کل مدل سه بعدی از کوچکترین مثلث ها تشکیل شده است که شطرنجگر آنها را به پیکسل تبدیل می کند (یعنی "راستریز" به معنای تبدیل به پیکسل است. پس از شطرنجی سازی، داده های بافت، پارامترهای نور، مه و غیره را بگیرید و هر پیکسل حاصل از فریم بازی را که به بازیکن نمایش داده می شود، محاسبه کنید.

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

چنین ماژول سخت افزاری به یک شتاب دهنده گرافیکی یا کارت گرافیک (GPU - واحد پردازش گرافیک) تبدیل شده است. اکنون CPU داده ها را آماده می کند و یک همکار را با کارهای معمول بارگذاری می کند. با توجه به اینکه GPU اکنون فقط یک همکار نیست، بلکه انبوهی از هسته های مینیون است، به یکباره با چنین کارهایی کنار می آید.

اما هنوز پاسخی برای سوال اصلی دریافت نکرده ایم که شیدرها چیست؟ صبر کن دارم به این میرسم

گرافیک خوب، جالب و نزدیک به واقع گرایی، توسعه دهندگان کارت گرافیک را ملزم به پیاده سازی الگوریتم های زیادی در سطح سخت افزاری می کرد. سایه ها، نورها، هایلایت ها و غیره. این رویکرد - با اجرای الگوریتم‌ها در سخت‌افزار "Fixed Pipeline or Pipeline" نامیده می‌شود و در جایی که نیاز به گرافیک باکیفیت باشد، دیگر یافت نمی‌شود. جای او توسط خط لوله برنامه پذیر گرفته شد.

درخواست از بازیکنان "بیا، گرافونیوم خوب بیاور! سورپرایز!"، توسعه دهندگان بازی (و به ترتیب سازندگان کارت گرافیک) را به سمت الگوریتم های پیچیده تر سوق داد. تاکنون، در برخی موارد، الگوریتم‌های سخت‌افزاری سخت‌افزاری برای آنها بسیار کم شده است.

وقت آن رسیده که کارت های گرافیک هوشمندتر شوند. این تصمیم به توسعه دهندگان اجازه می دهد تا بلوک های GPU را در خطوط لوله دلخواه برنامه ریزی کنند که الگوریتم های مختلف را پیاده سازی کنند. یعنی توسعه دهندگان بازی، برنامه نویسان گرافیک اکنون قادر به نوشتن برنامه برای کارت های ویدئویی بودند.

و حالا بالاخره به پاسخ سوال اصلی خود رسیدیم.

"سایدرها چیست؟"

Shader (به انگلیسی shader - shading program) برنامه ای برای کارت گرافیک است که در گرافیک های سه بعدی برای تعیین پارامترهای نهایی یک شی یا تصویر استفاده می شود، ممکن است شامل توضیحاتی در مورد جذب و پراکندگی نور، نگاشت بافت، انعکاس باشد. و شکست، سایه، جابجایی سطح و بسیاری از گزینه های دیگر.

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

خط لوله گرافیکی

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

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

علاوه بر کارهای گرافیکی با چنین کارت های گرافیک هوشمند، امکان انجام محاسبات همه منظوره (گرافیک غیر رایانه ای) روی GPU نیز فراهم شد.

برای اولین بار، پشتیبانی کامل از شیدرها در کارت های گرافیک سری GeForce 3 ظاهر شد، اما مقدمات در GeForce256 (به شکل Register Combiners) پیاده سازی شدند.

انواع شیدر

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

سایه زن ورتکس

سایه زن های Vertex انیمیشن هایی از شخصیت ها، چمن ها، درختان، ایجاد امواج روی آب و بسیاری چیزهای دیگر می سازند. در سایه زن راس، برنامه نویس به داده های مربوط به رئوس دسترسی دارد، به عنوان مثال: مختصات راس در فضا، مختصات بافت آن، رنگ آن و بردار معمولی.

سایه زن هندسی

شیدرهای هندسی قادر به ایجاد هندسه جدید هستند و می توان از آنها برای ایجاد ذرات، اصلاح جزئیات مدل در حال پرواز، ایجاد شبح ها و موارد دیگر استفاده کرد. برخلاف راس قبلی، آنها قادرند نه تنها یک راس، بلکه کل اولیه را پردازش کنند. یک اولیه می تواند یک قطعه (دو رأس) و یک مثلث (سه رأس) باشد و اگر اطلاعاتی در مورد رئوس مجاور وجود داشته باشد (مجاورت انگلیسی)، می توان تا شش راس را برای یک مثلثی اولیه پردازش کرد.

سایه زن پیکسل

سایه زن های پیکسل نقشه بافت، نورپردازی و افکت های بافت مختلف مانند انعکاس، شکست، مه، نقشه برآمدگی و غیره را انجام می دهند. از سایه زن های پیکسل نیز برای افکت های پست استفاده می شود.

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

شیدرها روی چه چیزی می نویسند؟

در ابتدا، شیدرها را می‌توان به یک زبان اسمبلر نوشت، اما بعداً زبان‌های سایه‌زن سطح بالا شبیه به C مانند Cg، GLSL و HLSL ظاهر شدند.

چنین زبان هایی بسیار ساده تر از C هستند، زیرا کارهایی که با کمک آنها حل می شوند بسیار ساده تر هستند. سیستم نوع در چنین زبان هایی منعکس کننده نیازهای برنامه نویسان گرافیک است. بنابراین، آنها انواع داده های خاصی را در اختیار برنامه نویس قرار می دهند: ماتریس، نمونه بردار، و غیره.

RenderMan

همه چیزهایی که در بالا بحث کردیم در مورد گرافیک بلادرنگ صدق می کند. اما گرافیک های غیر هم زمان وجود دارد. تفاوت - Realtime - Real Time، یعنی اینجا و اکنون - برای دادن 60 فریم در ثانیه در بازی چیست، این یک فرآیند بلادرنگ است. اما ارائه یک فریم پیچیده برای انیمیشن های پیشرفته برای چند دقیقه غیرواقعی است. نکته زمان است.

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

گرافیک فوق العاده واقع گرایانه در Sand piper

به عنوان مثال، به این کارتون زیبا، دانه های شن، پرهای پرنده، امواج نگاه کنید، همه چیز فوق العاده واقعی به نظر می رسد.

*ویدیو اگه باز نشه تو یوتیوب ممنوع میشه پیکسار ساندپایپر گوگل کن - کارتون کوتاهی در مورد یک ساندپاپ شجاع خیلی بامزه و پف دار. لمس می کند و نشان می دهد که گرافیک کامپیوتری چقدر می تواند جالب باشد.

بنابراین این RenderMan از پیکسار است. این اولین زبان برنامه نویسی شیدر شد. RenderMan API استاندارد واقعی برای رندر حرفه ای است که توسط تمام استودیوهای Pixar و فراتر از آن استفاده می شود.

اطلاعات مفید

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

  • ، تکنیکی برای ایجاد جلوه های خیره کننده در بازی های ویدیویی مدرن است. مروری بر مقاله و ویدیو با آموزش ایجاد افکت در Unity3d
  • - اگر به توسعه بازی های ویدیویی به عنوان یک حرفه حرفه ای یا سرگرمی فکر می کنید، این مقاله حاوی مجموعه ای عالی از توصیه ها در مورد اینکه از کجا شروع کنید، چه کتاب هایی را بخوانید و غیره است.

اگر سوالی هست

طبق معمول، اگر سوالی دارید، در نظرات بپرسید، من همیشه پاسخ خواهم داد. برای هر کلمه محبت آمیز یا اصلاح اشتباهات بسیار سپاسگزار خواهم بود.

این آموزش به شما کمک می کند سایه بان ها را در Minecraft نصب کنید و در نتیجه دنیای بازی را با اضافه کردن سایه های پویا، صدای باد و چمن، آب واقعی و موارد دیگر بهبود بخشید.

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

نصب شامل دو مرحله است، ابتدا باید Shader mod را نصب کنید و سپس Shaderpack های اضافی را روی آن نصب کنید.

مرحله شماره 1 - نصب مد سایه زن

  1. جاوا را دانلود و نصب کنید
  2. نصب OptiFine HD
    یا ShaderMod;
  3. آرشیو حاصل را در هر مکانی باز کنید.
  4. ما فایل jar را راه اندازی می کنیم، زیرا او یک نصاب است.
  5. برنامه مسیر بازی را به شما نشان می دهد، اگر همه چیز درست است، روی Yes, Ok, Ok کلیک کنید.
  6. قابل اعتماد و متخصص ماین کرافتو یک پوشه در آنجا ایجاد کنید shaderpacks;
  7. ما به لانچر می رویم و در خط نمایه جدیدی با نام "ShadersMod" می بینیم، اگر نه، آن را به صورت دستی انتخاب کنید.
  8. در مرحله بعد باید shaderpacks را دانلود کنید

مرحله 2 - Shaderpack را نصب کنید

  1. Shaderpack مورد علاقه خود را دانلود کنید (لیست در انتهای مقاله)
  2. کلیدها را فشار دهید Win+R
  3. قابل اعتماد و متخصص Minecraft/shaderpacks. اگر چنین پوشه ای وجود ندارد، آن را ایجاد کنید.
  4. بایگانی سایه زن را به آن منتقل یا استخراج کنید Minecraft/shaderpacks. مسیر باید به شکل زیر باشد: .minecraft/shaderpacks/SHADER_FOLDER_NAME/shaders/[فایل‌های .fsh و vsh. داخل]
  5. Minecraft را راه اندازی کنید و بروید تنظیمات > سایه بان ها. در اینجا لیستی از شیدرهای موجود را مشاهده خواهید کرد. یکی را که می خواهید انتخاب کنید
  6. در تنظیمات سایه زن، «tweakBlockDamage» را فعال کنید، «CloudShadow» و «OldLighting» را غیرفعال کنید.

سایه بان های باورنکردنی سونیک اتر
شیدرهای سیلدور
Shaders Chocapic13
yShaders sensi277
Shaders MrMeep_x3
Naelego's Cel Shaders
سایه بان های RRe36
شیدرهای CUDA DeDelner
سایدرهای اسید bruceatsr44
سایه بان های Beed28
بسته سایه بان Ziipzaap
سایه بان های robobo1221
سایه بان های dvv16
Stazza85 super Shaders
hoo00's Shaders pack B
گیاهان موج دار Regi24
MrButternuss ShaderPack
گرافیک عالی DethRaid در Nitro Shaders
Edi's Shader ForALLPc's
CrankerMan's TME Shaders
Kadir Nck Shader (برای اسکیت702)
سایه بان های Werrus
Shaders Nexus Life از Knewtonwako
بسته سایه زن CYBOX
CrapDeShoes CloudShade Alpha
سایه بان AirLoocke42
سایه بان های BSL CaptTatsu
سایه بان های تریلیتون
ShadersMcOfficial's Bloominx Shaders (Chocapic13" Shaders)
سایه بان های پیوسته dotModded
سایه بان قمری Qwqx71 (shader chocapic13)

برای اجرا توسط پردازنده های کارت گرافیک (GPU) در نظر گرفته شده است. سایه بان ها در یکی از زبان های برنامه نویسی تخصصی کامپایل می شوند (نگاه کنید به ) و در دستورالعمل های GPU کامپایل می شوند.

کاربرد

قبل از استفاده از شیدرها، از تولید بافت رویه ای (به عنوان مثال، در Unreal برای ایجاد بافت های متحرک آب و آتش استفاده می شد) و چند بافتی (زبان سایه زن مورد استفاده در Quake 3 بر اساس آن بود). این مکانیسم‌ها انعطاف‌پذیری مشابه شیدرها را ارائه نمی‌کنند.

با ظهور خطوط لوله گرافیکی قابل تنظیم مجدد، امکان انجام محاسبات ریاضی بر روی GPU (GPGPU) فراهم شد. شناخته شده ترین موتورهای GPGPU nVidia CUDA، Microsoft DirectCompute و OpenCL منبع باز هستند.

انواع سایه زن

سایه زن های راس

سایه زن راس بر روی داده های مرتبط با رئوس چند وجهی عمل می کند، به عنوان مثال، با مختصات یک راس (نقطه) در فضا، با مختصات بافت، با رنگ راس، با بردار مماس، با یک بردار دوطبیعی، با یک بردار معمولی. بردار سایه زن راس را می توان برای تغییر نمای و پرسپکتیو رئوس، برای تولید مختصات بافت، برای محاسبه نور و غیره استفاده کرد.

مثال کد برای سایه زن رأس در:

vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3

سایه بان های هندسی

سایه‌زن هندسی، بر خلاف سایه‌زن‌های راس، می‌تواند نه تنها یک راس، بلکه کل اولیه را پردازش کند. یک اولیه می تواند یک قطعه (دو رأس) و یک مثلث (سه رأس) باشد و اگر اطلاعاتی در مورد رئوس مجاور وجود داشته باشد (مجاورت انگلیسی)، می توان تا شش راس را برای یک مثلثی اولیه پردازش کرد. شیدر هندسی قادر است در حین پرواز (بدون استفاده از CPU) مواد اولیه تولید کند.

شیدرهای هندسی برای اولین بار در کارت های گرافیک سری 8 انویدیا استفاده شد.

سایه زن های پیکسل (قطعه).

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

کد نمونه برای سایه زن پیکسل در:

ps.1.4 texld r0, t0 mul r0, r0, v0

مزایا و معایب

مزایای:

  • امکان کامپایل هر گونه الگوریتم (انعطاف پذیری، ساده سازی و کاهش هزینه چرخه توسعه برنامه، افزایش پیچیدگی و واقعی بودن صحنه های رندر شده)؛
  • افزایش سرعت اجرا (در مقایسه با سرعت اجرای همان الگوریتم اجرا شده بر روی پردازنده مرکزی).

معایب:

  • نیاز به یادگیری یک زبان برنامه نویسی جدید؛
  • وجود مجموعه دستورالعمل های مختلف برای پردازنده های گرافیکی از سازندگان مختلف.

زبانهای برنامه نویسی

برای رفع نیازهای مختلف بازار (گرافیک کامپیوتری کاربردهای زیادی دارد)، تعداد زیادی زبان برنامه نویسی شیدر ایجاد شده است.

معمولاً زبان‌های نوشتن سایه‌زن انواع داده‌های خاص (ماتریس، نمونه‌بردار، بردار و غیره)، مجموعه‌ای از متغیرها و ثابت‌های داخلی (برای تعامل با عملکرد استاندارد 3D API) را در اختیار برنامه‌نویس قرار می‌دهند.

رندر حرفه ای

در زیر زبان های برنامه نویسی شیدر هستند که بر روی دستیابی به حداکثر کیفیت رندر تمرکز دارند. در چنین زبان هایی، خواص مواد با استفاده از انتزاع توصیف می شود. این به افرادی که مهارت های برنامه نویسی خاصی ندارند و ویژگی های پیاده سازی های سخت افزاری را نمی دانند، امکان نوشتن کد را می دهد. به عنوان مثال، هنرمندان می توانند برای ارائه "نقشه مناسب" (نقشه برداری بافت، قرار دادن نور و غیره) چنین سایه بان هایی را بنویسند.

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

RenderMan زبان برنامه نویسی شیدر که در نرم افزار RenderMan پیکسار پیاده سازی شد، اولین زبان برنامه نویسی شیدر بود. RenderMan API که توسط راب کوک توسعه داده شده است و در مشخصات رابط RenderMan توضیح داده شده است، استاندارد واقعی برای رندر حرفه ای است که در سراسر کارهای Pixar استفاده می شود. OSL OSL Open Shading Language یک زبان برنامه نویسی شیدر است که توسط Sony Pictures Imageworksو یادآور زبان این در برنامه اختصاصی Arnold که توسط Sony Pictures Imageworks برای رندر توسعه داده شده است و در برنامه Blender رایگان برای ایجاد گرافیک های کامپیوتری سه بعدی استفاده می شود. رندر زمان واقعی GLSL GLSL باز جی ال اسداشتن Lزاویه) یک زبان برنامه نویسی سایه زن است که در استاندارد OpenGL و بر اساس نسخه زبان توصیف شده در استاندارد ANSI C است. این زبان از اکثر ویژگی های ANSI C پشتیبانی می کند، از انواع داده هایی که اغلب هنگام کار با گرافیک های سه بعدی (بردار، ماتریس) استفاده می شوند، پشتیبانی می کند. کلمه "shader" در GLSL به یک واحد کامپایل شده مستقل و نوشته شده در آن زبان اشاره دارد. کلمه "برنامه" به مجموعه ای از سایه بان های کامپایل شده اشاره دارد که به یکدیگر پیوند خورده اند. cg (انگلیسی) سیبرای gرافیک) یک زبان برنامه نویسی شیدر است که توسط nVidia با همکاری مایکروسافت توسعه یافته است. این زبان مشابه زبان و زبان HLSL است که توسط مایکروسافت توسعه یافته و در آن گنجانده شده است DirectX 9. این زبان از انواع "int"، "float"، "half" (تعداد نقطه شناور اندازه 16 بیت) استفاده می کند. این زبان از توابع و ساختارها پشتیبانی می کند. این زبان دارای بهینه سازی های عجیب و غریب در قالب "آرایه های بسته بندی شده" است (