We are apologize for the inconvenience but you need to download
more modern browser in order to be able to browse our page
17 مرداد 1395

Normal

In Computer Graphics

دنیای بزرگ نرمال ها

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

1. نور پردازی و رندر
2. داینامیک و موشن گرافیک
3. متریال

normal
انواع نرمال
همانطور که گفتم ، نرمال ها در اكثر برنامه های سه بعدی به دو نوع face normal و vertex normal تقسیم میشوند ، اما در برخی موارد محدود متلف برنامه Houdini ما انواع دیگری نظير point normal هم داریم.

کاربرد نرمال ها در رندر
از مهمترین کاربردهای face normal ها میتوان به مشخص کردن سطح اصلی مدل ها اشاره کرد. بدین صورت که سطحی را که نرمال از ان سمت قرار میگیرند را سطح اصلی و سطحی را که خلاف جهت نرمال قرار دارند را سطح پشتی میگوییم.
در مرحله رندر یا حتی مدلسازی میتوانیم کاری کنیم که تنها سطح اصلی مدلها رندر شود و این باعث بیشتر شدن سرعت رندر و همچنین سرعت نمایش در viewport میشود و کار مدلسازی را هم ساده میکند. مثلا در برنامه 3DsMax ویا Maya با غیر فعال کردن گزینه Double Side همین کار را انجام میدهیم. با کمک گزینه های مخصوص نظير reverse normal میتوانیم جهت نرمال را برای برخی فیس های خاص معکوس کنیم.

از نرمال های مخصوص ورتکس برای نرم یا سخت کردن لبه های Edge ها در مدلها استفاده میکنیم. به طوری که هرچه راویه نرمال ها به عدد صفر نزدیکتر بشود لبه های edge ها سختتر میشود تا جایی که کاملا فیس های مدل دیده میشود و بالعکس با ببشتر کردن زاویه نرمال ها لبه ها نرم تر میشود. بعضا در انجام برخی مراحل مدلسازی مثل bevel ممکن است زاویه نرمال ها تغییر کند و لبه های فیس ها دیده شود که با بیشتر کردن زاویه نرمال یا استفاده از گزینه soften edge در مایا میتوان این مشکل را برطرف کرد.
431px-Surface_normal_illustration
کاربرد نرمال در متریال
شاید بیشترین کاربرد نرمال ها در متریال باشد. اگر متریال دولایه ای ساخته باشید که قرار است سطح داخلی مدل را ابی و سطح خارجی را قرمز کند , اینجاست که نرمال ها کاربرد پیدا میکنند و با تغییر جهت انها میتوان مشخص کرد که سطوح خارجی و داخلی مدل از کدام رنگ استفاده کنند.

از دیگر کاربرد های ورتکس نرمال در متریال ، ایجاد برجستگی های مجازی نظير Bump و Normal Map میباشد.
بدین صورت که نوری که به سطح میتابد ، با توجه به زاویه بردار نرمال ، در جهت دیگری بازتاب میشود ، یعنی ما با تغییر جهت نرمال ها میتوانیم زاویه بازتاب نور را کنترل کنیم.
در دنیای واقعی ما به این دلیل اجسام برجسته را برجسته میبینیم که وقتی نور به این سطوح برخورد کند ، با توجه به برجستگی ها در زاویه های مختلفی بازتاب میشود و به این دلیل سطح برجسته دیده میشود. (بدون احتساب سایه )
حال وقتی نور به یک سطح صاف برخورد میکند ، تقریبا همه پرتو های نور با زاویه یکسان در جهت دیگر بازتاب میشوند و این باعث میشه ما سطح را صاف ببینیم.
حال اگر در کامپیوتر کاری کنیم که با تغییر زاویه های نرمال ها ، نور پس از برخورد به سطح مدل ، در جهات مختلف بازتاب شود ، بنابراین ما سطح را برجسته میبینیم ، هرچند که ممکنه اون سطح واقعا برجسته نباشد.!
در Bump Mapping با توجه به روشنی و تاریکی پیکسل های تکسچر روی سطح ، زاویه نرمال ها تغییر میکند و بنابراین نور در جهات مختلف بازتاب شده و ما در رندر سطح مدل را با توجه به تکسچری که به Bump دادیم برجسته میبینیم.
در Normal Mapping به دلیل برخورداری از سه رنگ قرمز سبز و ابی به جای طیف خاکستری که در bump استفاده میشه ، ما دقیقا میتونیم مشخص کنیم که نرمال ها در چه جهت سه بعدی باید قرار گیرند ، مثلا جهت خود روی محور x را از عدد رنگ قرمز بگیرند و بدین ترتیب برای محورهای y و z از رنگ های سبز و ابی استفاده کنند ، به همین دلیله که برجستگی هایی که با normal map ایجاد میشود بهتر از برجستگی های Bump دیده میشوند.

کاربرد نرمال در داینامیک
شاید در خیلی از کارهای داینامیکی که انجام میدهید ، بدون اینکه دقت کنید نرم افزار از نرمال ها استفاده کند. مثلا وقتی روی یک سطح پارتیکل پخش میکنید ، اگر سرعت به ذرات بدهید و از نیروها استفاده نکنید ، مایا پيشفرض از جهت نرمال های سطح برای پخش شدن ذرات استفاده میکند ، به همین ترتیب برای پخش شدن ذرات از سطح curve در برنامه هایی نظير هودینی هم میتوان از نرمال استفاده کرد.

کاربرد نرمال در موشن گرافیک
فرض کنید در برنامه خاصی میخواهی یکسری درخت را روی سطح یک کره پخش یا scatter کنید به طوری که جهت همه درختان رو به سطح خارجی کره باشند ، اینجاست که از نرمال استفاده میشود و ما باید به نرم افزار بگوییم که جهت مدل های instance شده را در راستای نرمال های کره قرار دهد.
مثلا در مایا اگر بخواهیم با پارتیکل یکسری درخت را روی سطح کره instance کنیم به طوری که جهت درختان در راستای سطح خارجی کره باشند ، ما دستوری داریم که به کمک ان میتوانیم زاویه نرمال سطح را بگیریم و به پارتیکل بدهیم و به کمک ان مشخص کنیم مدلی که روی این پارتیکل instance میشود باید چه جهتی داشته باشند.
در برنامه هایی مثل Houdini یکم کاربرد نرمال ها برای کپی کردن یا scatter کردن مدل ها روی ذرات یا نقاط بیشتر میشود و حتی اگر بخواهیم جهت دقیق تری را برای چرخش مدلهای کپی شده مشخص کنیم ، به جز نرمال باید از بردارهای دیگری نظير UP Vector هم استفاده کنیم.
همچنین با تنطیم کردن جهت نرمال های یک curve در راستای جهت curve میتونیم کاری کنیم که همه ذرات در راستای curve حرکت کنند. یکی از فرمول های ساده قرار دادن جهت نرمال ها در راستای curve این است :
مختصات نقطه بعدی منهای مختصات نقطه فعلی curve.
اگر نرم افزاری که استفاده میکنید توانایی تولی بردار BTangent را داشته باشد ، این کار را میتواند اتوماتیک انجام دهد.

کاربردهای دیگر نرمال
خلاصه نرمال ها به جز این موارد کاربردهای بسیار زیاد دیگری دارند که شاید اکتر انها مربوط به ساخت متریال باشد ، در زمان برنامه نویسی یک متریال جدید برای یک موتور رندر ، در اكثر زمان ها ما نیاز به استفاده از نرمال ها داریم ، چون اکثر محاسباتی که در رندر انجام میشود نیاز به نرمال دارند ، مواردی نظير محاسبه specular , Reflection و خیلی چیزهای دیگر.
یک کاربرد دیگر نرمال ها که شاید برای خیلی از دوستان عجیب باشد ، استفاده از ان برای اعمال Displacement روی انفجار ، دود یا اتش میباشد. بدین صورت که در برنامه های خاص مثل هودینی میتونیم یک field مخصوص نرمال تولید کنیم و با کمک ان در مرحله رندر سطح انفجار یا دود را برجسته کنیم ، البته لازم به ذکره که این مورد با موارد دیگر نظير Wavelet در Fume FX و High Res در هودینی و مایا متفاوت است.

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

منبع: jkcompany.org

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Top
LOADING CONTENT