صفحه در حال بارگزاری
لطفا صبر کنید ...

پاسخ سوال ساخت تصویر3بعدی واشیا
صفحه اول سایت ارتباط با ما لیست اعضا صفحه اصلی

اطلاعات نشان ميدهد که شما هنوز عضو اين انجمن نيستيد ...و براي استفاده از امکانات انجمن بايد عضو شويد
براي عضويت سريع اينجا کليک کنيد
عضويت شما در تالار 30 ثانيه طول خواهد کشيد

>بستن اين پنجره<

نام کاربری
رمز ورود
یا »عضویت
» رمز عبور را فراموش کردم




صفحه اصلی / گرافیک دوبعدی ,سه بعدی,انیمیشن / پاسخ سوال ساخت تصویر3بعدی واشیا
به انجمن سياره دوستان خوش آمديد
سرگرمي و عشاق: جامعه مجازي سياره دوستان افتتاح شد

ارسال پاسخ
تعداد بازدید 48
پاسخ سوال ساخت تصویر3بعدی واشیا
نویسنده پیام

keyvan آفلاین
ارسال‌ها : 443
عضویت: 21 /6 /1390
سن: 25
شناسه یاهو: keyvan_keyvan@rocketmail.com
تشکرها : 24
تشکر شده : 76
پاسخ سوال ساخت تصویر3بعدی واشیا
معمولا تکنیکهایی که ظاهری زیباتر و هموارتر را بوجود می آورند به میزان محاسبات بیشتری نیاز داشته و بنابراین سرعت اجرای برنامه را پایین می آورند. یکی از مواردی که در حین ساخت اشیاء سه بعدی باید مد نظر قرار گیرد این است که اگر قرار است آنها تحت نورپردازی قرار گیرند، باید ویژگی های خاصی داشته باشند. مهمترین نکته، وجود بردارهای خاصی به نام بردار نرمال(normal vector) برای هر گره میباشد. این بردارها، همانطور که از نامشان پیداست با توجه به جهتی که قرار است شیء نسبت به منبع نوری داشته باشد بر گره عمود میباشند. در محاسبات نورپردازی، زاویه بین منبع نوری و سطح اشیاء (که تعیین کننده میزان نور دریافتی هر سطح میباشد) توسط همین بردار نرمال تعیین میشود. برای اینکه مبحث نور را به پایان ببریم، لازم است نکته ای هم راجع به انواع منابع نوری بگوییم. بطور کلی نورها در طبیعت به سه دسته تقسیم میشوند. نورهای نقطه ای که برای مثال میتوان از یک لامپ معمولی نام برد. این نورها دارای موقعیت و جهت مشخص میباشند و قادر هستند که محدوده ای مشخص از اطراف خود را روشن کنند. نوع دیگر نورهای موازی میباشند که به علت دور بودن بیش از حد منبع ساتع کننده از بیننده، هیچ موقعیتی را نمیتوان برای آنها ذکر کرد. آنها تنها جهت دارند و خورشید بهترین مثال از این نوع است. دسته آخر منابع نوری، نورهای پروژکتوری میباشند که در واقع حالت خاصی از نورهای نقطه ای هستند. تنها تفاوت این دو دسته این است که نورهای پروژکتوری (یا نورهای لکه ای) همه محیط اطراف خود را به یک شکل روشن نمیکنند، بلکه همانند یک نورافکن، ناحیه ای مخروط وار را نورپردازی میکنند. از جمله خصوصیات مشترک همه نورها، رنگ، شدت و ضریب رقیق شوندگی نور بر حسب فاصله تا منبع نوری است. شاید بتوان گفت بیش از نیمی از تکنیکهای ویژه گرافیک کامپیوتری به مسئله نورپردازی مربوط میشوند، از این رو این بخش از گستردگی زیادی برخوردار است و میتوان با تغییر ماده سطح، رنگ نور، و رنگ گره ها هزاران جلوه بصری زیبا را خلق کرد. یکی دیگر از مباحثی که به شکل روز افزونی در گرافیک سه بعدی مطرح میشود، مسئله بافت سطوح میباشد. بافت یا(texture) در واقع تصویری دو بعدی است که به شکلی خاص بر روی سطوح و اجسام سه بعدی نگاشته میشود تا به آنها ظاهری واقع گرایانه تر بدهد.
برای اینکه بتوانیم اشیاء را در فضای سه بعدی حرکت داد یا ظاهر کاملا پرسپکتیوی به وجود آورد به شاخه ی از ریاضیات به نام جبرخطی نیاز داریم. ماتریسها آرایه های چند بعدی از اعداد هستند که میتوانند برای انجام بسیاری محاسبات پیچیده بکار روند. در گرافیک سه بعدی ماتریسها حکم مفاصلی را دارند که سایر بخشها را به هم متصل میکنند؛ از جمله کاربردهای آنها تعریف یک محوطه دید(viewport) برای نمایش اشیاء است. همچنین میتوان به کمک آنها تبدیلات گوناگونی روی اشیاء سه بعدی انجام داد. انتقال، چرخش، تغییر اندازه، منعکس کردن روی یک سطح (مثلا برای ایجاد سایه) را میتوان از جمله رایج ترین عملیات ماتریسی ذکر کرد که در گرافیک سه بعدی خیلی کاربرد دارند. به کمک ماتریسها میتوانید کلیه خصوصیات یک دوربین پیشرفته را در دنیای واقعی در محیطی مجازی شبیه سازی کنید.
بردارها هم از جمله مولفه های پرکاربرد در گرافیک سه بعدی هستند که ارتباط تنگاتنگی با ماتریسها دارند. در واقع در گرافیک سه بعدی، همه مختصات اعم از موقعیت گره ها، بردارهای نرمال، مختصات بافتها (و حتی بنوعی رنگها) بصورت برداری تفسیر میشوند. این بردارها میتوانند یک، دو، سه و یا چهار بعدی باشند. از دیگر نکاتی که شاید جالب به نظر برسد، میتوان به تفسیر رنگها توسط کامپیوتر اشاره کرد.
همه رنگها بر اساس ترکیبی از مولفه های قرمز، سبز و آبی ساخته میشوند. واژه RGB هم از حروف اول این کلمات گرفته شده است. معمولا مقدار هر یک از این سه مولفه بین 0 تا 1 میباشد. میتوان با تنظیم مقادیر مختلف برای این متغیرها انواع رنگها را ایجاد کرد.
حال به نظر شما با چه ترتیبی تصاویر سه بعدی متحرک را بر روی مانیتور نمایش میدهند. یکی از راههای ساخت تصاویر متحرک توسط کاغذ، رسم تصاویری با اختلافات جزئی نسبت به هم بر روی صفحات متوالی کاغذ میباشد، سپس میتوانید با ورق زدن این صفحات، تصاویر متحرکی را مشاهده کنید. در کامپیوتر معمولا دو (یا حداکثر سه) صفحه برای رسم تصاویر رنگی در نظر گرفته میشوند. در اصطلاح به این صفحه ها که مسئولیت نگهداری اطلاعات تک تک پیکسلهای صفحه را دارند، بافر (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) که با انجام محاسباتی بر روی گره های اشیاء اعمال میشود.
قبلا اشاره شد که میتوان با استفاده از ماتریسها، تصاویر متحرک را بوجود آورد. این نوع تصاویر متحرک، انیمیشن از نوع ماتریسی نامیده میشوند که علی رغم داشتن تواناییهای بالا، امروزه بدلایلی کمتر از آنها استفاده میشود. در عوض روش نسبتا جدیدتری برای ایجاد انیمیشن مورد استفاده قرار میگیرد که در اصطلاح گرافیک سه بعدی، انیمیشن اسکلتی خوانده میشود. در این روش که بیشتر برای متحرک کردن کاراکترهای بازی بکار گرفته میشود، میتوان کل بدن و دست و پای شخصیت بازی را بصورت یک شیء واحد ساخت. سپس با استفاده از قابلیتهایی همچون پوست انعطاف پذیر (skin)، حرکتهای لازم به اجزاء مختلف بدن فرد داده میشود.
از دیگر ویژگی هایی که میتوان برای واقعی تر کردن یک صحنه سه بعدی از آن استفاده کرد، سایه میباشد. سایه ها که ارتباط مستقیمی با نور دارند، بطور کلی شامل چند دسته میشوند. ساده ترین نوع آنها (همانطور که در مبحث ماتریسها اشاره شد) با نگاشتن گره های یک شیء بر روی یک صفحه تخت بوجود می آید. این نوع محدودیتهای زیادی دارد. بنابراین جز در موارد خاص از آن استفاده نمیشود. نحوه دیگر پیاده سازی سایه، کاربرد بافتهایی میباشد که حاوی تصاویر رندر شده از سایه ها و سایر اثرات نورها در صحنه میباشند. به این تصاویر ویژه light map گفته میشود. این روش سریعترین نوع ایجاد سایه است. ولی تنها میتوان برای اعمال سایه بر روی سطوح تخت از آن استفاده کرد. انعطاف پذیر ترین نوع سایه ها، سایه های حجمی هستند. سایه های حجمی (shadow volume) میتوانند بر روی هر نوع سطحی اعمال شده، و حتی قابلیت ایجاد سایه برای اشیاء متحرک را هم دارا میباشند. البته باید توجه داشت که این، پیچیده ترین و کندترین نوع سایه ها هم میباشد. از سیستمهای ذره ای (particle system) معمولا برای شبیه سازی پدیده های طبیعی همچون برف، باران، آتش، انفجار و گرد و غبار استفاده میشود. سخت افزارهای جدید، دارای اشیاء آماده ای میباشند که میتوانند بطور مستقیم رندر شده، و حتی تصویری را هم بعنوان بافت بر روی خود داشته باشند. بدین ترتیب میتوان با تنظیم موقعیت، سرعت حرکت، تعداد، طول عمر، رنگ و بافت این ذرات (point sprite) انواع پدیده ها از جمله آتش و برف و باران را به شکلی کاملا واقعی در صحنه های سه بعدی ایجاد کرد. قبلا به بافرها اشاره کردیم، ولی یک بافر مهم دیگر هم وجود دارد. یعنی بافر استنسیل (stencil buffer) که تکنیکهای بسیار زیادی توسط آن قابل پیاده سازی میباشند. از جمله این تکنیکها سایه حجمی (که پیشتر به آن اشاره شد)، آینه، ماسک کردن تصویر، برش زدن مناطق دلخواهی از تصویر، ایجاد اشیاء شفاف، محو تصاویر در پس زمینه و ترکیب تصاویر با هم میباشد. در آخر هم باید به سایه زنها اشاره کنیم. سایه زنها (shader) در واقع پرده آخری میباشند که فراروی شما قرار دارند. با عرضه سایه زنها، و زبانهای سایه زنی، انقلابی در عرصه گرافیک کامپیوتری ایجاد شد و بسیاری از محدودیتهای که تا چندی پیش در سر راه برنامه نویسان گرافیکی (بخصوص سازندگان بازی) قرار داشتند عملا کنار رفتند. امروزه سایه زنهای گره، سایه زنهای پیکسل، سایه زنهای بافت و سایه زنهای نوری وارد صحنه شده اند و میتوان توسط زبانهایی مثل Assembly، C، و حتی Delphi برای آنها برنامه نوشت. وقتی شما از سایه زنها استفاده میکنید، به گونه ای خط رندر کارتهای گرافیکی را بطور کامل تحت تسلط خود در آورده اید. در اینجا کلیه عملیات، از گرفتن گره های ورودی، پردازش، تبدیل، برش، و نگاشت آنها تا پیاده سازی فرمولهای مه، نورپردازی، بافت زنی، سیستمهای ذره ای و انعکاسهای نوری بر عهده خودتان میباشد. حتی میتوانید در سطحی پایینتر، بر روی تک تک پیکسلهای صفحه کار کنید و آنها را با فرمولهای ابداعی خودتان تحت تبدیلات مختلف قرار دهید.
در انتها نام چند از بزر گان و پایه گذاران گرافیک کامپیوتری سه بعدی را ذکر میکنیم :
افرادی چون James Blinn، Andy Catmull، Phillip Taylor و John Carmack
در کل می توان گفت این مقوله هر روز رو به گسترش و پیشرفت است وجای کار بسیاری برای افراد کنجکاو و جویای پیشرفت دارد به عنوان مثال می توان به مبحث سایه زنها که در پیش شرح داده شد اشاره کرد که امروزه موضوع اصلی رقابت سازندگان کارت های گرافیک است.
به امید روزی که متخصصان ایرانی جای واقعی خود را در این زمینه پیدا کنند.
جمعه 14 بهمن 1390 - 3:16
نقل قول این ارسال در پاسخ گزارش این ارسال به یک مدیر
تشکر شده:
ارسال پاسخ



برای ارسال پاسخ ابتدا باید لوگین یا ثبت نام کنید.



پرش به انجمن :

به انجمن سياره دوستان خوش آمديد
سرگرمي و عشاق: جامعه مجازي سياره دوستان افتتاح شد


تماس با ما | پاسخ سوال ساخت تصویر3بعدی واشیا | بازگشت به بالا | بازگشت به محتوا | پیوند سایتی RSS


Powered by RozBlog.Com, © 2002-2012
Theme Translation to MyBB by B.Rahmani
Translation to Rozblog : Pcramz.rzb.ir
Theme design by Majid Online