Представленные ниже видеоролики изначально были созданы для платного дистанционного курса:
"MAXScript. Базовое прикладное программирование в среде 3ds max для всех", проводимого обучающим центром Render.ru
Впоследствии этот курс в обучающем центре был отменен из-за полного отсутствия слушателей. А сейчас я просто решил "не пропадать же добру" и выложил эти видеолекции в свободный доступ для всех желающих. К лекциям прилагаются задания для самостоятельной работы, если у кого-то найдется на них время и желание. И поскольку курс теперь бесплатный - я никого не консультирую и не даю дополнительные задания, несмотря на то, что это обещано во вводной лекции.
На кого рассчитан курс?
На пользователей программного пакета Autodesk 3ds max в независимости от их опыта, стажа или уровня.
Знание и понимание основ MAXScript пригодится любому пользователю, в какой бы области он ни работал, а использование MAXScript в повседневных задачах способно сэкономить массу времени, нервов, многократно увеличить скорость и эффективность рабочего процесса.
Чему учит курс?
На готовых рабочих примерах, которые с нуля создаются прямо на глазах у зрителей объясняются основы работы с MAXScript.
Слушатели курса получат необходимое представление об основных принципах прикладного программирования в 3ds max и научатся самостоятельно их использовать, начиная от выполнения элементарных команд, заменяющих действия пользователя и заканчивая созданием своих собственных скриптов.
Программа курса
- Создание объектов, доступ к основным свойствам объектов, окно Maxscript Listener, переменные, коллекции, команды Maxscript
- Типы данных, арифметические операции, габариты объектов, родительские объекты, цикл for, печать данных в Listener
- Массивы, создание и работа с массивами, вложенные массивы, выражения, общий синтаксис языка, значения boolean
- Логические операции, координаты объектов, случайные числа, копирование объектов
- Системы координат, матрица трансформаций и ее основные свойства, повороты объектов
- Расстояние между объектами, векторы, свойства векторов и методы работы с ними
- Скрипт как набор команд, понятие функции
- Выборка по свойству объекта, простейшие диалоговые окна
- Свиток и диалоговое окно, элементы интерфейса - кнопка и спиннер, события, кватернионы, поворот вектора
- Обновление окон проекции, интерактивный интерфейс, локальные и глобальные переменные, элемент интерфейса - выпадающий список, дополнительная информация о maxscript
Дополнительные задания
Лекция 1
- Поработать в максе как обычно, но с включенным макрорекордером и найти действие, которое он не запишет.
- Создать все стандартные примитивы (каждого по одному) таким образом, чтобы они друг с другом не пересекались.
- Создать любые три расширенных примитива на выбор.
Лекция 2
- Для сферы создать по одному даммику на каждый угол габаритного контейнера.
- Для повернутого и отмасштабированного бокса создать даммики в минимуме и максимуме контейнера. Выяснить, совпадут ли эти даммики с геометрическими углами бокса.
- Создать Biped обычным способом с 5-ю пальцами в каждом по три сегмента (человеческая рука), выделить ладонь и написать скрипт, который выделит всю иерархию костей - потомков ладони Biped'а (вручную это делается двойным щелчком на ладони).
Лекция 3
- Создать произвольный массив из чисел и написать скрипт, который бегает по массиву, преобразует каждый элемент массива в строку и прибавляет этот элемент к строковой переменной, т.е. на входе, например массив #(1,2,3,4,5), на выходе строка "12345"
- Создать строковую переменную, в которою записать несколько слов, разделенных пробелами. Написать скрипт, который анализирует эту строку и создает массив, элементами которого будут эти слова. например, на входе строка "Мама мыла раму", на выходе массив #("Мама", "мыла", "раму")
- Создать длинный массив из чисел, с несколькими повторяющимися элементами, и написать скрипт, который анализирует этот массив и создает другой вложенный массив, в котором элементами будут массивы, содержащие повторяющиеся значения и количество повторений. Например, на входе массив:
#(1, 3, 2, 3, 5, 4, 4, 6, 7, 8, 5, 5, 0, 0, 8), на выходе #(#(3, 2), #(5, 3), #(4, 2), #(8, 2), #(0, 2))
Лекция 4
- Создать 50 точек (Point) в пределах [-100, -100, -100] и [100, 100, 100], причем те точки, которые лежат ниже плоскости XY, должны быть зеленого цвета, а те, которые выше (либо на плоскости) - красного.
- Для облака точек из пункта 1 - создать в центрах красных точек боксы, а в центрах зеленых - сферы
- Написать скрипт, который подсчитывает число красных и зеленых точек и в зависимости от того, каких точек больше печатает фразы "X : Y Green wins!" либо
"Y : X Red wins!", где вместо X и Y - число точек соответствующего цвета, т.е. например, если создалось 20 зеленых точек и 30 красных, то фраза будет такой:
"30 : 20 Red wins!". Реализовать возможность многократного запуска скрипта (со стиранием предыдущего облака) и строку в случае ничьей "X : Y Draw!"
Лекция 5
- Создать объект Point, случайно сдвинутый и повернутый. Написать скрипт, который извлекает из матрицы Point'а первые три вектора и создает три цилиндра - красный, зеленый и синий, устанавливая у них параметр dir, равный извлеченному вектору. Высоты цилиндров по порядку - 10, 20, 30, радиусы у всех равны 2
- Создать конструкцию из точки и трех боксов, аналогично как в лекции (боксы - предки точки). Сдвинуть красный бокс на 10 по х (в системе координат точки), а зеленый на 20 по у (в системе координат точки). Повернуть точку вокруг оси Х на 45 и вокруг оси Z на 45. Сдвинуть точку. Написать скрипт, который в цикле поворачивает точку вокруг ее локальной оси Z на 10 градусов за проход 36 раз (совершается полный оборот) и на каждом проходе цикла создавая копии зеленого и красного боксов, в результате должны получиться два кольца из боксов.
- Написать скрипт, который вращает любой объект вокруг локальной оси Z другого объекта на указанное количество градусов.
Лекция 6
- Вручную создать три сферы так, чтобы они не лежали на одной прямой (т.е. формировали треугольник). Написать скрипт, который создает указанное число конусов от первой сферы до второй и направленных dir'ом на третью.
- Написать скрипт, создающий указанное число одинаковых цилиндров, направленных из точки [0,0,0] в случайные точки пространства. Высота цилиндра 100
- Создать скриптом сферу в случайной точке пространства, но с условием, что она удалена от точки [0,0,0] больше, чем на 100 и найти ближайший до нее цилиндр
Лекция 7
- Реализовать аналогичную задачу, но вместо пирамиды из боксов размножать инстансом снеговиков. Снеговик это три сферы разных радиусов, нос-морковка в виде конуса из верхней сферы и ведро (усеченный конус) тоже на верхней сфере. Снеговики должны быть покрашены (шары - белым, морковка - красным, ведро - синим) и с иерархией, т.е. нижняя сфера самого большого радиуса - главный парент.
Лекция 8
- Написать скрипт, реализующий следующую задачу. Создается 100 конусов одинакового радиуса, но разной (случайной) высоты в центре каждой клетки координатной сетки 10х10. Высота меняется в пределах от 30 до 90. После чего над конусами создаются три сферы, красная, зеленая и синяя со случайной позицией по x и y, а по z 100. Потом циклом бегаем по всем конусам, сравниваем, до какой из сфер расстояние от вершины конуса короче. Ближайший к сфере конус красим в цвет сферы и направляем в нее dir'ом.
Лекция 9
- Реализовать аналогичную задачу, но ось сделать случайным вектором, а боксы повернуть каждый еще и вокруг локальной оси Z, чтобы они "огибали" окружность.
Лекция 10
- Реализовать аналогичную задачу, но добавить еще один выпадающий список с пунктами X, Y и Z, соответственно выбранная локальная ось объекта-центра будет являться осью вращения, т.е. если объект-центр повернут, то плоскость боксовой окружности не будет параллельна мировой плоскости XY