• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Тутор: Как избежать попадания текстур в Trash

[)r0n

Участник форума
Регистрация
2 Май 2009
Сообщения
43
Благодарности
0
Баллы
150
  • Первое сообщение
  • #1
К сожалению, изображения в теме побились...
Как избежать попадания текстур в Trash

Не пугайтесь, что тутор длинный. Просто тут много рисунков и все описывается очень подробно, чтобы поняли даже те, кто впервые видит 3ds max. :)

Для начала, надо обязательно настроить “User Paths” в которых надо указать дополнительные пути, в которых 3ds Max будет искать наши текстуры.
Для этого идем в меню Customize Configure User Paths
В появившемся окне, открываем вкладку External Files. Там жмем на Add и заходим в папку GothicII/_work/Data/Textures, обязательно ставим галочку Add Subpaths и жмем на кнопку Use Path.

Все, подготовка завершена, едем дальше…

Часть I.

Когда вы делаете локацию с нуля и назначаете ей текстуры, следите, чтобы название материала было точно таким же, как и название файла изображения.
Теперь тоже, но человеческим языком: Например, вы в качестве текстуры взяли файл nw_nature_branch_01.tga, тогда надо в поле, которое на рисунке ниже выделено красным, вписать название вашего файла, то есть nw_nature_branch_01.



И так с каждой текстурой. Если вы этого не сделаете, то велика вероятность того, что некоторые из текстур попадут в Trash. Ну, это наверно и так все знают.

Часть II.

А вот теперь самое основное. Чаще всего текстуры попадают в Trash не на этапе текстурирования локации, а на этапе совмещения двух 3ds файлов.
То есть, решили вы поставить на карту дом. Вы жмете на импорт, находите нужный вам 3ds дома, и импортируете его. Теперь если вы приаттачите дом к локации, то скорее всего часть текстур дома попадет в Trash.

Теперь о том, как этого избежать.
Импортируйте модель дома, который вы хотите поместить на карту, но пока его не приаттачивайте т.к. надо сначала поколдовать с его текстурами.
Выделите модель дома, откройте редактор материалов (клавиша “M”). Потом выберите, какой-нибудь пустой слот для вашего материала (на рисунке ниже выделен красным). Затем нажмите на кнопку Standard (на рисунке ниже выделена зеленым)



В появившемся окне, на панели Browse From выберите пункт Selected (на рисунке ниже выделено красным).



На последующие вопросы выбирайте пункты copy и discard old material

Получившийся Multi/Sub-Object материал теперь нужно применить для модели дома, для этого просто нажмите кнопку Assign Material to Selection (на рисунке ниже отмечена красным).



Теперь надо переименовать все названия материалов этой текстуры, чтобы они совпадали с названиями файлов текстур.

Сейчас объясню на примере, чтоб было понятнее:

Я создал на карте дом, загрузил и назначил на него текстуру, как было описано выше, теперь мне надо переименовать все подматериалы, которые содержаться в Multi/Sub-Object материале… Короче, рассказчик из меня хреновый, по этому смотрите на картинку ниже, так будет понятнее.



Так вот, если вы изучили картинку, то надо с каждым подматериалом сделать следующее:

Я нажал на первый подматериал, и у меня открылись его настройки. В них надо нажать на кнопку, которая на рисунке ниже выделена красным.



А теперь надо на жать на кнопку Bitmap, которая выделена красным на рисунке ниже.
После этого у вас появится стандартное окно выбора файла, нам в нем ничего не нужно кроме названия файла. Копируем его, и возвращаемся на предыдущее окно. Для этого просто нажмите кнопку, которая на рисунке ниже выделена зеленым.



Скопированное название файла текстуры вставляем в поле, как показано на рисунке ниже.
Ну а чтобы текстура отображалась на модели, просто нажмите на кнопку, которая на рисунке выделена красным.



И так надо сделать с каждым подматериалом. После этого объекты можно спокойно аттачить и текстуры не попадут в trash… Ну по крайней мере у меня они туда не попадают :)

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

[)r0n

Участник форума
Регистрация
2 Май 2009
Сообщения
43
Благодарности
0
Баллы
150
Попробуй через цикл.
Смотрим длину названия пишем ее в переменную, например Х. Так же создаем переменную А = 1. Потом цикл, от А до Х. В цикле ищем слэши. Если слэш найден, тогда его номер в строке записываем в переменную А... или как то так. В общем ща руками попробую. Только цикл должен проверятся до тех пор пока результат не будет undefined, чтобы если у нас в названии пути нет, глюк не выскочил.
 

F!G

Забанен
Регистрация
11 Мар 2008
Сообщения
26
Благодарности
0
Баллы
150
не, ну можно так, но это некрасиво по мне, я люблю использовать то, что уже аписано не нами.. ты пока попробуй так, а я гляну в хелпе еще раз.

p.s нашел функции только делающие из строки путь, но это не то. Попробую написать тоже, как комбинацию парсеров
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Народ, это уже начинает походить на вольное общение, может последние посты в аське напишете друг другу?

Все, обмениваемся аськами, и вперед. ФИГ, мне в аську напиши, когда будете там переписываться, чтоб мне посты удалить.
Либо, если Дрон не имеешь аськи, то по личке общайтесь.
 

[)r0n

Участник форума
Регистрация
2 Май 2009
Сообщения
43
Благодарности
0
Баллы
150
Вот последняя версия скрипта :D
Теперь путь отрезается нормально, остается только название текстуры.
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Эх.. Мнеб такой 2 года назад... Кста я хотел такой написать но чёт ленился, а ты молодец что взялся, ток мне даж лень его прочитать :D
 

F!G

Забанен
Регистрация
11 Мар 2008
Сообщения
26
Благодарности
0
Баллы
150
почти дописал скрипт, все работает, кроме замены ID полигонам. Вот кусок кода:
for first = 1 to (meditMaterials[1].numSubs-1) do
(
for second = (first + 1) to (meditMaterials[1].numSubs) do
(
if (meditMaterials[1].material[first].diffusemap.filename == meditMaterials[1].material[second].diffusemap.filename)and(meditMaterials[1].material[first].diffusemap.filename!="") then--looking for dublicated TGA's
(
macros.run"Modifier Stack""Convert_to_Poly" subobjectLevel = 4 -- selection mode = polygon
$.EditablePoly.selectByMaterial second -- select polygons with wrong ID
$.EditablePoly.setMaterialIndex first -- sets new ID to polygons with wrong ID
meditMaterials[1].material[second].diffusemap.filename = ""-- to avoid checking this element next time
)
)
)
вот что пишет: argument count error: setMaterialIndex wanted 2, got 1

что это может быть? как может компилятор хотеть какие то значение в качестве аргумента? что его не устраивает?
 
Последнее редактирование модератором:

[)r0n

Участник форума
Регистрация
2 Май 2009
Сообщения
43
Благодарности
0
Баллы
150
s@m
Спасибо за поддержку, буду знать, что не зря старался :D

F!G попробуй в цикле, где у тебя (meditMaterial[1].numSubs-1) этот самый "-1"убрать. Или вообще можно попробовать количество субматериалов в отдельной переменной посчитать.
 
Последнее редактирование модератором:

Kerrax

Почетный форумчанин
Регистрация
19 Фев 2008
Сообщения
222
Благодарности
682
Баллы
220
F!G написал(а):
вот что пишет: argument count error: setMaterialIndex wanted 2, got 1

что это может быть? как может компилятор хотеть какие то значение в качестве аргумента? что его не устраивает?
Читаем инструкцию:
Код:
<void><EditablePoly>.setMaterialIndex <index>index <DWORD>faceFlags

Set the material ID of the faces specified by the supplied flags.
и далее:
Код:
polyop.getFacesByFlag <Poly poly><int flag>mask:<int maskflag>...
The face level flags are:

bit 1: face is selected
...
Вывод: вероятно, ты должен использовать второй аргумент, в котором установлен бит 1, то есть
Код:
$.EditablePoly.setMaterialIndex first 1

А вообще, если хотите, могу в следующую версию 3ds-экспортера включить опцию "Автопереименование материалов", которая позволила бы записывать правильные имена для всех материалов, известных спейсеру, включая воду. Там как раз место в диалоге оставалось :)
 
Последнее редактирование модератором:

F!G

Забанен
Регистрация
11 Мар 2008
Сообщения
26
Благодарности
0
Баллы
150
А вообще, если хотите, могу в следующую версию 3ds-экспортера включить опцию "Автопереименование материалов"
еее, Керракс, конечно хотим!
p.s а поддержка 64-битности уже есть (может у меня просто старая версия) или будет, но позже? И будет ли?

Вывод: вероятно, ты должен использовать второй аргумент, в котором установлен бит 1, то есть
а, а то я посмотрел в Listener-e какая функция действует при смене ID, а аргументы не глянул (в listener-e был один)
 
Последнее редактирование модератором:

Kerrax

Почетный форумчанин
Регистрация
19 Фев 2008
Сообщения
222
Благодарности
682
Баллы
220
F!G написал(а):
А вообще, если хотите, могу в следующую версию 3ds-экспортера включить опцию "Автопереименование материалов"
еее, Керракс, конечно хотим!
ОК, будем делать...

а поддержка 64-битности уже есть (может у меня просто старая версия) или будет, но позже? И будет ли?
Давно есть, см. здесь.
 
Последнее редактирование модератором:

[)r0n

Участник форума
Регистрация
2 Май 2009
Сообщения
43
Благодарности
0
Баллы
150
Kerrax
Можешь потом последнюю версию экспортеров прикрепить к своему посту не инсталлом, а просто файлами.

p.s. А копирайты останутся? ;)
 

Kerrax

Почетный форумчанин
Регистрация
19 Фев 2008
Сообщения
222
Благодарности
682
Баллы
220
Я сделал фичу "Автоисправление имен материалов", см. последнюю версию плагинов в той теме.

[)r0n написал(а):
Kerrax
Можешь потом последнюю версию экспортеров прикрепить к своему посту не инсталлом, а просто файлами.
И как ты это себе представляешь? Там не один файл, а три десятка. И потом, я вообще-то думал, что инсталлятор, который надо просто запустить, всяко удобнее просто архива 7z/rar/zip, который еще надо куда-то распаковывать.

А копирайты останутся? ;)
Я же не ваш скрипт в свои плагины включил, а свой код написал примерно на ту же тему. Посмотри сам (в последней версии плагинов), похоже это на ваш скрипт?
 
Последнее редактирование модератором:

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Картинки, как я понял перезалить надо.
 
Сверху Снизу