Представленные ниже видеоролики изначально были созданы для платного дистанционного курса:
"MAXScript. Базовое прикладное программирование в среде 3ds max для всех", проводимого обучающим центром Render.ru
Впоследствии этот курс в обучающем центре был отменен из-за полного отсутствия слушателей. А сейчас я просто решил "не пропадать же добру" и выложил эти видеолекции в свободный доступ для всех желающих. К лекциям прилагаются задания для самостоятельной работы, если у кого-то найдется на них время и желание. И поскольку курс теперь бесплатный - я никого не консультирую и не даю дополнительные задания, несмотря на то, что это обещано во вводной лекции.

На кого рассчитан курс?
На пользователей программного пакета Autodesk 3ds max в независимости от их опыта, стажа или уровня. Знание и понимание основ MAXScript пригодится любому пользователю, в какой бы области он ни работал, а использование MAXScript в повседневных задачах способно сэкономить массу времени, нервов, многократно увеличить скорость и эффективность рабочего процесса.

Чему учит курс?
На готовых рабочих примерах, которые с нуля создаются прямо на глазах у зрителей объясняются основы работы с MAXScript. Слушатели курса получат необходимое представление об основных принципах прикладного программирования в 3ds max и научатся самостоятельно их использовать, начиная от выполнения элементарных команд, заменяющих действия пользователя и заканчивая созданием своих собственных скриптов.

    Программа курса
  1. Создание объектов, доступ к основным свойствам объектов, окно Maxscript Listener, переменные, коллекции, команды Maxscript
  2. Типы данных, арифметические операции, габариты объектов, родительские объекты, цикл for, печать данных в Listener
  3. Массивы, создание и работа с массивами, вложенные массивы, выражения, общий синтаксис языка, значения boolean
  4. Логические операции, координаты объектов, случайные числа, копирование объектов
  5. Системы координат, матрица трансформаций и ее основные свойства, повороты объектов
  6. Расстояние между объектами, векторы, свойства векторов и методы работы с ними
  7. Скрипт как набор команд, понятие функции
  8. Выборка по свойству объекта, простейшие диалоговые окна
  9. Свиток и диалоговое окно, элементы интерфейса - кнопка и спиннер, события, кватернионы, поворот вектора
  10. Обновление окон проекции, интерактивный интерфейс, локальные и глобальные переменные, элемент интерфейса - выпадающий список, дополнительная информация о maxscript
Вводная лекция


Лекция 1


Лекция 2


Лекция 3


Лекция 4


Лекция 5


Лекция 6


Лекция 7


Лекция 8


Лекция 9


Лекция 10



Дополнительные задания
    Лекция 1
  1. Поработать в максе как обычно, но с включенным макрорекордером и найти действие, которое он не запишет.
  2. Создать все стандартные примитивы (каждого по одному) таким образом, чтобы они друг с другом не пересекались.
  3. Создать любые три расширенных примитива на выбор.
    Лекция 2
  1. Для сферы создать по одному даммику на каждый угол габаритного контейнера.
  2. Для повернутого и отмасштабированного бокса создать даммики в минимуме и максимуме контейнера. Выяснить, совпадут ли эти даммики с геометрическими углами бокса.
  3. Создать Biped обычным способом с 5-ю пальцами в каждом по три сегмента (человеческая рука), выделить ладонь и написать скрипт, который выделит всю иерархию костей - потомков ладони Biped'а (вручную это делается двойным щелчком на ладони).
    Лекция 3
  1. Создать произвольный массив из чисел и написать скрипт, который бегает по массиву, преобразует каждый элемент массива в строку и прибавляет этот элемент к строковой переменной, т.е. на входе, например массив #(1,2,3,4,5), на выходе строка "12345"
  2. Создать строковую переменную, в которою записать несколько слов, разделенных пробелами. Написать скрипт, который анализирует эту строку и создает массив, элементами которого будут эти слова. например, на входе строка "Мама мыла раму", на выходе массив #("Мама", "мыла", "раму")
  3. Создать длинный массив из чисел, с несколькими повторяющимися элементами, и написать скрипт, который анализирует этот массив и создает другой вложенный массив, в котором элементами будут массивы, содержащие повторяющиеся значения и количество повторений. Например, на входе массив: #(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
  1. Создать 50 точек (Point) в пределах [-100, -100, -100] и [100, 100, 100], причем те точки, которые лежат ниже плоскости XY, должны быть зеленого цвета, а те, которые выше (либо на плоскости) - красного.
  2. Для облака точек из пункта 1 - создать в центрах красных точек боксы, а в центрах зеленых - сферы
  3. Написать скрипт, который подсчитывает число красных и зеленых точек и в зависимости от того, каких точек больше печатает фразы "X : Y Green wins!" либо "Y : X Red wins!", где вместо X и Y - число точек соответствующего цвета, т.е. например, если создалось 20 зеленых точек и 30 красных, то фраза будет такой: "30 : 20 Red wins!". Реализовать возможность многократного запуска скрипта (со стиранием предыдущего облака) и строку в случае ничьей "X : Y Draw!"
    Лекция 5
  1. Создать объект Point, случайно сдвинутый и повернутый. Написать скрипт, который извлекает из матрицы Point'а первые три вектора и создает три цилиндра - красный, зеленый и синий, устанавливая у них параметр dir, равный извлеченному вектору. Высоты цилиндров по порядку - 10, 20, 30, радиусы у всех равны 2
  2. Создать конструкцию из точки и трех боксов, аналогично как в лекции (боксы - предки точки). Сдвинуть красный бокс на 10 по х (в системе координат точки), а зеленый на 20 по у (в системе координат точки). Повернуть точку вокруг оси Х на 45 и вокруг оси Z на 45. Сдвинуть точку. Написать скрипт, который в цикле поворачивает точку вокруг ее локальной оси Z на 10 градусов за проход 36 раз (совершается полный оборот) и на каждом проходе цикла создавая копии зеленого и красного боксов, в результате должны получиться два кольца из боксов.
  3. Написать скрипт, который вращает любой объект вокруг локальной оси Z другого объекта на указанное количество градусов.
    Лекция 6
  1. Вручную создать три сферы так, чтобы они не лежали на одной прямой (т.е. формировали треугольник). Написать скрипт, который создает указанное число конусов от первой сферы до второй и направленных dir'ом на третью.
  2. Написать скрипт, создающий указанное число одинаковых цилиндров, направленных из точки [0,0,0] в случайные точки пространства. Высота цилиндра 100
  3. Создать скриптом сферу в случайной точке пространства, но с условием, что она удалена от точки [0,0,0] больше, чем на 100 и найти ближайший до нее цилиндр
    Лекция 7
  1. Реализовать аналогичную задачу, но вместо пирамиды из боксов размножать инстансом снеговиков. Снеговик это три сферы разных радиусов, нос-морковка в виде конуса из верхней сферы и ведро (усеченный конус) тоже на верхней сфере. Снеговики должны быть покрашены (шары - белым, морковка - красным, ведро - синим) и с иерархией, т.е. нижняя сфера самого большого радиуса - главный парент.
    Лекция 8
  1. Написать скрипт, реализующий следующую задачу. Создается 100 конусов одинакового радиуса, но разной (случайной) высоты в центре каждой клетки координатной сетки 10х10. Высота меняется в пределах от 30 до 90. После чего над конусами создаются три сферы, красная, зеленая и синяя со случайной позицией по x и y, а по z 100. Потом циклом бегаем по всем конусам, сравниваем, до какой из сфер расстояние от вершины конуса короче. Ближайший к сфере конус красим в цвет сферы и направляем в нее dir'ом.
    Лекция 9
  1. Реализовать аналогичную задачу, но ось сделать случайным вектором, а боксы повернуть каждый еще и вокруг локальной оси Z, чтобы они "огибали" окружность.
    Лекция 10
  1. Реализовать аналогичную задачу, но добавить еще один выпадающий список с пунктами X, Y и Z, соответственно выбранная локальная ось объекта-центра будет являться осью вращения, т.е. если объект-центр повернут, то плоскость боксовой окружности не будет параллельна мировой плоскости XY