Aim Posted November 5, 2006 Posted November 5, 2006 Хелп, народ, как отмасштабировать сцену/модель в 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. ...Тут фея взмахнула волшебной палочкой, и у танка отвалилась башня...
Climber Posted November 5, 2006 Posted November 5, 2006 Т. к. конечный результат модели Mesh, то после перевода ее в editаble mesh (если не переведена, естественно), можно спокойно масштабировать и подгонять под размеры выбрав все вертексы.
Aim Posted November 5, 2006 Author Posted November 5, 2006 В общем, отмасштабировал через модификатор XForm, но это, блин, закат солнца вручную. ...Тут фея взмахнула волшебной палочкой, и у танка отвалилась башня...
ZloySkin Posted November 6, 2006 Posted November 6, 2006 Всё логично, макс работает с параметрическими объектами, поэтому матрица задаётся только однажды в момент создания объекта. А затем все операции по скалированию, перемещению, развороту и так далее, производятся за счёт умножения матрицы на соответствующие вектора, которые также являются параметрическими. Например, при отзеркаливании объекта матрица просто напросто домножается на "минус единицу". В итоге, если вы, скажем, пользуетесь нормалмапами, то отзеркаленый объект будет отображаться "вывернутым наизнанку" именно за счёт этого самого домножения векторов нормалей на "-1". Смиритесь с этим, поскольку это не баг, а особенность любой программы, использующей параметрические объекты. Бороться с этим можно только следующим образом: 1. Забудьте о борьбе с подобным явлением, если у вас уже имеется анимация, поскольку анимация производится только с имеющейся в распоряжении параметрической матрицей. То есть производить подобные оперции необходимо до того, как объект начинает анимироваться. Кстати этот момент относится к вопросу о культуре моделирования. Подобные вещи необходимо производить обязательно, даже, если в текущий момент времени всё обошлось. Поверьте, в следующий раз не обойдётся. 2. Использование различных модификаторов типа reset transform/scale и XForm решают вопрос только в отдельно взятых очень редких случаях, в остальном они не могут помочь, особенно XForm модификаторы, которые вообще категорически не рекомендую использовать. 3. Решается проблема следующим образом. - проверьте, что всё, что вы делаете, вы делаете в правильном масштабе. - необходимо разместить и отскалировать объект таким образом, чтобы после этого уже никогда не производить над ним никаких операций, имеющих отношение к внутреннему изменению матрицы, то есть в финальную стадию, которую назовём условно NoEditable. Грубо-говоря, мы сможем производить операции с этим объектом только в аспекте objectspace, но ни в коем случае не в tangentspace, ни накладывать текстурных координат, ни, тем-более, обсчитывать карт. Всё это должно быть произведено на более ранних этапах. - параметрически задать в 0 глобальной системы координат любой объект из серии примитивов (лучше всего бокс со стороной 1 или сферу радиусом 1), таким образом, чтобы локальные оси координат этого объекта совпадали с глобальными осями координат. (Шестикласник сумет разобраться как это проще всего сделать.) - наложить на объект модификатор EditMesh, войти в него, поочерёдно приаттачить к объекту всё, что требует нормализации. - схлопнуть стек модификаторов в EditableMesh, после чего отдетачить всё необходимое в нужном вам порядке и грохнуть объект. - Всё, нормальзация матрицы произведена, можно анимировать и экспортить куда угодно. 1
sds Posted November 7, 2006 Posted November 7, 2006 Для простоты решения этой задачи, предлагаю воспользоваться этим скриптом: 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 ___________ скрипт сохранит все центры, и имена объектов [sIGPIC]http://precise3dmodeling.com/FTP/sign_04.jpg[/sIGPIC]
SuperVasia Posted November 7, 2006 Posted November 7, 2006 Проблема решается просто с помощью скрипта CopyMesh: масштабируете модель до нужного размера (не анимируя, т.к. группы, линки и анимация убивается) и прогоняете через него. Побочные эфекты - инвертирует нормали у объектов созданных Mirror, если они остались отдельными объектами (не аттачились). Лечится модификатором Normal. если сами не найдете пишите мыло в приват, пришлю "...when you look long into an abyss, the abyss also looks into you." Friedrich Nietzsche
Recommended Posts