Jump to content

Масштабирование модели


Recommended Posts

Posted

Хелп, народ, как отмасштабировать сцену/модель в 6 Максе? При использовании Scale Gizmo, величина объектов при просмотре их свойств остается прежней после масштабирования. Это написано и в хелпе, но мне таки нужны реальные размеры:

 

If you scale an object and later check its base parameters in the Modify panel, you see the dimensions of the object before it was scaled. The base object exists independently of the scaled object that is visible in your scene.

...Тут фея взмахнула волшебной палочкой, и у танка отвалилась башня...

Posted

Т. к. конечный результат модели Mesh, то после перевода ее в editаble mesh (если не переведена, естественно), можно спокойно масштабировать и подгонять под размеры выбрав все вертексы.

Posted

В общем, отмасштабировал через модификатор XForm, но это, блин, закат солнца вручную.

...Тут фея взмахнула волшебной палочкой, и у танка отвалилась башня...

Posted

Всё логично, макс работает с параметрическими объектами, поэтому матрица задаётся только однажды в момент создания объекта. А затем все операции по скалированию, перемещению, развороту и так далее, производятся за счёт умножения матрицы на соответствующие вектора, которые также являются параметрическими. Например, при отзеркаливании объекта матрица просто напросто домножается на "минус единицу". В итоге, если вы, скажем, пользуетесь нормалмапами, то отзеркаленый объект будет отображаться "вывернутым наизнанку" именно за счёт этого самого домножения векторов нормалей на "-1". Смиритесь с этим, поскольку это не баг, а особенность любой программы, использующей параметрические объекты. Бороться с этим можно только следующим образом:

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

2. Использование различных модификаторов типа reset transform/scale и XForm решают вопрос только в отдельно взятых очень редких случаях, в остальном они не могут помочь, особенно XForm модификаторы, которые вообще категорически не рекомендую использовать.

3. Решается проблема следующим образом.

- проверьте, что всё, что вы делаете, вы делаете в правильном масштабе.

- необходимо разместить и отскалировать объект таким образом, чтобы после этого уже никогда не производить над ним никаких операций, имеющих отношение к внутреннему изменению матрицы, то есть в финальную стадию, которую назовём условно NoEditable. Грубо-говоря, мы сможем производить операции с этим объектом только в аспекте objectspace, но ни в коем случае не в tangentspace, ни накладывать текстурных координат, ни, тем-более, обсчитывать карт. Всё это должно быть произведено на более ранних этапах.

- параметрически задать в 0 глобальной системы координат любой объект из серии примитивов (лучше всего бокс со стороной 1 или сферу радиусом 1), таким образом, чтобы локальные оси координат этого объекта совпадали с глобальными осями координат. (Шестикласник сумет разобраться как это проще всего сделать.)

- наложить на объект модификатор EditMesh, войти в него, поочерёдно приаттачить к объекту всё, что требует нормализации.

- схлопнуть стек модификаторов в EditableMesh, после чего отдетачить всё необходимое в нужном вам порядке и грохнуть объект.

- Всё, нормальзация матрицы произведена, можно анимировать и экспортить куда угодно.

  • Like 1
Posted

Для простоты решения этой задачи, предлагаю воспользоваться этим скриптом:

undo off

(

sliderTime = 0

--select geometry

if selection.count == 0 do messageBox "there are no geometries in scene"

mygeomlist = selection as array

for o in mygeomlist do (

if not isDeleted o do (

if isKindOf o GeometryClass do (

local name = o.name

select o

local boxsize = selection.max.x - selection.min.x

boxsize += selection.max.y - selection.min.y

boxsize += selection.max.z - selection.min.z

boxsize /= 3.0

local boxpos = copy o.pivot

local rot = copy o.transform.rotationPart

local sgn = o.transform.determinantsign

local irot = inverse rot

local mybox = Box Length: boxsize Width: boxsize Height: boxsize Position: boxpos

local mymesh = convertToMesh mybox

rotate mymesh irot

attach mymesh o

deleteVert mymesh 8

deleteVert mymesh 7

deleteVert mymesh 6

deleteVert mymesh 5

deleteVert mymesh 4

deleteVert mymesh 3

deleteVert mymesh 2

deleteVert mymesh 1

 

if sgn < 0 do (

local nmod = Normalmodifier()

nmod.flip = true

nmod.unify = false

addModifier mymesh nmod

convertToMesh mybox

)

mymesh.name = name

)

)

)

)-- undo off

 

 

___________

скрипт сохранит все центры, и имена объектов

Posted

Проблема решается просто с помощью скрипта CopyMesh:

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

Побочные эфекты - инвертирует нормали у объектов созданных Mirror,

если они остались отдельными объектами (не аттачились). Лечится модификатором Normal.

если сами не найдете пишите мыло в приват, пришлю

"...when you look long into an abyss, the abyss also looks into you."

Friedrich Nietzsche

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...