Перейти к контенту

Моделирование в Maya


  

95 голосов

  1. 1. Нужна ли отдельная тема "Анимирование в Maya"?

    • Да
      74
    • Нет
      10
    • Затрудняюсь ответить
      11


Рекомендуемые сообщения

Всё что связано с Autodesk Maya обсуждаем здесь

========================================================

RWNjiOt.png

 

(составлено 

break):

В: Где скачать обновления Майи?
О: На оф. сайте Autodesk: http://usa.autodesk.com/adsk/servlet/ps/dl/index?siteID=123112&id=2334435&linkID=9242259
----
В: Где взять плагины для работы со Сталкер-форматами?
О: Официальные для ТЧ - здесь: http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=437
Официальные для ЧН/ЗП - здесь: http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=436
Плагин bardak'а здесь: http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=454
Обновляемые плагины для последних версий Maya лежат (2014) здесь.
----
В: Как установить плагины?
О: Официальные:
1) Скопировать xrayMaya_export.dll и xrayMaya_material.dll в $MAYA/bin/plug-ins
2) Скопировать BugTrap.dll и xray_path.ltx в $MAYA/bin
Бардаковские:
0) Смотри readme
----
В: Чем отличаются "официальные" плагины от плагина бардака?
О: Официальные плагины разработаны GSC. Могут экспортировать геометрию, скелетную анимацию (.skl) и
анимацию камеры (.anm). Импортера нет. Есть сборки до Maya 2010 включительно, но только под win32.
В комплекте с ними идет набор MEL-скриптов:
1) AEXRayMtlTemplate.mel создает дополнительные контролы для ноды XRayMtl в редакторе атрибутов.
Без него вы не увидите свитка hardware texturing и назначенная в color текстура останется "размытой".
2) exportXRayCameramоtionAdvance.mel - множественный экспорт анимации камеры (.anm)
3) exportXRayObjectAdvance.mel - множественный экспорт статических объектов (.object)
4) exportXRaySkinMotionAdvance.mel - массовый экспорт скелетной анимации (.skl)
5) exportXRaySkinObjectAdvance.mel - массовый экспорт скелетных объектов (.object)
6) XRayShaders.mel - менюшка для назначения engine/compiler shader'ов и game material'ов.
Часть этих скриптов вызывает функции пысовского экспортера и бесполезна для бардаковского плага.
 
Плагин бардака поддерживает импорт .ogf, .dm, .object, .omf, .skl, .skls и экспорт .object, .skl.
Экспортера .anm нет. Сборки под Maya 8.5-2014, включая x64 версии. Совместим с официальными плагинами
и XRay-материалом. Исходный код полностью открыт: https://bitbucket.org/stalker/xray_re-tools/src
(Квалифицированные кодеры - давайте конпелировать в месте!)
При всех достоинствах бардаковского плагина, имеются и недоработки:
1) нерешенная проблема со сглаживанием .object'ов формата ЗП
2) отсутствие экспорта анимации камеры в формат .anm
3) невозможно экспортировать клипы из TraX Editor'а
----
В: Я максист, хде xform в Майе?
О: Modify->freeze transforms, reset transforms

xr_startup_scene_init.mel
Устанавливает рабочие единицы и плоскости отсечки под Сталкера.

global proc xr_startup_scene_init() {
///
// Установка рабочих единиц
//
currentUnit -linear "meter" -time "ntsc";
///
// Установка плоскостей отсечки
//
viewClipPlane -nearClipPlane 0.01 -farClipPlane 1000 perspShape;
viewClipPlane -nearClipPlane 0.01 -farClipPlane 1000 topShape;
viewClipPlane -nearClipPlane 0.01 -farClipPlane 1000 frontShape;
viewClipPlane -nearClipPlane 0.01 -farClipPlane 1000 sideShape;print "XRay settings: initialized\n";xr_startup_plugin_loader();
}
 

xr_startup_plugin_loader.mel
Загружает и добавляет в автозагрузку xrayMayaTools.mll. Если версия Maya <= 2010, то дополнительно
пытается загрузить и убрать из автозагрузки xrayMaya_export.mll, а также выгрузить и убрать из
автозагрузки xrayMaya_material.mll (как рекомендовал bardak).


global proc xr_startup_plugin_loader() {
string $xray_maya_tools_path = `getenv MAYA_LOCATION`
         + "/bin/plug-ins/xrayMayaTools.mll";
string $xray_maya_material_path = `getenv MAYA_LOCATION`
         + "/bin/plug-ins/xrayMaya_material.mll";
string $xray_maya_export_path = `getenv MAYA_LOCATION`
         + "/bin/plug-ins/xrayMaya_export.mll";
///
// XRay Maya tools
//
if (!(`filetest -s $xray_maya_tools_path`)) {
  print "xrayMayaTools: plug-in not found\n";
} else if (`pluginInfo -q -loaded xrayMayaTools`) {
  print "xrayMayaTools: already loaded\n";
} else {
  loadPlugin xrayMayaTools;
  pluginInfo -e -autoload true xrayMayaTools;
  print ((`pluginInfo -q -loaded xrayMayaTools`)
    ? "xrayMayaTools: loaded\n"
    : "xrayMayaTools: not loaded\n");
}
///
// Официальные плагины
//
if (`about -apiVersion` <= 201000) {
  ///
  // Принудительная выгрузка material-плагина во избежание конфликта с xrayMayaTools
  //
  if (!(`filetest -s $xray_maya_material_path`)) {
   print "xrayMaya_material: plug-in not found, it's OK\n";
  } else if (`pluginInfo -q -loaded xrayMaya_material`) {
   unloadPlugin -force xrayMaya_material;
   pluginInfo -e -autoload false xrayMaya_material;
   print "xrayMaya_material: successfully unloaded\n";
  }
  ///
  // Загрузка экспортера
  //
  if (!(`filetest -s $xray_maya_export_path`)) {
   print "xrayMaya_export: plug-in not found\n";
  } else if (`pluginInfo -q -loaded xrayMaya_export`) {
   print "xrayMaya_export: already loaded\n";
  } else {
   loadPlugin xrayMaya_export;
   // убираем из автозагрузки во избежание конфликта
   pluginInfo -e -autoload false xrayMaya_export;
   print ((`pluginInfo -q -loaded xrayMaya_export`)
     ? "xrayMaya_export: loaded\n"
     : "xrayMaya_export: not loaded\n");
  }
}
print "XRay plug-ins: successfully loaded\n";
}
 

xr_object_export.mel
Переписанный ПЫСовский скрипт для множественного экспорта объектов. Для 2012 и выше.

global proc xr_object_export() {
if (size(`ls -sl`) == 0) {
  confirmDialog -title "Error"
     -message "Nothing selected!"
     -button "OK" -defaultButton "OK"
     -icon "warning";
  error "Nothing selected";
}
$response = `confirmDialog -title "Confirm action"
       -message "Are you sure to export all selected objects?"
       -button "Yes" -button "No" -defaultButton "Yes"
       -cancelButton "No" -dismissString "No"
       -icon "question"`;
if ($response == "Yes") {
  string $exported_objects[] = `ls -sl`;
  print ("Selected: \n");
  print $exported_objects;
  print "\n";
  print ("Export:\n");
  int $i = 0;
  string $export_dir[] = `fileDialog2 -caption "Export selection"
           -fileMode 3
           -okCaption "OK"
           -cancelCaption "Cancel"`;
  if ($export_dir[0] == "") {
   error "Export canceled\n";
  } else if ($export_dir[0] != "Cancel") {
   for ($i; $i < size($exported_objects); $i++) {
    select $exported_objects[$i];
    //polyTriangulate -name $exported_objects;
    string $name = $export_dir[0] + "/" + $exported_objects[$i];
    file -exportSelected -type "X-Ray object" $name;
    print ($name + ".object\n");
   }
  }
  print ("Summary: " + size($exported_objects) + " file(s) exported" + "\n");
  // FIXME: undo
} else if ($response == "No") {
  error "Export canceled\n";
}
}

AEXRayMtlTemplate.mel
О нем вы читали выше.


//AEXRayMtlTemplate.melglobal proc AEXRayMtlTemplate( string $nodeName ) {
AEswatchDisplay $nodeName;
editorTemplate -beginScrollLayout;editorTemplate -beginLayout "Common Material Attributes" -cl off;
  editorTemplate -addControl "color";
  editorTemplate -addControl "transparency";
  editorTemplate -addControl "incandescence";
editorTemplate -endLayout;editorTemplate -beginLayout "Hardware Texturing" -cl off;
AEhardwareTextureTemplate $nodeName
  ("color transparency incandescence");
editorTemplate -endLayout;editorTemplate -beginLayout "X-Ray Material Attributes" -cl off;
  editorTemplate -addControl "xrayDoubleSide";
  editorTemplate -addControl "xrayEngineShader";
  editorTemplate -addControl "xrayCompilerShader";
  editorTemplate -addControl "xrayGameMaterial";
editorTemplate -endLayout;editorTemplate -addExtraControls;
editorTemplate -endScrollLayout;
}
 

Поправленный скрипт Страховида - boolean и деформер полигональной поверхности (http://www.amk-team.ru/forum/index.php?showtopic=5422&p=734386)

global proc strah_deform_n_cut() {string $dfc_window = `window -title "Strahovid" -menuBar true`;menu -label "Edit";
  menuItem -label "Undo" -command "Undo";
  menuItem -label "Redo" -command "Redo";
columnLayout;menu -label "Help" -helpMenu true;
  menuItem -label "Discussion"
    -command "showHelp -absolute \"http:\/\/www.amk-team.ru\/forum\/index.php?showtopic=5422\""
    ;
columnLayout;scrollLayout scrollLayout;
  columnLayout -adjustableColumn true;
   frameLayout -label "Deform & cut tool" -borderStyle "in";
    columnLayout -adjustableColumn true;
     floatSliderGrp -label "Vertex offset X: "
         -field 1 -value 0.1 -min 0 -max 0.5 -step 0.01 X;
     floatSliderGrp -label "Vertex offset Y: "
         -field 1 -value 0.1 -min 0 -max 0.5 -step 0.01 Y;
     floatSliderGrp -label "Vertex offset Z: "
         -field 1 -value 0.1 -min 0 -max 0.5 -step 0.01 Z;
    setParent ..;    columnLayout -adjustableColumn true;
     button -w 174 -h 26 -label "Deform" -command "dfc_deform";
     button -w 174 -h 26 -label "Cut" -command "dfc_cut";
     button -w 174 -h 26 -label "Close" -command ("deleteUI -window " + $dfc_window);
    setParent ..;showWindow $dfc_window;
}//////////////////////////////////////////////////////////////////////////
proc dfc_deform() {
string $list[] = `ls -sl -fl`;
string $item;
float $mX = `floatSliderGrp -q -v X`;
float $mY = `floatSliderGrp -q -v Y`;
float $mZ = `floatSliderGrp -q -v Z`;
for($item in $list) {
  move -r (rand(-$mX,$mX)) (rand(-$mY,$mY)) (rand(-$mZ,$mZ)) $item;
}
}//////////////////////////////////////////////////////////////////////////
proc dfc_cut() {
string $o1[] = `ls -sl`;
string $ob1 = $o1[0];
string $ob2 = $o1[1];
string $o2[] = `duplicate $o1`;
string $o5[] = `duplicate $ob1`;
string $ob3 = $o2[0];
string $ob4 = $o2[1];
polyNormal $ob3;
string $rez1[] = `polyBoolOp -op 3 $ob1 $ob2`;
string $rez2[] = `polyBoolOp -op 3 $ob3 $ob4`;
xform -cp $rez1 $rez2 $o5;
select $o5;
}
 

xr_tools.mel
Меню для вызова вышеуказанных скриптов.



global proc xr_tools() {global string $gMainWindow;
setParent $gMainWindow;menu -l "X-Ray Tools" -p MayaWindow -tearOff true xr_tools;menuItem -label "Apply XRay settings"
   -annotation "Apply XRay settings"
   -command "xr_startup_scene_init"
   xr_startup_scene_init;menuItem -divider true;menuItem -label "Multiple export"
   -subMenu true
   -tearOff true
   ;menuItem -label "Export objects"
   -annotation "Export selected objects"
   -command "xr_object_export"
   xr_object_export;setParent -m ..;//////////////////////////////////////////////////////////////////////////
menuItem -label "XRay material..."
   -subMenu true
   -tearOff true
   ;
menuItem -divider true;////
// Удаление неиспользуемых Shading nodes. Сюда вынесено лишь для удобства.
//
menuItem -label "Delete unused shading nodes"
   -command "MLdeleteUnused"
   MLdeleteUnused;setParent -m ..;///////////////////////////////////////////////////////
menuItem -divider true;menuItem -label "About..."
   -subMenu true
   ;menuItem -label "Discussion"
   -command "showHelp -absolute \"http:\/\/www.amk-team.ru\/forum\/index.php?showtopic=5422\""
   ;   setParent -m ..;
}
 

userSetup.mel
Пользовательские установки. Здесь - подгрузка скриптов.



///
// Инициализация UI
//
evalDeferred -lowestPriority xr_tools;
///
// xr_startup_scene_init.mel выполняется каждый раз при создании новой сцены,
// в т.ч. сразу после загрузки Maya. Раскомментируйте, если нужно.
//
//scriptJob -event NewSceneOpened xr_startup_scene_init;
 

 

http://rusfolder.com/37228626

 

Ссылка на актуальную версию скрипта XrayToolMaya

 

В: Как правильно сообщать об ошибках?
О: 1) Сообщите версию Майи и  используемых плагинов.
2) Подробно опишите свои действия и цель этих действий.
3) Приведите лог из окна вывода (output window) и редактора скриптов (script editor).
4) В тяжелых случаях не помещает выложить сцену.
----
В: Пытаюсь экспортировать скелетную анимацию пысовским плагом, но он выдает ошибку:
XR-Error: Can't export animation with FPS!=30.f
XR-Error: Export failed.
О: В XRay принята частота 30 кадров в секунду. Измените настройки: http://images.gameru.net/image/direct/401a3efaa2.png

 

Изменено пользователем vadyan
  • Нравится 1
  • Полезно 1

Захоти тихо, проси мало, уходи быстро.

 

Заходи не бойся - уходя не плачь

Ссылка на комментарий

@Comador, Опять - 25... В Майке 2012 эти плагины не загружаются...

// Error: Unable to dynamically load : C:/Program Files/Autodesk/Maya2012/bin/plug-ins/xrayMayaTools.mll
 // 
// Error:  // 
// Error:  (xrayMayaTools) // 

Xray_path.ltx прописан.

Может они под семёрку?

Изменено пользователем CuJIbBEP

h-264.jpg

Ссылка на комментарий

 

 


вот здесь можешь скачать.

 

Там 1 плагин и он для 2014 версии, выкладывали когда то для версий 8.5 - 2012, для 2013 не выкладывали, не ищите.

  • Нравится 1
Ссылка на комментарий

Подскажите как в channel box/layer editor изменить отображение координат объекта с трёхзначного значения на шестизначное, после точки(запятой)? И возможно ли это?

Например:

-153.497 на -153.497123

 

65affc59dd7a7eb50745ab3423bc7c27.png

 

h-264.jpg

Ссылка на комментарий

В этом же окне и настраивается, поискал - нашел бы )

Вот скрин.

 

у кого может остался скрипт выложенный в этом посте ?

Изменено пользователем vadyan
  • Нравится 1
Ссылка на комментарий
vadyan

Добрый вечер(день) я по поводу скрипта xr_tools.mel, установив maya2014 до этого стояла maya2011 всё было нормально, теперь при запуске скрипта выдаёт ету ошибку

 

// Error: file: C:/Users/Andrey/Documents/maya/scripts/xr_tools.mel line 2651: Cannot find procedure "sizeComponents". // 

// Error: file: C:/Users/Andrey/Documents/maya/scripts/xr_tools.mel line 2520: Cannot find procedure "sizeComponents". //
 
также и при выдилении: обекта, полигона...и неработает скрипт "delete unused nodes", "аssign duble shading nodes" остальными пока не пользовался, подскажыте что это за ошыбка и, как с этим бороться? 

 

Ссылка на комментарий

Проверь какой код у твоей версии скрипта

Вот так должно быть :

global proc int sizeComponents(string $items[]){
    int $itemsCount = 0;
    for ($item in $items){
        string $buffer[] = {};
        tokenize $item "[:]" $buffer;
        if (`size $buffer` < 3){
            $itemsCount++;
            continue;
        }
        int $begin = $buffer[1];
        int $end = $buffer[2];
        int $count = $end - $begin + 1;
        $itemsCount += $count;
    }
    return $itemsCount;
}

Найти можно по proc int sizeComponents,

И собственно какая версия, сборка ? Я выкладывал с правками, посмотри эта версия или нет ? Ссыль.

 

Если есть какие то ошибки при работе скрипта то кроме самой ошибки желательно еще скрин и номер строки когда появляется, включить отображение строк при ошибке можно в опция скрипт редактора.

Изменено пользователем vadyan
Ссылка на комментарий

 vadyan

День добрый, да версия сэтой ссылки, я конечьно  в написании скриптов не силён(0) но этот код есть толко в версии 1.0 находится он в

/////////////

// NAT_HUD //

global proc natHUDenableAll()

{

if (`headsUpDisplay -q -ex natHUDprojectName`)

headsUpDisplay -rem natHUDprojectName;

if (`headsUpDisplay -q -ex natHUDsceneName`)

headsUpDisplay -rem natHUDsceneName;

if (`headsUpDisplay -q -ex natHUDselection`)

headsUpDisplay -rem natHUDselection;

if (`headsUpDisplay -q -ex natHUDdistance`)

headsUpDisplay -rem natHUDdistance;

natHUDprojectName;

natHUDsceneName;

natHUDselection;

natHUDdistance;

natHUDupdateOptionVars;

}

global proc natHUDdisableAll()

{

if (`headsUpDisplay -q -ex natHUDprojectName`)

headsUpDisplay -rem natHUDprojectName;

if (`headsUpDisplay -q -ex natHUDsceneName`)

headsUpDisplay -rem natHUDsceneName;

if (`headsUpDisplay -q -ex natHUDselection`)

headsUpDisplay -rem natHUDselection;

if (`headsUpDisplay -q -ex natHUDdistance`)

headsUpDisplay -rem natHUDdistance;

natHUDupdateOptionVars;

}

global proc natHUDupdateOptionVars()

{

optionVar -iv natHUDprojectNameEnable `headsUpDisplay -q -ex natHUDprojectName`;

optionVar -iv natHUDsceneNameEnable `headsUpDisplay -q -ex natHUDsceneName`;

optionVar -iv natHUDselectionEnable `headsUpDisplay -q -ex natHUDselection`;

optionVar -iv natHUDdistanceEnable `headsUpDisplay -q -ex natHUDdistance`;

/*

optionVar -q natHUDprojectNameEnable;

optionVar -q natHUDsceneNameEnable;

optionVar -q natHUDselectionEnable;

optionVar -q natHUDdistanceEnable;

*/

}

global proc natHUDstartup()

{

if (`optionVar -q natHUDprojectNameEnable`)

natHUDprojectName;

if (`optionVar -q natHUDsceneNameEnable`)

natHUDsceneName;

if (`optionVar -q natHUDselectionEnable`)

natHUDselection;

if (`optionVar -q natHUDdistanceEnable`)

natHUDdistance;

}

global proc natHUDmenuCheckBoxesUpdate()

{

string $menu = `setParent -q -m`;

string $items[] = `menu -q -ia $menu`;

string $item;

for ($item in $items)

{

//$item = $items[0];

if (`menuItem -q -d $item`)

continue;

string $label = `menuItem -q -l $item`;

if ($label == "Project name")

menuItem -e -cb (`optionVar -q natHUDprojectNameEnable`) $item;

if ($label == "Scene name")

menuItem -e -cb (`optionVar -q natHUDsceneNameEnable`) $item;

if ($label == "Selection names")

menuItem -e -cb (`optionVar -q natHUDselectionEnable`) $item;

if ($label == "Distance measure")

menuItem -e -cb (`optionVar -q natHUDdistanceEnable`) $item;

}

}

//headsUpDisplayRemoveAll

global proc natHUDsceneName()

{

if (`headsUpDisplay -q -ex natHUDsceneName`)

headsUpDisplay -rem natHUDsceneName;

//закоментировал проверки загружен ли скрипт

//else

headsUpDisplay -s 5 -b (`headsUpDisplay -nfb 5`)

-l "Scene path:" -c "natHUDsceneNameCommand" -ev "SceneOpened" natHUDsceneName;

}

global proc string natHUDsceneNameCommand()

{

string $res = toNativePath(substituteAllString(`file -q -sn`, `workspace -q -fullName`, ""));

//$time = " The current time is: 18:34:11,41\nEnter the new time: ";

string $time = `system "time"`;

string $array[] = stringToStringArray($time, ":,");

//print $array

$time = `substring $array[1] 2 3` + ":" + $array[2];

//print $time;

if ($res == "")

$res = "...";

$res += (" " + $time);

return $res;

}

global proc natHUDprojectName()

{

if (`headsUpDisplay -q -ex natHUDprojectName`)

headsUpDisplay -rem natHUDprojectName;

//закоментировал проверки загружен ли скрипт

//else

headsUpDisplay -s 5 -b (`headsUpDisplay -nfb 5`)

-l "Project path:" -c "toNativePath(`workspace -q -fullName`)" -ev SceneOpened natHUDprojectName;

}

global proc natHUDdistance()

{

if (`headsUpDisplay -q -ex natHUDdistance`)

headsUpDisplay -rem natHUDdistance;

//закоментировал проверки загружен ли скрипт

//else

headsUpDisplay -s 0 -block (`headsUpDisplay -nfb 0`)

-label "Distance:" -c "natHUDdistanceCommand" -ev "SelectionChanged" -nodeChanges "attributeChange" natHUDdistance;

}

global proc string natHUDdistanceCommand()

{

//setting up number of digits for output values

float $distPrecision = 2; //edge and curve length, vertices distance

float $anglePrecision = 2; //face normal angle

int $sizeComponents = sizeComponents(`ls -sl`);

if ($sizeComponents > 1000)

return "too much selected...";

global string $gDistanceHUDlastSelected;

string $lastSelectedObject = $gDistanceHUDlastSelected;

string $sel[] = `ls -sl -fl`;

$gDistanceHUDlastSelected = $sel[0];

if (`size $sel` == 0)

return "...";

float $distance = 0.0;

float $v1[3];

float $v2[3];

float $edgeFloat[];

vector $edgeVector;

string $vertices[] = `filterExpand -sm 31`;

string $edges[] = `filterExpand -sm 32`;

string $faces[] = `filterExpand -sm 34`;

 

if (`size $vertices` > 0)

{

headsUpDisplay -e -label "Distance:" natHUDdistance;

if (`size $vertices` == 2)

{

$v1 = `pointPosition $vertices[0]`;

$v2 = `pointPosition $vertices[1]`;

for ($i = 0; $i < 3; $i++)

$edgeFloat[$i] = $v1[$i] - $v2[$i];

$edgeVector = $edgeFloat;

$distance = `mag $edgeVector`;

string $res = strToFloat ($distance, $distPrecision);

return $res;

}

else

return "...";

}

else if (`size $edges` > 0)

{

for ($thisEdge in $edges)

{

$attached = `polyListComponentConversion -ff -fe -fuv -fvf -tv $thisEdge`;

$vertices = `filterExpand -sm 31 $attached`;

$v1 = `pointPosition $vertices[0]`;

$v2 = `pointPosition $vertices[1]`;

for ($i = 0; $i < 3; $i++)

$edgeFloat[$i] = $v1[$i] - $v2[$i];

$edgeVector = $edgeFloat;

 

$tmpEdgeLength = `mag $edgeVector`;

$distance += $tmpEdgeLength;

}

headsUpDisplay -e -label "Edges Length:" natHUDdistance;

string $res = strToFloat ($distance, $distPrecision);

return $res;

}

else if (`size $faces` > 0)

{

headsUpDisplay -e -label "Face angle XYZ:" natHUDdistance;

if (`size $faces` == 1)

{

string $info[] = `polyInfo -fn $faces[0]`;

string $infoSep[] = stringToStringArray($info[0], " ");

float $normal[];

$normal[0] = $infoSep[2];

$normal[1] = $infoSep[3];

$normal[2] = $infoSep[4];

vector $vector = $normal;

float $angleX = rad_to_deg(`angle $vector <<1,0,0>>`);

float $angleY = rad_to_deg(`angle $vector <<0,1,0>>`);

float $angleZ = rad_to_deg(`angle $vector <<0,0,1>>`);

return (strToFloat ($angleX,$anglePrecision) + " " + strToFloat ($angleY,$anglePrecision) + " " + strToFloat ($angleZ,$anglePrecision));

}

else

return "...";

}

else

{

if (stringArrayToString(`ls -sl -o`, " ") != stringArrayToString(`ls -sl`, " "))

{

headsUpDisplay -e -label "Distance:" natHUDdistance;

return "...";

}

global float $gLastCalculatedCurveLength;

string $shapes[] = `listRelatives -f -ni -s $sel[0]`;

int $isCurve = 0;

if (`size $sel` == 1 && `size $shapes` > 0)

if (`nodeType($shapes[0])` == "nurbsCurve")

$isCurve = 1;

if ($lastSelectedObject == $sel[0] && $isCurve)

return $gLastCalculatedCurveLength;

else

{

//print $isCurve

if ($isCurve)

{

$distance = arclen ($shapes[0]);

undo;

headsUpDisplay -e -label "Curve Length:" natHUDdistance;

string $res = strToFloat ($distance, $distPrecision);

$gLastCalculatedCurveLength = $res;

return $res;

}

else

{

headsUpDisplay -e -label "Distance:" natHUDdistance;

string $objects[] = `ls -sl -o -type transform`;

if (`size $objects` != 2)

return "...";

else

{

float $distance = twoObjectsDistance($objects[0], $objects[1]);

string $res = strToFloat ($distance, $distPrecision);

return $res;

}

}

}

}

return "...";

}

global proc natHUDselection()

{

if (`headsUpDisplay -q -ex natHUDselection`)

headsUpDisplay -rem natHUDselection;

//закоментировал проверки загружен ли скрипт

//else

headsUpDisplay -s 0 -block (`headsUpDisplay -nfb 0`)

-l "Selection:" -c "natHUDselectionCommand" -ev "SelectionChanged" -nodeChanges "attributeChange" -dp 4 natHUDselection;

}

 

global proc string natHUDselectionCommand()

{

 

int $sizeComponents = sizeComponents(`ls -sl`);

if ($sizeComponents > 1000)

return ($sizeComponents + " items selected.");

 

$sel = `ls -sl -fl`;

$selSize = size($sel);

string $selectionSize = " " + $selSize;

if (!$selSize)

{

return "...";

}

else

{

if ($selSize > 2)

{

string $briefSel = "";

$briefSel = $sel[0] + " ... " + $sel[$selSize-1] + $selectionSize;

return $briefSel;

}

$res = stringArrayToString ($sel, " ") + $selectionSize;

return $res;

}

}

//UTILS

global proc string strToFloat (float $inputFloat, int $decimalPrecision)

{

string $res = "";

if ($inputFloat<0 && $inputFloat>-1)

$res = "-";

int $int = $inputFloat;

$res = $res + $int + ".";

$inputFloat = abs($inputFloat-$int);

$inputFloat *= `pow 10 $decimalPrecision`;

$int = abs($inputFloat);

return ($res + $int);

}

global proc int sizeComponents(string $items[])

{

//string $items[] = `ls -sl`;

//sizeComponents(`ls -sl`);

int $itemsCount = 0;

for ($item in $items)

{

//$item = $items[0];

string $buffer[] = {};

tokenize $item "[:]" $buffer;

//print $buffer

if (`size $buffer` < 3)

{

$itemsCount++;

continue;

}

int $match1 = `gmatch $buffer[1] "[0-9]*"`;

int $match2 = `gmatch $buffer[2] "[0-9]*"`;

if (!$match1 || !$match2)

continue;

//print $buffer

int $begin = $buffer[1];

int $end = $buffer[2];

int $count = $end - $begin + 1;

$itemsCount += $count;

}

return $itemsCount;

}

global proc string one(string $array[])

{

if (`size $array` > 0)

return $array[0];

else

return "";

}

global proc float twoObjectsDistance (string $object1, string $object2)

{

float $p1[] = `xform -q -ws -t $object1`;

float $p2[] = `xform -q -ws -t $object2`;

float $distance = sqrt(pow(($p1[0] - $p2[0]), 2) + pow(($p1[1] - $p2[1]), 2) + pow(($p1[2] - $p2[2]), 2));

return $distance;

}

// NAT HUD AND //

/////////////////

 

 

ито немного по другому выглядит, а в версиях 1.1 и 1.2 он отсуствует 

////////////////////////

//// NAT HUD START /////

global proc natHUDdistance()

{

if (`headsUpDisplay -q -ex natHUDdistance`)

headsUpDisplay -rem natHUDdistance;

else

headsUpDisplay -s 0 -block (`headsUpDisplay -nfb 0`)

-label "Distance:" -c "natHUDdistanceCommand" -ev "SelectionChanged" -nodeChanges "attributeChange" natHUDdistance;

}

 

global proc string natHUDdistanceCommand()

{

//setting up number of digits for output values

float $distPrecision = 2; //edge and curve length, vertices distance

float $anglePrecision = 2; //face normal angle

int $sizeComponents = sizeComponents(`ls -sl`);

if ($sizeComponents > 1000)

return "too much selected...";

global string $gDistanceHUDlastSelected;

string $lastSelectedObject = $gDistanceHUDlastSelected;

string $sel[] = `ls -sl -fl`;

$gDistanceHUDlastSelected = $sel[0];

if (`size $sel` == 0)

return "...";

float $distance = 0.0;

float $v1[3];

float $v2[3];

float $edgeFloat[];

vector $edgeVector;

string $vertices[] = `filterExpand -sm 31`;

string $edges[] = `filterExpand -sm 32`;

string $faces[] = `filterExpand -sm 34`;

 

if (`size $vertices` > 0)

{

headsUpDisplay -e -label "Distance:" natHUDdistance;

if (`size $vertices` == 2)

{

$v1 = `pointPosition $vertices[0]`;

$v2 = `pointPosition $vertices[1]`;

for ($i = 0; $i < 3; $i++)

$edgeFloat[$i] = $v1[$i] - $v2[$i];

$edgeVector = $edgeFloat;

$distance = `mag $edgeVector`;

string $res = strToFloat ($distance, $distPrecision);

return $res;

}

else

return "...";

}

else if (`size $edges` > 0)

{

for ($thisEdge in $edges)

{

$attached = `polyListComponentConversion -ff -fe -fuv -fvf -tv $thisEdge`;

$vertices = `filterExpand -sm 31 $attached`;

$v1 = `pointPosition $vertices[0]`;

$v2 = `pointPosition $vertices[1]`;

for ($i = 0; $i < 3; $i++)

$edgeFloat[$i] = $v1[$i] - $v2[$i];

$edgeVector = $edgeFloat;

 

$tmpEdgeLength = `mag $edgeVector`;

$distance += $tmpEdgeLength;

}

headsUpDisplay -e -label "Edges Length:" natHUDdistance;

string $res = strToFloat ($distance, $distPrecision);

return $res;

}

else if (`size $faces` > 0)

{

headsUpDisplay -e -label "Face angle XYZ:" natHUDdistance;

if (`size $faces` == 1)

{

string $info[] = `polyInfo -fn $faces[0]`;

string $infoSep[] = stringToStringArray($info[0], " ");

float $normal[];

$normal[0] = $infoSep[2];

$normal[1] = $infoSep[3];

$normal[2] = $infoSep[4];

vector $vector = $normal;

float $angleX = rad_to_deg(`angle $vector <<1,0,0>>`);

float $angleY = rad_to_deg(`angle $vector <<0,1,0>>`);

float $angleZ = rad_to_deg(`angle $vector <<0,0,1>>`);

return (strToFloat ($angleX,$anglePrecision) + " " + strToFloat ($angleY,$anglePrecision) + " " + strToFloat ($angleZ,$anglePrecision));

}

else

return "...";

}

else

{

if (stringArrayToString(`ls -sl -o`, " ") != stringArrayToString(`ls -sl`, " "))

{

headsUpDisplay -e -label "Distance:" natHUDdistance;

return "...";

}

global float $gLastCalculatedCurveLength;

string $shapes[] = `listRelatives -f -ni -s $sel[0]`;

int $isCurve = 0;

if (`size $sel` == 1 && `size $shapes` > 0)

if (`nodeType($shapes[0])` == "nurbsCurve")

$isCurve = 1;

if ($lastSelectedObject == $sel[0] && $isCurve)

return $gLastCalculatedCurveLength;

else

{

//print $isCurve

if ($isCurve)

{

$distance = arclen ($shapes[0]);

undo;

headsUpDisplay -e -label "Curve Length:" natHUDdistance;

string $res = strToFloat ($distance, $distPrecision);

$gLastCalculatedCurveLength = $res;

return $res;

}

else

{

headsUpDisplay -e -label "Distance:" natHUDdistance;

string $objects[] = `ls -sl -o -type transform`;

if (`size $objects` != 2)

return "...";

else

{

float $distance = twoObjectsDistance($objects[0], $objects[1]);

string $res = strToFloat ($distance, $distPrecision);

return $res;

}

}

}

}

return "...";

}

 

global proc natHUDselection()

{

if (`headsUpDisplay -q -ex natHUDselection`)

headsUpDisplay -rem natHUDselection;

else

headsUpDisplay -s 0 -block (`headsUpDisplay -nfb 0`)

-l "Selection:" -c "natHUDselectionCommand" -ev "SelectionChanged" -nodeChanges "attributeChange" -dp 4 natHUDselection;

}

 

global proc string natHUDselectionCommand()

{

 

int $sizeComponents = sizeComponents(`ls -sl`);

if ($sizeComponents > 1000)

return ($sizeComponents + " items selected.");

 

$sel = `ls -sl -fl`;

$selSize = size($sel);

string $selectionSize = " " + $selSize;

if (!$selSize)

{

return "...";

}

else

{

if ($selSize > 2)

{

string $briefSel = "";

$briefSel = $sel[0] + " ... " + $sel[$selSize-1] + $selectionSize;

return $briefSel;

}

$res = stringArrayToString ($sel, " ") + $selectionSize;

return $res;

}

}

 

global proc string strToFloat (float $inputFloat, int $decimalPrecision)

{

string $res = "";

if ($inputFloat<0 && $inputFloat>-1)

$res = "-";

int $int = $inputFloat;

$res = $res + $int + ".";

$inputFloat = abs($inputFloat-$int);

$inputFloat *= `pow 10 $decimalPrecision`;

$int = abs($inputFloat);

return ($res + $int);

}

 

//

//Define a procedure that returns a value to be used by the Heads Up Display

//

global proc float[] objectPosition ()

{

string $selectedNodes[] = `selectedNodes`;

float $position[3];

if (size($selectedNodes) > 0)

{

string $mainObject = $selectedNodes[ (size($selectedNodes) - 1) ];

$position[0] = `getAttr $mainObject.translateX`;

$position[1] = `getAttr $mainObject.translateY`;

$position[2] = `getAttr $mainObject.translateZ`;

}

else

{

$position[0] = 0;

$position[1] = 0;

$position[2] = 0;

}

return $position;

}

 

natHUDselection;

natHUDdistance;

/// NAT HUD END ////

////////////////////

 

maya2014sp4 вот последние строки после загруски скрипта и сцены атакже попытки выделить полигона, верекса и линий

/// SCRIPT ALL AND ///

//////////////////////;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

// Warning: line 544: Plug-in, "xrayMaya_material", is not loaded. //

// Warning: line 545: Plug-in, "xrayMaya_export", is not loaded. //

plugins xrayMaya_material, xrayMaya_export unloads

xrayMayaTools: already loaded

XRay settings: initialized

file -f -options "v=0;p=17;f=0" -typ "mayaAscii" -o "H:/C/rawdata/objects/levels/working_village/working_village_road.ma";addRecentFile("H:/C/rawdata/objects/levels/working_village/working_village_road.ma", "mayaAscii");

// File read in 2 seconds. //

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

select -r polySurface2113 ;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

select -r polySurface2113.f[1026] ;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

select -d polySurface2113.f[1026] ;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

select -r polySurface2113.vtx[821] polySurface2113.vtx[823:824] polySurface2113.vtx[827:828] polySurface2113.vtx[830:831] polySurface2113.vtx[962:964] polySurface2113.vtx[966:977] ;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

select -d polySurface2113.vtx[821] polySurface2113.vtx[823:824] polySurface2113.vtx[827:828] polySurface2113.vtx[830:831] polySurface2113.vtx[962:964] polySurface2113.vtx[966:977] polySurface2113.f[1026] ;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

select -r polySurface2113.e[442:446] polySurface2113.e[541:546] polySurface2113.e[552] polySurface2113.e[831:832] polySurface2113.e[840:845] polySurface2113.e[847] polySurface2113.e[861:864] polySurface2113.e[873:877] polySurface2113.e[997:1000] polySurface2113.e[1003:1004] polySurface2113.e[1791:1792] polySurface2113.e[1802:1839] polySurface2113.e[2200:2220] polySurface2113.e[2222:2235] polySurface2113.e[2237:2238] polySurface2113.e[2240] polySurface2113.e[2242] polySurface2113.e[2282:2323] ;

// Error: line 2651: Cannot find procedure "sizeComponents". //

// Error: line 2520: Cannot find procedure "sizeComponents". //

 

 

Ссылка на комментарий

Обновлённая версия скрипта с текстурами - скачать.

Добавил скрипты :

- Масштабирование статических обьектов

- Масштабирование скелетных обьектов + анимации .Анимации парсит только если они загружены в character, на косточках неберёт!

- Поиск "двойных" полигонов (те что в сдк определяются как "duplicate face").

- Поиск полигонов в кандидаты "invalid face" и больших полигонов которые компилятор может "покромсать" на стадии  оптимизации геометрии.

Исправления в интерфейсе (упростил, работает так же :)).

Исправления скриптов экспорта и загрузки плагинов.

Исправление ошибок при объединении материалов.

Добавил определение есть ли скрипт пак Денисыча (160 штук).

 - если есть то выводит соответствующее меню  работы с паком.

 - если нет то загружает необходимые скрипты для нормальной работы.

Добавил ведение лога для некоторых скриптов, лежит в папке .. \Documents\maya\версия мая\scripts\xr_tools.log

Другие мелкие исправления.

 

Ссылки на старые версии скрипта убрал.

Изменено пользователем vadyan
  • Нравится 1
Ссылка на комментарий

Для 2012 - 2014, убрал проверки если мая меньше чем 2012, работать должен вообще, но не гарантирую. Советую пользоваться актуальным софтом, тем более что плагины имеются ).

Просьба к скачавшим отписаться, есть ли ошибки при работе, собирал быстро - мог что то упустить.

Изменено пользователем vadyan
Ссылка на комментарий

А где можно найти статью как установить плагины к майя? 

Пытаюсь поставить плагины на майя 2009, по тем материалам что идут с СДК.

 

Всё должно ставиться. Опиши "что, как и куда " по пунктам, чтобы понять где ошибка.

Вот здесь ещё почитайhttp://www.stalkerin.gameru.net/wiki/index.php?title=Maya._%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82/%D0%9F%D1%80%D0%BE%D0%B8%D0%B3%D1%80%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B9

 

BFG



При попытке активации модулей (плагинов) пишет

// Error: Не найден указанный модуль.



Вернее не дает поставить птичку на loaded

Ссылка на комментарий

Уже говорили и в ридми есть - читать внимательно надо - плагин в папку

c:\Program Files\Autodesk\версия мая\bin\plug-ins\

xray_path.ltx в папку

c:\Program Files\Autodesk\версия мая\bin\

Не вместе их , не куда попало а так как написано в ридми, такое расположение файла xray_path еще от пыс идет.

Для нормальной работы в связке со сталкер нужны виртуальные диски Х и Т.

Надеюсь зачем нужны и где взять их объяснять не надо ?

  • Нравится 1
Ссылка на комментарий

Скиньте пожалуйста рабочие плагины для майя 2009. Может это конечно я криворукий или майя поставилась как то не так, но импорт/экспорт не хотят работать.

Может есть мануал по установке плагинов? Хотя всё должно быть элементарно. :(

Ссылка на комментарий
Скиньте пожалуйста рабочие плагины для майя 2009.

Вот плагины которые точно рабочие.

Инструкция по установке внутри архива, там всё просто. Выбирай свою версию Maya и ставь их из соответствующей папки.

 
Название: xrayMayaTools-2011oct01.7z
Размер: 496.61 кб
Ссылка для скачивания файла: http://rusfolder.com/40338220
  • Нравится 1

"Кругом зомби.....у меня кончаются патроны...."

Ссылка на комментарий

@karavan, Пользуюсь ими на десятой версии...
Майка валится при экспорте статики если её "комбайнить" (объединять отдельные меши в один)...
В остальном полёт нормальный.

h-264.jpg

Ссылка на комментарий

 

 

На какой версии майя работают?
У меня нормально работают на версии :

Autodesk Maya 2011 64-Bit

"Кругом зомби.....у меня кончаются патроны...."

Ссылка на комментарий

Вопрос по рендерингу террейна, необходимо для создания детальной текстуры, запекание тут не подходит...
Все настройки согласно уроку "Создание текстуры террейна в MAYA".
Что бы в Top`вой камере был виден весь террайн значительно увеличил значение Far Clip Plane.

В результате вижу такое вот такую гадость:

3384699a2001d25b95b64cb9686ddc41.png


В чём может быть загвоздка?

h-264.jpg

Ссылка на комментарий
А можно уточнить? На какой версии майя работают?

А откуда брал программу? Может версия, сборка кривая. Не было никогда таких проблем.

Плагины бери что выложил BFG

 

 

Майка валится при экспорте статики если её "комбайнить" (объединять отдельные меши в один)...

По поводу краша майки при комбине - историю работы с объектом чистиш ?. Если этого не делать то результат будет предсказуем ).

 

В той статье не совсем правильный тутор, и получить текстуру чтоб точно совпадала по координатам очень сложно + настройки камер сильно влияют на рендер - как раз твой случай.

По текстурам вот тутор ссыль.

Писал статью я, давно уже. Если что непонятно - пиши.

Поправить что то там уже не смогу, учетку забыл .

Изменено пользователем vadyan
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...