SoftimageRu Форум -> Find And Replace

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


Страницы: (3) 1 [2] 3   ( Перейти к первому непрочитанному сообщению ) Ответ в темуОтвет      Создание новой темыНовая тема   

> Find And Replace, есть ли такое?   
OZazello
Профиль
Статус: Fool Power
Группа: Элита
Рейтинг: 10
что-то мне кажется вот это надо MM Shader Tools
Персональное сообщениеСайт пользователяICQAOL
Цитировать сообщение Дата 13.01.2015 - 15:33 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
вобщем есть куча моделек полученных с макса, с кучей материалов и текстур, ну к примеру тыщи матов, и надо все ноды Phong во всех материалах заменить на Arch mat redshift, вручную это делать год наверное буду)
вот наскриптовать бы такое дело, да знаний не хватает даже как обратится к шейдеру через питон, учитывая предыдущие скрипты там есть некий ProgID которого нигде нету, все обыскался (как сказано в хелпе, такого нету)

OZazello
пробовал его, он в 2013 у меня не пашет, жму на него и панельки нет и все, уже и выбирал мат и шейдер и обьект, хрен
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 14.01.2015 - 08:20 Top
Alexdashch
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 6
выложи сценку с одними материалами, попробую разобраться...
Персональное сообщениеПисьмо на e-mail пользователюYahoo
Цитировать сообщение Дата 14.01.2015 - 11:17 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Alexdashch
да че выкладывать, я на простой тестирую, просто создай 4-5 шейдеров в мат едиторе с фонгом (я дублирую сцене мат 5 раз), и вот как эти фонги заменить на любой другой автоматом и чтоб текстура осталась, пусть хот на ламберт или блинк или арнольдовский и т.д., главное не вручную.
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 14.01.2015 - 11:40 Top
Alexdashch
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 6
а скрипт не работает?
Персональное сообщениеПисьмо на e-mail пользователюYahoo
Цитировать сообщение Дата 14.01.2015 - 12:02 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Цитата
xsi = Application
oFind = xsi.FindObjects("", "{6495C5C1-FD18-474E-9703-AEA66631F7A7}")
for i in range(0, oFind.Count):
    if str(oFind[i].Name) == "Phong":
        oContainer = oFind[i].GetShaderContainer()
        if str(oContainer) != "None":
            if str(oContainer.Parent.Name) != "__SHADERBALL_MATERIAL_LIBRARY__":
                oFind[i].Name = "Redshift_Architectural"
                xsi.ReplaceShaderWithProgID(str(oContainer) + ".NestedShaders." + str(oFind[i].Name), "Redshift.material-architectural.1.0")


Попробуй вот так. Подменяет все фонги во всех материалах, зовущиеся Phong (имя шейдера, имя материала без разницы). Всем подмененным шейдерам автоматом подписывает имя шейдера Redshift_Architectural, так что при повторном использовании скрипта они перезаменяться не будут. По текстурам сохраняет диффуз карту. Рефлект и транспаренси сохраняются, но автоматом переводятся через скалярную ноду в весовую составляющую.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 14.01.2015 - 12:44 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
ты Бог! :preved: все сработало идеально! :thankyou:

а где ты берешь эти названия подскажи? чтоб я сам мог под свои нужды тягать этот шикарнейший скриптец ? (Redshift.material-architectural.1.0)

к примеру шас надо заменить ноды XSINormalMap на редовский бамп
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 14.01.2015 - 14:43 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Возьми в рендертри перетяни шейдер редшифта на то, что тебе требуется заменить.
Открой скрипт эдитор и смотри последнюю строку, будет что-то вроде:
Application.ReplaceShaderWithProgID("Sources.MaterialLib_бла-бла-бла", "Redshift.material-architectural.1.0")
Второе передаваемое значение и будет твоим ProgID. Можно конечно определять его и программно, но так проще :)

Не забудь тогда в строках
if str(oFind[i].Name) == "Phong" и
oFind[i].Name = "Redshift_Architectural"
изменить значения на нужные.

И самое главное еще тебе придется менять для каждого типа шейдера Class ID, это в строке oFind = xsi.FindObjects("", "{6495C5C1-FD18-474E-9703-AEA66631F7A7}")
Где его брать:

Открываешь SDK Explorer (Ctrl+Shift+4). В его эксплорере выбираешь нужный объект, в нем шейдер, например XSINormalMap. Справа Advanced и там будет прописан Class ID. Копируешь его вместе со скобками и меняешь в скрипте.

Итого 4 замены.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 14.01.2015 - 16:21 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
работает как часы! :clapping:

а еще можно как до дописать, а лучше наверное отдельным сделать, чтобы подключал все ноды пикчи имеющие в названии слово "normals" к ноде Redshift_BumpMap

когда подключаю в скрипте пишется так

Application.SIConnectShaderToCnxPoint("Clips.AM_133_building_011_001_normals_jpg", "Sources.Materials.DefaultLib1.AM_133_building_011_003.Redshift_BumpMap.input", False)

думал так же на основе твоего но чтоб искал не полное имя а те в которых есть конкретное слово
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 15.01.2015 - 08:40 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Немного изменил вариант, поиск идет не глобальный, а по библиотекам материалов.
Нода Redshift_BumpMap должна быть обязательно подключена к материалу, иначе ее не увидит.
Цитата
xsi = Application
oMatLib = xsi.ActiveProject.ActiveScene.MaterialLibraries
oAllMaterials = []
for i in range(0, oMatLib.Count):
    for j in range(0, oMatLib[i].Items.Count):
        oAllMaterials.append(oMatLib[i].Items[j])
for i in range(0, len(oAllMaterials)):
    if oAllMaterials[i].AllImageClips.Count > 0:
        for j in range(0, oAllMaterials[i].AllImageClips.Count):
            oImageClip = oAllMaterials[i].AllImageClips[j]
            oImageClipName = oImageClip.Name
            oFind = oImageClipName.find("normals")
            if oFind != -1:
                oShaders = oAllMaterials[i].Shaders
                for j in range(0, oShaders.Count):
                    if str(oShaders[j].Name) == "Redshift_BumpMap":
                        xsi.SIConnectShaderToCnxPoint(str(oImageClip), str(oShaders[j]) + ".input", False)
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 15.01.2015 - 10:44 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
я уже говорил что ты Бог ? :preved:
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 15.01.2015 - 14:25 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
eistan Вряд ли :scratch:
Я даже для себя до сих пор не могу сделать ряд полезных вещей и инструментов.
А здесь все-таки мелочи, которые мог бы сделать каждый, если бы немного подразобрался бы как это все работает.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 15.01.2015 - 15:23 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
ну за сложными штуками это в гудиню, там все можно =) наверное... в ксе как кто то уже говорил сильно ограниченный SDK и прочие плюшки со скриптами, сильно не развернешься, да и глючный, куча ошибок вроде как
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 15.01.2015 - 19:27 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Ну на счет сильных ограничений SDK - это неправда. Многое можно делать. Может быть не скриптами, но C++ точно. Мне так кажется. Да и глюки, что встречались, всегда обойти можно было. Так что норм, не надо напраслину наводить.

Не знаю, но наверняка в Максе и Майе все еще хуже. Все-таки архитектура тянется с черти-каких годов. А ведь за это время и Питон прикрутили, и C#.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 15.01.2015 - 22:04 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Да нет, есть все-таки ограничения и чем глубже, тем больше спотыкаешься о всякие неприятные мелочи (порой банальные). Обходить многое можно, но чаще это костыли, а хотелось бы прямых решений. У меня уже несколько интересных идей именно таким образом загнулось.
Хотя конечно и не так все плачевно, чтобы унывать.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 15.01.2015 - 23:35 Top
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (3) 1 [2] 3  Ответ в темуОтвет      Создание новой темыНовая тема   

 

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