|
|
|
|
بازگشت
به بخش اوّل اين قسمت
3-
انتخابهاي رندرينگ
همچنان كه قبلاً توضيح
داده شد توصيف صحنة رندرمن عموماً به دو فاز تقسيم ميشود. در اولين فاز
پارامترهاي تصويري كه قرار است رندر شود و پارامترهايي كه دوربين را توصيف ميكنند
مشخص ميگردد. اين پارامترها انتخاب[1]
ناميده ميشوند چرا كه ميبايست براي كل فرايند توليد تصوير پابرجا باشند و
بنابراين بايد براي كل صحنه به صورت عمومي تعريف شوند. براي نمونه دقت تصويري كه
قرار است رندر شود يا موقعيت دوربين به
صورت بديهي پارامترهاي عمومي هستند. كد RIB كه در ادامه
ميآيد شامل برپايي انتخابهاي عمومي از يك فريم منفرد از يك تصوير متحرك است: FrameBegin 14 #Image Options Display “joe27.s9.14.tif” “tif”
“rgba” Format 1880 800 1 Explosure 1.0 1.0 Quantize “rgba” 255 0 255 0.5 PixelSamples 3 3 PixelFilter “sinc” 4 4 #Camera Options Clipping 0.4 1200 Projection “perspective” “fov” [30] ConcatTransform [1 0 0 0 0 0 1 0
0 1 0 0 0 0 0 1] Translate [-20 –8 10] Rotate 40 0 .6 1 WorldBegin #Scene Description … WorldEnd FrameEnd 3-1
توصيف تصوير
نخستين نيازمندي هر
توصيف صحنه مشخص كردن پارامترهاي تصويري است كه بايد ايجاد شود. چندين پارامتر
تصوير بايد قبل از هر گونه رندرينگ از هر نوعي كه باشد مشخص گردد. اين پارامترهاي
تصوير با استفاده از هشت فراخواني از اي.پي.آي رندرمن مشخص گردند: Display filename
fileformat imagetype parametelist اين فراخواني نام و
فرمت تصوير خروجي را مشخص ميكند. fileformat ميتواند يكي از هر تعداد فرمت مشخص باشد كه
رندرگر ميشناسد مانند "tif" و "cineon" يا نامهاي عمومي همچون "file" و "framebuffer" باشد كه در اين صورت رندرگر از فرمت پيشفرض استفاده ميكند. parameterlist پارامترهاي اختياري را كه براي فرمت فايل تصوير خاصي معنيدار
است مانند پارامترهاي فشردهسازي مشخص ميكند. Imagetype نوع دادهها را (رنگ، عمق و ...) كه قرار است در فايل قرار
داده شود مشخص ميكند. مثلاً "rgb" و "rgba" به ترتيب تصوير رنگي سه و يا جهار كاناله را انتظار دارد. انواع
مختلف دادههايي كه يك رندرگر ميتواند در يك فايل ذخبره كند بسيار به قابليتهاي
رندرگر و انعطافپذيري فرمت فايل بستگي دارد. Format xResolution
yResolution PixelAspectRatio اين فراخواني دقت
تصويري كه بايد توليد شود را مشخص ميكند. پارامتر PixelAspectRation مشخص ميكند كه پيكسلهاي تصوير بعدي بايد مربعي شكل باشند
(چنان چه كه براي بشتر مونيتورهاي كامپيوتر بايد اين گونه باشد) كه در اين صورت
مقدار آن 1.0 ميباشد يا بايد يك شكل مستطيلي ديگر باشد (مثلاُ با مشخص كردن 0.9
براي تلويزيون). FrameAspectRatio ratio اين فراخواني دقيقاً نسبت صوري فريم رندر شدة نهايي را مشخص
ميكند.
ممكن است به اين نكته
پي برده باشيد كه اين فراخوانيها به طور مكرر پارامترهاي معين تصوير را مشخص ميكنند
و ممكن است باعث ايجاد تناقض بين آنها شوند. به عنوان نمونه پارامتر فراخواني FrameAspectRation و ميزان نسبت صوري فريم كه در فراخواني Format
داده ميشود به آساني ميتوانند متناقض باشند. قصد بر اين بوده است كه كاربر فقط
مهمترين پارامترها را مشخص كند و يك مقدار پيشفرض براي آنها كه مقداري برايشان
در نظر گرفنه نشده حدس زده ميشود. اگر مقادير ناسازگار درخواست شود رندرگر به
بهترين صورت ممكن مصالحه خواهد نمود. Exposure gain
gama اين فراخواني ميزان
گاما را براي تصوير خروجي كنترل ميكند. به طور پيشفرض رندرگر تصوير را بدون
تصحيح گاما (كه گاماي خطي نيز ناميده ميشود) در داخل فايل مينويسد. با مشخص
كردن يك مقدار مميز شناور گاما گامايي متناسب با يك نمايشگر يا چاپگر خاص ميتواند
در نظر گرفته شود. مقدار مميز اعشاري gain به سادگي تمامي مقادير
خروجي را به صورت يك شكل تغيير اندازه ميدهد. اين تابع براي ايجاد صحنههاي
تاريك بدون دستكاري نورها قابل استفاده است. رندرمن هيچ كنترلگر خودكاري براي
ميزان gain ندارد. Quantize imagetype
one min max dither اين فراخواني روشي را كه
بر طبق آن دادههاي مميز شناور ايجاد شده توسط رندرگر به دادههاي صحيح كه بيشتر
فرمتهاي فايل بدان نياز دارند تبديل ميشود كنترل ميكند. پارامتر one مقدار صحيحي كه با مقدار مميز شناور 1.0
معدل است را مشخص ميكند و min و max مقادير كمينه و بيشينهاي را كه فرمت فابل ميپذيرد تعيين
ميكند. اين مقادير به ترتيب 0.0 و one ميباشند ولي بعضي از
فرمتهاي فايل ميتوانند مقادير خارج از محدودهاي را به عنوان نمونه به صورت شدت[2]هاي
منفي يا مقادير ابرسفيد[3]
قبول كنند. اگر هر سه مقدار 0.0 در نظر گرفته شود انتساب نهايي انجام نميشود و
مقادير كاملاُ اعشاري روي وسيلة خروجي نشان داده ميشوند. پارامتر dither ميزان تغيير اعداد
مميز اعشاري را وقتي كه عمل انتساب مقادير روي آنها انجام ميشود كنترل ميكند.
يك عدد تصادفي بين 0.0 و dither به هر عدد
مميز اعشاري قبل از آن كه از آن جزء صحيح گرفته شود اضافه ميشود. عموماً اين
مقدار در صورتي كه بخواهيم اين عمل انجام نشود به 0.0 و در صورتي كه بخواهيم اين
در عمل مقدار يك واحد بيشتر يا يك واحد كمتر تقريب زده شود به مقدار 0.5
مقدارگذاري ميشود. پارامتر imagetype مشخص ميكند كه اين فراخواني به چه نوعي از دادهها ارجاع
دارد. براي انواع مختلف داده مقدارگذاريها متفاوت است. به عنوان نمونه
مقدارگذاري rgba به اعداد صحيح 8 بيتي
با باقي گذاردن عمق z به صورت مميز شناو انجام ميپذيرد. PixelSamples nx,
ny اين فراخواني ميزان آنتيالياسينگ[4]
را با مشخص كردن تعداد نمونه در پيكسل در مسيرهاي x
و y مشخص ميكند. مقادير معمول براي وقتي كه آنتيالياسينگ ساده
مورد نياز است 2×2 و وقتي كه نمونهگذاري تصادفي براي پشتيباني از محوي در حال
حركت[5]
يا عمق زمينه[6] مورد نياز
است 8×8 يا بيشتر ميياشد. PixelFilter filename
xwidth ywidth آنتيالياسينگ با كيفيت
بالا نيازمند كنترل كامل بر روي بازسازي پيكسل نمونه به صورت رنگ پيكسل نهايي ميباشد.
اين فراخواني نوع و عرض فيلتر بازسازي را كه بايد از آن استفاده شود مشخص ميكند.
عرض فيلتر قطر هستة فيلتر است بنابراين فيلترهاي متفاوت كيفيتهاي متفاوتي دارند.
و اين براي هر كابرد خاص كدام فيلتر مناسب است يك مسألة بديهي نيست. براي نمونه
اغلب معتقدند "box" 1 1 يك فيلتر ساده و مناسب است حال آن كه عدة ديكري معتقدند كه "sinc" 4 4
يك فيلتر مناسبتر است و عدهاي ديگر فيلتر "negative
lobes" را ترجيح ميدهند. فيلتر پيشفرض كه "gaussian 2 2"
ميباشد نيز فيلتري مناسب است كه براي بعضي افراد كمي محو وتيره به نظر ميرسد. CropWindow xmin
xmax ymin ymax اين فراخواني مشخص ميكند
كه تنها بخشي از تصوير بايد رندر شود. پارامترها اعداد مميز اعشاري هستند كه يك
چهارگوش را يا استفاده از دستگاه مختصات "NDC" مشخص ميكنند.و به خاطر اين كه اعداد مميز اعشاري ميباشند به
دقت تصوير بستگي ندارد براي نمونه شما هميشه مينوانيد يكچهارم بالا سمت چپ
تصوير را با CropWindow
0.5 0.5 مشخص نماييد. مقادير مميز اعشاري به
دست آمده توسط رندرگر به گونهاي گرد ميشوند كه اگر كاربر چند تصوير را با
مقادير برش به گونهاي كه مربع واحد مميز اغشاري را بپوشاند رندر كند هر پيكسل
تصوير فقط يك بار رندر شود. 3-2
توصيف دوربين دومين نيازمندي يك
توصيف صحنه توصيف پارامترهاي دقيق دوربين است. اين شامل مكان دوربين وميزان
پرتوافكني[7] ديد دوربين
بر روي تصوير است. مكان دوربين همچنان كه
توضيح داده شد در جهان با دستورات استاندارد انتقالي كه ماتريس انتقال ارتباطدهندة
فضاي جهان به فضاي دوربين هستند مشخص ميشود. به طور خاص اين فضاي جهان است كه
با توجه به دوربين مشخص ميشود تا اين كه فضاي دوربين نسبت به جهان كه اين نكته
براي كاربران تازهكار رندرمن كمي گيجكننده است. اما مسلماً از جمله اولين
نيازمنديها آن است كه دوربين قبل از آن كه شيء در برابر آن قرار داده شود ثابت
شود. پارامترهاي پروتوافكني
توسط سه فراخواني اي.پي.آي مشخص ميشوند: Projection type
parameterlist اولين وظيفة يك دوربين
انتقال اشياء سهبعدي به صفحه (يا فيلم) پرتوافكني شدة دوبعدي است. در رندرمن
صفحة پيشفرض پرتوافكني در صفحة z=1 ميباشد.
پرتوافكني نوع پرتوافكني دوربين را مشخص مي كند كه اشياء واقع در صحنه در كدام
صفحه مشخص ميشوند معين مينمايد. در رندرمن حداقل پرتوافكني متعامد[8]
را كه گاه پرتوافكني صفحهاي[9]
يا تخت[10] ناميده ميشود
و پرتوافكني پرسپكتيو[11]
را پشتيباني ميكند. پارامتر parameterlist پارامترهاي مربوط به
انواع اضافي پرتوافكني كه به اين گونه پارامترها نياز دارند را مشخص مينمايد.
به عنوان نمونه ميدان ديد پرسپكتيو است كه با پارامتر "fov" مشخص ميشود. "fov" پرتوافكني پرسپكتيو تمامزاويه (به درجه) را در برميكيرد كه به
طور پيشفرض 90درجه ميباشد. مشخص كردن يك "fov" متفاوت معادل جابهجايي صفحه به اندازة
تانژانت نصف زاويه است كه باعث بزرگنمايي[12]
در تصوير ميگردد. ScreenWindow xmin
xmax ymin ymax پرتوافكني مشخص مينمايد
كه در كجاي صفحة پرتوافكني اشياء روي صفحه ظاهر خواهند شد. اين فراخواني ناحية
مستطيل شكلي از صفحة پرتوافكني كه بايد در تصوير ظاهر شود را مشخص ميكند. مقدار پيشفرض پنجرة
صفحه مقداري است كه بعد باريكتر دقت صفحه را بين اعداد 1.0- و 1.0 قرار ميدهد و بعد عريضتر را به گونهاي
در مركز قرار ميدهد كه برابر با نسبت ظاهري فريم باشد. توجه كنيد كه بزرگنمايي
در يك دوربين پرسپكتيو به طور معادل ميتواند هم با كم كردن "fov" در پرسپكتيو
يا باريك كردن پنجرة صفحه انجام شود. بهتر است كه يكي از اين دو روش انتخاب شود
زير استفادة همزمان اين دو روش ميتواند باعث ايحاد پيچيدگي گرديده گيجكننده
باشد. Clipping nearplane
farplane اين فراخواني صفحات
نزديك و دور برش را مقدارگذاري ميكند. اين عمل از ملزومات عمل رندرينگ به حساب
نميآيد ولي انجام آن از لحاظ كيفيت نهايي كار بسيار تأثيرگذار و خوب است. اين
صفحات غالباً توسط رندرگرها براي بهينهسازي پرتوافكني پرسپكتيو آنها زماني كه
محاسبات مرتبط با تقسيم پرسپكتيو باعث از بين رفتن دقت مميز اعشاري مخصوصاً وقتي
كه صفحه به خوبي در عمق محدود نباشد ميگردد استفاده ميشوند. به طور خاص مقدار
پيشفرض برش (تقريباُ صفر تا بينهايت) بسيار بد هستند و واقعاُ بايد توسط هر
مدلساز حتي زماني كه صحنه در عمق به خوبي محدود شده است بازنويسي شوند. 3-3
كنترل رندرگر علاوه بر پارامترهاي
دوربين و تصوير اي.پي.آي رندرمن براي كاربر امكان مقدارگذاري ديگر پارامترهايي
كه رندرگر بر طبق آن تصوير را توليد مينمايد فراهم ميآورد. بعضي از اين
انتخابها جزئيات قابليتهاي رندرمن پيشرفته را كنترل ميكنند و آنها را در ادامه
مورد بحث قرار ميدهيم. باقي پارامترها بسيار وابسته به رندرگر هستند و به وسيلة
فراخواني Option به آن داده ميشوند. Hider type
parameterlist اين فراخواني روشي را
كه محاسبات بازتابش سطح پنهان انجام ميشود كنترل ميكند. مقدار type يكي از نامهاي از پيش تعريف شدة "Hidden" براي الگوريتم سطح پنهان وابسته به عمق عادي و "paint" براي
الگوريتم رنگ كننده[13] كه كمتر استفاده ميشود ميباشد. علاوه بر
اين رندرگر ممكن است نامهاي ديگري براي ساير الگوريتمهاي وابسته بخه خود تعريف
كند. پارامتر parameterlist روشي براي
دادن پارامترهاي وابسته به رندرگر براي كنترل الگوريتم سطح پنهان انتخاب شده
فراهم ميآورد. Option type
parameterlist اين فراخواني يك نقطة
ورود براي دادههاي وابسته به رندرگر خاص كه در صحنه يا فرايند توليد تصوير
عمومي هستند فراهم ميآورد و در نتيجه در دستة انتخابها قرار ميگيرد. به عنوان
نمونه هم PRMan و هم BMRT انتخابهايي
دارند كه ميزان استفاده از حافظه، محدوديتهاي اختياري روي بعضي محاسبات كه از
لحاظ نظري نامحدودند، انتخابهاي مربوط به حالت رندرينگ و ... را كنترل ميكنند.
اين انتخابها معمولاً بسيار وابسته به الگوريتم هستند و در نتيجه رندرگرها سعي
ميكنند از مجموعه انتخابهايي كه با رندرگرهاي ديگر تلاقي پيدا ميكنند استفاده
نكنند. رندرگرها انتخابهايي را كه نميشناسند ناديده ميگيرند و با استفاده از
اين امر ميتوان توصيف صحنههايي را نوشت كه براي رندر شدن توسط چندين رندرگر
مناسب باشند. RiSynchronize
("abort") اين تابع كه فقط در
مقيدسازي C اي.پي.آي رندرمن وجود دارد باعث قطع فوري فرايند رندرينگ ميشود
و باعث انتقال فوري بافر رندر شده به تصوير نهايي ميشود. 4-
ويژگيهاي سايهزني
رندرمن يك مجموعة غني
از ويژگيهاي ديداري دارد كه ميتواند براي اوليههاي هندسي در توصيف صحنه كنترل
گردد. از بسياري جهات مجموعة از پيش تعريف شدة اوليهها بسيار قابل توسعه است و
هنوز از بسياري جهات بسيار محدود است. اين به خاطر آن است كه به جاي تعريف همة
ويژگيهاي ممكن و ايجاد صدها فراخواني اي.پي.آي براي مقدارگذاري مستقل هر كدام
(همچنان كه بسياري از رندرگرها اين گونهاند) رندرمن به گونهاي تعريف شده كه يك
مجموعة كاملاً قابل توسعه از ويژگيهاي اوليه داشته ياشد. فقط تعداد كمي از
ويژگيهاي بسيار مهم جزئي از مجموعة از پيش تعريف شده هستند. تمامي ساير ويژگيها
قسمتي از سايهزن باز-نهايي و سيستمهاي عمومي ويژگي هستند. براي انعطافپذيري
كامل دو روش متفاوت براي مشخص كردن ويژگيها ايجاد شدهاند: ويژگيهاي موجود در
وضعيت گرافيكي كه توسط اوليهها ارثبري ميشوند و ويژگيهايي كه قسمتي از خود
توصيف اولية هندسي هستند. همچنان كه خواهيم ديد اين دو روش متمم رندرمن را بسيار
توانمند نمودهاند. قسمتي از فايب RIB كه در زير
ميآيد شامل يك بلوك ويژگي براي يك شيء نمونه در صحنه است: AttributeBegin #Hemispherical
wooden dome in a dense fog Declare "densirt" "uniform
float" Color [.2 .45 .8] Opacity [1 1 1] Sides 2 ShadingRate 1.0 Surface "paintedplastic"
"texturename" ["wood.tx"] Atmosphere "myfog"
"density" [1.48] Sphere 1.0 0.0 1.0 360.0 Disk 0.0 1.0 360.0 AttributeEnd 4-1 ويژگيهاي
رنگ تصور يك اي.پي.آي گرافيكي كه پشتيباني
ويژهاي براي يك ويژگي ديداري به اهميت رنگ نداشته ياشد بسيار مشكل است. رندرمن
نيز چنين پشتيباني را فراهم آورده است:
Color color اين فراخواني رنگ پيشفرض
اوليههاي هندسي را مقدارگذاري ميكند. پارامتر color يك آرايه از سه عدد مميز شناور كه اجزاء قرمز، شيز و آبي رنگ را مشخص
ميكند ميباشد. Opacity color اين فراخواني تاري پيشفرض براي
اوليههاي هندسي را مقدارگذاري ميكند. رندرمن تاري را به عنوان يك مقدارمنفرد
در نظر نميگيرد بلكه آن را به عنوان يك فيلتر رنگي در نظر ميگيرد. لذا مقداري براي
هر سه كانال رنگ نياز دارد. بنابراين color
يك آرايه از سه عدد مميز شناور است. تاري بايد بين 0.0 (كاملاً بيرنگ) و 1.0
(كاملاً مات) باشد تا رندرگر به درستي كار كند. Matte flag رندرمن ميتواند
تصاويري با مكان سهبعدي براي اشيايي ايجاد كند كه آن اشياء در فريم رندر شدة
نهايي ظاهر نخواهند شد (ولي مكان آنها به صورتها مختلف از قبيل فرورفتگي يا
برآمدگي قابل مشاهده خواهد بود). علاوه بر آن تمامي اشياء پشت آنها از فريم حذف
خواهند شد. به عنوان نتيجه آنها يك چاله در فريم نهايي ايجاد خواهند نمود.
پارامتر flag در اين فراخواني يك مقدار منطقي است كه 1 در آن به معناي آن است
كه شيء داراي خاصيت توصيف شده است. 4-2 سايهزنها
مهمترين ويژگي يك
اولية هندسي سايهزنهاي زبان سايهزني است كه به آن انتساب داده شده است. به خاطر
آن كه سايهزنها محاسبة رنگ اشياء در صحنه را به طور كامل كنترل ميكنند
ويژگيهاي گوناگوني كه در ساير اي.پي.آيهاي گرافيكي معمول و آشنا هستند (مثل
ضرائب انتشاري[14] و رنگ عمق[15])
در رندرمن ديده نميشوند. آنها در واقع پارامترهايي براي چند مدل سايهزني از
پيش تعريف شده هستند و به جاي آنها در رندرمن هر سايهزن پارامترهايي دارد كه
براي مدل سايهزنيش ضروري است و بنابراين آنها را به صورت مستقل در پشتة وضعيت
گرافيكي ذخيره ميكند. آنها به سادگي در ليست پارامترهاي فراخواني سايهزن داده
ميشوند. بسياري از سايهزنها
تعداد پارامترهاي زيادي دارند ولي وجود مقادير پيش فرض براي آنها كاربر را از
مشخص كردن كلية مقادير بينياز ميسازد و فقط كافي است كه با استفاده از سازوكار
مشخص نمودن نام پارامتر به صورت يك رشتة كاراكتري و مقدار آن به صورت يك آرايه
از دادههاي متناسب با آن مقادير لازم را مشخص نمايد. سه ويژگي كليدي اوليههاي
هندسي كه عبارتند از رويه[16]،
جابهجا شدگي[17] و جو[18]
همگي به عنوان سايهزن شناخته ميشوند. سايهزن رويه مهمترين سايهزن هر اولية
هندسي است و مسؤول اصلي محاسبة ميزان رنگ و تاري اولية هندسي ميباشد. سايهزن
رويه اطلاعات هندسي اوليه، پارامترهاي سايهزن و نوري كه از طرف سايهزن منبع
نور تابيده ميشود براي محاسبة آن كه با Ci به آن
مراجعه ميشود و تاري مربوط با آن كه با Oi به آن
مراجعه ميشود استفاده ميكند: Surface shadername
parameterlist اين فراخواني مشخص ميكند
كه سايهزني با نام shadernmae بايد براي محاسبة رنگ و
تيرگي اولية هندسي مورد استفاده قرار گيرد. نقشگذاري جابهجا شدگي
مسؤول تعيين ميزان آشفتگي رويه است كه براي ايجاد تغييرات كوچك در جايگيري رويه
كه در خود مدل هندسي در نظر گرفته نميشوند كه كاربرد دارد. اين فراخواني به
صورت كلي رويه را تغيير ميدهد و جايي را كه بر روي صفحة تصوير به نظر خواهد
رسيد تغيير خواهد داد. نقشگذاري به شيوة برآمدگي[19]
يك كلك ديداري است كه به گونهاي بردار نرمال اوليه را دستكاري ميكند كه به
گونهاي به نظر ميرسد كه روية آن داراي انحرافهاي كوچكي است كه در ساختار هندسي
آن واقعاُ وحود ندارند. سايهزن جابهجا شدگي
قبل از سايهزن رويه بر روي اولية هندسي اجرا ميشود. روش عملكرد اين سايهزن
تغيير متغيرهاي عمومي سايهزني است كه "P" و "N" ناميده ميشوند قبل از آن كه سايهزن رويه به انها مراجعه كند
كه اين عمل باعث كار سايهزن رويه روي دادههاي جديد ميگردد: Displacement shadername
parameterlist اين فراخواني مشخص ميكند
كه سايهزن جابهجا شدگي با نام shadername
بايد براي محاسبة ميزان آشفتگي روية اولية هندسي استفاده شود. رندرمن سايهزني نيز
دارد كه كار آن دستكاري رنگ ظاهري اوليهها به گونهاي كه در صحنه نمايانگر آثار
جوي مانند مه يا جابهجاييهاي روشنايي وابسته به فاصله ميباشد. اين سايهزن به
سايهزن جو معروف است و بعد از آن كه سايهزن رويه كارش را به اتمام رساند اجرا
ميشود. اين سايهزن متغرهاي Ci و Oi
را بري به حساب آوردن تغييرات ديداري كه به علت آثار حجمي جو بين اوليه و دوربين
به وجود ميآيد ميباشد. Atmosphere shadername
parameterlist اين فراخواني مشخص ميكند
كه بايد سايهزن حجم[20]
با نام shadername براي محاسبة ميزان دخالت جو در رنگ اوليههاي هندسي استفاده شود. زبان سايهزني داراي
نحوي است كه قابليت پذيرش پارامترهاي سايهزني كه uniform
هستند (براي تمام اجزاي اوليه يكسانند) يا اين كه varying
هستند (روي قسمتهاي مختلف رويه متفاوتند) را دارد. 5-
ساير ويژگيهاي سايهزني
در بخش قبل ديديم كه
چگونه ميتوان برنامههاي زبان سايهزني را براي محاسبة رنگ اوليههاي هندسي به
آنها انتساب دهيم. اين سايهزنها بر روي روية اوليه با توجه به اين كه رندرگر در
كجاي كار نياز به دانستن اطلاعات دارد بر روي نقاط زيادي اجرا ميشوند. دو ويژگي
مهم هستند كه مشخص ميكنند كه محاسبه با چه فراواني صورت گيرد: ShadingRate area اين فراخواني مشخص ميكند
كه سايهزن بر روي روية اولية هندسي با چه فراواني اجرا گردد. اين عمل با مشخص
كردن بيشينة فاصله بين نمونههاي سايهزني انجام ميپذيرد. اگر سايهزن بر روي
يك اوليه با فراواني كافي اجرا نشود به اين معني كه اجراها (نمونهها)ي سايهزن
از هم فاصلة زيادي داشته باشند ناحيههاي بزرگ از رويه همرنگ خواهند شد و جزئيات
صحنه به ميزان زيادي از دست خواهند رفت. حال آن كه اگر سايهزني بر روي يك اولية
هندسي با فراواني زياد اجرا گردد به اين معني كه نمونههاي سايهزن به صورت غيرضروري
نزديك هم قرار بگيرند به لحاظ آن كه در نهايت بسياري از نمونههاي همسايه در
واقع همرنگ ميباشند اين محاسبههاي تكراري تعداد زيادي از سيكلهاي ارزشمند
كامپيوتر را تلف خواهد نمود. به دلايل تاريخي نرخ
سايهزني به جاي آن كه بر حسب فركانس بيان شود بر حسب مساحت بيان ميگردد.
پارامتر area يك عدد مميز اعشاري است كه مساحتي بر حسب پيكسل از بزرگترين
نقطة روي اوليه را كه هر نمونة داده شده ممكن است نمايش دهد نشان ميدهد. به طور معمول نرخ سايهزني
1.0 كه به معناي يك نمونة سايهزني واحد بر روي هر پيكسل است در رندرينگ با
كيفيت بالا استفاده ميشود. رندرينگ به صورت پيشنمايش[21]
يا رندرينگي كه به محاسبة رنگ رويه نياز ندارد (براي نمونه تصاوير فقط داراي
عمق) ميتوانند سرعت سايهزني را بالاتر برابر با 4.0 يا 18.0 قرار دهند و هنوز
هم يك تصوير قابل قبول داشته باشند. ShadingInterpolation
style بسيار كم پيش ميآيد كه
رندرگر نياز به اين داشته باشد كه رنگ يك اوليه را در نقطهاي بين نمونههاي
سايهزني بداند. اين نقطه بسيار به نمونههاي موجود نزديك است و نياز به يك
اجراي ديگر ندارد. به جاي آن رندرگر بين مقادير موجود ميانگين ميگيرد. پارامتر style در اين فراخواني نوع ميانگينگيري را مشخص ميكند. اگر style برابر با "constant" رندرگر به راحتي يكي از دو
رنگ مجاور
را انتخاب مينمايد. اگر مقدار اين پارامتر برابر با "smooth" باشد رندرگر ميانگين حسابي ميگيرد تا تقريب
هموارتري به دست آيد. تكنيك اخير سايهزني Gouraud
ناميده ميشود. 5-1 چندسويگي
مانند تقريباً تمام
اي.پي.آيهاي گرافيكي اوليههاي هندسي رندرمن از ورقههاي نازك تشكيل شدهاند به
اين معني كه آنها اشياء دوبعدي هستند (ضخامت ندارند) كه غالباً به صورت كج در
بعد سوم قرار داده شدهاند. در حالي كه تصور آنها به صورت ورقهاي كاغذ شناور در
فضاي سهبعدي آسان است يك ورقة كاغذ خاصيت بسيار مهمي دارد كه اوليههاي هندسي
ندارند. كاغذ دو سو دارد در حالي كه اوليهها داراي يك سو هستند. براي توضيح
بيشتر بايد گفت كه روش طبيعي تعريف اوليههاي هندسي شامل تعريف بردار نرمال رويه
كه به سمت خارج رويه اشاره ميكند ميباشد و اين بردار فقط به يك سمت اشاره ميكند
كه آن را جلو[22]ي شيء ميناميم
و به جهتي كه به آن اشاره نميكند عقب[23]
ميگويند. به دو دليل اهميت دادن دادن به تفاوت بين اشياء رو به عقب[24]
و رو به جلو[25] معمول
است: اول اين كه بيشتر معادلات سايهزني به جهت بردار نرمال رويه حساسند و
غالباً تصاوير سياه (يا در غير اين صورت سايه زده شده به صورت نادرست) از اشياء
رو به عقب به وجود ميآيند. اين مسأله با برعكس كردن جهت بردارهاي نرمال نادرست
زماني كه آنها قابل مشاهدهاند قابل حل است( در زبان سايهزني اين عمل با روية facefource صورت ميگيرد). دوم اين كه بسياري اط اشياء مدلسازي شده اشياء
سخت[26]
هستند كه به طور كامل و بدون هيچگونه چاله يا قسمتهاي دروني قابل مشاهده هستند.
واضح است كه اوليههاي رو به عقب قسمتهاي دورتر روية اوليه ميباشند كه در جهان
واقعي قابل مشاهده نيستند (هميشه قسمت جلو آنها را ميپوشاند). رندرگر ميتواند
با دور انداختن اوليههاي غير قابل مشاهده در زمان رندرينگ صرفهجويي كند كه اين
فرايند جمعآوري اوليههاي روبهعقب[27]
خوانده ميشود. به هر حال اين مسأله نبايد روي اشيايي كه سوراخ دارند يا قسمتي
از آنها شفاف است اعمال شود. زيرا در اين گونه اشاء ميتوانيم داخل شيء را
ببينيم كه در اين حالت عمداً اوليههاي روبهعقب را از جلو ميبينيم. به دلايل مشاهده شده
مدلساز بايد به طور واضح بيان كند كه يك شيء رندر شده از دو جهت ديده ميشود نه
فقط از جلو. اگر شيئي فقط از جلو قابل مشاهده باشد بيان اين كه رندرگر كدام جهت
را به عنوان جلو در نظر بگيرد آسان است. رندرمن فراخوانيهايي دارد كه اين هر دو
ويژگي را كنترل ميكنند: Sides n در اين فراخواني ساده
اگر n برابر با 1 باشد شيء يكسويه است و رندرگر ميتواند فرض كند كه
اوليه فقط از جلو ديده خواهد شد و ميتواند فرايند جمعآوري رو به عقبها را روي
آن اعمال كند. اگر n برابر با 2 ياشد شيء دو طرفه است و
رندرگر بايد فرض كند كه شيء از هر دو طرف ديده خواهد شد. رندرگر به طور خودكار
نرمالهاي اولية هندسي دو سويه را نميچرخاند (سايهزن بايد اين عمل را به صورت
مناسبي انجام دهد). Orientation direction اين فراخواني مشخص ميكند
كه رندرگر بايد از نرمالهاي حاضر براي شيء استفاده كند (اگر پارامتر direction برابر با "inside" باشد) يا آن كه آنها را برعكس كند (اگر پارامتر direction برابر با "outside" باشد). ReverseOrientation به لحاظ كاربرد زياد
اين دستور در اي.پي.آي قرار داده شده است. كار آن همچنان كه از نامش مشخص است
برعكس كردن جهت بردار نرمال اولية هندسي است. 6-
نورها
بسياري از سايهزنها
اثر خود را در تاريكي نشان نميدهند. رندرمن مانند تمام اي.پي.آيهاي گرافيكي
منابع مجازي نوري دارد كه به صورت شيء در صحنه مدلسازي ميگردد. رابط رندرمن دو
نوع منبع نور تعريف ميكند: نورهاي نقطهاي[28]
و نورهاي منطقهاي[29].
نورهاي نقطهاي از يك نقطه تابيده ميشوند حال آن كه نورهاي منطقهاي از يك
ناحيه از نقاط محدود تابيده ميشوند. به دليل آن كه نحوة تأثير نورها كاملاً به
سايهزنها بستگي دارد بهتر است آنها را به ترتيب غيرهندسي و هندسي بناميم.نورهاي
غيرهندسي منابع نوري هيتند كه از آنها فقط يك اشعه به هر نقطه در صحنه ميتابد: LightSource shadername
handle parameterlist اين فراخواني يك نور
غيرهندسي ايجاد ميكند. حالت دقيق تابش نور توسط سايهزن shadername مشخص ميگردد و پارامترهاي اضافي از طريق parameterlist به آن داده ميشود. براي مراجعة بعدي يك شناسة يكتا به نور
اختصاص داده ميشود كه از طريق پارامتر handle مشخص ميگردد. استفادة
تكراري از يك شناسه باعث بروز خطا ميگردد. در مقيدسازي C
اين فراخواني پارامتر handle داده نميشود
بلكه مقدار بازگشتي تابع معادل اين مقدار را بازميگرداند و به اين ترتيب يكتا
بودن مقدار شناسه براي هر نور تضمين ميگردد. نورهاي هندسي منابع
نوري هستند كه از آنها چندين اشعه به صورت مستقل از هم به روي هر نقطه از صحنه
ميتابد: AreaLightSource shadername
handle parameterlist اين فراخواني تعريف يك نور
منطقهاي را آغاز ميكند. همچون فراخواني قبلي روشي كه اين نور تأثير خود را
نشان ميدهد كاملاً به سايهزني كه با نام shadername به آن مراجعه ميشود بستكي دارد. ناحية نور با فراخوانيهاي
مربوط به ايجاد اوليهها كه بعد از اين دستور ميآيد ايجاد ميگردد و تعريف آن
تا زماني كه تعريف يك نور ديگر كه ميتواند يك نور "null" باشد آغاز شود ادامه مييابد. پارامتر handle
شرايط فراخواني قبل را دارد و در مقيدسازي C
آن كه RiAreaLightSource نام دارد مقدار بازگشتي اين فراخواني مقدار آن را مشخص ميكند. تمامي الگوريتمهاي رندرينگ
توانايي پردازش نورهاي منطقهاي را ندارند. در ميان پيادهسازي رندرمن BMRT داراي اين توانايي ميباشد حال آن كه PRMan اين گونه نيست. اگر يك نور منطقهاي از PRMan خواسته شود يك نور نقطهاي در مركز مختصات فعلي ايجاد ميگردد. در حالت عادي يك نور پس
از تعريف بر روي همة اشياء صحنه تأثير گذار است. با دستور زير ميتوان براي شيء
خاصي كه ممكن است نياز به آن داشته باشد آن را خاموش نمود: Illuminate handle
state اين فراخواني يك منبع
نور را روشن يا خاموش ميكند. پارامتر handle
شناسة نور را مشخص ميكند و پارامتر state يك عدد صحيح است كه 1 بودن آن به معناي روشن بودن آن و 0 بودن آن به
معناي خاموش بودن نور است. 7-
منابع خارجي
علاوه بر توصيف صحنه
رندرگر نياز به دسترسي به منابع دادة خارجي براي كامل كردن عمل رندرينگ نياز
دارد. نقش متن[30]ها، سايهزنهاي
زبان سايهزني و آرشيوهاي RIB در توصيف صحنه به صورت فايلهاي خارجي مورد
رجوع قرار ميگيرند و رندرگر زماني كه به دادههاي آنها نياز داشته باشد آنها را
يافته، فراخواني ميكند. 7-1 نقشمتنها
استفاده از حجم زيادي
از نقش متنها در صحنههاي نيارمند كيفيت بالا امري بسيار معمول است. رندرگرها
معمولاً نياز به آن دارند كه اين نقش متنها به يك نوع فرمت داخلي كه داراي سرعت
فراخواني بالا و نيازمند حافظة كمتري هستند تبديل شود. با وجود آن كه BMRT توانايي بارگذاري تصاوير TIFF
را به طور مستقيم دارد انجام تبديل روي اين تصاوير سرعت عملكرد آن را به طور قابل
ملاحظهاي افزايش ميدهد. رابط رندرمن توابعي
دارد كه در زماني كه يك رندرگر نميتواند يا عمداً نميخواهد فرمتهاي خارجي را
بخواند آنها را تبديل به نقشمتن مورد نظر خود ميكند. اين فراخوانيها امكان آن
را به كاربر ميدهند كه پيكسلهاي خاصي را در طول عمل تبديل غربال (فيلتر) كنند و
براي اين عمل از همان توابع فيلترينگ كه براي فراخواني PixelFilter
استفاده ميشد استفاده مينمايند. علاوه بر اين با اين فراخوانيها ميتوان مشخص
نمود كه نحوة پوشش متن[31]
چگونه باشد به اين معني كه اگر در خارج از محدودة مستطيل ابعاد نقش زمينه به آن
مراجعه شد چه مقداري بازگردانده شود. اين مقدار ميتواند مقدار 0 (براي "black") يا تكرار
همان نقش (براي "periodic") يا تكرار لبة نقش متن (براي "clamp") باشد. اين عمل براي جهتهاي افقي (كه در ليست پارامترها با s مشخص ميشود) يا عمودي (t)
به طور جداگانه قابل كنترل است: MakeTexture imagename
texturename swrap twrap fliter swidth twidth parameterlist اين فراخواني يك نقشمتن
از قسمتي از يك فايل تصويري كه ابعاد آن داده شده ميسازد و فايل مزبور از لحاظ
رنگ محدوديتي ندارد. MakeLatLongEnvironment
imagename texturename filter swidth twidth parameterlist اين فراخواني يك نقش
متن براي محيط ايجاد ميكند. MakeCubeFaceEnvironment
pximage nximage pyimage nyimage pzimage nzimage fov filter swidth twidth
parameterlist اين فراخواني يك نقشمتن
مكعبي حول مبدأ از شش تصوير داده شده ميسازد. اين گونه نقش متنها عموماً براي
محيط استفاده ميشوند. براي فيلترينگ بهتر تصاوير ميتوانند با زاويهاي بازتر
از قائم در كنار هم قرار گيرند كه پارامتر fov
ميدان ديد دوربينهايي را كه تصوير را رندر ميكنند مشخص مينمايد. MakeShadow imagename
texturename parameterlist يك نقش سايه[32]
تصويري است كه اطلاعات عمقي دارد و با مشخص كردن يك مكان در صحنه در دسترس قرار
ميگيرد. به طور معمول زماني كه نور بر ناحية مورد نظر بتابد ناحيه بر اساس نقش
سايه مورد تحليل قرار ميگيرد. از آنجا كه فيلترينگ در اينجا بيتأثير است
پارامتر filter براي اين فراخواني در نظر گرفته نشده است. 7-2 سايهزنها
سايهزنها در زيان سايهزني
رندرمن نوشته ميشوند و هر رندرگري كه از آنها پشتيباني ميكند يك مفسر زبان
سايهزني دارد كه آنها را تبديل به كد مياني يا كد ماشين ميكند. اين كد معمولاً
براي رندرگرهاي مختلف متفاوت است. جالب آن است كه اي.پي.آي رندرمن هيچ فراخواني
براي بارگذاري يك سايهزن ندارد بلكه زماني كه با فراخوانيهاي مانند Surface به يك سايهزن مراجعه ميشود رندرگر در مسيرهاي تعيين شده به
دنبال سايهزني با پيشوند نام مراجعه شده ميگردد. پسوند نام مورد نظر معمولاُ
ثابت است (براي PRMan اين پسوند .slo ميباشد). 7-3 فايلهاي آرشيو RIB فايلهاي RIB
در مستندات رندرمن آرشيو ناميده ميشوند زيرا آنها در واقع آرشيوهايي از
فراخوانيهاي رندرمن هستند. در اين گونه فايلها علامت # نشانة آغاز يك توضيح است: ReadArchive filename اين فراخواني معادل #include براي زبان C
است رندرگر زماني كه به اين فراخواني ميرسد به سراغ فايل داراي نام داده شده ميرود
و دستورات آن را خوانده و يك به يك اجرا ميكند. 8-
مباحث پيشرفته
فراخوانيهاي خاصي در
اي.پي.آي رندرمن وجود دارند كه برخي مفاهيم پيشرفتة گرافيكي را پيادهسازي ميكنند.
اين مفاهيم براي دهههاي متوالي به صورت تئوري وجود داشتند اما رندرمن اولين
اي.پي.آي گرافيكي بود كه آنها را پيادهسازي نمود و در بعضي موارد هنوز هم تنها
اي.پي.آيي است كه از آنها پشتيباني ميكند: 8-1 محوي حركت[33]
در هر تصوير متحرك
كامپيوتري كه قرار است مانند تصويربرداري زنده و واقعي عمل كند يا آن را شبيهسازي
نمايد يك كيفيت بسيار مهم نحوة ظهور محوي حركت است. براي نمايش دقيق فيلم در اين
حالت شاترهاي دوربينهاي واقعي براي يك زمان محدود معمولاً در حدود ثانيه به ازاي هر فريم باز گذاشته ميشود.
اشيائي كه سريع حركت ميكنند يك خط محو مجزا در طول فريم باقي ميگذارند. هر
گرافيك كامپيوتري كه محوي حركت را در موارد لازم اعمال نكند توسط مخاطبان به
راحتي به عنوان يك تقليد ناموفق و كاملاً مصنوعي شناخته ميشود. مشخص كردن يك حركت در
توصيف صحنة رندرمن نياز به استفاده از سه فراخواني اي.پي.آي دارد: Shutter opentime
closetime اين فراخواني در واقع
يك انتخاب دوربين است و بايد در فاز انتخاب توصيف صحنه و در زماني كه ساير
پارامترهاي دوربين (مثل مكان و...) انتخاب ميشوند فراخواني ميگردد. دو پارامتر
مميز اعشاري زماني را كه به شاتر دوربين مجازي بايد به ترتيب باز و بسته شود
مشخص ميكند. اگر opentime با closetime يكسان باشند يا هيچ فراخواني Shutterي يافت نشود تصوير رندر شده داراي
محوي در حال حركت نخواهد بود. واحد زمان اختياري است
و به صورت نسبي تعيين ميگردد به اين معني كه كاربران آن را ميتوانند بر حسب
فريم يا ثانيه از آغاز و يا دقيقه از آغاز و يا هر اندازهاي كه براي سيستم
مدلسازي آسانتر است انتخاب نمايند. انتخاب واحد زمان فقط از اين نظر كه
فراخواني MotionBegin و متغير عمومي زمان در زبان سايهزني يعني time
همان واحد را خواهند داشت مهم است. MotionBegin times اين فراخواني يك بلوك
حركت را آغاز ميكند. يك بلوك حركت معمولاً شامل دو يا چند فراخواني اي.پي.آي
رندرمن ميباشد كه هر كدام نمونههاي يك فراخواني در زمانهاي مختلف به حساب ميآيند.
پارامتر times تعداد اين زمانها را مشخص ميكند كه به طور طبيعي بايد با تعداد
نمونهها كه همان تعداد فراخوانيها ميباشد يكسان باشد. MotionEnd اين فراخواني پاياندهندة يك بلوك حركت ميباشد. به عنوان نمونه صحنهاي
كه در آن كرهاي در طول زمان شعاعش از 1.0 به 1.5 ميرسد ميتواند به صورت زير
بيان گردد: MotionBegin [ 0.0
1.0 ] Sphere 1 –1 1 360 Sphere 1.5 –1.5
1.5 360 MotionEnd 8-2 عمق ديد
اثر ديگري كه در
دوربينهاي واقعي ديده ميشود ولي در يبشتر دوربينهاي گرافيك كامپيوتري به چشم نميخورد
عمق ديد است. عمق ديد به اثري گفته ميشود كه در هنگام فوكوس كردن دوربين روي
نقطهاي در نزديك رخ ميدهد و بر اساس آن نقطة فوكوس شده كاملاً واضح است حال آن
كه زمينة دورتر محو به نظر ميرسد. فقدان اين چنين اثري معادل داشتن يك دوربين
با عمق ديد بينهايت است كه تمام روي فاصله فوكوس ميكند و اين امر باعث آن ميشود
كه اثر فوكوس روي يك نقطة خاص مشخص نگردد. عمق ديد به سه پارامتر
طول لنز، فاصلهاي كه كه دوربين روي آن فوكوس شده و قطر روزنه كه f-stop خوانده ميشود بستگي دارد: DepthOfField
fstop focallength focaldistance اين فراخواني يك انتخاب
دوربين است كه پارامترهايي از دوربين را كه در تعيين ميزان عمق زمينه
تأثيرگذارند مشخص ميكند. پارامتر focallength
طول لنز دوربين را مشخص مينمايد كه براي بيشتر دوربينهاي امروزي بين 30 تا 300
ميليمتر متغير است. پارامتر focaldistance فاصله كه دوربين در آن فوكوس شده را مشخص مينمايد. هر دوي اينها به واحد
فضاي "camera" اندازهگيري ميشوند. براي نمونه اگر يك واحد اين فضا برابر با
1 متر باشد يك تعداد معقول براي focallength
برابر با 0.055 و مقدار معقولي براي focallength
ميتواند 5 باشد. پارامتر fstop همان قطر
روزنه است كه بين 2.8 و 16 در نظر گرفته ميشود. |
|
|
|
|
[1] options
[2] intensity
[3] super white
[4] antialiasing
[5] motion blur
[6] depth of field
[7] projection
[8] orthographic
[9] planar
[10] flat
[11] perspective
[12] zoom
[13] painter
[14] diffuse coefficients
[15] specular color
[16] surface
[17] displacement
[18] atmosphere
[19] bump
[20] volume shader
[21] preview
[22] front
[23] back
[24] backfacing
[25] frontfacing
[26] solid
[27] backface culling
[28] point lights
[29] area lights
[30] texture map
[31] texture wrapping
[32] shadow map
[33] motion blur