1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Как вытащить инфу о Альфе (из скрипта)

Тема в разделе "Apple Shake", создана пользователем -, 21 янв 2003.

Модераторы: Григорий Чаленко
  1. Guest

    Помогите написать скрипт. Если конечно Shake такое умеет.
    1. Пробежать по поддиректориям данной директории.
    2. Найти все файлы .tga
    3. Если в .tga нет альфы , или она белая -> сконвертить в .jpg

    Вот вопрос:
    !
    1.Как узнать есть ли в "fileIn" alpha. И (если она и есть) как узнать если она вся белая(черная)?
    !

    2. Можно ли через скрипт щейковский лазить по файловой системе, и копировать\удалять файлы (я думаю это через perl делать.)
    3. Как вернуть perl`овому скрипту результат выполнения щейкового скрипта.
     
  2. Guest

    >1.Как узнать есть ли в "fileIn" alpha. И (если она и есть) как узнать если она вся белая(черная)?

    Через ColorX перебором, но думается, что это будет медленно.

    >2. Можно ли через скрипт щейковский лазить по файловой системе, и копировать\удалять файлы (я думаю это через perl делать.)

    Нет, возможно где-то внутри Шейка и есть операторы для работы с файловой системой, но они не документированы. Вот если бы изнутри можно было бы вызвать консоль с перлом, но я не знаю, возможно это или нет.

    >3. Как вернуть perl`овому скрипту результат выполнения щейкового скрипта.

    Что понимается под результатом? Shake возвращает в консоль либо сообщение об ошибке, либо время рендеринга и номер кадра (если указан параметр -vv)
     
  3. Guest

    Пробежать, я пробежал, но как сохранить результат не понял.
    Ламерский вопрос, но с глобальными переменными я так и не разобрался.
    Если не сложно, в кратце раскажи как через colorX правильно не пикселям бегать.
    Или напиши где про это что-то написано (а то я от доки пока не в восторге).
     
  4. Guest

    как через colorX правильно по пикселям бегать?
    Извиняюсь за опечатку. Час ночи был..
     
  5. Guest

    Ну вот мазохистский скрипт :))

    Это h-файл

    image cycle(
    image In=0,
    int pwidth=720,
    int pheight=576,
    )
    {
    OUT=In;
    for (int v=1; v<pheight+1; v++)
    {
    for (int h=1; h<pwidth+1; h++)
    {
    OUT=ColorX(OUT, r, g, b, a, h, v)
    }
    }
    return OUT;
    }

    А вот это примерный UI

    nuiPushMenu("Tools");
    nuiPushToolBox("SFX");
    nuiToolBoxItem("@cycle",cycle());
    nuiPopToolBox();
    nuiPopMenu();

    Но это сущий кошмар!
    В данном случае размер кадра 720х576, при запуске этой ноды на моем Dual P4Xeon 2GHz Шейк просто "встал колом" :))

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

    Вот пример ColorX с использованием информации о положении пикселя

    ColorX1 = ColorX(0, y<height/3?x/width:(y>(height/3)*2?(abs(x-width))/width:0),
    g, b, a, z);
     
  6. Guest

    image = ColorX( image, rExpr, gExpr, bExpr, aExpr, zExpr);
    так у меня в доке написано.
    Тогда что это значит...
    OUT=ColorX(OUT, r, g, b, a, h, v)
    ...
    Короче вопросов море, а свободное время ожидается только ночью в понедельник.
    Спасибо, ситуация проясняется. Буду разбиратся дальше.
     
  7. Guest

    OUT=ColorX(OUT(имя ноды на входе), r, g, b, a, z (это и так ясно), h, v (это координаты пикселя по горизонтали и вертикали, то есть x и y, так как у меня сделаны два вложенных цикла (надеюсь ты это понял :)), то это имена переменных, которые являются счетчиками циклов).
    Вот так, все, в принципе, просто :))
     
  8. Guest

    Продолжая извращения на тему пикселя-марафона, я доигрался (ну потому что к работе это уже ну никак не относится) до следующего интересного (как мне показалось) результата:

    (текст скрипта)

    Input = FileIn("//Vovka/D/!projects/shake/new.tga", "Auto", 0,
    0);
    printf("FileIn : Input\n");

    ColorX1 = ColorX(Input, r, g ,b, printf("Alpha is : %f\n",a) , z ); // - тут весь прикол

    printf("ColorX : ColorX1\n");

    output = FileOut(ColorX1, "//Vovka/D/!projects/shake/test.tga",
    "Auto", "as-is");

    printf("FileOut : output\n");

    На что шейк выдал результат:

    FileIn : Input
    ColorX : ColorX1
    FileOut : output
    Alpha is : 0.000000
    Alpha is : 0.000000
    Alpha is : 0.000000
    Alpha is : 0.000000
    Alpha is : 0.003922
    Alpha is : 0.007843
    Alpha is : 0.011765
    Alpha is : 0.015686
    Alpha is : 0.019608
    Alpha is : 0.023529
    Alpha is : 0.027451
    Alpha is : 0.031373
    Alpha is : 0.035294
    Alpha is : 0.039216
    ...
    То есть он выполнил создание нодов, а потом запустил експрешин для ColorX...?
    Я начинаю понимать что работает он совсем не так, как я себе представлял...

    Ваши комментарии? Как это обяснить ?
     
  9. Guest

    Я уже неделю трахаюсь, ... и нифига.
    Проблема: (чисто ради интереса, но всё же.. я спать спокойно не могу :)
    1. Есть файл test.tga
    2. Если в этом файле есть хоть одна точка в которой alpha > 0.5 то
    printf("TRA-TA-TA . It`s not THAT transparent. Bla-blah \n");
    Надпись одна, в конце выполнения.

    Всем зарание спасибо.
     
  10. Guest

    Да вы маньяк, батенька, побольше бы таких перцев и недокументированных функций в Shake бы уже не осталось :))
    Завтра, будет время (а оно, возможно, будет, так как у меня сейчас сплошной рендеринг :))), попробую накрапать скрипт, заодно попробую накрапать скрипт по поводу твоего вопроса о разделении потоков FileOut по некоему условию (есть на этот счет ряд идей).

    Happy hackin' :)))
     
  11. Guest

    а нафиг делать это скриптами??? проще взять и с нуля написать програмульку, которая тебе всю скевенцию без альфы переведет в джипеги.
     
Модераторы: Григорий Чаленко

Поделиться этой страницей