среда, 1 апреля 2015 г.

Моделирование дома по спутниковой карте и панораме.


сам дом


С помощью SAS.Планета определяем размер дома и делаем скриншот:




Выставляем правильный масштаб карте в сцене

поворачиваем- выравниваем для удобства моделирования

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

первая перспектива

Кидаем перспетиву на бэкграунд и выставляем нужные параметры outsize
Чтобы можно было пользоваться камерой в режиме 2D Pan Zoom Mode надо поменять ее тип на Free
Добавьте подпись

Создаем бокс в нужных пропорциях



То же для другой перспективы
Осталось только подогнать  модель к размерам на спутниковой карте и заготовка нужной высоты  готова

Можно приступать к детализации:





Есть, правда, еще один способ - иногда можно найти серию дома, план и, соответственно, межэтажное расстояние!

вторник, 17 марта 2015 г.

Небольшой скрипт для выдавливания полигонов.


Работает только с выделенными полигонами в EditPoly:

---------------------------------
obj = $
SelFace = for i in obj.selectedFaces collect i.index

for f in SelFace do
    (
    polyop.setFaceSelection obj #{f}
    obj.extrudeFaces (random 0.0 1.0)
    )   
---------------------------------
Минимальное и максимальное значение Extrude задается в "random 0.0 1.0"
0 - минимальное, 1 - максимальное, соответственно.

выделяем полигоны

выполняем скрипт (Ctrl+E) и наслаждаемся результатом)

вторник, 3 марта 2015 г.

Как сохранить анимацию для прилинкованных объектов (на примере MadCar).



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

Саму геометрию машины можно пока скрыть.

 Создаем Dummy для каждого колеса и кузова и совмещаем их центры. Назвать Dummy лучше таким образом, чтобы потом не запутаться. Я назвал передние - правое колесо w01_r, левое w01_l, задние - правое w02_r, левое w01_l, кузов машины - body



После создания Dummy их нужно скопировать (для того, что бы потом именно в эти неприлинкованные копии загрузить анимацию):
А первоначальные Dummy прилинковать, соответственно, элементам MadCar.


Выделяем первоначальные Dummy, в закладке motion->trajectories нажимаем collapse.
Величину samples лучше выставить равным количеству кадров в анимации, тогда ключи (в нашем случае поворота и позиции) будут созданы в каждом кадре:

Теперь необходимо в эти ключи записать анимацию:
Animation -> Save animation (не снимая выделения с Dummy)

Далее выделяем наши заранее скопированные копии Dummy и загружаем анимацию
Animation -> Load animation


При загрузке анимации надо нажать Edit Maping:
Затем нехитрая операция. Надо в списках объектов INCOMING и CURRENT выбрать соответствующие объекты с Exposed World Transform и нажать стрелку "<-"


 Эту же операцию проделать для всех остальных.
колес и кузова и нажать Save Mapping и затем Load Motion. Продублированные Dummy должны совместиться с первоначальными.
Спасибо за внимание. 





пятница, 20 февраля 2015 г.

Несколько способов выставить правильный масштаб спутниковой карте в сцене 3ds max.

1.Если нужен небольшой кусок карты, то можно просто сделать сриншот с яндекса с линейкой по диагонали:
В максе (не забываем применить BitmapFit для UVW map) рисуем сплайн от начала до конца красной линии на карте.
Важный момент, - линкуем карту к сплайну.
Далее открываем New Floater в Measure, также Scale Transform Type-In и подбираем нужный масштаб сплайну, таким образом, чтобы значение Length совпало со значением на карте:
2.Если же нужен большой участок карты с высоким разрешением, удобно воспользоваться программой SAS Planet. http://sasgis.ru/sasplaneta/
Выделяем нужную область, указываем путь, выставляем нужный масштаб (19 обычно достаточно), склеиваем.
Размер нашей карты получился 4353х2805.
Осталось померить длину ширины прямоугольной области:
 Получилось 1 км 462,84 м
В максе создаем Plane с такими же размерами по ширине и высоте, назначаем материал с картой.
Далее для подгонки масштаба можно воспользоваться вышеизложенным способом, а можно новый масштаб вычилисть с помощью пропорции (для системных юнитов - см):
Неизвестный масштаб = (1462,84 *100*100)/4353 = 3360,5329657707328279347576384103
Осталось только скопировать это значение в поле Offset:World (Scale Transform Type-In):
Результат


понедельник, 16 февраля 2015 г.

Перетасовка объектов.


Иногда необходимо перетасовать объекты в сцене произвольным порядком. Один из способов - это воспользоваться скриптом:

--------------------------------------
(
arSel = selection as array

theNum = arSel.count

if theNum != 0 do
(
    for i = 1 to theNum do
    (
            a1 = arSel[i]
            b1 = arSel[random 1 theNum]
            a1_t = a1.transform
            b1_t = b1.transform
            a1.transform = b1_t
            b1.transform = a1_t
        )
    )
)

--------------------------------------

Пошаговые комментарии:
 "arSel = selection as array" -  строчка создает массив с выделенными объектами.

 "theNum = arSel.count" - число элементов массива

В цикле for возьмём i-ый объект и присвоим его переменной a1, затем произвольный объект присвом переменной b1
"a1 = arSel[i]"
 "b1 = arSel[random 1 theNum]"
 Затем запишем их трансформации в переменные a1_t и b1_t, соответственно
"a1_t = a1.transform"
"b1_t = b1.transform
Осталось поменять объекты местами
"a1.transform = b1_t"
"b1.transform = a1_t"

Чтобы выполнить скрипт, необходимо нажать Ctrl+E
Тут можно посмотреть пример: https://www.youtube.com/watch?v=AQNNG5aObbQ 

четверг, 5 февраля 2015 г.

Способ рандомизации мапинга (текстурных координат) с помощью maxscript.


В моём случае имеется мягкая кровля. На нее уже назначен стандартный мапинг.
Часть кровли выполнен единой геометрией
 Для начала необходимо разбить этот кусок кровли на элементы:

Далее выделяем все элементы и выполняет небольшой скрипт (выполнить скрипт - ctrl+E):
Результат применения скрипта

Скрипт (идея и реализация - Павел Я.):
------------------------------------------------------------------------
for i in selection do
(
local theMod = UVW_Xform ()
 addModifier i theMod
 theMod.U_Offset = random -1000.0 1000.0
 theMod.V_Offset = random -1000.0 1000.0
 theMod.W_Offset = random -1000.0 1000.0
)

 ------------------------------------------------------------------------

Скрипт каждому выделенному объекту назначает модификатор UVW Xform с произвольным смещением по всем осям от -1000 до 1000

Недостатком метода является работа только с отдельными неинстансными объектами.

вторник, 3 февраля 2015 г.

Удаление объектов в произвольном порядке посредством maxscript.


1. Выделим объекты, которые нужно проредить.
2. Создадим и выполним новый скрипт: for i in selection where (random 0 1) == 1 do delete i
Для выполнения скрипта необходимо нажать сочетание клавиш ctrl+E
Это результат
Есть один ньюанс. Чтобы не попасть на долгое выполнение скрипта, необходимо выполнять скрипт при неактивной закладке modify.

В данном случае удаляется 50% объектов. Если необходимо варьировать этот процент, то можно поменять часть кода:
(random 0 2) == 1 - удаляется каждый третий объект, т.е. 30%
(random 0 10) == 1 - удаляется каждый десятый объект, т.е. 10% и т.д.