Wednesday, November 9, 2011

Renderman RSL-3.1

    Анхны шэйдрээ бичихийн өмнө хамгийн энгийн шэйдр бичих аргачлалтай танилцах хэрэгтэй. Өмнө нь програм бичиж үзээгүй хүмүүст зарим зүйл ойлгомжгүй санагдаж магадгүй. Тиймээс энэ бүлгийг маш анхааралтай уншаарай. Шэйдр нь  бусад програмыг хэрхэн   хөгжүүлдэг түүнтэй яг адилхан зарчмаар  явагдана. Эхлээд шэйдрийн дизайныг гаргаад, шаардлагатай бол хөгжүүлэлт судалгаа хийн, кодыг бичнэ. Үүний дараагаар олон удаа тестлэж шалгаад хэрэглээнд оруулж цаашдын үйл ажиллагааг дэмжиж ажиллах хэрэгтэй болдог.


Design
  Хөгжүүлэлтийн циклийн эхний шат. Кодын нэг үсэг тавигдахаас өмнө  дизайнаа тодорхойлсон байх хэрэгтэй. Шэйдр нь ямар зорилгоор бүтээгдэж байгаа, ямар үүрэгтэй байхыг цаасны өөдсөн дээр ч болтугай тэмдэглэх хэрэгтэй. Өөрөөсөө дараахи асуултуудыг байнга асуух хэрэгтэй.
 ■  Шэйдрийн гол зорилго нь юу вэ?
 ■  Төстэй шэйдр өмнө нь бичиж байсан эсвэл хаа нэгтээ харж байсан эсэх
 ■  Геометр нь тусгай атрибут агуулсан байх уу?
 ■ Олон шатлалтай (multi-pass) зураг бүтээхэд ямар ямар гаралтын хувьсагчид шаардлагатай вэ? Хэрэглэгчийн атрибут болон мессэжийг дамжуулахад ямар аргачлал хэрэглэх вэ?
 ■  Би ийм шэйдр бичих чадвартай юу?
Эдгээр асуултад хариулсны дараагаар шэйдрийг хэрхэн бичих  ерөнхий бүдүүвч гаргах хэрэгтэй. Хэрвээ аз таарвал  шэйдрт хэрэгтэй бүх зүйлийг  та мэддэг байж болно. Тэгвэл R&D шатыг алгасан шууд кодоо бичих бололцоотой.
Research and Development
       R&D гэж нэрлэгддэг энэ үе шат нь шэйдрийг боловсруулах хамгийн гайхалтай бөгөөд төвөгтэй дамжлага. Энэ үе шатанд өөрийн эзэмшсэн бүх мэдлэгийг шавхаж өөрийн хүрээнээс хальж сэтгэх шаардлагатай. CGI-д зарим нэг өөр зориулалттай технологийг шал өөр зорилгоор хэрэглэх нь төсөөлөөгүй гайхамшигтай үр дүнг үзүүлэх тохиолдол гардаг. Энэ нээлтийн томоохон жишээ нь амбиент сүүдэрлэлт (ambient occlusion) .Амбиент сүүдэрлэлтийг  2002 оны “RenderMan in Production” SIGGRAPH хурлын үеэр ILM болон Imageworks компаниуд анх танилцуулсан. Зарчим нь тун энгийн бөгөөд туяа нь  замдаа өөр объекттой тааралдсан эсэхийг шалгах үүрэгтэй. Энэ техникийг хөгжүүлэхэд нөлөөлсөн rayhittest() функц нь анхандаа огт өөр зорилгоор бүтээгдсэн.
       Хөгжүүлэлтийн шатанд SIGGRAPH-аас гаргасан шинэ, хуучин баримтуудыг сайтар харах хэрэгтэй. Таны хийхийг хүссэн шэйдрийг хэн нэгэн урьд нь RSL  дээр хийчихсэн байх магадлалтай. Үгүй бол математик загварчлал гаргана. Та наад захын математикийн мэдлэггүй бол томоохон саад тулгарах нь мэдээжийн хэрэг. Ийм нөхцөлд ном, форум, групп, их дээд сургуулийн лаборатори зэрэг газраас тусламж авч болно. R&D тестийн код нь цэвэрхэн, хурдан, хэрэглэгчид тохиромжтой байх шаардлага байхгүй. Зөвхөн зорилгоо биелүүлж байхад хангалттай. Тайлбар байнга бичиж явах хэрэгтэй!! Амжилттай болвол шэйдрийн бусад хэсэгтэй нийлүүлэх талаар анхаарч эхлэнэ. Асуудлыг бага багаар шийдээд явах нь эцсийн дүнд тун оновчтой шийдэл. Комплекс нийлмэл бүтэцтэй шэйдр бүтээхэд жижиг хэсгүүдийн хоорондын ажиллагааны загварыг сайжруулах шаардлага тавигдана. Шэйдрийн R&D гэдэг нь бололцоотой бүхий л зүйлийг ашиглан төлөвлөсөн хугацаанд амжуулан зөв шийдлийг олох үндсэн зорилготой .
Implementation
 Загвар болон R&D дамжлагын дараагаар кодоо бичиж эхлэхэд бэлэн болно. Зорилгодоо хүрэхийн тулд ашигласан алхам үйлдлүүдээ псевдо  кодоор тайлбарлахыг  зөвлөж байна. Эдгээр алхамуудыг кодон дотроо тайлбар хэлбэртэй тавих хэрэгтэй. Псевдо код хэлбэртэй шэйдрийн жишээг харвал:
/************************
* watermelon.sl
*************************/
surface watermelon()
{
/* Layer 1 - Үндсэн өнгө */
/* Layer 2 - Хар ногоон өргөн судал */
/* Layer 3 - Судас / Судал доторхи нарийн хэсэг*/
/* Layer 5 - Толбо */ /* Гэрэлтүүлэлтийн загвар -Энгийн хуванцар пластик*/
}
Шэйдр бичихдээ кодын урсгал чиглэлийг сайтар анхаарч байх хэрэгтэй. Хэрвээ дараа дахин ашиглагдах процедур бүтээсэн гэж үзвэл үүнийгээ функц болгох шаардлагатай . Хэрвээ энэ функц өөр шэйдр хийхэд хэрэг болно гэвэл толгой файл буюу файлын санд хадгална. 
Testing and Optimization
Энэ дамжлага нь код бичих явцтай зэрэг шахуу явагдана. Код бичих, шалгаж тестлэх, оптимизац хийх гэсэн цикл эцсийн үр дүн гартал байнга давтагдана. Шэйдрээ хурдан энгийн болгохын тулд энэ дамжлага дээр нэлээн хугацаа зарцуулах шаардлагатай. Формал хэлбэрийн бета шэйдрийг цөөн тооны хүмүүсээр туршуулж шалгах нь тун үр өгөөжтэй. Шэйдр туршилтын шатандаа явж байгааг сануулж продакшны нөхцөлөөр эцсийн объект дээр ашиглаж болохгүйг анхааруулна. Хэрэглэгчээс авах оролтууд нь шэйдрийн алдаатай ажиллагаа, програмын bug , буруу дизайныг илрүүлдэг. Та шэйдрийн дотоод бүтцийг мэдэж байгаа болохоор танд төгс мэт санагдавч хэрэглэгч төрөл бүрээр хэрэглээд эхлэхээр дутагдал илрэх үзэгдэл олонтаа таардаг. Ийм үед хэрэглэгчтэй сайтар ярилцаж кодыг эргэн харж нягтлах шаардлагатай. Хэрэглэгч "энэ шэйдрийг ингээд хийчихсэн бол ийм нэмэлттэй байсан бол " гэх мэтээр өөрийн санаануудыг илэрхийлдэг. Ийм хүсэлтүүдийг анхааралтай ажиглах хэрэгтэй. Зарим зүйлийг биелүүлэх гэж зүтгэх нь бөөн асуудлаас өөр юу ч авчрахгүй бөгөөд бүхнийг дахин шинээр эхлэх болдог. Тэгэхээр хүсэлтүүдийг эрэмбэлээд зайлшгүй хэрэгтэй гэж үзсэнээ л оруулах хэрэгтэй. Кодын хэмжээ ихсэх тусам алдаатай байх магадлал нэмэгдэнэ. Тэгэхээр ажлаа багасгахын тулд хялбархнаар шийд. Та шэйдрийн туршилтын ажиллагаа хангалттай гэж үзвэл дараагийн дамжлага руу шилжүүлж болно.
Release
    Шэйдрийг хэрэглээнд нэвтрүүлэхийн өмнө хэрэгцээгүй хэсгийг цэвэрлэж, бусдад ойлгомжтой байлгах үүднээс тайлбар хийнэ. Мөн зарим хувьсагчдыг параметраар солих хэрэгтэй. Шэйдрийн параметр нь хамгийн чухал тохиргоо учраас ямар ямар параметруудыг хэрэглэгч ашиглаж болох вэ гэдгийг тун няхуур бодолцоорой.  
  Хэдхэн тохиргоотой шэйдр нь хэрэглэгчийн боломжийг ихээр хязгаарладаг бол маш олон тохиргоотой шэйдрийг ашиглахад тун төвөгтэй. Ямар ямар тохиргоог хэрэглэгчид оновчтойгоор санал болгох нь таны мэдрэмж, туршлага, техникийн мэдлэгийн түвшин ямар байгаагаас хамаарна. Ямар хэрэглэгч хэрэглэх вэ гэдэг нь бас чухал. Хэрэв TD нар голчлон ашиглах бол параметр олон байсан нь дээр. Параметруудын нэрийг ойлгомжтой байлгах хэрэгтэй. Энэ номон дээр Ka, Kd, ба Ks гэх мэт параметрыг өргөн ашиглана.Эдгээр параметрууд нь шэйдр зохиогчдын хувьд ойлгомжтой ч ихэнхи хэрэглэгч ойлгохгүй учраас өөрчлөх хэрэгтэй. Шэйдрийг хэрэглээнд нэвтрүүлэхдээ эцсийн хэрэглэгчид зориулсан баримтын хамт гаргана. Шэйдрийг дагалдуулан түүний ажиллагаа, параметруудыг тайлбарласан HTML хуудас, параметруудын утгуудын пресет зэргийг хавсаргавал үнэхээр гайхалтай. Ихэнхи шэйдр зохиогчид вэб хуудас хийх завгүй учраас .sl файлд анализ хийн баримт боловсруулах чадвартай Python, Perl гэх мэт скрипт зохиож болно.
Update and Maintenance
Үхэх нь үнэн, татвар төлөх нь үнэн гэдэг шиг  хөгжүүлэгч нь шэйдрийнхээ цаашдын үйл ажиллагааг нь байнга дэмжиж сайжруулах шаардлагатай болдог. Шэйдр зохиосны дараа арчилалгүй, хаа нэгтээ хэн нэгэн хэрэглээд хөгжүүлж л байгаа байх гээд  хаячихдаг бол үнэхээр амар билээ. Тийм биш юмаа. Хэдэн сар жилийн өмнө зохиосон шэйдр эсвэл функцаа сайжруулахын тулд ханцуй шамлан ороход бэлэн байх хэрэгтэй. Энэ  үед та тайлбар хийж явсан нь сүүлд яаж аминд орж байгааг ухаарна. Хэрэглэгчид нийцтэй баримт боловсруулах хэд хэдэн програм байдаг. Үүний нэг нь үнэ хөлс нэхдэггүй doxygen юм. http://www.stack.nl/~dimitri/doxygen/. Хаяг ажиллахгүй бол гүүглдэхэд хангалттай. Үүнийг ашиглаж сурахад тун энгийн. Сайт дээр байгаа тусламжийг уншихад л хангалттай.

No comments:

Post a Comment