ديناميك و انيميشين

فصل ۱۲ : ديناميك و انيميشين
پيش‌نيازها
دانشي از مدل‌سازي lighting Viewing,( modeling) و نقش پارامترها در مدل‌سازي و Viewing
معرفي: اين فصل با فصهاي ديگر تفاوت دارد چون اين فصل يك فصل غيرعادي است چرا كه شامل چند شكل است كه دقيقاً عنوان( موضوع) آنرا معرفي مي‌كنند( مشخص‌ مي‌كنند). موضوع( عنوان) اين فصل در مورد حركت است و ما نمي‌توانيم در يك متن دستي نوشته شده مفهوم دقيق حركت

را نشان دهيم اين امكان وجود داشت كه با فايلهاي تصويري در يك متن الكترونيكي مي‌توانستيم با فايلهاي تصويري در يك متن الكترونيكي مفهوم دقيق حركت را نشان دهيم ولي خوب اين فصل بايد پرينت شود. شايد نسخه‌هاي آينده اين كتاب شامل فيلمهايي يا حداقل فايلهاي قابل اجرا با انيميشين باشد ولي هم‌اكنون شما بايد با نمونه‌ها و كدهاي سگمنت‌ها كه فراهم كرده‌ايم كار كنيد و اجراي آنها را روي سيستم خودتان مشاهده امتحان كنيد.
انيميشن كامپيوتري يك مبحث بسيار گسترده است و كتابها و courseهاي بسياري در مورد آن وجود دارد. ما نمي‌توانيم اميدوار باشيم كه عمق مفهوم اين موضوع را در اولين دورة گرافيك كامپيوتري پوشش دهيم. به جاي آن ما روي انيميشن‌هاي نسبتاً ساده كه نوع مدلها و تصاويري كه در اين

course به وجود مي‌آوريم را نمايش مي‌دهند متمركز مي‌شويم. البته با تأكيد روي بخشهاي علمي.
اينگونه پنداشته مي‌شود كه انيميشين عبارت است از ارائه دنباله‌اي از قالبها، يا تصاوير منفرد، آنقدر سريع كه تصويري از شيئي در يك قاب در حال حركت را ايجاد كند. دو نوع انيميشن وجود دارد. انيميشن بلادرنگ (real –time animation) يا انيميشني كه در آن هر قاب با برنامه‌اي در طول اجراي آن مشخص مي‌‌شود و انيميشن Frame –at-a- time يا انيميشني كه با render كردن قابهاي منفرد و اسمبل كردن آنها به يك شكل قابل ديد.( احتمالاً از طريق فيلم يا ويدئو در يك فرآيند توليد مجزا) اسمبل مي‌شود.

اين فصل بيشتر روي انيميشنFrame-at-a-time با هدف رسيدن به انيميشن real-time توجه مي‌كند. هر دو اين دسته‌ها شامل مشكلات تعريف چگونگي تغيير مدلها، lighting و viewing در طول زمان است، ولي انيميشن Frame-at-a- time بيشتر به جزئيات مدل‌سازي و render كردن د

ر سطح بالا اشاره مي‌كند، در حالي كه انيميشن real-time بيشتر به اطلاعات با متغير زمان ساده‌تر براي دريافت refresh rate كه بايد آنقدر بالا باشد كه تغيير مورد نظر را انتقال دهد اشاره مي‌كند. در حالي كه انيميشن real-time به اندازة انيميشن Frame-at-a-time مورد اطمينان نيست. چرا كه مدل‌سازي و rendering ساده‌تري استفاده مي‌شود يا تصاوير با سرعت كمتري تهيه شده‌اند، و مي‌تواند در انتقال ايده‌ها بسيار مفيد باشد به خصوص اگر كاربر بتواند با برنامة انيميشني در حالي كه اجرا مي‌شود ارتباط برقرار كند.

پرسش اصلي در اين course ارتباط ديداري است و تعدادي لغات و تكنيكهاي ويژه در استفادة انيميشن براي ارتباطات وجود دارد. اين ماژول هيچ تلاشي براي تحت پوشش قراردادن اين موضوع ندارد ولي ما پيشنهاد مي‌كنيم كه شما مقداري از وقت خود را صرف جستجو در مورد انيميشن‌هاي موفق كنيد و براي فهميدن اينكه چه چيزي باعث موفقيت‌ آنها شده تلاش كنيد. براي شروع ما پيشنهاد مي‌كنيم كه روي شفافيت و سادگي تمركز كنيد و براي ايجاد تمركز روي ايده‌هاي ويژه براي ارتباط برقراركردن به سختي كار كنيد.

تعاريف:
انيميشن فرآيند توليد زنجيره‌اي از تصاوير و نمايش آنها به گونه‌اي است كه چشمان بيننده آنها را به صورت زنجيره‌اي از حركات نرم ببيند. زنجيرة حركات مي‌تواند ارتباط بين اشيا و فرآيند اسمبل‌كردن اشياء را نشان دهد. و مي‌تواند به شما اين امكان را بدهد كه زنجيره‌اي از راههاي نمايش اطلاعات را طراحي كنيد و يا حتي به كاربر اين امكان را مي‌دهد كه يك صحنه را از نقطه ديدهاي مختلف كه شما مي‌توانيد طراحي كنيد ببيند.

راههاي زيادي براي طراحي رشتة انيميشن وجود دارد، ولي بهترين شروع مدل كردن صحنه موردنظر با پارامترهايي براي كنترل ظاهر مدل است. وقتي شما از پارامترها (منظور متغيرهايي است كه مي‌توانيد در برنامه‌تان به كار ببريد) براي كنترل موقعيت اشياء، موقعيت يا خواص نور، شكل يا روابط و يا اشياء، رنگها، بافت محورهاي مختصات، يا هر نقطة كليدي ديگر در مدلتان

استفاده مي‌كنيد،‌ مي‌توانيد مقادير پارامترها را با زمان تغيير بدهيد تا ديد بينندة خود را در طول اجرا برنامه عوض كنيد. اين به شما اين امكان را مي‌دهد كه به خصوصيات ويژة هر يك از اين جنبه‌هاي مدل خود تأكيد كنيد و با بينندة خود ارتباط برقرار كنيد.
تعريف مدلسازي خود به وسيلة پارامترها، بايد يادآور شويم كه تنها سه قسمت براي هر صحنه در تعريف توسط گراف صحنه وجود دارد. يكي جغرافياي صحنه، كه مي‌توان از پارامترها براي توضيح جغرافياي صحنه استفاده كرد، مثالي از اين مي‌تواند تابع سطح باشد، كه تابع شامل پارامتري

است كه با زمان تغيير مي‌كند. مثل: . ديگري تبديل صحنه است، كه شامل پارامترهايي است براي تعريف چرخش، انتقال، يا مقياس‌گذاري شي‌ء در صحنه، مثالي از اين مي‌تواند حركت يك شي در فضا با جزء تبديل افقي t و جزء تبديل عمودي كه به شي يك مسير parabolic مي‌دهد. سوم ظاهر شيء در صفحه است كه ممكن است سطح داراي جزء رنگي (۱-t) باشد براي تغيير از opaqve در لحظة o به trasparent در لحظة‌۱، كه به كاربر اين امكان را مي‌دهد كه از سطح بتواند هر آنچه زيرش است را ببيند. اينها انواع ساده‌اي از كاربرهاي مدلسازي‌هاي پارامتريك است و نبايد هيچ مشكلي در ايجاد يك مدل ايجاد كند.

يك راه براي طراحي رشتة انيميشن به وسيلة اين كار انيميشن procedural (روندي) ناميده مي‌شود و براي انيميشنهاي ساده كه شما تنها چند پارامتر براي تعريف رشته داريد به خوبي كار مي‌كند( هر چند كلمة “ تنها چند” به سيستم شما و هدف شما از رشتة گرافيكي بستگي دارد). اغلب انيميشنها كه ما بحث مي‌كنيم در كاربرهاي علمي ارائه مي‌دهيم به صورت procedural هستند، كه ما موقعيت و رفتار شي را در طول زمان با اصول علمي محاسبه مي‌كنيم و آنها را در حالي كه تغيير مي‌كنند نشان مي‌دهيم. اين امر محاسبات خواص هر قاب از انيميشن را راحت‌تر مي‌كند.

راه ديگر براي طراحي يك رشتة انيميشن ايجاد قاب‌هاي كليدي يا تصويرهاي خاص كه مي‌خواهيد در يك زمان خاص در نمايش انيميشن ظاهر شوند است. انيميشن كه به اين روش ايجاد مي‌شود انيميشن قاب كليدي ناميده مي‌شود. دوباره، هر قاب كليدي مي‌تواند به صورت يك سري پارامترهايي كه نمايش را كنترل مي‌كند تعريف شود اما بجاي كنترل كردن پارامترها به صورت برنامه‌ريزي شده، پارامترها interpolate شده‌اند بين مقادير موجود در قاب‌هاي كليدي.

و اما نوع سوم انيميشن، كه به نظر نمي‌آيدكه در موارد قبل به آن فكر شده باشد انيميشن الحاقي است. اينجا شما دو مدل را تعريف مي‌كنيد و هندسة مدل اول را در هندسة مدل دوم الحاق مي‌كنيد. يك مثال براي اين مورفينگ است كه در آن شما با يك شيء (صورت، حيوان، ماشين …) شروع مي‌كنيد و با يك چيز ديگر تمام مي‌كنيد براي تأكيد كردن تغيير از يك چيز به چيز ديگر. اين يك رشته از تصاوير را شامل مي‌شود پس اين يك انيميشن است اما اين بيشتر نوع تخصصي روند است و بيشتر در اينجا بحث نمي‌شود.

شايد ساده‌ترين راه رسيدن به انيميشن تعريف صحنة كلي‌تان به صورت يك پارامتر منفرد و بروزكردن آن پارامتر هر بار كه يك قاب جديد توليد مي‌كنيد باشد. شما مي‌توانستيد فكر كنيد كه پارامتر زمان است و انيميشن شما به صورت يك مدل متغير با زمان است. اين شايد راه رسيدن طبيعي باشد وقتي كه شما با يك مشكلات علمي كار مي‌كنيد جايي كه زمان نقش فعالي را در اكثر مدلينگ‌ها ايفا مي‌كند فكر كنيد كه چقدر غلم سركار و كار دارد با تغيير در واحد زمان اگر بدانيد كه چقدر طول خواهد كشيد كه صحنه‌تان ايجاد شود شما مي‌توانيد همچنين پارامتر زمان را تغيير دهيد. براي يك مقداري براي هر قاب كه بيننده قابها را با سرعتي كه زمان واقعي رفتار سيستمي كه مدلسازي كرده‌ايد تخمين مي‌زند.

معني ديگر پارامترها مي‌تواند شمارة‌ قاب باشد، رشتة شماره‌هاي تصوير خاصي كه شما در يك سري قاب كه زنجيرة انيميشن را درست مي‌كنند محاسبه كرده‌ايد. اگر شي با انيميشني كه با ضبط و پخش‌كردن در يك rate شناخته شده (معمولاً ۲۴ تا ۳۰ قاب در ثانيه) سروكار داريد، مي‌توانيد شمارة قاب را به پارامتر زمان انتقال دهيد، ولي اين تفاوت در نامها براي پارامترها تفاوت در تفكر را منعكس مي‌كند، چرا كه شما به مدت زمان توليد قاب توجه نمي‌كنيد.
يك جنبه كليدي در توليد انيميشن در زمان واقعي Frame rate است سرعتي كه شما قادريد يك تصوير جديد در زنجيرة انيميشن ايجاد كنيد. همانطور كه در بالا اشاره شد، سرعت قاب احتمالاً براي قابهاي توليد شده با جزئيات بيشتر نسبت به قابهاي مشابه كه از قبل محاسبه شده‌اند و در دستگاه ويدئوئي ديجيتال يا آنالوگ ذخيره شده‌اند كمتر است.

اما در اينجا فرق ديگري هم وجود دارد: سرعت قاب براي تصاوير توليد شده در زمان واقعي. ممكن است ثابت نباشد. به هر حال سرعت قاب دقيقاً قابل كنترل است، اگر شما خودتان ويدئوي “hardcopy” انيميشن خودتان را ايجاد كرده باشد. مهم نيست تصوير در يك قاب منحصر چه قدر پيچيده باشد.
فصل hardcopy را براي جزئيات بيشتر در اين كتاب بخوانيد.

انيميشنkey frame
وقتي يك شيء keyframe انجام مي‌دهيد تعدادي قاب مشخص بعنوان قابها كليدي كه انيميشن بايد توليد كند مشخص كنيد و بقيه قابها را محاسبه كنيد تا تصور به صورت نرمي از يك قاب كليدي به ديگري حركت كند. قابهاي كليدي بوسيله شماره قاب مشخص مي‌شوند. بنابراين پارامترهايي است كه شما استفاده مي‌كنيد. كه در بالا توضيح داديم.

در انيمشين نوع كارتون بطور معمول قابهاي كليدي بصورت نقاشيهاي كاملاً پيشرفته هستند و براي قابها كه بايد در فرآيند توليد شود “tweening” ناميده مي‌شود. توليد قاب بين قابهاي كليدي در اين حالت هنرمنداني وجود دارند كه قابهاي in-between را با re-drawing (دوباره نقاشي كردن) المانهاي قاب كليدي در حاليكه بين قابهاي كليدي در حركت هستند توليد مي‌كنند. هرچند ما

تصاوير را با برنامه‌نويسي توليد مي‌كنيم. بنابراين بايد بجاي نقاشي با مدلها شروع كنيم. قابهاي كليدي هر پارامتري كه براي تعريف يك تصوير مورد نياز است را دارند و قابهاي in-between مان را براي الحاق اين پارامترها ايجاد مي‌كنيم.
انيميشن ممكن است بعنوان كلكسيوني از رنجيره انيميشن( در فيلمها، اينها بعنوان shots معروف است)فرض مي‌شود كه هر يك از قسمتهاي اجزاء، اشياء، تبديلات، نورپردازيهاي پايه‌اي مشابهي استفاده مي‌كنند.

سپس براي هر زنجيره اجزاي يكسان و مجموعه يكسان از پارامترها براي اين اجزاء داريم و پارامترها در هنگام عبور از اين زنجيره عوض مي‌شوند. براي هدف انيميشن خود اجزا مهم نيستند، ما نياز دايم روي مجموعه پارامترها و راههاي تغيير اين پارامترها متمركز شويم.
با انيميشن keyfrome پارامترها در هنگام تعريف قابهاي اصلي ست مي‌شوند و در نوعي حالت در حركت قابها تجديد مي‌شوند.

براي نمونه مدلي را در نظر بگيريد كه در حالتي تعريف شده كه اين امكان را به ما مي‌دهد كه پارامترهايي كه رفتارش را كنترل مي‌كنند تشخيص دهيم. اجازه بدهيد كه اين موضوع را تعريف كنيم…
شكل ۱-۱۳ شييء كه ما animate كرده‌ايم.
براي بحث در مورد روشهاي تغيير يك پارامتر براي رسيدن به يك حركت جرم بين يك قاب اصلي به قاب ديگر نياز داريم چند اصل را معرفي كنيم اگر مجموعة پارامترها را بعنوان يك بردار واحد فرض كنيم p=<a/b/b/….,n> آنگاه مي‌توانيم مجموعه پارامترها را در قاب داده شده M به صورت
در نظر بگيريم كار با سكمنت زنجيره قالبهاي كليدي انيميشيني كه با قاب K شروع مي‌شود و به قاب ما مي‌رود. داريم:

و
p مقدار بردارهاي پارامتر آن دو قاب است در مثالهاي بالا مي‌بينيم پارامترها…
اولين دستيابي به اين الحاق استفاده از الحاق خطي (linear interprotion) مقادير پارامترها است. بنابراين اگر ما تعدادي قاب بين اين قابهاي اصلي داشته باشيم C=L-K است كه داريم:
براي هر پارامتر و هر عدد صحيح i بين K,L اگر t=i/c باشد مي‌توانيم معادله را به صورت بنويسيم كه راه آشنايي براي بيان الحاق خطي خالص است. اين يك محاسبه مستقيم است و مي‌تواند مقادير پارامترها با تغيير حركت قابهاي اصلي از اين دستيابي اوليه ساده پچيده‌تر است.هر چند ما نه تنها حركت ملايم بين دو قاب كليدي را مي‌خواهيم بلكه ما بايد حركت قال را قبل و بعد از حركت تركيب كنيم.

الحاق خطي توضيح‌ داده‌شده در بالا اين امر را تأمين نمي‌كند هر چند بجاي آن ما احتياج داريم كه از يك دستيابي الحاقي كلي‌تري استفاده كنيم كه آسان‌سازي داخل و بيرون حركت ناميده مي‌شود راه اين است كه از يك حركت از نقطه شروع آغاز كنيم و با سرعت بيشتري به وسط برويم و قسمت پاياني را با سرعت كمتري برويم تا جائيكه تغيير پارامترها را متوقف كنيم( و در نتيجه هر حركتي در تصوير متوقف مي‌شود) وقتيكه در لحظه‌اي كه به آخرين قاب زنجيره مي‌رسيم. در شكل ۲-۱۳ مقايسه‌اي بين الحاق خطي ساده درچپ يا الحاق شروع به بالا/ با حركت كند روبه پائين

تدريجي در راست انجام شده‌است. شكل دست راست كه منحني sinusoidal مي‌تواند با معادله نشان داده شود ديده مي‌شود كه در هر دو حالت از t=i/c استفاده مي‌شود مانند پاراگراف بالا بنابراين وقتي t=0 است ما در قاب k هستيم و وقتي t=1 است ما در قاب L هستيم.
شكل ۲-۱۳ دو منحني الحاق: خطي(چپ) و (right)sinusodial درواقع اين آسان‌سازي بداخل و آسان‌سازي به خارج ممكن است كافي نباشد چرا كه براي تأكيد به حركت ممكن است شما

بخواهيد شييء مورد حركت قبل از حركت به جلو به آرامي به عقب حركت كند. و مثل از رفتن به بقيه جاها و به پشت جايگاه نهايي برو شما مي‌توانيد ايده بالا را با انجام چنين عملي تطبيق دهيد. براي چنين كاري بايد منحني الحاق را به سمت منفي نمودار ادامه داد. اين نوع حركت جايي است كه انيميشن تبديل به هنر شد.

براي تنظيم حركت آرام در بين قابها همچنان اين مشكل وجود دارد كه پارامتر مي‌تواند حركت در يك جهت بالا به قاب اصلي ايجاد كنند و سپس آن حركت با اثر آن مي‌تواند در هنگام ترك قاب اصلي جهتهاي كاملاً متفاوت برو دو به قاب ديگر برود و اين در صورتي است كه حركت ما بين قابهاي اصلي هنوز آنقدر ملايم نيست براي رسيدن به اين موضوع نياز داريم نوع پيشرفته‌تري از الحاق را تهيه كنيم.
اگر ما الحاق درجه دو با درجه سه از معادلات رياضي در نظر بگيريم كه الحاقهاي بين تعداتد نقاطي كه يكديگر را قطع مي‌كنند وجود دارد ما نياز داريم نوعي الحاق كه اين امكان را مي‌دهد كه الحاق هر قاب اصلي را دقيقاً قطع كند به نرمي بين مجموعه قابهاي اصلي حركت كند پيدا كنيم و براي چنين كاري نياز داريم كه بتوانيم پارامترهاي هر قاب را بصورتي كه دقيقاً به پارامترهاي قاب اصلي برسد و بتواند بين مقادير پارامترها به نرمي حركت كند مقداردهي كنيم. از ميان انواع مختلف الحاقهاي موجود مي‌توانيم الحاق Catmull-Rom را كه در وصل Spline modeling معرفي شده‌است انتخاب كنيم كه نوعي از الحاق كه در رديف دوم شكل ۳-۱۳ نشان داده شده‌است و كنتراست الحاق نقطه به نقطه در رديف اول شكل ديده مي‌شود را به ما مي‌دهد.
شكل ۳-۱۳ حركت به داخل و خارج قاب اصلي(چپ و راست تابع زمان است)
رديف بالا: استفاده از الحاق دونقطه‌اي و رديف پائين استفاده از الحاق چندنقطه‌اي

aliasing زماني:
در ايجاد يك انيميشن شما يك دنباله از تصاوير كه حالت مدلتان را در نقاط مشخصي نشان مي‌دهد را ايجاد مي‌كنيد. وقتي اين دنباله درست ديده شوند هر چند كه شما ممكن است كه نتايج را بيابيد كه تأثيرات شگفت‌‌آور بسياري را كه شماگمان نمي‌كرديد نشان دهد بسياري از اين مشكلات ممكن است مربوط به مشكلات سيستمهاي گرافيكي باشد. براي مثال اگر شما يك شيء كوچك داريد آن شيء ممكن است بسيار متفاوت در سايز همچنين در پيكسلهاي كمتر يا بيشتر انتخاب‌شده براي شيء بنظر برسد اين مشكل aliasing صفحه نمايش است مي‌تواند بوسيله

تكنيكهاي ضد aliasing براي گنجاندن پيكسلهاي portly-coverd در تصوير آدرس‌دهي نمي‌شوند. اما مشكلات ديگر در پردازنده انيميشن اساسي هستند و نمي‌توانند به آساني حذف شوند شما بايد امكان اينكه تصاويرتان در دنباله ممكن است به طور ديگر تغيير شوند نسبت به چيزي كه شما تصور كرده‌ايد را تشخيص دهد.

به يك مثال توجه كنيد: تصور كنيد شما يك شييء چيزي كه در شكل ۴-۱۳ نشان داده شده داريد( براي مثال اين شكل ممكن است پره‌هاي يك چرخ باشد) و اين شكل با زمان مي‌چرخد اگر شما شكل را به آرامي بچرخانيد چشم بطور طبيعي هر پره را چون درمحل آن تغيير مي‌كند دنبال خواهد كرد زيرا مكان هر پره در frame بعدي چون معادل نزديكترين پره در frame قبلي است.
اگر شما بخواهيد حركت‌كردن پره‌ها را مطابق حركت عقربه‌هاي ساعت نشان دهيد و شما شكل را در جهت حركت عقربه‌هاي ساعت به يك زاويه كمتر از ۵/۲۲ بچرخانيد اين حالت اتفاق مي‌افتد مخصوصاً اگر زاويه خيلي كمتر از آن مقدار باشد. اما اگر شما شكل را يك كم سريعتر بچرخانيد با ۴۰ سپس امكان پره در frame بعدي فقط ۵ از مكان پره در جهت عقربه ساعت بعدي در fram قبلي خواهد بود و پره‌ها بنظر مي‌رسد كه همانند يك ساعت سرعت‌سنج مي‌چرخند.
شما ممكن است اين اتفاق را در فيلمها يا وقتي يك شييء گردان بوسيله يك نور فرفره‌اي روشن شده‌است، ديده باشد. اما مهم اين است كه بفهيمد اين حالت ممكن است و براي ادامه اين حالت در كارمان برنامه‌ريزي كنيم.

ساختن يك انيميشن
برقراري ارتباطي كه شما بوسيله انيميشين ايجاد مي‌كنيد بسيار شبيه ارتباطي است كه يك تهيه‌كننده ممكن است در يك فيلم از آن استفاده كند فيلم از يك لغت‌نامه وسيع از تكنيكهاي توسعه داده شده‌است كه جزئيات انواع اطلاعات انيميشنها براي برقراري يك ارتباط علمي كه مي‌تواند براي انديشيدن در مورد طرحهايي در محصولات سينمايي مفيد باشد خواهد داد اگر شما براي انجام اين نوع كار بطور وسيع برنامه‌ريزي كنيد شما براي تكنيكهاي انيميشن‌سازان حرفه‌اي را بخوانيد