مقدمه‎ای بر برنامه نویسی هنری

توی این مدت کرونا که همه مون قرنطینه بودیم و منم مدت یک الی دو ماهی به صورت دورکاری کار میکردم یه جورایی وقت کردم که یه مقداری خودم رو با مسائلی که دوست داشتم سرگرم کنم و وقت بیشتری رو براشون بزارم. یکی از این کارها برنامه نویسی گرافیکی برای ایجاد تصاویر و مفاهیم بصری و هنری بود که علاقه داشتم بهش و باهاش وقت گذروندم و خب سرگرمی خیلی خوبی برای تو خونه بود.

در طول سرچ کردن‎هام به چندتا ابزار و زبان برنامه نویسی و چهارچوب رسیدم که خیلی توی منابع فارسی ازشون چیزی ننوشته بود ولی در دنیا استفاده خیلی زیادی از این ابزارها میشه که دیدم اینجا جای خوبیه که اینا رو تا جایی که باهاشون کار کردم معرفی کنم.

اول یک مقدمه ساده از برنامه نویسی هنری بگم و اینکه چطور دوتا مسئله مختلف تو دوتا دنیای کاملا متفاوت به هم مرتبط میشن و چطور دنیای امروز و آینده داره متاثر میشه ازین قضایا.

تعریف هنر

تعریف هنر به نظر من تمام مدیایی میتونه باشه که احساسات شما رو درگیر کنه، هر چیزی مثل آهنگ، فیلم، کتاب، نقاشی، سازه، شکل، عکس، مجسمه و هر چیزی که در تعریف رسانه میگنجه که با احساسات آدمها در یک سطح عمیق‎تری از اخبار روزانه درگیره رو میتونیم تو طبقه‎‏بندی هنر بیاریم. البته که من خودم رو آدم هنرمندی نمیدونم و قطعا کلی تعاریف دیگه میشه ازش ارائه داد اما تو ذهن من در همین حد ساده‎ست.

برنامه‎نویسی هنری

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

در واقع در این نوع از هنر که به نوعی به هنر تعاملی یا Interactive Art معروف هست در واقع استفاده از برنامه‎های اتوماتیک و کامپیوتری برای دیدن رفتار آدمها و یا داده‎های ورودی از طبیعت یا محیط اطراف و سپس وارد کردن آن به صورت پارامترهای مرتبط با ایجاد اشکال و خروجی بصری به صورت یک هنر مولد (Generative Art) میباشد. به بیان دیگه اینجا هنرمند هنر رو مستقیما ایجاد نمیکنه و فقط طراحی الگوریتم ایجاد هنر رو بر عهده داره و خود محصول کار به صورت یک اثر هنری مستقل و کاملا اتوماتیک بر اساس خروجی الگوریتم خلق میشه که میتونه شامل یک نقاشی، یک صفحه گرافیکی زنده و یا حتی موتورهای کوچکی که حرکت میکنن و باعث تغییر ماهیت یک اثر هنری در طول زمان بر اساس داده‎های ورودی میشن.

قبول دارم این مفاهیم وقتی قراره وارد زبان فارسی شن به نظرم خیلی پیچیده و دور از ذهن میشن چون شاید خیلی باهاشون دم خور نیستیم تو محاوره روزانه. من به خاطر علاقه خودم و کار و حرفه‎م که برنامه‎نویسی هست و با گرافیک کامپیوتری خیلی در تماس مستقیم بودم وارد این حوزه شدم و با یه سری ابزارها و فریمورک‎ها آشنا شدم که میخوام به صورت کلی و اجمالی اینجا اسماشون رو بیارم و یه سری منابع برای یادگیریشون معرفی کنم.



Processing

برخلاف اسمش که ممکنه خیلی اسم عمومی و معمولی‎ای باشه یک فریمورک گرافیکی هست که با کمک زبان برنامه‎نویسی Java نوشته شده و خیلی راحت میشه باهاش اشکال گرافیکی خروجی از کامپیوتر رو ایجاد و کنترل کرد و میشه باهاش اشکال خیلی زیبا و جالبی به وجود آورد که کاملا هندسه‎شون و مکانیزم ایجادشون دست ماست اما خب خیلی وقتا برای ایجاد یک بی‎نظمی زیبا داخل این اشکال از پارامترهای random توی ایجاد و تغییر مداوم توشون استفاده میشه.

  • خوبی Processing اول از همه اینه که بسیار بسیار راحته و اصول اولیه اون رو میتونید از این سایت آموزشی عالی که Daniel Shiffman درست کرده تو یک ساعت به راحتی یاد بگیرید. همچنین Documentation خیلی خوبی روی سایت Processing هست که میتونید ازشون نحوه استفاده از توابع رو یاد بگیرید و مثال‎هاش رو مطالعه کنید. یکی از خوبی‎های این فریمورک نزدیکی بسیار زیاد syntaxش به کدهای Arduino هست که اگر اونو بلد باشید این رو سریع یاد میگیرید. (همچنین میشه باهاش به بوردهای Arduino وصل شد و برخی پارامترهای شکلهامونو از اون بگیریم و یا برای اون دستورات کنترلی بفرستیم مثلا یه سری servo motor رو کنترل کنیم)
  • از جمله امتیازات دیگه Processing اینه که علاوه بر اینکه syntax (قوانین نوشتن یک زبان برنامه‎نویسی) Java رو داره در عین حال میتونید از پورت‎های این فریمورک در زبانهای دیگه مثل Python یا Javascript هم استفاده کنید. (گرچه سرعت اجرای برنامه‎شون پایین تره به تجربه) اما با این میتونید خروجی کارتون رو روی صفحه وب هم اجرا کنید و باهاش سایت‎های زیبا‎تری طراحی کنید. بعضی از Artwork هایی که پشت سایت‎ها کار میکنن (به جای Canvas) از Processing استفاده میکنن (برای مثال صفحه اول سایت خودم)
یک پلن خیلی ساده برای سرگرم کردن مخاطب تو سایت
یک پلن خیلی ساده برای سرگرم کردن مخاطب تو سایت

البته خروجی‎های خیلی خیلی زیباتری با استفاده از Processing درست میکنن و کدهاش به صورت Open Source هست که به راحتی میتونید خودتون اجراشون کنید یا اینکه از کدهاش نحوه درست کردنشون رو یاد بگیرید و توشون تغییر ایجاد کنید. یکی از سایت‎های خوبی که کلی نمونه کار Processing داره سایت OpenProcessing هست که دیدنش رو حتما پیشنهاد میکنم.

نمونه کارها در سایت OpenProcessing
نمونه کارها در سایت OpenProcessing
  • سومین امتیاز بزرگی که Processing به نظرم داره اینه که کتابخونه‎های خیلی زیادی برای کارهای پردازشی و گرافیکی از جمله کار با دوربین‎های مختلف مثل Kinect رو در خودش داره و ابزارهای خیلی خوبی برای پردازش فیلم و عکس و ایجاد تغییر بر روی تمامی پیکسل‎های صفحه رو به راحتی در اختیار برنامه‎نویس و هنرمند قرار میده.

به طور کلی Processing رو به عنوان پله اول وارد شدن به این دنیا توصیه میکنم گرچه ابزارهای دیگه‎ای هم هستن که در ادامه بهشون میپردازیم.

برای اینکه Processing رو خیلی خوب و کامل یاد بگیرید به نظرم یکی از بهترین راهها دیدن فیلهای Daniel Shiffman روی یوتوب هست که خیلی از مسائل پیچیده دنیای تکنولوژی و گرافکی کامپیوتری رو به ساده‎ترین شکل اینجا تو کانال یوتوبش توضیح میده. البته ممکنه این آدم بعدا بشه یکی از معلم‎های باحال و با انرژی واستون که کلی چیزای مختلف از تو کانالش یاد بگیرید.

Open Frameworks

این ابزار هم یکی از قوی‎ترین ابزارهای و فریمورک‎هایی هست که توی زمینه ایجاد و خلق آثار هنری دیجیتال و زنده با استفاده از زبان برنامه‎نویسی C++ به کار میره و به همین دلیل سرعت خیلی بالایی در پردازش داره. در واقع قضیه Open Frameworks مجموعه‎ای از فریمورک‎های Open Source هستن که برای پردازش تصویر، خلق تصاویر گرافیکی و پردازش و ایجاد الگوریتم‎های مختلف و دریافت و ارسال فرمان به کار میروند که میتونیم باهاشون کارهای مختلفی رو توی حیطه‎های بسیار وسیعی خلق کنیم.

خودم به شخصه خیلی با Open Frameworks کار نکردم اما چون زبان برنامه‎ نویسی اصلیم C++ هست و یکم باهاش ور رفتم که آشنا باشم باهاش و خب قاعدتا این فریمورک هم از استاندارد برنامه نویسی مشابهی استفاده میکنه که در Processing داشتیم (مثل Arduino) که یک تابع برای ایجاد وضعیت اولیه (معمولا setup) و یک تابع برای پردازش مداوم و ایجاد تغییر و خروجی و … استفاده میشه که در طول برنامه در حال اجراست (معمولا loop)

این فریمورک هم تمام مزایای Processing رو داره بجز اینکه فقط زبان C++ رو پشتیبانی میکنه اما خوبیش اینه که میتونیم با تمام کتابخانه‎های C++ قوی ای مثل OpenCV یا OpenGL و …برای کارهامون ازش استفاده کنیم.

یک سایت بسیار خوبی هم کارها و پروژه‎های ایجاد شده به وسیله Open Frameworks رو به معرض نمایش میذاره که میتونید آخرین کارهای انجام شده تو دنیا در این زمینه رو ببینیم و برای کارهاتون الهام بگیرید ازشون که سایت Creative Applications هست.

برو تست کن ببین خوشت میاد؟

خیلی از تجربه‎های آدم‎ها قابل گفتن نیست توی این پست‎ها و نوشته‎ها و اینکه اینها صرفا به جهت اینه که شما با مفاهیم جدیدی آشنا شید و همونطور که من لذت بردم از تایم قرنطینه و خودم رو سرگرم کردم شما هم شاید خوشتون بیاد و چیزهای خیلی خوبی توش یاد بگیرید. تاکید بر اینه که برای تست کردن اینکه از این تلاقی دنیای هنر و تکنولوژی و رسانه خوشتون میاد یا نه بایستی خودتون تصمیم بگیرید ولی مطمئن باشید خیلی طول نمیکشه که به نتیجه برسید در مورد خیلی چیزها پس سعی کنید به جای تلف کردن وقت زیاد برید توش.

امیدوارم یه خورده تونسته باشم ذوق و علاقه خودم رو به این مفاهیم توی این نوشتار منتقل کنم و اینکه در آینده بیشتر در مورد این دنیا و آدمهای بزرگی که توش کار میکنن بنویسم و پروژه‎های کوچیک خودم رو هم اینجا ارائه کنم. اگر سوالی داشتید در این مورد خوشحال میشم بتونم کمک کنم.