Есть заготовка для жалюзи в виде цельной геометрии:
Разбиваем все на элементы:
for i in selection do (i.pivot = i.center; i.pivot.z = i.max.z)
for i in selection do scale i [1,1,random 0.25 1]
Выравниваем UVW модификатор по нормали:
Источник здесь:
How do I align the UVW_Modifier's Gizmo to a selected face?
Это выжимка из источника:
--------------------------------------------------start
for i in selection do(
local theMod = uvwmap()
theMod.maptype = 0
addModifier i theMod
)
fn alignUVGizmo theObj =(
faceNormal = getFaceNormal theObj 1
rightVector = normalize (cross [0,0,1] faceNormal)
upVector = normalize ( cross rightVector faceNormal )
theObj.modifiers[1].gizmo.transform = matrix3 rightVector upVector faceNormal [0,0,0]
)
for i in selection do alignUVGizmo i
--------------------------------------------------end
Это результат, на примере одной плоскости:
Осталось выровнять UVW по вершинам.
Для этого можно воспользоваться готовой функцией:
HOW TO ... FIT THE UVW MAPPING GIZMO
Выполняем ее:
for i in selection do UVWMapFit i i.modifiers[1] useSel:#none
Это результат:
То же можно было бы применить и для штор, но функция подгонки текстурных координат дает немного некорректный результат:
Можно обойтись и без нее. Вот финальный код, в котором просто нажимается кнопка "Fit" для каждого объекта (в нашем случае этого более чем достаточно):
--------------------------start
for i in selection do(
local theMod = uvwmap()
theMod.maptype = 0
addModifier i theMod
)
fn alignUVGizmo theObj =(
faceNormal = getFaceNormal theObj 1
rightVector = normalize (cross [0,0,-1] faceNormal)
upVector = normalize ( cross rightVector faceNormal )
theObj.modifiers[1].gizmo.transform = matrix3 rightVector upVector faceNormal [0,0,0]
)
for i in selection do alignUVGizmo i
max modify mode
arrPlane = selection as array
for i in arrPlane do (
select i
h = windows.getChildHWND #max "Fit"
hc=windows.getChildrenHwnd h[2]
UIAccessor.PressButton hc[54][1] --button "Fit"
)
--------------------------end
Работает такой способ, конечно дольше и для нескольких тысяч объектов может занять приличное время.
Параметром 1 или -1 в строке "rightVector = normalize (cross [0,0,-1] faceNormal)" можно менять направление по z.
Разбиваем все на элементы:
Затем, если необходимо, выравниваем пивоты и масштабируем в произвольном порядке:
for i in selection do scale i [1,1,random 0.25 1]
Выравниваем UVW модификатор по нормали:
Источник здесь:
Это выжимка из источника:
--------------------------------------------------start
for i in selection do(
local theMod = uvwmap()
theMod.maptype = 0
addModifier i theMod
)
fn alignUVGizmo theObj =(
faceNormal = getFaceNormal theObj 1
rightVector = normalize (cross [0,0,1] faceNormal)
upVector = normalize ( cross rightVector faceNormal )
theObj.modifiers[1].gizmo.transform = matrix3 rightVector upVector faceNormal [0,0,0]
)
for i in selection do alignUVGizmo i
--------------------------------------------------end
Это результат, на примере одной плоскости:
Осталось выровнять UVW по вершинам.
Для этого можно воспользоваться готовой функцией:
HOW TO ... FIT THE UVW MAPPING GIZMO
Выполняем ее:
for i in selection do UVWMapFit i i.modifiers[1] useSel:#none
Это результат:
То же можно было бы применить и для штор, но функция подгонки текстурных координат дает немного некорректный результат:
Можно обойтись и без нее. Вот финальный код, в котором просто нажимается кнопка "Fit" для каждого объекта (в нашем случае этого более чем достаточно):
--------------------------start
for i in selection do(
local theMod = uvwmap()
theMod.maptype = 0
addModifier i theMod
)
fn alignUVGizmo theObj =(
faceNormal = getFaceNormal theObj 1
rightVector = normalize (cross [0,0,-1] faceNormal)
upVector = normalize ( cross rightVector faceNormal )
theObj.modifiers[1].gizmo.transform = matrix3 rightVector upVector faceNormal [0,0,0]
)
for i in selection do alignUVGizmo i
max modify mode
arrPlane = selection as array
for i in arrPlane do (
select i
h = windows.getChildHWND #max "Fit"
hc=windows.getChildrenHwnd h[2]
UIAccessor.PressButton hc[54][1] --button "Fit"
)
--------------------------end
Работает такой способ, конечно дольше и для нескольких тысяч объектов может занять приличное время.
Параметром 1 или -1 в строке "rightVector = normalize (cross [0,0,-1] faceNormal)" можно менять направление по z.
Комментариев нет:
Отправить комментарий