loading...
گرافیست من
پناه جون بازدید : 47 سه شنبه 02 اردیبهشت 1393 نظرات (0)

گرافیک کامپیوتری

در این مقاله قصد داریم تا شما عزیزان را با گوشه ای ازکاربردهای متنوع کامپیوترها یعنی مقوله جذاب گرافیک کامپیوتری آشنا کنیم. در اینفرصت کوتاه سعی میکنیم با هم نگاهی هر چند گذرا بر مبانی گرافیک کامپیوتریبیاندازیم و از این رهگذر دیدی جدید بر بخشهای دیگری از صنعت نرم افزار همچونبازیها، شبیه سازیها و نرم افزارهای چند رسانه ای پیدا کنیم.
در دهه نود (CG (Computer Graphics نام اختصاری تکنیکی بود که امروزه ما آن را بنام گرافیککامپیوتری میشناسیم. اصولا وقتی صحبت از گرافیک در کامپیوتر به میان می آید با دومسئله روبرو هستیم، گرافیک دو بعدی و گرافیک سه بعدی. البته الان دیگر به لطفکارتهای گرافیکی سریع که از قابلیتهای سه بعدی به بهترین شکل پشتیبانی میکنند،گرافیک دو بعدی جایگاه خود را از دست داده است، ولی برای کامل شدن بحث ناچاریمعناصر اصلی سازنده گرافیک دوبعدی را هم یاد آور شویم.
شاید بتوان گفت تصاویربطور کلی مهمترین عنصر گرافیک دو بعدی را تشکیل میدهند. از جمله مهمترین فعالیتهاییکه در گرافیک دو بعدی انجام میگیرد، خواندن، نمایش، تغییر موقعیت، تغییر اندازه،چرخش و فیلتر کردن یک تصویر میباشد. این تصویر میتواند یک فایل بر روی کامپیوترباشد (مثلا با فرمت jpg یا bmp) یا میتواند مستقیما در برنامه و توسط کد نویسیتولید شود. به هر صورت سخت افزارهای گرافیکی که تا قبل از سال 95 در بازار موجودبودند، عمدتا بر روی این قابلیتها تمرکز داشتند. بعنوان نمونه، الان تقریبا همهکارتهای گرافیکی (چه دو بعدی و چه سه بعدی) دارای بخشی ویژه برای رسم تصاویر درصفحه میباشند. عملیات blit – که مخفف کلمات bit-block transfer (به معنای انتقالتکه ای از بیتها) میباشد – به نوعی هسته مرکزی فعالیتهای یک کارت گرافیکی در حالتدو بعدی را میسازد. همچنین بسیاری از سخت افزارها دارای چیپ ویژه ای جهت کشیدن وجمع کردن تصاویر میباشند. این تکنیک که image stretching نام دارد در برنامه های سهبعدی هم کاربرد فراوانی دارد. از جمله بخشهای مهم گرافیک دو بعدی میتوان به فونتهابرای رسم مطالب بر روی صفحه اشاره کرد. فونتها هم اغلب توسط تصاویر نمایش دادهمیشوند. از دیگر فرآیندهایی که در هنگام کار با تصاویر انجام میگیرد، ماسک کردنبخشی از تصویر میباشد، تا به این شکل بتوان جلوه های ویژه متعددی را ایجاد کرد. اینتکنیک که امروزه در گرافیک سه بعدی هم کاربرد فراوانی دارد، در بخش گرافیک سه بعدیبطور مفصلتری بررسی خواهد شد. اگر بخواهیم نمونه هایی گویا از برنامه های گرافیک دوبعدی را مثال بزنیم، میتوانیم به بازیهای دهه هشتاد و نود اشاره کنیم؛ در آن زمانتقریبا اکثر بازیها دو بعدی بودند و همگی بر یک اصل استوار بودند: نمایش تصاویرثابت به شکل پشت سر هم بطوری که حرکت را القاء کند. نهایت هنری که میتوانستند بهخرج دهند ایجاد صحنه هایی مثل انفجار، بارش باران یا انعکاس نور البته در حد بسیارابتدایی بود که این کارها عمدتا توسط تصاویر از پیش آماده شده انجام میگرفت. باورود کارتهای جدیدتر و با قابلیتهای سه بعدی بالا، اگرچه بسیاری از خصوصیات گذشتهحفظ و حتی تقویت شد، ولیکن عناصر جدیدی به این جمع اضافه گشت.
به جرات میتوانگفت گرافیک سه بعدی بر مبنای گره ها و چند ضلعی ها (polygon) بنا شده است. در واقعگره ها (vertex) در گرافیک سه بعدی حکم اعداد در ریاضی را دارند. هر کاری کهبخواهیم انجام دهیم به نوعی به گره ها مربوط میشود. آنها هستند که اشیاء ما رامیسازند، در نورپردازی ها استفاده شده و بافت زنی میشوند. حتی میتوان با انتقالآنها در فضای سه بعدی تصاویر متحرک را نیز به آسانی بدست آورد.
اگر با یک نرمافزار خلق اشیاء سه بعدی همانند MAX کار کرده باشید، حتما با خیلی از این واژه هاآشنایی دارید؛ ولی اگر هم تا به حال به سراغ این برنامه ها نرفته اید، مهم نیست. دراینجا همه این عبارات را مرور خواهیم کرد و خودتان در نهایت متوجه میشوید که گرافیککامپیوتری (بخصوص گرافیک سه بعدی) چه عرصه جذابی است، شاید پس از خواندن این مقالهبا جدیت بیشتری گرافیک در کامپیوتر را دنبال کنید.
شاید تا حالا واژه رندر (render) را زیاد شنیده باشید، این عبارت در کل به معنای خلق تصاویر دو بعدی ازاشیاء سه بعدی بر روی صفحه کامپیوتر میباشد.
از گره شروع میکنیم تا ببینیم اشیاءسه بعدی که در صفحه مانیتور میبینم واقعا از چه چیزی تشکیل شده اند. یک مکعب را درنظر بگیرید. مکعبها هشت گوشه دارند که این هشت گوشه خود شش وجه میسازند. هر یک ازوجوه (که در اصطلاح به آنها face گفته میشود) یک مربع هستند. و میتوان گفت که هرمربع از کنار هم قرار گرفتن دو مثلث تشکیل شده است. پس در واقع هر مکعب از 12 مثلثهم اندازه ساخته شده است. در گرافیک کامپیوتری، به گوشه های سازنده اشیاء گره (vertex) گفته میشود. لبه های اشیاء هم که گوشه ها را به هم متصل میکنند edge (یاهمان لبه) نامیده میشوند.

بطور کلی به صفحات سازنده اشیاء، چند ضلعی (polygon) گفته میشود ولی از آنجایی که سخت افزارهای گرافیکی در حقیقت فقط میتوانندسه عنصر نقطه، خط، و مثلث را رسم کنند باید گفت که حتی پیچیده ترین سطوح - از یکمربع ساده گرفته تا یک نوار موبیوس – از مثلثها تشکیل شده اند. یک نکته مهم در موردکارت های گرافیکی این است که آنها به هیچ وجه قادر نیستند بطور مستقیم منحنی رسمکنند، و حتی چند ضلعی های بیشتر از سه گوش را هم عملا نمیشناسند. نکته مهم دیگر اینکه هم صفحه بودن در گرافیک کامپیوتری بسیار با اهمیت میباشد، و از این رو تنها سطحیکه سخت افزارهای سه بعدی قادر به رسم مستقیم آن هستند، مثلث میباشد. عملیات شکستنسطوح منحنی به مثلثهای کوچک، tessellation نامیده میشود که این روزها در برنامه هایگرافیکی بعنوان یک قابلیت مهم تلقی میشود. در واقع اصطلاح Higher Order Primitive (اشیاء سطح بالا) به اشیائی اشاره دارد که هم صفحه نیستند، مثلا سطوح درجه دو یامنحنی ها. اگرچه ممکن است خیلی برنامه ها آنها را تنها با گرفتن چند ورودی از شمابر روی صفحه رسم کنند، ولی چیزی که اتفاق می افتد با چیزی که شما بر روی تصویرمیبینید اندکی فرق میکند. بسته به وضوح صفحه، فاصله شیء از شما و توان گرافیکیسیستم، سطوح منحنی بر طبق محاسبات پیچیده و سنگین به یک سری مثلث کوچک تبدیلمیشوند. هر چه در یک محل تعداد این مثلثهای کوچک بیشتر باشد منحنی شما هموارتر بهنظر میرسد.
از سایر ویژگی های اشیاء سه بعدی باید به قابلیت آنها برای دریافتنور و در نتیجه داشتن رنگ اشاره کرد. بدون نور هیچ چیز قابل رویت نمیباشد و اگر همبتوان اشیاء را دید، نهایتا به شکل کاملا تخت و دو بعدی میسر خواهد بود. هنگامی کهاشیاء موجود در یک صحنه را رسم میکنید باید به نحوه نورپردازی هم کاملا فکر کنید،زیرا زیباترین اشکال سه بعدی بدون وجود نور مناسب جلوه خوبی نخواهند داشت. در واقعدو مبحث نور و رنگ ارتباط تنگاتنگی با هم دارند؛ رنگ، دریافت چشمان ما از نوری استکه به سطوح برخورد کرده و انعکاس می یابد. نور هم مجموعه ای از فوتونهاست که بابرخورد به سلولهای مخروطی چشمها، آنها را تحریک میکند. حالا بار دیگر به مثال مکعببازمیگردیم، همانطور که در طبیعت همه اشیاء دارای سطح و رنگ مخصوص به خود میباشند،اشکال سه بعدی درون صفحه کامپیوتر هم باید دارای ویژگی خاصی باشند که نوع واکنشآنها در مقابل نور را مشخص کند. در اصل، خصوصیات سطحی هر جسم ماده آن جسم نامیدهمیشوند. ماده یا material میتواند نشانگر رنگ نهایی یک جسم در حالتی باشد کهنورپردازی اعمال میشود. شما میتوانید بسته به نیاز، از نورپردازی استفاده نکنید وتنها از رنگهای ثابت برای اشیاء بهره ببرید. از نکات مهم دیگر نحوه سایه زنی اشیاءاست، برای اینکه این ویژگی را بهتر متوجه شوید به دو شکل زیر توجهکنید:

 

به نظر شما چه تفاوتی میان دو قوری بالا وجوددارد؟ در تصویر سمت چپ هر یک از سطوح سازنده قوری، دارای یک رنگ ثابت بوده و همینمسئله باعث میشود که سطح جسم به شکل نسبتا تخت دیده شود. این شیوه، سایه زنی تخت (flat shading) نام دارد. در این روش هر سه گره سازنده یک مثلث دارای یک رنگ نهاییمیباشند. ولی در تصویر سمت راست، ظاهر کاملا هموار قوری مشخص است، توجه داشته باشیدکه این دو شیء از لحاظ هندسی کاملا مشابه میباشند ولیکن به خاطر نوع سایه زنی، قوریسمت راست دارای سطحی هموار میباشد. در این روش که به سایه زنی هموار (smooth shading) معروف است، رنگ گره ها بر حسب موقعیت میانیابی میشود و بدین ترتیب ممکناست گره های سازنده یک مثلث هر یک رنگ مخصوص به خود را داشته باشند، و سطح مثلث همدارای یک شیب رنگی خواهد بود. (این شیوه gouraud shading هم نامیده میشود) به هرترتیب استفاده از این گزینه کاملا به نوع برنامه بستگی دارد، ولی باید توجه داشت کهمعمولا تکنیکهایی که ظاهری زیباتر و هموارتر را بوجود می آورند به میزان محاسباتبیشتری نیاز داشته و بنابراین سرعت اجرای برنامه را پایین می آورند.
یکی ازمواردی که در حین ساخت اشیاء سه بعدی باید مد نظر قرار گیرد این است که اگر قراراست آنها تحت نورپردازی قرار گیرند، باید ویژگی های خاصی داشته باشند. مهمتریننکته، وجود بردارهای خاصی به نام بردار نرمال(normal vector)  برای هر گره میباشد. این بردارها، همانطور که از نامشان پیداست با توجه به جهتی که قرار است شیء نسبت بهمنبع نوری داشته باشد بر گره عمود میباشند. در محاسبات نورپردازی، زاویه بین منبعنوری و سطح اشیاء (که تعیین کننده میزان نور دریافتی هر سطح میباشد) توسط همینبردار نرمال تعیین میشود. برای اینکه مبحث نور را به پایان ببریم، لازم است نکته ایهم راجع به انواع منابع نوری بگوییم. بطور کلی نورها در طبیعت به سه دسته تقسیممیشوند. نورهای نقطه ای که برای مثال میتوان از یک لامپ معمولی نام برد. این نورهادارای موقعیت و جهت مشخص میباشند و قادر هستند که محدوده ای مشخص از اطراف خود راروشن کنند. نوع دیگر نورهای موازی میباشند که به علت دور بودن بیش از حد منبع ساتعکننده از بیننده، هیچ موقعیتی را نمیتوان برای آنها ذکر کرد. آنها تنها جهت دارند وخورشید بهترین مثال از این نوع است. دسته آخر منابع نوری، نورهای پروژکتوری میباشندکه در واقع حالت خاصی از نورهای نقطه ای هستند. تنها تفاوت این دو دسته این است کهنورهای پروژکتوری (یا نورهای لکه ای) همه محیط اطراف خود را به یک شکل روشننمیکنند، بلکه همانند یک نورافکن، ناحیه ای مخروط وار را نورپردازی میکنند. از جملهخصوصیات مشترک همه نورها، رنگ، شدت و ضریب رقیق شوندگی نور بر حسب فاصله تا منبعنوری است. شاید بتوان گفت بیش از نیمی از تکنیکهای ویژه گرافیک کامپیوتری به مسئلهنورپردازی مربوط میشوند، از این رو این بخش از گستردگی زیادی برخوردار است و میتوانبا تغییر ماده سطح، رنگ نور، و رنگ گره ها هزاران جلوه بصری زیبا را خلقکرد.
یکی دیگر از مباحثی که به شکل روز افزونی در گرافیک سه بعدی مطرح میشود،مسئله بافت سطوح میباشد. بافت یا texture در واقع تصویری دو بعدی است که به شکلیخاص بر روی سطوح و اجسام سه بعدی نگاشته میشود تا به آنها ظاهری واقع گرایانه تربدهد. مثلا فرض کنید میخواهید یک دیوار آجری را نمایش دهید، بدین منظور تنها کافیاست تصویری از یک دیوار آجری را (که ممکن است از اینترنت پیدا کرده باشید یا از روییک عکس اسکن نموده باشید) بر روی یک سطح مستطیل مانند بنگارید. به این ترتیب یکدیوار آجری زیبا دارید که تنها از یک مستطیل (که خود از دو مثلث ساخته شده) تشکیلشده است و روی آن یک عکس قرار دارد. با استفاده از بافتها میتوان جلوه های بسیارزیبایی بوجود آورد. با ریاضیات چطور هستید؟ آیا تا به حال فکر کرده اید چطورمیتوان اشیاء را در فضای سه بعدی حرکت داد؟ یا چطور میتوان ظاهر کاملا پرسپکتیوی کهدر بازیها وجود دارد را ایجاد نمود؟ این مباحث اندکی به دانش ریاضی نیاز دارند. درواقع باید گفت مباحث جبر خطی. حتما میدانید یک ماتریس چیست. ماتریسها آرایه های دوبعدی از اعداد هستند که میتوانند برای انجام بسیاری محاسبات پیچیده بکار روند. درگرافیک سه بعدی ماتریسها حکم مفاصلی را دارند که سایر بخشها را به هم متصل میکنند؛از جمله کاربردهای آنها تعریف یک محوطه دید(viewport)  برای نمایش اشیاء است. همچنین میتوان به کمک آنها تبدیلات گوناگونی روی اشیاء سه بعدی انجام داد. انتقال،چرخش، تغییر اندازه، منعکس کردن روی یک سطح (مثلا برای ایجاد سایه) را میتوان ازجمله رایج ترین عملیات ماتریسی ذکر کرد که در گرافیک سه بعدی خیلی کاربرد دارند. بهکمک ماتریسها میتوانید کلیه خصوصیات یک دوربین پیشرفته را در دنیای واقعی در محیطیمجازی شبیه سازی کنید. مثلا موقعیت، نقطه هدف، نوع لنز، فاصله کانونی و حتی زاویهچرخش دوربین هم کاملا قابل تنظیم میباشد.
بردارها هم از جمله مولفه های پرکاربرددر گرافیک سه بعدی هستند که ارتباط تنگاتنگی با ماتریسها دارند. در واقع در گرافیکسه بعدی، همه مختصات اعم از موقعیت گره ها، بردارهای نرمال، مختصات بافتها (و حتیبنوعی رنگها) بصورت برداری تفسیر میشوند. این بردارها میتوانند یک، دو، سه و یاچهار بعدی باشند.
از دیگر نکاتی که شاید جالب به نظر برسد، میتوان به تفسیررنگها توسط کامپیوتر اشاره کرد. همانگونه که اشاره شد، چشمان ما برای دریافت نوردارای سلولهای دوکی شکلی هستند؛ چشم انسان دارای سه سلول مخروطی میباشد، که یکی بهنور قرمز، یکی به نور سبز و دیگری به نور آبی حساس است. اساس کار سیستمهای رنگی درکامپیوترها هم همین است. یعنی همه رنگها بر اساس ترکیبی از مولفه های قرمز، سبز وآبی ساخته میشوند. واژه RGB هم از حروف اول این کلمات گرفته شده است. معمولا مقدارهر یک از این سه مولفه بین 0 تا 1 میباشد. مثلا در حالتی که هر سه آنها 1 باشند،رنگ سفید و وقتی که هر سه آنها مقدار 0 را دارا باشند رنگ سیاه ساخته میشود. میتوانبا تنظیم مقادیر مختلف برای این متغیرها انواع رنگها را ایجاد کرد.
شما بعنوانیک برنامه نویس گرافیکی باید بدانید که کامپیوتر چطور و با چه ترتیبی تصاویر سهبعدی را بر روی مانیتور نمایش میدهد. برای این که بتوانیم تجسمی نسبت به این فرآیندپیدا کنیم، بهتر است یک مثال خیلی ساده را با هم مرور کنیم. یکی از راههای ساختتصاویر متحرک توسط کاغذ، رسم تصاویری با اختلافات جزئی نسبت به هم بر روی صفحاتمتوالی کاغذ میباشد، سپس میتوانید با ورق زدن این صفحات، تصاویر متحرکی را مشاهدهکنید. در کامپیوترها هم معمولا چنین عملیاتی انجام میگیرد. با این تفاوت که دراینجا به جای چندین صفحه کاغذ، معمولا فقط دو (یا حداکثر سه) صفحه برای رسم تصاویررنگی در نظر گرفته میشوند. در اصطلاح به این صفحه ها که مسئولیت نگهداری اطلاعات تکتک پیکسلهای صفحه را دارند، بافر (buffer) گفته میشود. بافرهای گوناگونی در گرافیکسه بعدی بکار میروند که میتوان از بین آنها به دو بافر رنگی (color buffer) و بافرعمق اشاره کرد. بافر رنگی غالبا مجموعه ای از دو بافر مجزا به نامهای بافر پشتی وبافر جلویی است. بافر جلویی (front buffer) صفحه ای است که در هر لحظه تصاویر را برروی صفحه نمایش میدهد. در همین حال که اطلاعات موجود در بافر جلویی بر روی صفحههستند، برنامه شما در حال ایجاد تغییرات مورد نظر بر روی بافر پشتی (back buffer) است؛ به محض اینکه بافر پشتی آماده نمایش شد، جای این دو بافر عوض میشود(در اصطلاح page-flipping)، این روند تا انتهای اجرای برنامه ادامه دارد و سرعت تعویض اینبافرها همان سرعت اجرای برنامه شماست که با واحد فریم در ثانیه (FPS) سنجیده میشود. هر چه این نرخ بالاتر باشد، تصویری هموارتر خواهید داشت. چشمک زدن تصویر (flicker) مشکلی است که غالبا بواسطه پایین بودن نرخ فریم پیش می آید. معمولا نرخ فریمهایبالای 30، مناسب میباشند. بطور کلی هر چه صحنه شما شلوغتر باشد و در آن از تکنیکهاو اشیاء بیشتری استفاده کرده باشید نرخ فریم برنامه پایینتر می آید.
بافر مهمیدیگر، بافر عمق میباشد. بافر عمق (depth buffer) که گاهی اوقات بافر z هم نامیدهمیشود وظیفه تنظیم رنگ نهایی پیکسلهای روی مانیتور را بر عهده دارد. اگر یادتانباشد گفتیم که در گرافیک سه بعدی، همه چیز از یک سری نقاط به نام گره تشکیل شدهاست، گره هایی که همگی دارای مختصات سه بعدی در فضا میباشند. معمولا سیستمهایمختصاتی که در گرافیک سه بعدی بکار میروند سمت مثبت محور x را جهت راست، سمت مثبت y را جهت بالا و سمت مثبت محور z را رو به بیرون یا داخل مانیتور در نظر میگیرند. بااین توضیح، فرض کنید شما در مختصات (10, 15, 5) یک کره رسم کرده اید. این کره قرمزرنگ میباشد. حالا در قسمت دیگری از برنامه نیاز به رسم یک مکعب آبی در مختصات (10, 15, 0) دارید. فرض میکنیم از سیستم مختصات چپگرد استفاده شده باشد (یعنی مختصه z بهسمت داخل مانیتور میباشد)، در نتیجه کره قرمز رنگ پشت سر مکعب آبی قرار خواهد گرفتو شما قاعدتا باید تنها مکعب را در آن محل ببینید. تعیین اینکه در هر موقعیت، چهشیئی و با چه رنگی باید روی پیکسلهای صفحه رسم شود، بر عهده بافر عمق میباشد. بافرعمق، پس از ارسال موقعیت گره های هر شیء توسط شما آنها را ذخیره کرده، و در صورترسم اشیائی دیگر (که احتمالا رنگ متفاوتی خواهند داشت) در موقعیتهای قبلی، مختصهعمق (یا همان z) اشیاء قدیم و جدید را با هم مقایسه میکند. پس از انجام این تست، هریک از اشیاء که به بیننده نزدیکتر بود میتواند در نهایت پیکسلهای صفحه را با رنگخود، رنگ آمیزی نماید!
مطالب فوق الذکر اسکلت گرافیک سه بعدی را بنا میکنند، اماهمه چیز به آنها ختم نمیشود، و روز به روز، با پیشرفت کارتهای گرافیکی، تکنیکهایویژه ای عرضه میشوند که البته مبنای اکثر آنها همینهایی است که در بالا گفتیم. برایمثال در مبحث نور و بافت، میتوان علاوه بر نورپردازی های معمولی و نگاشت بافتهایساده بر روی اشیاء، بسیاری از پدیده های دنیای واقعی را هم شبیه سازی نمود. بعنواننمونه، میتوان به کمک یک ماتریس خاص و نوع ویژه ای از بافت زنی (texture mapping)،جلوه انعکاس محیط اطراف بر روی اشیاء را پیاده سازی نمود. یا میتوان بافتهای حجمیرا برای ایجاد جلوه رنگین کمان یا منشور نوری بکار برد. همچنین میتوان با ترکیبمولفه های رنگی تصاویر، بافتهایی را بر روی اشیاء نگاشت که به نظر برجسته می آیند (این تکنیک bump mapping نام دارد). ایجاد مه و سایر پدیده های اتمسفری هم به راحتیدر برنامه های گرافیکی امکان پذیر میباشد. اصولا دو نوع مه وجود دارد، یکی مهپیکسلی (table fog) که بصورت جدولی از پیش آماده شده در اکثر کارتهای گرافیکی پیادهسازی شده و دیگری مه گره ای (vertex fog) که با انجام محاسباتی بر روی گره هایاشیاء اعمال میشود. یکی دیگر از تکنیکهایی که در ساخت اشیائی همچون درخت، تابلو،لامپ، و... در بازیها کاربرد دارد، قابلیت بیلبرد (billboard) میباشد. این تکنیک کهبه سادگی قابل پیاده سازی است، برای نمایش اشیاء ثابتی که معمولا روی زمین واقعهستند بکار میرود. مثلا فرض کنید میخواهید یک درخت را در صحنه ای از بازی نمایشدهید. مسلما رندر کردن یک شیء سه بعدی که گره های سازنده آن تنه و شاخه و برگهای یکدرخت را نشان دهند خیلی منطقی نمیباشد (چون برای این کار به گره های زیادی نیازخواهید داشت که این باعث کاهش سرعت برنامه میشود)، در عوض بهتر است تصویری از یکدرخت را بعنوان یک بافت بر روی یک مستطیل رندر کنید. سپس میتوانید با نمایش اینمستطیل در روی زمین بطوری که مستطیل همواره رو به دوربین باشد، این مستطیل را بهعنوان یک درخت زیبا به بیننده معرفی کنید. البته در این روش، از خصوصیات دیگریهمچون ترکیب رنگ (blending) و تست آلفا (alpha test) هم استفاده میشود.

 

 


قبلا اشاره شد که میتوان با استفاده از ماتریسها، تصاویرمتحرک را بوجود آورد. این نوع تصاویر متحرک، انیمیشن از نوع ماتریسی نامیده میشوندکه علی رغم داشتن تواناییهای بالا، امروزه بدلایلی کمتر از آنها استفاده میشود. درعوض روش نسبتا جدیدتری برای ایجاد انیمیشن مورد استفاده قرار میگیرد که در اصطلاحگرافیک سه بعدی، انیمیشن اسکلتی خوانده میشود. در این روش که بیشتر برای متحرک کردنکاراکترهای بازی بکار گرفته میشود، میتوان کل بدن و دست و پای شخصیت بازی را بصورتیک شیء واحد ساخت. سپس با استفاده از قابلیتهایی همچون پوست انعطاف پذیر (skin)،حرکتهای لازم به اجزاء مختلف بدن فرد داده میشود. بازیهای معروفی مثل Tomb Raider، Quake و Half Life هر یک به گونه ای از این روش برای خلق کاراکترهای خود استفادهکرده اند.
از دیگر ویژگی هایی که میتوان برای واقعی تر کردن یک صحنه سه بعدی ازآن استفاده کرد، سایه میباشد. سایه ها که ارتباط مستقیمی با نور دارند، بطور کلیشامل چند دسته میشوند. ساده ترین نوع آنها (همانطور که در مبحث ماتریسها اشاره شد) با نگاشتن گره های یک شیء بر روی یک صفحه تخت بوجود می آید. این نوع محدودیتهایزیادی دارد. بنابراین جز در موارد خاص از آن استفاده نمیشود. نحوه دیگر پیاده سازیسایه، کاربرد بافتهایی میباشد که حاوی تصاویر رندر شده از سایه ها و سایر اثراتنورها در صحنه میباشند. به این تصاویر ویژه light map گفته میشود. این روش سریعتریننوع ایجاد سایه است. ولی تنها میتوان برای اعمال سایه بر روی سطوح تخت از آناستفاده کرد. انعطاف پذیر ترین نوع سایه ها، سایه های حجمی هستند. سایه های حجمی (shadow volume) میتوانند بر روی هر نوع سطحی اعمال شده، و حتی قابلیت ایجاد سایهبرای اشیاء متحرک را هم دارا میباشند. البته باید توجه داشت که این، پیچیده ترین وکندترین نوع سایه ها هم میباشد.
از سیستمهای ذره ای (particle system) معمولابرای شبیه سازی پدیده های طبیعی همچون برف، باران، آتش، انفجار و گرد و غباراستفاده میشود. سخت افزارهای جدید، دارای اشیاء آماده ای میباشند که میتوانند بطورمستقیم رندر شده، و حتی تصویری را هم بعنوان بافت بر روی خود داشته باشند. بدینترتیب میتوان با تنظیم موقعیت، سرعت حرکت، تعداد، طول عمر، رنگ و بافت این ذرات (point sprite) انواع پدیده ها از جمله آتش و برف و باران را به شکلی کاملا واقعیدر صحنه های سه بعدی ایجاد کرد.
یکی دیگر از تکنیکهای پیشرفته گرافیک سه بعدی،قابلیت ساخت انواع زمین و محیطهای طبیعی میباشد. میتوان از زمینها (terrain) برایشبیه سازی محیط کوهستان، دشت، تپه و هر نوع ناهمواری طبیعی دیگری استفاده کرد. معمولا روشهای گوناگونی برای رندر کردن این اشیاء وجود دارد.
از جمله تکنیکهایویژه بسیار پرکاربرد، متحرک سازی بافتها میباشد. همانطور که پیشتر عنوان شد، ازماتریسها میتوان برای متحرک سازی هر چیزی در گرافیک سه بعدی استفاده کرد. حتیمیتوان با اعمال یک ماتریس بر روی بافت، تصویر بافت مورد نظر را به اشکال گوناگوندر آورد. مثلا تصویری از یک تابلوی تبلیغاتی را در نظر بگیرید که بر روی یک پایهبلند نمایش داده شده است، میتوان با چرخش ماتریس بافت این تابلو، آن را حول پایهبچرخانید تا ظاهر تابلوی تبلیغاتی واقعی تر به نظر برسد.
قبلا به بافرها اشارهکردیم، ولی یک بافر مهم دیگر هم وجود دارد. یعنی بافر استنسیل (stencil buffer) کهتکنیکهای بسیار زیادی توسط آن قابل پیاده سازی میباشند. از جمله این تکنیکها سایهحجمی (که پیشتر به آن اشاره شد)، آینه، ماسک کردن تصویر، برش زدن مناطق دلخواهی ازتصویر، ایجاد اشیاء شفاف،  محو تصاویر در پس زمینه و ترکیب تصاویر با هممیباشد.
در آخر هم باید به سایه زنها اشاره کنیم. سایه زنها (shader) در واقعپرده آخری میباشند که فراروی شما قرار دارند. با عرضه سایه زنها، و زبانهای سایهزنی، انقلابی در عرصه گرافیک کامپیوتری ایجاد شد و بسیاری از محدودیتهای که تا چندیپیش در سر راه برنامه نویسان گرافیکی (بخصوص سازندگان بازی) قرار داشتند عملا کناررفتند. امروزه سایه زنهای گره، سایه زنهای پیکسل، سایه زنهای بافت و سایه زنهاینوری وارد صحنه شده اند و میتوان توسط زبانهایی مثل Assembly، C، و حتی Delphi برایآنها برنامه نوشت. وقتی شما از سایه زنها استفاده میکنید، به گونه ای خط رندرکارتهای گرافیکی را بطور کامل تحت تسلط خود در آورده اید. در اینجا کلیه عملیات، ازگرفتن گره های ورودی، پردازش، تبدیل، برش، و نگاشت آنها تا پیاده سازی فرمولهای مه،نورپردازی، بافت زنی، سیستمهای ذره ای و انعکاسهای نوری بر عهده خودتان میباشد. حتیمیتوانید در سطحی پایینتر، بر روی تک تک پیکسلهای صفحه کار کنید و آنها را بافرمولهای ابداعی خودتان تحت تبدیلات مختلف قرار دهید. امروزه رقابت اصلی سازندگانکارت های گرافیکی بر سر سایه زنها میباشد؛ و Render Monkey (محصول شرکت ATI)، CG (محصول nVidia) و HLSL (محصول مایکروسافت) که همگی برای برنامه نویسی پردازنده هایگرافیکی ایجاد شده اند محصول این رقابت شدید میباشند.
شاید بد نباشد که درانتها، از چند تن از بزرگان و پایه گذاران گرافیک سه بعدی کامپیوتری نامی ببریم. افرادی چون James Blinn، Andy Catmull، Phillip Taylor و John Carmack در صنعتگرافیک سه بعدی، همچون اسحاق نیوتن، آلبرت اینشتین، هاینریش هرتز و جیمز وات در علمفیزیک هستند. برای مثال Carmack نامی آشنا برای همه علاقمندان به بازی میباشد. اورا پدر صنعت بازیهای کامیپوتری نامیده اند، زیرا بازیهایی چون Doom و Quake محصولخلاقیتهای او و همکارانش (همچون Tom Hall) میباشند. Taylorهم تا چندی پیش رئیس تیمسازنده DirectX در شرکت مایکروسافت بود.
در این مقاله از اشیاء سه بعدی، نور،دوربین، تصاویر، ماتریسها، بردارها، تکنیکهای ویژه و بزرگان صنعت گرافیک نام بردیم. با امید به اینکه این مختصر برای شما مفید بوده باشد؛ اگر مجالی بود دفعات بعدیبصورت ریزتر وارد مبحث گرافیک سه بعدی میشویم و با نرم افزارهای گرافیک سه بعدیهمچون DirectX بیشتر آشنا خواهیم شد.

 

ارسال نظر برای این مطلب

کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آمار سایت
  • کل مطالب : 20
  • کل نظرات : 0
  • افراد آنلاین : 1
  • تعداد اعضا : 0
  • آی پی امروز : 3
  • آی پی دیروز : 6
  • بازدید امروز : 8
  • باردید دیروز : 13
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 22
  • بازدید ماه : 24
  • بازدید سال : 65
  • بازدید کلی : 1,301