Как стать автором
Обновить

Настоящее программирование для гуманитариев с нуля в… 3DS Max

Время на прочтение12 мин
Количество просмотров7.8K

Программирование с нуля


статья расcчитана прежде всего на "гуманитариев".


Исполняемая среда и 


Почему 3DS Max?


Предлагаю немного необычный, но действенный, на мой взгляд способ знакомства с практическим программированием для “гуманитариев". 


Статья будет очень простой и доступной но для основательности попробуем начать с “истории анатомии" :


 Что есть программирование? 


  • написание программ! 

Программ чего? 


  • Программа это последовательность инструкций!

Инструкций кому?
 - В конечном итоге процессору компьютера или смартфона, т.е. физическому, реальному устройству.


Теоретически все верно, но процессор понимает только машинный код, фактически поток цифр или, если уж совсем анатомично, — электрических сигналов “высокого” (например 3 вольта) и “низкого” (1 вольта) напряжения, которое “понимается" схемотехникой процессора как нули и единицы, бинарные сигналы.


В физику полупроводников лезть не станем, но кому интересно — гуглите “полупроводники и логические элементы" )


Ничто не мешает реализовать и “десятинарные” сигналы и десятичную математику но это громоздко и не экономично. Хотя в телекоммуникациях очень много именно “троичных" элементов и математики.


Итак самая настоящая программа это включение и выключение сигналов в электрической цепи процессора, полвека назад только так и было и инженеры буквально паяли свои “программы" из элементарных логических элементов на плате и припаивали к “мэйнфрейму", запускали выполнение и потом отпаивали уступая место следующему “программисту".


Мы и сейчас “припаиваем" оперативную память, видеокарту или жесткий диск, да даже флэшку к своим компьютерам, но благодаря “дядьке Фон Нейману” делаем это без паяльника.


Ища более продуктивные пути взаимодействия с компьютером люди придумали сперва перфокарты а потом и просто доску с ключами-тумблерами “keyboard” для ввода данных в компьютер.


Но главная проблема — непонятность машинных кодов для человека!


Коды решили заменить буквенными аббревиатурами add, mov и т.д. Так появился первый язык программирования — Ассемблер. Этот язык умел только "мычать односложными звуками" с точки зрения человека, но это уже было понятнее чем “язык жестов цифр”.


Такая “замена" реального явления — чем-то другим, называется “абстрагирование". Абстрагирование, использование “абстракций”. Когда древний египтянин подсчитывал урожай своего региона то брал глиняную табличку и обходя поля отмечал каждые десять мешков зерна — одной черточкой в табличке.


Абстрагирование приносит “облегчение" вам не надо держать в голове колонки шестнадцатеричных чисел машинных кодов, думая “вот это вот, это число или код команды?” 


И навык абстрагирования, не какого-то “абстрактного мышления", а умения выявить характерные, применимые с точки зрения задачи, черты и представить (кодировать) их в некоем более понятном виде — куда более важный и полезный навык чем, например, “математический склад ума”.


Например именно абстрактный анализ позволяет ясно увидеть ключевой недостаток ООП — практик: подталкивание к бесконтрольному порождению все новых сущностей.


Но вернемся к теме статьи. 


Итак все это время программы писались “для процессора" то-есть без знания схемотехники процессора для которого вы пишите программу вы не могли быть программистом, с тех пор пошла легенда о том что программист это физик-математик-марсианин.


Задачи далеких от айти сфер, которые должны были решать программы очень мало походили на схемотехнику процессора и поэтому на ассемблере стали писать новые языки программирования. Все более “предметные”, близкие человеческим категориям мышления, программирование на этих языках уже не требовало знания устройства процессора и за это их называли “высокоуровневыми".


Под “уровнем" подразумевают степень абстрагированности от процессора.


Так в Ассемблер вы буквально оперируете регистрами процессора, в языке Си это вовсе не обязательно но вы сами “управляете памятью” компьютера решая в какой ячейке памяти какая переменная храниться, а в Джава прямого доступа к памяти у вас вообще нет.


Одни и те-же нули и единицы, благодаря абстрагированию становятся для музыкантов — нотами, а для художников — оттенками цвета.


Но если, благодаря абстрагированию, мы больше не пишем прграмм "для процессора", то для кого мы их пишем?


Виртуальные абстракции процессора так и называют “виртуальные машины”, например “виртуальная машина джава”.


Это программа которая с одной стороны “знает" все о процессоре и памяти компьютера на котором работает, а с другой позволяет общаться с собой человеку на куда более человечном языке, тот же джава.


Нет никаких препятствий для прогресса и эволюции таких “виртуальных машин" во все более и более совершенные и доступные человеку платформы такие как .NET в виндовс или v8, NodeJS в мире WEB и джаваскрипт.


Программа сегодня, это набор инструкций именно для “исполняемой среды” . 
И не важно как хорошо вы знаете или не знаете C++ вы всеравно не сможете написать на нем игровой движок уровня Unity за вменяемые сроки и средства, если ваша задача — создать игру! 


То-есть вы не просто "учите сишарп" а становитесь программистом среды .NET или Unity, получая все её преимущества и ограничения.


Забегая вперед, скажу, что наиболее совершенной и всеобъемлющей средой сегодня конечно же является WEB. Только в среде WEB вы сможете написать и сайт и игру и десктопное приложение и практически все, что можно представить, за исключением разве что драйверов устройств.


При этом WEB остается максимально доступным и демократичным и развивается наиболее интенсивно и полноценно.


Итак мы твердо поняли, что программирование это в первую очередь не язык а исполняемая среда (которая к слову, может понимать несколько языков).


Исполняемая среда 3DS Max 


Если вы до сих пор, при всем желании, не программист, то скорее всего у вас, как и у меня — не очень хорошо с абстрактным мышлением, типичные примеры для вас не достаточно наглядны а алгоритм “решение квадратного уравнения” вгоняет в сон.


3DS Max это наглядная среда, вы буквально видите со всех сторон и во времени что создаете и это исключительно эффективно для людей с “не техническим восприятием".


Что из себя представляет “исполняемая среда”? —  Это программа, в которую встроен свой язык программирования и которая позволяет с его помощью делать то для чего она предназначена.


Почти все крупные программные пакеты сегодня представляют из себя “исполняемую среду" от ворда до фотошопа. То-есть сегодня и музыкант и художник могут и должны программировать в своей основной деятельности получая выгоду от программного подхода к своей работе!


Итак 3DS Max это программная среда для создания трехмерных компьютерных сцен, объектов, миров. Какой же язык она поддерживает?


На самом деле не один а сразу два языка: MaxScript и Python.


Я немного знаю Python но опыта в 3DS Max  на нем у меня практически нет, так что я буду говорить о MaxScript.


Этот язык хорош тем что практически младший брат основного языка WEB — Javascript!


О том какой язык лучше человечество спорит все время их существования, я лишь скажу что для новичка правильнее начинать с языков с динамической типизацией, что бы это ни значило )


MaxScript как раз такой язык. В двух словах — переменные в динамических языках “не имеют типа", то-есть вы можете хранить в любой переменной любой тип данных (число, текст, трехмерный объект и т.п.)


Услышав ООП, “объектно ориентированное программирование", “классы”, “наследование", “паттерны" и т.п. — воспринимайте это как программисты ООП воспринимают “регистры процессора" — “некая тайная данность, в которую нинада лезть” )


Теоретическое понимание ООП и классов это прекрасно и необходимо, но не более!


Итак приступим:


MaxScript


Чтобы программировать в некоей исполняемой среде — нужна эта самая среда! 


3DS Max — очень дорогая программа, но вы можете получить ученическую лицензию на три года совершенно бесплатно просто указав при регистрации на сайте автодеск что вы ученик. Я не буду вдаваться в юридические нюансы, скажу только что никакой проверки степени вашего ученичества автодеск не делает и вы можете каждые три года получать новую лицензию на очередную версию 3DS Max (и десятков других ее продуктов)


Такая лицензия не годится для коммерческого использования но мы тут учимся.


Итак вы зарегистрировались, скачали и установили 3DS Max.


Запустите его и в меню Scripting выберите Script Editor


Script Editor это простенький редактор в котором можно писать и выполнять программы на MaxScript для 3DS Max.


Программа записывается построчно, элементом программы является одна законченная команда исполняемой среде 3DS Max а значит мы можем просто “поговорить” с 3DS Max "короткими фразами" в одну команду.


Это одно из важных преимуществ этого метода обучения! Возможность “просто початиться" без необходимости сразу писать "целые письма" программ.


Чтобы открыть такое окно общения с 3DS Max нажмите F11


В этом окне есть две половинки верхняя — розовая и нижняя — белая я привык писать в белой, нижней.
Кликните там мышкой и напишите… Что!?


Как и с человеком, общение с исполняемой средой (ИС) нужно вести на понятном ей языке о понятных ей вещах. Каждая ИС создана для работы с какими-то конкретными категориями которые называют “типы данных". ИС для музыки будет понимать категории нот и интервалов а 3DS Max создана для трехмерной графики и понимает все, что касается трехмерного пространства, векторов, матриц, кватернионов, текстур и полигонов, а также десятков объектов уже реализованных в ней.


К слову говоря есть типы данных понятные всем средам, как улыбка понятна всем людям на планете )


Такие типы данных называют базовыми: текст, строка, число и т.п.


"Строка и в Африке строка"


Традиционно первой программой новичка становится “Привет мир!”


Хотя я бы предложил в контексте “общения со средой" поздороваться с ней самой, для чего введите :


Print  “привет тридэмакс!” и обязательно нажмите в конце клавишу “enter”



Первый момент: если вы “пишете текст" то вы используете “строковый тип данных". Такой тип всегда заключают в кавычки, это справедливо практически для всех языков программирования и для всех исполняемых сред!


Print это известная исполняемой среде макса команда, отправляющая следующую за ней строку в “консоль". Консолью называют то самое окошко в которое вы вводите команды ИС.


После нажатия “ввод" последует ответ от исполняемой среды (3DS Max в данном случае). Ответ может быть синим или красным, синий означает “я тебя понял и выполнение твоей команды прошло успешно", красный — “не понял тебя" или “при выполнении что-то пошло не так”


В жизни мы испытываем настороженность к ошибкам как явлению, но на самом деле ошибки это неизбежные спутники на пути к опыту. Постарайтесь как можно быстрее избавиться от психологического неприятия факта ошибки и воспринимать его как разновидность задач.


просто введите:
Print хи-хи, играем с ошибками! 


И нажмите “enter”. 


Окно макс-скрипт-листнер выдаст красный ответ об обнаружении ошибки:



Как вы думаете в чем заключается обнаруженная ошибка?


  • Правильно, мы не включили свое текстовое сообщение в кавычки а команды хихи! — тридэмакс не знает!

Писать вывод в консоль текстовых сообщений это основной базовый навык программиста!


Помните мы не учим тридэмакс и даже не “программирование в тридэмакс” мы изучаем программирование вообще и нам важно отмечать общие черты характерные для всех исполняемых сред.


Создавая программу или исследуя чужую вы будете то и дело вставлять такие текстовые выводы значений переменных и результатов действий, чтобы во время исполнения программы видеть как и с каким результатом выполняются ее шаги.


Но все это остается “программированием для программирования". Важно помнить, что программируете вы для решения конкретной задачи которая лежит вне области самого программирования: “написать музыку", “построить дом”, “создать игру”.


Программирование само по себе очень увлекательно и завораживающе, оно может легко поглотить всё ваше время и внимание которое вы будете тратить на бесконечные знакомства со все новыми инструментами и технологиями, приемами и т.п. 


Легко поддаться искушению пренебречь конечной целью в угоду “красоты/чистоты кода", “совершенства инструмента" и т.п. Забывая о собственно творчестве и проводя дни в жарких спорах о том чье мнение правильнее и какая технология лучше. 


Давайте попробуем заставить тридэмакс выполнить что-то по его прямому назначению, “привет мир!” в трехмерной графике — это создать кубик, введите в окне листнера:


Box()


И нажмите ввод.



Закройте окно MAXScript Listener (вы всегда можете его открыть нажав F11) и полюбуйтесь на ваш результат :



Теперь вызовите окно MAXScript Listener (F11) и введите:


Teapot()



Тридэмакс умеет создавать не только кубики но и чайники! 


Беда только что чайник “съел" наш кубик который прекрасно сошел бы за стол. 


То-есть нам нужно поднять чайник по вертикальной оси (в тридэмакс это ось Z) на высоту кубика.


И тут мы сталкиваемся с одной из самых базовых задач в современном программировании (программировании исполняемых сред): обращение к объекту!


“Програмными объектами” называют составляющие программу предметные сущности, объекты представляют из себя “экземпляры" типов данных, помните?


“Текст”, “Строка", “Число" и т.д.


Типы данных иначе называют “классами" хоть нам это пока совершенно не важно. Важно то, что создать в любой программе можно только экземпляр известного исполняемой среде типа данных.


Тридэмакс имеет тип данных “чайники", “кубики” и дает вам возможность пораждать экземпляры этих типов, каждый экземпляр чайника отличается от самого типа “чайник” (Teapot) тем, что имеет имя и может быть отображен в трехмерном пространстве сцены. Имя указывается в выводе при создании объекта, обратите внимание:



Символ доллара и следующее за ним слово обозначают тип данных: “Box”, “Teapot” и т.д.


А слово следующее после двоеточия — это собственное имя созданного экземпляра этого типа данных: Box001, Teapot001


Чтобы “обратиться к объекту” нужно ввести знак доллара и сразу после него собственное имя этого объекта:


$Box001



При этом тридэмакс радостно выведет вам указанный объект в консоль.


Но как нам что-то сделать с объектом? — Надо изменить его “свойства" !


Свойства это предметные атрибуты объекта. Собственно говоря программирование это во многом и есть создание объектов, обращение к ним и изменение их свойств.


Запомните эту мысль она так же справедлива и при создании сайтов и игр и любом другом прикладном программировании сегодня! 


Тридэмакс позволяет просмотреть все свойства объекта с помощью команды show


Но узнать о свойствах всегда можно из документации исполняемой среды изучение документации это 80% вашего обучения реальному прграммированию. Знание языка программирования как такового ровным счетом ничего не дает вам в части знания исполняемой среды. Как знание английского языка не означает знания английской литературы или микробиологии.


Это тоже важный момент в понимании современного ремесла программирования!


Вы можете прекрасно владеть JavaScript но совершенно не знать библиотеку jQuery или React или не знать структуру веб-документа, его объекты и их свойства а для создания сайта или приложения нужно именно знание "предметной области" той среды в которой вы работаете.


Итак давайте введем


show $Box001



Мы видим множество имеющихся у объекта Box001 параметров — свойств.


Одни из них “только для чтения” другие можно изменять.


Среди них свойство .height это высота, размер по вертикальной оси, а значит именно на значение этого параметра нам нужно поднять чайник чтобы он оказался на “столе"


Обратимся теперь к свойству height объекта Box001:


$Box001.height



Как видите высота кубика была равна 25


За положение объектов по оси Z отвечает под-свойство “Z" свойства “position” (которое имеет краткий синоним “pos”) чтобы изменить свойство а не просто посмотреть его значение, надо “присвоить" ему какое-то значение с помощью знака равно:


 $Teapot001.pos.z = 25


не забывайте нажимать “enter” на клавиатуре!



Вуаля, наш чайник теперь на “столе" )


Осталось изменить его размер так чтобы гостям было где поставить чашки.


Уверен теперь вы сами справитесь с этой задачей.


Говоря непосредственно о тридэмакс, отмечу прекрасное свойство “записывать" ваши действия в окне трехмерного вида как программный код!


Попробуйте выделить инструмент масштабирования и изменить масштаб чайника, и в розовой верхней части окна max script listener вы увидите как ваше действие выглядит в программном виде :



Знаком \$ обозначается выделенный в данный момент времени объект. 


Остлеживая розовое окно max script listener и поглядывая в документацию вы постепенно овладеете всей структурой исполняемой среды макса (или любой другой сходным образом) и сможете програмно выполнять в ней то для чего предназначена сама среда.


Следующий шаг — методический, разобраться какие задачи стоят того чтобы решать их в коде а какие нет.


Действительно, передвинуть чайничек проще "руками" для этого не надо учить программирование и писать код.


А вот многократно (тысячекратно) повторяемые задачи очень здорово воплощать в виде программ и даже программных инструментов.


Так я, например, занимаясь анимацией мимики персонажей пишу скрипт который позволяет выделять области носа, глаз, щек и т.п. "в один клик" это экономит уйму времени и сил. 


Максскрипт даже позволяет создавать графический интерфейс для ваших скриптов, хоть и убогий по современным меркам )


А пока резюмируем:


  1. Современное прикладное программирование это прежде всего исполняемые среды а не языки программирования! Среда WEB это javascript, в виндовс — среда .NET и язык C# в Unity 3D тоже С# в 3DS Max — MaxScript а в Maya — Python(кажется). Написание исполняемых сред и их частей и написание программ для них во многом очень отличается в практическом смысле.
  2. Структура большинства сред “Объектно ориентированная" но вам совершенно не обязательно и даже не желательно, “лезть в ООП" и уж тем более самому разрабатывать объектные модели и классы. Но теоретическое понимание основ ООП даст хорошее представление о том как устроены сами исполняемые среды и как с ними работать.
  3. Программирование нужно для решения определенного типа прикладных творческих задач и прежде всего нужно выбрать исполняемую среду для своих задач (графика, музыка, игра и т.п.) затем изучать эту среду и язык программирования на ней. Учитесь на простых но реальных задачах, допускайте незнание устройства среды, теоретических принципов и т.п., главное — суметь решить задачу даже не понимая как там что работает, и не бойтесь ошибок в любом их виде.
  4. Не увлекайтесь чрезмерно самим программированием, держите в фокусе то для чего оно вам нужно и не бойтесь расставаться с тем что перестало или не смогло решить ваших задач, не вините себя и не слушайте доводов критиков: “эх ты не втащил джаву и скатился до хтмл!” помните, важно что вы создаете а не то чем вы это делаете )

Итак мы познакомились с практическим программированием в реальной исполняемой среде и почти не упоминали при этом даже переменные.


Для реальной пользы такого программирования обязательно знакомство и с переменными и с циклами, а также массивами. Что мы и сделаем в следующей части статьи.

Теги:
Хабы:
+4
Комментарии6

Публикации