Как вывернуть нормали в zbrush

Конспект по ZBrush

Как вывернуть нормали в zbrush. Смотреть фото Как вывернуть нормали в zbrush. Смотреть картинку Как вывернуть нормали в zbrush. Картинка про Как вывернуть нормали в zbrush. Фото Как вывернуть нормали в zbrush

Update: Выложена вторая редакция конспекта от 2019 года:

ГОРЯЧИЕ КЛАВИШИ

T – включить редактирование объекта

W — Перемещение

Ctrl+курсор в режиме перемещения — дублировать модель или элемент модели (элемент можно выделить маской либо по полигруппе)

Если вызвать палитру кистей и нажать клавишу с буквой, то в палитре останутся те кисти, названия которых начинаются на эту букву.

Двухстороннее отображение: Tool/Display properties

Иконка R – стандартная для некоторых меню. Предназначена для сброса пользовательских настроек. Например, Tool – R очищает память сцены от неиспользуемых на холсте моделей, облегчая тем самым вес файла.

Tab – убирает/ восстанавливает с рабочего стола прилегающие к холсту панели

Навигация:

Переместиться по холсту — удерживать ALT +ЛКМ и перемещать мышь
Отдалить — приблизить — щелкнуть один раз ALT и перемещать мышь
Вращение — навести курсор на чистый участок холста и перемещать мышь. При зажатой Shift модель выровняется по одной из осей координат

Файлы и форматы

ZBR – холст. Открыть или сохранить — Document – Open/Close.
Не содержит никакой информации, кроме двухмерного изображения законченного проекта. Функции Half и Double уменьшают/ увеличивают разрешение холста в два раза

Чистка проекта:
для уменьшения веса файла необходимо вручную удалить неиспользуемые в проекте модели, кроме установленных по умолчанию примитивов. Для этого следует выбрать ненужную модель из выпадающего списка и удалить все ее сабтуллы в панели Toll – Subtoll

Режимы работы с геометрией
Zadd/ZSub – режимы для лепки
M – режим назначения материала
Rgb – режим для раскраски модели
Mrgb – режим для работы с материалом и цветом одновременно

Примечание:
Для назначения цвета или материала всему объекту следует применить Color–FillObject. При работе с материалами после примения Color–FillObject назначенный модели материал запоминается и сохраняется, после чего заменить материал на другой можно только опять же функцией Color–FillObject.
Если модель имеет раскраску, и требуется замена материала, то следует переключиться в режим M (. ) и применить Color–FillObject. Работа в режиме Mrgb сбросит раскраску!
Режимы могут сочетаться попарно. Можно одновременно лепить и раскрашивать (плюс применять материал), лепить и применять материал. Режимы Mrgb и M не сочетаются (. )
В режиме раскраски при применении сглаживания (по нажатой Shift), нужно вручную отключить сглаживание геометрии, чтобы размывалась только раскраска.

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

Размножаем сущности! Не проходите мимо!
Если зажать при перемещении зажать Ctrl+Shift, то объект дублируется. При этом он является не отдельным сабтуллом, а частью одного и того же объекта. После процедуры дублирования к скопированной части объекта будет автоматически применена маска. Эта маска позволяет скопировать отдельную часть объекта еще несколько раз. Если маску снять, то дубликаты объединятся в один объект, который копироваться будет уже весь целиком.
Данная процедура удобна при создании массива волос, травы, водорослей, щупалец и.т.п
При последующем редактировании модели можно применить кисть Move для перемещения всего массива частей объекта, либо кисть MoveTopo, чтобы перемещать каждую часть(волос, щупальце) по отдельности

Выдавливание полигонов
1.Выделить маской полигоны
2.Инвертировать маску
3.Перейти в режим перемещения
4.Установить точку перемещения на маскированную область
5.Потянуть с зажатым Ctrl.

SubTool
управление элементами(сабтуллами) проекта
ListAll – вызвать список всех элементов
стрелки вверх/вниз — перемещаться по колонке элементов
стрелки влево/вправо — перемещать элементы по колонке
Rename – переименовать элемент
All Low – сбросить все элементы на нижние сабдивы
All high – поднять все элементы на высшие сабдивы
Duplicate – дублировать элемент
Append – добавить элемент
GroupsSplit – разобрать модель на сабтуллы по полигруппам
MergeDown – объединить сабтулл с нижестоящим в колонке

SplitHidden – рассечение одного сабтулла на два.
Процедура:
Скрыть часть сабтулла по Ctrl+Alt.
Применить SplitHidden.
Раскрыть все. Сабтулл разделен по границе со скрытой частью

Layers
функция слоев по типу фотошопа.
Помимо основного скульптинга и полипайнтинга, на модели можно создать несколько дополнительных слоев скульптинга и полипайнтинга,
которые редактируются каждый по отдельности.

Для редактирования слоя в его свойствах должна быть активна опция REC(. )

Слои можно регулировать по прозрачности

Функция Invert инвертирует скульптинг и полипайнтинг слоя.

Geometry
работа с геометрией модели

Polygroups
Режим полигруппы делит модель на зоны, которые доступны для преобразований по отдельности.

Переключение между полигруппами по Ctrl+Shift

Во вкладке Polygroups доступно несколько видов разделения: Автоматический.
По UV-координатам.
По рисунку.
По маске.

Полигруппы можно выделять маской, после чего редактировать как обычную геометрию. Для этого следует:
1. Выбрать полигруппу.
2. Наложить на нее маску по CTRL
3. Раскрыть все полигруппы.
4. Выйти из режима полигрупп (можно по Shift+F).
5. Работать с оставшейся на модели маской.

По CTRL+Shift+щелчок на полигруппе полигруппа выделятеся в режиме отображение обычной геометрии

ShadowBox
Инструмент для создания заготовок на основе ортогональных проекций. Активируется в Tool – ShadowBox, либо загружается из файла, который входит в комплект Zbrush. Готовый файл уже имеет сетку координат.
Прежде, чем начать работу в ShadowBox, желательно определиться с разрешением сетки инструмента. По умолчанию разрешение установлено на 128. Если этого разрешения недостаточно, нужно выйти из режима работы в ShadowBox, нажав Tool – ShadowBox, и перенастроить значение Res. В режиме работы с ShadowBox эта функция недоступна.
Работа в ShadowBox происходит в режиме маскирования. Зажав Сtrl, рисуем в проекциях изображения, на основе которых ShadowBox создает трехмерный объект. В панелях Brush и Stroke можно выбрать специальную маскировочную кисть и форму выделяемой области. Для правильных геометрических форм предусмотрены функции Stroke – Square и Stroke – Center. Кроме того, маскировать можно по альфа-карте. Комбинация Ctrl+движение мышью по холсту полностью очищает ShadowBox
Комбинация Ctrl+Alt вычитает выделенную область из изображения. Щелчок с зажатой Ctrl по холсту инвертирует модель. Модель можно сделать полупрозрачной, если применить опцию Transp (панель справа от холста)
Панель ShadowBox содержит настройку Polish для регулирования сглаженности модели

Draw
Редактирование модели. Содержит настройки параметров кистей (размер, интенсивность), параметры холста (сетка, угол обзора)

Кисти (Brush)
Выпадающая из левого столбца иконок панель кистей содержит все доступные кисти. Кисти можно выделять из списка по буквам алфавита соответственно с началом названия кисти.

Добавление новых кистей:
Открыть папку Program Files – Pixologic – Zbrush(номер версии) – Zbrushes и скопировать содержимое. Можно из другой версии программы или любой другой папки с кистями.
Открыть папку Program Files – Pixologic – Zbrush — Zstartup- BrushPresets и вставить скопированное. Все кисти должны быть вынуты из папок (. )
В панели кистей появятся новые кисти

Верхняя полка Stroke содержит настройки способов работы кистями.

Опция Snap to track в сочетании с Line позволяет проводить кистью идеально прямые мазки. Если во время проведения пути (но не раньше) зажать Shift, то можно делать мазки по осям координат, предварительно выровняв модель

Кисть Planer Flatten выравнивает поверхность полностью.

Кисть Couge оставляет геометрически ровные впадины или выпуклости в режиме Stroke. Форма впадин и выпуклостей зависит от альфы.

Кисть Planar с большой глубиной резкости в режиме Stroke оставляет полусферические впадины или выпуклости. Либо любой другой формы в зависимости от альфы.

Кисть MatchMaker предназначена для того, чтобы один сабтул повторял форму другого по типу ткани, ложащейся на рельефную повехность. Процедура:
Выбрать налагаемый сабтул, настроить нужный вид,
выбрать кисть, применить.
Кисть ZProject позволяет срисовать на модель текстуру с фонового изображения, загруженного плагином Image Plane

Alpha
Содержит настройки альфа-карты: размытие краев, интенсивность, контрастность, цикличность.

Тайлинг альфа-карты:

Создание бесшовной текстуры

Импорт и GoZ
Функция переноса моделей из ZBrush в другие графпакеты.
Требуется настроить путь к EXE другой программы, после чего перенос выполняется автоматически.
Настройки GoZ находятся в Preferens — GoZ

Из ZBrush в другой пакет можно переносить только полигональный объект, примитивы не переносятся

Процедура работы с моделью, предназначенной для другой графической программы:
1. Создать в ZBrush или перенести извне низкополигональную модель.
2. На низких сабдивах создать UV развертку с помощью UV Master. Выбрать в плагинах UV-master и нажать в нем Unwrap. Посмотреть на созданную развертку можно по функции UV-master-Flatten(Unflatten). Кроме того, в развертнутом виде эту развертку можно отредактировать обычной кистью Move.
3. Поднять сабдивы
4. Отредактировать модель
5. Сгенерировать карт расцветки и нормалей
6. Использовать GoZ

Примечание:
Карта цвета (Texture Map – New From Polipaint) создается с последним, самым высоким уровнем сабдивов, чтобы передать высокую детализацию раскраски.
Карта выдавливания (Normal Bump – Create Normal Bump) создается на том уровне сабдивов, на котором создавалась развертка UV координат, то есть на низшем уровне, иначе вместо рельефа получится ровный фиолетовый фон
Для адекватной передачи карты выдавливания должна быть включена опция Tangent

Геометрия Макса в ЗБ и обратно без искажений сглаживания:
Во избежании искажений в сглаживании низкополигональных моделей в ЗБ следует в боковой вкладке Morph Target нажать Store MT,
тогда обратно в Макс модель пойдет без искажений. После работы на высоких сабдивах сбросить на нулевой сабдив и там же нажать
Swith, тогда вершины вернутся в изначальное положение. Можно импортировать.

UV Master
Unwrap следует делать на низких сабдивах.

Для проверки качества развертки можно назначить текстуру «шахматная клетка».
Во вкладке UV map настраивается тайлинг тектуры по Hrepeat и Vrepeat

Шум можно нанести на выделенную маской область. Перед снятием маски нажать Apply to Mesh, иначе шум будет применен ко всей поверхности модели.
Кроме того, шум можно наносить специальной кистью Morph. Для этого:
1. Нанести шум
2. Перед нажатием Apply to Mesh (панель Noise) во вкладке Morph Target активизировать StoreMT.
3. После нажатия Apply to Mesh (панель Noise) во вкладке Morph Target нажать Swith. Шум исчезнет.
Если применить кисть Morph, шум восстановится в местах применения кисти. Кисть для хаотичности шума можно применять с альфой.
При повторном применении кисти Morph перед нанесением нового шума во вкладке Morph Target нажать DelMT. Повторить процедуру с пункта 1.

Spotlight
Инструмент для проецирования изображения на модель.

Импорт картинок производится из верхней полки Texture.

Режим Spotlight активизируется специконкой в полке Texture. Иконка Add to Spotlight добавляет в инструмент новую текстуру.

Зажатый Ctrl позволяет свободно трансформировать текстуру(поворот, масштаб, разворот, растягивание)

Поворот с Shift позволяет поворачивать под углом в 90 градусов.

Кольцо Spotlight можно таскать отдельно, щелкнув на его центр (оранжевое кольцо)

иконка кольца Unified выравнивает несколько текстур в один блок. После чего отвести кольцо на пустое место, щелкнуть ЛКМ в пустой холст(. ),
затем по кольцу можно трансформировать весь блок текстур сразу.

Из блока можно выбрать текстуру и трансформировать только ее. После ЛКМ в пустой холст, можно снова трансформировать весь блок.
Иконки кольца Back и Front выводят на первый или второй план выбранную текстуру.

В режиме Paint можно обычным способом изменить образец цвета. Переключения между двумя образцами по зажатой АLT. Вращение кольца усиливает один из цветов в общей гамме. При зажиме Ctrl происходит заливка активным цветом области. Зажав и двигая мышь, можно увеличивать размер заливаемого участка.

Tiling, если зажать Shift, умножает текстуру пропорционально по вертикали и горизонтали.

Иконка кольца Nudge позволяет при помощи кисти искажать изображение. Стандартно регулируется размер кисти, интенсивность, сглаживание по Shift.
Поворот кольца возвращает текстуру в прежний вид, поворот в обратную сторону возвращает к искажениям. Внимание! Искажение не работает в режиме кисти Stroke

Иконка Clone копирует участок текстуры из центра кольца и позволяет рисовать этим участком как кистью.
Чтобы рисовать клонированным участком на другой текстуре, следует активизировать ту картинку, на которой нужно рисовать(. ), навести кольцо на другую текстуру, клонировать участок, переместить участок на выделенную текстуру, рисовать как кистью. Регуляция кисти стандартная.

Иконка Smudge по вращению кольца размывает всю картинку, либо размывает кистью.

Иконка Restore восстанавливает кистью или вращением кольца все изменения в картинке до первоначального вида.

Иконка Pin Spotlight позволяет, не переключаясь на инструмент Spotlight, перемещать текстуру вместе с кистью по модели.

Иконка Spotlight Radius задает диаметр области текстуры, наносимого на модель. Эпицентр нанесения находится в центре кольца инструмента Spotlight

Для текстурирования или скульптурного выдавливания лучше установить режим кисти Stroke, задать стандартную альфу «размытие по краям». Навести кольцо Spotlight на картинку так, чтобы оно было в ее центре. Небольшие одинаковые участки удобнее наносить с включенным Pin Spotlight.
Многократное применение кисти в режиме Stroke равномерно усиливает эффект рельефности без регулировки интенсивности кисти.

Чтобы начать работу с Zsketch, следует создать корневую зетсферу.

Для зетскетча есть одноименные материалы.

Элементы зетскетча и сферы можно трансформировать стандартным образом.

Добавление элемента сферы происходит по ЛКМ.

Чтобы оболочка скетча повторяла трансформации зетсферы, во вкладке ZSketch надо при отключенной функции Edit Sketch (режим работы со скетчем) нажать на ShowSketch для отображения оболочки скетча, а затем Bind.
Кнопка Reset Binding сбрасывает предыдущую фиксацию «мяса» к «костям», позволяя новым и измененным элементам скетча привязаться к сфере.

Зетскетч имеет собственный набор кистей, недоступный в режиме обычного моделирования.

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

Источник

Как вывернуть нормали наружу у сотен объектов с поразному вывернутыми нормалями?

Germanager

Знаток

Bipper

Активный участник

Как вывернуть нормали в zbrush. Смотреть фото Как вывернуть нормали в zbrush. Смотреть картинку Как вывернуть нормали в zbrush. Картинка про Как вывернуть нормали в zbrush. Фото Как вывернуть нормали в zbrush

Дмитрий damat Астапкович

Знаток

Ладага

Активный участник

Ладага

Активный участник

А вообще!Встречаются курьёзы в этой жизни что без нормальных нормалей и нет собсно жизни!Прошу прощение за каламбур.Это любовь к майке и снова блэндер.Курьёз вот в чём.Если к этим привязать кэш то тут нашлось решение http://tea3d.blogspot.gr/ а,то что на creative crash пишут там какие то ошибки типа в винде не грузит,так у меня всё работает берём этот код и вставляем в script editote где Python и жмяк на exekute(такой треугольничег похож на значёк плэй в скрипт эдиторе)

»’
Author: Alex Manita
Description: This tool designed primarily for export meshes and particles out of maya,
so they could be imported later into Houdini and other packages
Usage:

import fx_mdd_obj_exporter
fx_mdd_obj_exporter.runUI()

License: You can use it everywhere and modify but you cant sell it.
Use and Modify it at your own risk with absolutelly no warranties.

from struct import pack
import maya.OpenMaya as OpenMaya
import maya.cmds as cmds
import os,re

def zero_file(filepath):
»’
If a file fails, this replaces it with 1 char, better not remove it?
»’
file = open(filepath, ‘w’)
file.write(‘\n’) # aparently macosx needs some data in a blank file?
file.close()

def check_vertcount(exportedObjects,vertcount,mddFile):
»’
check and make sure the vertcount is consistent throghout the frame range
»’
totalCount = 0
for each in exportedObjects:
currentObject = nameToNode(each[1])

def getVertexCount(objects):
numverts = 0
for object in objects:
exportedObjectShape = object[1]
# Convert the string name to an actual object
mesh_orig = nameToNode(exportedObjectShape)
#We should get reference frame from start frame
# Create the vertex iterator with that object
objectSurfaceIt = OpenMaya.MItMeshVertex(mesh_orig)
# Get number of vertices
numverts += objectSurfaceIt.count()
return numverts

def nameToNode( name ):
selectionList = OpenMaya.MSelectionList()
selectionList.add( name )
node = OpenMaya.MObject()
selectionList.getDependNode( 0, node )
return node

#Return the list of CV positions
return vertexPositionList

def getObjectTransform(exportedObjectTransform):
mat_flip = OpenMaya.MMatrix()
mat_flip_list = [1.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0, 0.0,0.0, 0.0, 1.0, 0.0,0.0, 0.0, 0.0, 1.0]
worldMatrixList = cmds.getAttr(‘%s.worldMatrix’%exportedObjectTransform)
# Convert list to MMatrix object
temp_mMatrix = OpenMaya.MMatrix()
OpenMaya.MScriptUtil.createMatrixFromList(worldMatrixList, temp_mMatrix)
transform = temp_mMatrix * mat_flip
return transform

# exportedObjects have format [(transformNode, objectShape). ]
def mddExport(filepath, exportedObjects, startFrame, endFrame, fps):
(difName,basename) = getDirFromParh(filepath)
filepath = difName+»/»+basename+».mdd»
filepathObj = difName+»/»+basename+».obj»

mddFile = open(filepath, ‘wb’) #no Errors yet:Safe to create file
numframes = endFrame-startFrame+1
# set reference frame time
cmds.currentTime( startFrame, edit=True )
cmds.file(filepathObj,op=»groups=1;ptgroups=1;materials=0;smoothing=1;normals=1″,typ=»OBJexport»,pr=1,es=1,force=1)

# Write the header
numverts = getVertexCount(exportedObjects)
mddFile.write(pack(«>2i», numframes, numverts))

## Write the frame times, sec
mddFile.write( pack(«>%df» % (numframes), *[frame/fps for frame in xrange(numframes)]) ) # seconds
#checking vertex count for the model
check_vertcount(exportedObjects,numverts,mddFile)

for frame in range(startFrame,endFrame,inc):
if cmds.progressWindow( query=True, isCancelled=True ) :
break
cmds.currentTime( frame, edit=True )
cmds.file(difName+»/»+basename+».»+str(frame).zfill(5)+».obj»,op=»groups=1;ptgroups=1;materials=0;smoothing=1;normals=1″,typ=»OBJexport»,pr=1,es=1,force=1)
if cmds.progressWindow( query=True, progress=True ) >= frameRange :
break
amount += 1
cmds.progressWindow( edit=True, progress=amount, status=(‘Finished: ‘ + `amount` + ‘%’ ) )
cmds.progressWindow(endProgress=1)

def particleExport(filepath, startFrame, endFrame, inc,particleTuple, userveca=»»,uservecb=»»,userfloa=»»,userflob=»»):
pTransform = particleTuple[0]
pshape = particleTuple[1]
if cmds.objectType( pshape ) == «particle» or cmds.objectType( pshape ) == «nParticle»:
cmds.runup( maxFrame=startFrame)

arad=1 if cmds.objExists(pshape+».radiusPP») else 0
arot=1 if cmds.objExists(pshape+».rot») else 0
avel=1 if cmds.objExists(pshape+».velocity») else 0
aid=1 if cmds.objExists(pshape+».id») else 0
alife=1 if cmds.objExists(pshape+».lifespanPP») else 0
aage=1 if cmds.objExists(pshape+».age») else 0
argb=1 if cmds.objExists(pshape+».rgbPP») else 0
aopacity=1 if cmds.objExists(pshape+».opacityPP») else 0
amass=1 if cmds.objExists(pshape+».mass») else 0
auserveca=1 if cmds.objExists(pshape+».»+userveca) else 0
auservecb=1 if cmds.objExists(pshape+».»+uservecb) else 0
auserfloa=1 if cmds.objExists(pshape+».»+userfloa) else 0
auserflob=1 if cmds.objExists(pshape+».»+userflob) else 0
attrNum = arad + arot + avel + aid + alife + aage + argb + aopacity + amass + auserveca + auservecb + auserfloa + auserflob;

svel = «v 3 vector 0 0 0 \n» if avel else «»
srad = «pscale 1 float 1 \n» if arad else «»
srot = «rot 3 vector 0 0 0 \n» if arot else «»
sid = «id 1 float 1 \n» if aid else «»
slife = «life 1 float 1 \n» if alife else «»
sage = «age 1 float 1 \n» if aage else «»
srgb = «Cd 3 vector 0 0 0 \n» if argb else «»
sopacity = «opacity 1 float 1 \n» if aopacity else «»
smass = «mass 1 float 1 \n» if amass else «»
suserveca = (userveca +» 3 vector 0 0 0 \n») if auserveca else «»
suservecb = (uservecb +» 3 vector 0 0 0 \n») if auservecb else «»
suserfloa = (userfloa +» 1 float 1 \n») if auserfloa else «»
suserflob = (userflob +» 1 float 1 \n») if auserflob else «»
(difName,basename) = getDirFromParh(filepath)
particleCount = cmds.particle(pTransform,q=1, count=1)

for frame in xrange(startFrame,endFrame+1):#in order to start at desired frame
cmds.currentTime( frame, edit=True )
finalFilePath = difName+»/»+basename+».»+str(frame).zfill(5)+».geo»
particleFile = open(finalFilePath, ‘w’)

particleFile.write(«PGEOMETRY V5 \nNPoints » + str(cmds.particle(pTransform,q=1, count=1)) + » NPrims 0 \nNPointGroups 0 NPrimGroups 0 \nNPointAttrib «+str(attrNum)+» NVertexAttrib 0 NPrimAttrib 0 NAttrib 1 \nPointAttrib \n»+svel+srad+srot+sid+slife+sage+srgb+sopacity+smass+suserveca+suservecb+suserfloa+suserflob);

for fr in range(cmds.particle(pTransform,q=1, count=1)) :

posb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘worldPosition’)
if avel:velb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘velocity’)
if arad:scaleb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘radiusPP’)
if arot:rotb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘rot’)
if aid:idb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘id’)
if alife:lifeb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘lifespanPP’)
if aage:ageb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘age’)
if argb:rgbb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘rgbPP’)
if aopacity pacityb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘opacityPP’)
if amass:massb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = ‘mass’)
if auserveca:uservecab = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = userveca)
if auservecb:uservecbb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = uservecb)
if auserfloa:userfloab = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = userfloa)
if auserflob:userflobb = cmds.getParticleAttr(pshape+».pt»+»[«+str(fr)+»]»,attribute = userflob)

fvel = str(velb[0]) +» «+ str(velb[1])+» «+str(velb[2])+» » if avel else «»
frad = str(scaleb[0])+» » if arad else «»

frot = str(rotb[0]) +» «+ str(rotb[1])+» «+str(rotb[2])+» » if arot else «»
fid = str(idb[0])+» » if aid else «»
flife = str(lifeb[0])+» » if alife else «»
fage = str(ageb[0])+» » if aage else «»
frgb = str(rgbb[0]) +» «+ str(rgbb[1])+» «+str(rgbb[2])+» » if argb else «»
fopacity = str(opacityb[0])+» » if aopacity else «»
fmass = str(massb[0])+» » if amass else «»
fuserveca = str(uservecab[0]) +» «+ str(uservecab[1])+» «+str(uservecab[2])+» » if auserveca else «»
fuservecb = str(uservecbb[0]) +» «+ str(uservecbb[1])+» «+str(uservecbb[2])+» » if auservecb else «»
fuserfloa = str(userfloab[0])+» » if auserfloa else «»
fuserflob = str(userflobb[0])+» » if auserflob else «»

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *