SoftimageRu Форум -> Всякие самописные штуки

Новости • Форум • Помощь • Поиск • Участники • Календарь • База


Страницы: (10) « Первая ... 7 8 [9] 10   ( Перейти к первому непрочитанному сообщению ) Ответ в темуОтвет      Создание новой темыНовая тема    Создание опросаОпрос

> Всякие самописные штуки   
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Собрал все свои более или менее крупные дополнения для Софтимажа на отдельном сайте. Ну чтобы если что, то линк кидать на него, а не на Дропбокс. Заодно и ревизию провёл, что там из старого работает, а что нет. Инструмент для ретопологии, который делал под Фабрик, к примеру, уже не работает на последней версии Фабрика (2.4 сейчас). Он с самого начала был сделан на старой версии Splice-а, а потом они там что-то поменяли, и в общем начиная с 2.3 не работает. Если же использовать 2.2, то нормально всё.

Собственно сам сайт: https://ssoftadd.github.io/
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 9.03.2017 - 08:50 Top
/voo-doo/
Профиль
Статус: три дэ бугор
Группа: Заслуженные артисты
Рейтинг: 7
:clapping:
Хотелось бы еще видеть даты обновлений . Неясно, насколько древний инструмент :)
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 9.03.2017 - 09:13 Top
мюф
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
:thankyou:
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 9.03.2017 - 10:04 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Хы-хы. Все инструменты корректно работаю в последней версии Софтимажа. Так что с этой точки зрения они все новые и на пике технологий. Ну и это же скорее хоумПейдж, а не блог с регулярными обновлениями.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 9.03.2017 - 10:36 Top
Arab Voisov
Профиль
Статус: мамонт
Группа: Заслуженные артисты
Рейтинг: 6
Angel 07
круто, спасибо большое!
Персональное сообщениеПисьмо на e-mail пользователюICQ
Цитировать сообщение Дата 10.03.2017 - 23:24 Top
AlexanderM
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 13
Какие выводы по Cycles в общем?
Я тестирую интеграцию в Fabric Engine, пока что впечатления от самого рендера противоречивые
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 10.05.2017 - 13:35 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Если одним словом, то мне нравится. Хотя я конечно и не особо много им рендерил, так, мелочевку всякую, но его вполне достаточно, чтобы не хотеть перейти на Арнольд. И уж точно нет желания использовать Ментал. Даже при том уровне интеграции Cycles-а, который есть сейчас. Да, рендерит не быстро, но зато настойка предельно простая. Опять же шейдерная система у Cycles по идеологии нодовая, а значит отлично ложится на Софтимаж. С помощью аттрибутов можно практические любые данные отдать на рендер. Очень много наработок по шэйдерам с самыми разными свойствами у комьюнити Блендера. Ну и конечно то, что бесплатно, еще один большой плюс. Никаких там серверов лицензии, кряков и Персии.

Можно сравнить с open-source-ным рендером Mitsuba. Тоже, помнится, я его пробовал прикрутить к Софтимажу. Там, кстати, не получилось сделать честную интеграцию через c++, так как были какие-то проблемы с тем, что Mitsuba не хотела запускать задачи на рендер не из основного потока, а Софтимаж именно так и делал. Короче не получилось ничего сделать. Так вот Mitsuba по сравнению с Cycles вообще ни о чем. Шэйдерная система гораздо более бедная. Качество картинки при том же времени не просто ниже, а существенно ниже. И вот Mitsub-ой пользоваться не хочется, а Cycles-ом вполне.

Я пока прикручивал Cycles к Софтимажу (и до сих пор прикручиваю понемногу), вот не нашел таких вещей, которые в нём сделаны сильно уж по идиотскому. Ну разве что только источник света типа Spot. Вообще не пойму как он работает и на что влияют его параметры. А в остальном всё чётко, логично и работает так, как ожидается. Так что интересно послушать твоё мнение, что в нём противоречивого.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 10.05.2017 - 19:52 Top
AlexanderM
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 13
ЛС чет глючит.
Были ли проблемы с scene->background? У меня чет не включается на моей реализации, остальные лайты норм вроде.
А если в общем то имхо апи сайклса очень избыточно организован, пойнтеры на меши в объектах дублируются в сцене, шейдеры мешей и лайтов так же дублируются. Еще не смог подать в текстурную ноду дату из памяти, для этого надо переписывать сорсы.
Я могу сравнить с Гидра апи, там удобнее и проще.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 12.05.2017 - 15:15 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
С background-ом вроде не было проблем. Делаю так:

Код

Background *bg = scene->background;
bg->ao_factor = background_ao_factor;
bg->transparent = background_transparent;
bg->use_ao = background_use_ao;
bg->shader = scene->shaders[shaderId];
scene->shaders[shaderId]->tag_update(scene);


Перед этим, конечно, заранее был создан шэйдер для background-а и он сохранен в массив scene->shaders. Потом просто говорим, что надо использовать оттуда шэйдер с номером shaderId.

Стоит отметить, что в шэйдере, который назначается для background-а, можно использовать шэйдерную ноду только типа BackgroundNode. Конечно, всякие mix-ы, другие преобразования, все можно. Нельзя Emission, к примеру, DiffuseBsdf и так далее.

Или вот еще, кусок кода, где не создаётся новый шэйдер, а просто изменяется шэйдер, который по умолчанию назначен для background-а.

Код

ccl::Shader *bgShader = scene->default_background;
ShaderGraph *graph = new ShaderGraph();
ccl::BackgroundNode *bgNode = new ccl::BackgroundNode();
bgNode->input("Color")->set(ccl::make_float3(xsiData->background_color.GetX(), xsiData->background_color.GetY(), xsiData->background_color.GetZ()));
bgNode->input("Strength")->set(xsiData->background_strength);
ccl::ShaderNode *out = graph->output();
graph->add(bgNode);
graph->connect(bgNode->output("Background"), out->input("Surface"));

bgShader->set_graph(graph);
bgShader->tag_update(scene);


Что касается избыточности, то это ведь можно воспринимать так. Основное место, куда надо сохранять мэши, шэйдеры и прочее - это сцена. А потом, когда добавляется какой-то объект, то ему для мэша надо просто передать ссылку на уже сохранённый мэш. То же самое с шэйдерами. Они все сохраняются в массив в сцене, а когда создаётся мэш, то ему в массив used_shaders записываются ссылки на уже сохранённые шэйдеры. Раньше, помнится, надо было указывать не ссылки на шэйдеры, а номера в массиве сцены. То есть used_shaders был массив чисел. Потом поменяли. Наверное были причины какие-то.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 12.05.2017 - 21:24 Top
AlexanderM
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 13
Спасибо, теперь заработало, похоже я забыл кинуть шейдер в общий массив сцены, думал что бекграунд из default_background берет всегда, только туда и кидал шейдер.
Вот только с номерами было бы удобней, в Гидре так, но это ладно.
А насчет записи пикселей в текстуру из абстрактной даты ты не пробовал? Пригодилось бы для процедурок. Я пробовал в ImageTextureNode->builtin_data писать и еще разные способы, но далее я проследил там идет проверка путей к текстуре для получения метаданных и при фейле назначается

float *pixels = (float*)tex_img.resize(1, 1);

pixels[0] = TEX_IMAGE_MISSING_R;
pixels[1] = TEX_IMAGE_MISSING_G;
pixels[2] = TEX_IMAGE_MISSING_B;
pixels[3] = TEX_IMAGE_MISSING_A;
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.05.2017 - 07:02 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Не, не пробовал. Смотрю, что нода принимает на вход строку с путем до текстуры, вот и передаю туда этот путь. Как то даже не приходило идее использовать это для чего-то еще. Вообще, кажется, что builtin_data у ноды ImageTextureNode это какие-то внутренние данные, которые движок сам заполняет и использует. Предполагается, что пользователь будет сам заполнять только те данные, которые выведены в виде сокетов. В файле node.cpp в функции NODE_DEFINE(ImageTextureNode) как раз перечисляются те данные, которые ожидаются от пользователя.

По поводу background-а. Шэйдер default_background с самого начала сохранён в массив шэйдеров сцены. В этом массиве всегда есть 6 шэйдеров (или что-то около того). Так что вполне его можно использовать. Только надо не шэйдер перезаписывать, а граф в нём новый создавать.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.05.2017 - 07:33 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Слушай, и ещё такой вопрос: у тебя завёлся Cycles под GPU? Я как не бился, всё не могу откомпилировать его так, чтобы он увидел видеокарту в списке допустимых устройств. Только процессор там показывает.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.05.2017 - 07:40 Top
AlexanderM
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 13
Пока гпу не тестил, но скоро начну, наверное тоже с этим столкнусь, а вообще в блендере гпу помечен серым у меня.
Еще вспомнил неприятный момент с осями, Z-up надо перегнать. Как ты перегнал для камеры и объектов их трансформации?
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.05.2017 - 08:07 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Формирую массив из элементов матрицы трансформов:

Код
void MatrixToArray(float* array, MATH::CMatrix4 matrix)
{
array[0] = matrix.GetValue(0, 0);
array[1] = matrix.GetValue(0, 1);
array[2] = matrix.GetValue(0, 2);
array[3] = matrix.GetValue(0, 3);

array[4] = matrix.GetValue(1, 0);
array[5] = matrix.GetValue(1, 1);
array[6] = matrix.GetValue(1, 2);
array[7] = matrix.GetValue(1, 3);

array[8] = -1 * matrix.GetValue(2, 0);
array[9] = -1 * matrix.GetValue(2, 1);
array[10] = -1 * matrix.GetValue(2, 2);
array[11] = -1 * matrix.GetValue(2, 3);

array[12] = matrix.GetValue(3, 0);
array[13] = matrix.GetValue(3, 1);
array[14] = matrix.GetValue(3, 2);
array[15] = matrix.GetValue(3, 3);
}


matrix - это Ксишная матрица трансформов объекта. Вот тут видно, что один столбец (а может это строка) умножены на -1. Ну а потом для камеры говорю

Код
std::vector<float> matrix;
for (int i = 0; i < 16; i++)
{
matrix.push_back(xsiData->camera_tr[i]);
}
cam->matrix = cam->matrix * transform_transpose((*(Transform*)&matrix[0]));

Мне, право, стыдно за столь неказистое переливание данных из одного массива в другой.

Для объектов то же самое.

Код
object->tfm = transform_identity();
object->tfm = object->tfm * transform_transpose((*(Transform*)&matrix[0]));
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.05.2017 - 08:50 Top
AlexanderM
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 13
Странно, с твоим способом у меня транслейт перестает влиять, скейл и ротейт работают, а перемещение нет.
Сам я пробовал перестановкой столбцов и строк матриц добиться свитча осей, но это оказалось не так очевидно
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.05.2017 - 13:59 Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (10) « Первая ... 7 8 [9] 10  Ответ в темуОтвет      Создание новой темыНовая тема    Создание опросаОпрос

 

Текстовая версия