PDA

Просмотр полной версии : Исправление ошибки/предупреждения "The texture 'x.tga' is a uniform color"



jim_spb
08.09.2013, 16:34
Исправление ошибки/предупреждения "The texture 'x.tga' is a uniform color"
для однотекстурных материалов типа "m.onetex", путем превращения их в "m.notex" с помощью шестнадцатиричного редактора.

Ограничения.
Далее будет рассматриваться типовой случай, когда в материале типа "m.onetex" с одной текстурной картой используется одноцветная текстура и отсутствует карта прозрачности (альфа). Все другие варианты (наличие альфы, дополнительных текстурных карт, другие типы материалов) требуют индивидуального подхода к лечению и поэтому выходят за рамки данной статьи. Также, технология не проверялась на объектах с костной анимацией.

Также, нужно иметь хотя бы начальные понятия о представлении данных в ЭВМ и шестнадцатиричной системе счисления. Нам придется работать с целыми числами и числами с плавающей точкой в четырехбайтовом представлении. Целые числа записываются в интеловской последовательности, т.е. первым пишется младший байт, а старший - последним.

Внимание!
Обязательно делайте копии исходных файлов. Малейшая ошибка может привести к неработоспособности моделей. Также необходима максимальная концентрация внимания. Если вы чувствуете усталость или вас отвлекают, лучше отложить это занятие.
И еще. Настоятельно рекомендуется работать с целыми числами в хекс-эдиторе в шестнадцатиричном формате. В случае необходимости, преобразование чисел из десятичного в шестнадцатиричный формат и обратно, а также арифметические операции с числами в шестнадцатиричном формате легко произвести с помощью стандартного калькулятора Windows, переключив его в режим "Программист".
Числа в десятичном формате буду записывать в обычном виде, а в шестнадцатиричном формате - в виде 0xFF, что соответсвует FF в шестнадцатиричном формате или 255 в десятичном.

Необходимые инструменты:
1. Trainz Mesh Viewer
2. Mesh Text Viever или AssetX
3. Adobe Photoshop или любой другой графический редактор, позволяющий получить значения RGB для каждого пикселя
(в случае работы с теневыми моделями не нужен)
4. Любой подходящий шестнадцатиричный редактор (Hex Editor). Я буду использовать Free Hex Editor Neo, но никому не навязываю свой выбор.

Все скриншоты, приведенные ниже, кликабельны с увеличением.

Начнем.
Вот попался мне объект Lamp-No-Pool-65-001,<kuid2:82412:22003:1>
У него есть предупреждения
Warning: The texture 'bulb.tga' is a uniform color.
Warning: The texture 'night/bulb.tga' is a uniform color.
Если значение тега trainz-build в конфиге будет 3.5 и выше - вместо предупреждения будет ошибка.
Первое, что нужно сделать - убедиться в том, что данная текстура используется в материале типа "m.onetex", а также в отсутствии карты прозрачности ("альфы").
Открываем текстовый файл, который ссылается на эту текстуру (в данном случае bulb.texture.txt) и убеждаемся в отсутствии ссылки на карту прозрачности (Alpha=.....)


Primary=bulb.tga
Tile=st

Можно продолжать. Сделаем копию исходного меша lamp-no-pool-65-001.im Теперь надо найти в нем материал, использующий эту текстуру. Можно открыть .im файл в меш текст вьювере, это полезно, там будет подробно расписано, что и где находится.

Проблема в том, что авторы сочли эту программу устаревшей и прекратили ее выкладывать. А зря - замечательный инструмент, позволяющий значительно сократить время работы с im файлами. Сейчас все функции меш текст вьювера перенесены в новый инструмент AssetX, только открытие файлов в нем занимает больше времени.
Находим в нем ссылку на нашу текстуру
http://murmansk-trainz.ru/images/manuals/convert2notex/MeshTextViever1t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/MeshTextViever1.png)
Рис. 1 Окно меш текст вьювера

Ссылка на текстуру отмечена красным прямоугольником. Поднимемся чуть выше и посмотрим название материала, к которому относится текстура (отмечено зеленым прямоугольником) Как видим, тип материала "m.onetex"
Если нет Меш текст вьювера, то же самое можно увидеть в AssetX. Откройте ассет в нем (Add Asset, укажите папку с дополнением, открытым для редактирования в эксплорере). А дальше в нижнем левом окне выбираем im файл, и в панели инструментов слева от окна рендеринга - пиктограмму тестового вида.
http://murmansk-trainz.ru/images/manuals/convert2notex/AssetX1t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/AssetX1.png)
Рис. 2 Окно AssetX

Итак, проверка пройдена. Осталось разложить цвет нашей текстуры на RGB составляющие, и можно приступать к редактированию меша. Если же мы исправляем теневую модель, то этот этап не нужен, достаточно принять значения RGB, равные 0,0,0.
Открываем текстуру bulb.tga в фотошопе (или другом редакторе) и, используя инструмент Color Sampler Tool, получаем значения RGB 154,154,154. В свойствах материала в модели значения цветов пишутся числом с плавающей точкой в пределах от 0 до 1. Соответственно, необходимо их преобразовать - величину цвета для каждого канала надо разделить на 255. Получаем 0.6039, 0.6039, 0.6039
Приступаем к редактированию меша. Открываем файл lamp-no-pool-65-001.im в хекс-эдиторе
Разобъем редактирование меша на этапы.

1. Замена значений цвета в RGB каналах (рис. 1, синий прямоугольник)
Переходим по указанному адресу (2420). (Ctrl+G, точка в кружке Absolute offset), рис. 3
http://murmansk-trainz.ru/images/manuals/convert2notex/HE1t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE1.png)
В окошке перехода адрес будет автоматически преобразовываться в шестнадцатиричный формат (0х974)
Перешли (Рис. 4)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE2t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE2.png)

Видим 24-байтовое поле, 6 групп по 4 байта, в них вписаны значения цветов Ambient Color и Diffuse Color.

Если мы лечим теневую модель, достаточно эти 24 байта забить нулями (0x00). Если же нет, надо вписать сюда полученные выше числа с плавающей точкой, 3 числа и еще раз те же 3 числа. В нашем случае это будут 0.6039, 0.6039, 0.6039, 0.6039, 0.6039, 0.6039.
Поскольку в файлах мешей это поле не всегда выровнено к четырехбайтовой границе, рекомендую сделать так: открываем новый документ (Ctrl+N), переводим формат представления чисел к формату плавающей точки (Ctrl+4), вписываем наши значения для RGB (Рис. 5)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE3t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE3.png)
Выделяем и копируем все (Ctrl+A, Ctrl+C), переходим к окну нашего меша и вставляем вместо исходных значений (Ctrl+V), Рис. 6.
http://murmansk-trainz.ru/images/manuals/convert2notex/HE4t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE4.png)

Изменения, сделанные в исходном файле, будут отображены красным шрифтом.

2. Коррекция числа текстурных карт, удаление сведений о текстуре.
Поскольку наш новый материал не будет использовать текстуру, нужно удалить упоминания о ней. См. Рис. 1, строка "2472 Number of textures: 1"
Вместо 1 надо вписать 0. Идем по адресу 2472 (0х9А8). Убеждаемся в том, что там единица. Вместо единицы вписываем 0 (Рис. 7)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE5t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE5.png)
Поле количества текстурных карт имеет целое четырехбайтовое значение, обведено в зеленый прямоугольник. Все, что следует за ним до символов GEOM (тип текстурной карты, ее имя, Texture amount), отмечено красным прямоугольником. Все эти байты необходимо удалить. Делаем так: наводим указатель мыши на первый из них
(адрес 2476 = 0х9АС), зажимаем левую кнопку мыши и аккуратно обводим эти поля. Отпускаем кнопку мыши. Должно получиться так (Рис. 8).
http://murmansk-trainz.ru/images/manuals/convert2notex/HE6t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE6.png)
Если ошиблись, снимаем выделение (Ctrl+D) и повторяем заново. Прежде, чем нажимать кнопку Delete, нужно запомнить или записать количество байт, подлежащих удалению. Это очень важно! См. Рис. 8 справа внизу, отмечено зеленым прямоугольником. Все, теперь аккуратно жмем Delete.

3. Коррекция имени материала.
Имя "...m.onetex" необходимо преобразовать к виду "...m.notex", которое будет на 1 символ короче. Формат записи следующий - Длина поля, отведенного для имени материала (целое число, 4 байта). Число должно быть кратно четырем. Затем непосредственно имя материала в символьном виде. Если имя короче, чем отведенное под него поле, остальные байты заполняются нулями (0х00). Например, если длина имени материала 21 символ (байт), то длина поля, отведенного под него, должна быть 24 байта, 3 байта после имени заполняются нулями. См. рис. 1, имя материала обведено зеленым прямоугольником, непосредственно над ним находится длина поля, отведенного под имя материала.
В нашем случае под имя материала задействовано поле в 48 байт (0х30), кратно четырем, а фактическая длина имени материала - 45 байт. Мы укоротим имя материала на 1 байт, соответственно длину поля надо изменить до 44 байт (0х2С), а лишние 4 байта удалить.
В случае, если длина поля не меняется, оставшийся лишним символ забивается кодом 0х00.
В нашем случае, меняем длину поля имени на 0x2C, а в символьном поле вместо onetex вписываем notex (Рис. 9)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE7t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE7.png)

У нас остается отмеченным следующий байт за полем имени. Длина уменьшилась на 4 байта, поэтому 4 байта остались лишними. Аккуратно нажимаем кнопку Delete 4 раза. Запись об удалении высвечивается в журнале (Рис. 10)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE8t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE8.png)

4. Правка индексов
Для того, чтобы все заработало, нужно сменить 3 индекса и сохранить меш-файл.
Посчитаем, сколько байт мы удалили. Получилось 0x64 (100) + 4 = 0x68 (104)
Теперь смотрим Рис.1, строки отмеченные коричневым и желтым прямоугольником. Это длины чанка и описания материала в нем. Только надо учесть, что в меш текст вьювере для этих параметров дается адрес начала 12-байтового поля, содержащего 3 параметра, в котором длина занимает с 5-го по 8-й байт. Соответственно, к указанным двум адресам надо прибавить 4. Эти поля длин идут непосредственно за символами CHNK и MATL. Значения - четырехбайтовые целые числа, записанные в интеловском виде. Т.е. длина чанка 5c 15 00 00 в нормальном виде будет выглядеть: 0х0000155С. (Рис. 11)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE9t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE9.png)
От каждой из них нужно отнять число удаленных байт и вписать обратно результат:
0x155C - 0x68 = 0x14F4
0xE0 - 0x68 = 0x78
(Рис.12)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE10t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE10.png)
Осталось последнее действие. Поднимаемся в начало файла. С 5-го по 8-й байт с начала файла находится еще один индекс, с которым надо проделать то же самое.
(Рис. 13)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE11t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE11.png)
0x334C - 0x68 = 0x32E4
(Рис. 14)
http://murmansk-trainz.ru/images/manuals/convert2notex/HE12t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/HE12.png)
Теперь можно смело нажимать Ctrl+S, а вспомогательный файл не сохранять. Закроем хекс-эдитор и посмотрим, отображается ли наш отредактированный меш в меш-вьювере. Кстати, если цвет отличен от белого/серого/черного, то в отображении в меш-вьювере возможна значительная разница. (Рис. 15)
http://murmansk-trainz.ru/images/manuals/convert2notex/ME1t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/ME1.png)
Не обращайте внимание на это, в игре они будут одинаковыми. (Рис. 16)
http://murmansk-trainz.ru/images/manuals/convert2notex/trainz1t.png (http://murmansk-trainz.ru/images/manuals/convert2notex/trainz1.png)
Осталось удалить ненужную больше текстуру (bulb.tga и bulb.texture.txt), проверить на наличие ошибок/предупреждений и прокоммитить объект.

B.U.G.O.R.
08.09.2013, 23:36
Прочитав название темы, но не прочитав сразу автора, я подумал, что щас понапишут, что тупо поставить точку иного цвета и проблема решена. Когда зашел, просмотрел и малость охренел, думал, это ж кто-то могет так. Но потом посмотрел автора темы, и все встало на свои места. Отличный урок.

Рома
09.09.2013, 07:41
Если значение тега trainz-build в конфиге будет 3.5 и выше - вместо предупреждения будет ошибка.
Ни разу не сталкивался с такими предупреждениями, ни в 3.5, ни в 3.6... Кстати, урок отличный, но сложновато это все, я так думаю, что люди как ставили точки, так и будут ставить и количство вопросов про эту ошибку в 3.7 не уменьшится, к сожалению. Зато теперь можно всех посылать сюда :D

antikiller_bm
26.01.2014, 13:05
Мне особенно нравится фрагмент инструкции, где он начинает вычитать числа в шестнадцатеричной системе.
Другой бы на моем месте уже бы закрыл страницу с этой темой)))

Volkman
26.01.2014, 16:50
Не проще 1 пиксел сделать темнее/ярче?

Slavik_ЭП1м
21.10.2016, 02:06
А как решить проблему проще, без всяких Hex Editor-ов и прочих сложных программ? Просто эта текстура незначительная, тупо черный квадрат малевича, она не влияет на эстетику объекта.

TRam_
21.10.2016, 02:15
Программой Эрендира, конечно же. Она делает то же самое что тут описано, но намного удобнее.

Doctor X
21.10.2016, 02:19
А как решить проблему проще, без всяких Hex Editor-ов и прочих сложных программ?
Наглядная инструкцияhttp://murmansk-trainz.ru/forum/22-611-1

Govsan73
21.10.2016, 03:01
В любом случае спасибо Диме .По его урокам в своё время освоил Hex .IMEditor вообще жизнь в Trainz намного упростил .

DmitryKz
15.07.2019, 13:59
Подскажите, пожалуйста, можно ли через im editor получить такую картинку:
https://i.ibb.co/BZRBQT7/Snap42.png (https://ibb.co/BZRBQT7)
У меня получается так:
https://i.ibb.co/G066v5z/Snap41.png (https://ibb.co/G066v5z)
Хочу исправить пред с uniform color, это текстура в подпапке night, я так понимаю, играет роль маски.

---------- Сообщение добавлено в 13:59 ---------- Предыдущее сообщение размещено в 13:24 ----------

Максимум, чего удалось добиться:
https://i.ibb.co/BCdKyjX/Snap45.png (https://ibb.co/BCdKyjX)
Выглядит почти так, как нужно, но при вращении появляется на гранях перескакивающая оттенёвка. Не понимаю, откуда она появляется, если черного цвета нигде нет.
Даже вопрос возник, а можно ли с помощью IM Editor'а сделать notex-материал, идентичный тому, как если бы с текстурой.
Буду признателен за ответ.

OlegKhim
15.07.2019, 15:49
notex в свойствах материала подразумевает отсутствие каких либо графических файлов, ибо не нужны.

DmitryKz
15.07.2019, 17:34
notex в свойствах материала подразумевает отсутствие каких либо графических файлов, ибо не нужны.
Да, я это понимаю — хотел попробовать несколько ассетов, у которых есть предупреждение, что графические файлы, входящие в них, имеют uniform-цвет, сделать без оных (как оно вроде и рекомендуется Auran), правкой материала через IM Editor. Но в итоге засомневался, что это стоит делать через IM Editor — по крайней мере, у меня не получилось получить идентичный с наличием файла текстуры результат. Способ, предложенный jim_spb, интересен, но слишком громоздок.

OlegKhim
15.07.2019, 18:58
правкой материала через IM Editor.
Самый быстрый способ исправления

Должно быть так:

http://i.piccy.info/i9/a455cbf3f94f278ee6caf88615fad0a9/1563206688/46212/1310529/p_p_pIia_p_ia_pGpGia_p_.png

Цвет, думаю понятно как назначить. Для этого нужно знать RGB ранее назначенной текстуры
:ps:Естественно после правки удалить из папки графический и текстовый файлы этого материала

Volaner
15.07.2019, 20:22
Подскажите, пожалуйста, можно ли через im editor получить такую картинку:
https://ibb.co/BZRBQT7
У меня получается так:
https://ibb.co/G066v5z
Хочу исправить пред с uniform color, это текстура в подпапке night, я так понимаю, играет роль маски.

---------- Сообщение добавлено в 13:59 ---------- Предыдущее сообщение размещено в 13:24 ----------

Максимум, чего удалось добиться:
https://ibb.co/BCdKyjX
Выглядит почти так, как нужно, но при вращении появляется на гранях перескакивающая оттенёвка. Не понимаю, откуда она появляется, если черного цвета нигде нет.
Даже вопрос возник, а можно ли с помощью IM Editor'а сделать notex-материал, идентичный тому, как если бы с текстурой.
Буду признателен за ответ.

1) m.onetex может быть с маской, и тогда просто заменить на m.notex не получиться. В таких случаях избавиться от ошибки можно, сделав у текстуры рамку, и надеяться, что крайние пиксели не используются.

2) "перескакивающая оттенёвка" появляется из за работы групп сглаживания. Избавиться можно разве что вывернув нормали на изнанку. Но для этого придется менять материал на m.tbumptex, и не факт что прокатит

DmitryKz
15.07.2019, 21:52
OlegKhim, да, именно все так и делал — и m.notex выбирал, и цвет нужный по каналам ставил, и блеск убирал и текстуру убирал из обведенного красной рамкой списка — один результат: так, как с текстурой в виде графического файла не получается. Но вот Volaner упомянул материал m.tbumptex, а он именно в моем случае и был исходным, и я подумал сейчас, что, наверно, потому и не получается, что для простой корректировки таким способом материал должен быть m.onetex.
Впрочем, jim_spb предупреждал об этом:

Все другие варианты (наличие альфы, дополнительных текстурных карт, другие типы материалов) требуют индивидуального подхода к лечению
Хотя бы ради любопытства интересно было бы узнать, что за подход в моем случае требуется)

Volaner
16.07.2019, 01:15
OlegKhim, да, именно все так и делал — и m.notex выбирал, и цвет нужный по каналам ставил, и блеск убирал и текстуру убирал из обведенного красной рамкой списка — один результат: так, как с текстурой в виде графического файла не получается. Но вот Volaner упомянул материал m.tbumptex, а он именно в моем случае и был исходным, и я подумал сейчас, что, наверно, потому и не получается, что для простой корректировки таким способом материал должен быть m.onetex.
Впрочем, jim_spb предупреждал об этом:

Все другие варианты (наличие альфы, дополнительных текстурных карт, другие типы материалов) требуют индивидуального подхода к лечению
Хотя бы ради любопытства интересно было бы узнать, что за подход в моем случае требуется)

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

OlegKhim
16.07.2019, 10:14
Хотя бы ради любопытства интересно было бы узнать, что за подход в моем случае требуется)
Мы вообще не знаем что за объект в твоем случае. И почему у него однородная текстура. А еще - это часть какой то сетки или отдельная, например как тень.

DmitryKz
17.07.2019, 09:38
Хотя бы ради любопытства интересно было бы узнать, что за подход в моем случае требуется)
Мы вообще не знаем что за объект в твоем случае. И почему у него однородная текстура. А еще - это часть какой то сетки или отдельная, например как тень.
Справедливо. Это объект "Сотовая мачта 150м", <kuid:450244:1020>
https://i.ibb.co/FzsMSPR/Snap48.png (https://ibb.co/FzsMSPR)
Обведенный красным — материал, в котором я пытаюсь избавиться от текстурного файла.


И попробуй нарисовать рамку на текстуре, посмотри, что будет.
Рамка (масштаб увеличен, в реальности она 64х64):
https://i.ibb.co/pxNPspC/Snap50.png (https://ibb.co/pxNPspC)
Получилась вот такая штука:
https://i.ibb.co/hYxBRKq/Snap49.png (https://ibb.co/hYxBRKq)

OlegKhim
17.07.2019, 10:29
Вот теперь все понятно.
Ночная мешь с текстурой - это фонари, которые горят красным ночью. Естественно в дневное время этой меши нет. И что бы было понятно:

Получилась вот такая штука:
вот такая штука будет гореть ночью красным и синим.

Максимум, чего удалось добиться:
Выглядит почти так, как нужно, но при вращении появляется на гранях перескакивающая оттенёвка.
На таком объекте это не имеет никакого значения, ночью ты ничего подобного не увидишь. По-этому есть два варианта:
1. Предпочтительно применить этой меши свойства xxx.m.notex и посмотреть как будут гореть фонари ночью - если устраивает, тогда оставлять так.
2. Исправлять саму текстуру, и никакой рамки там не нужно.
:ps:Для полной ясности хотелось бы взглянуть на сам объект или получить ссылку на скачивание этого дополнения.

Volaner
17.07.2019, 14:01
DmitryKz, Действительно, надо смотреть на сам объект. Вряд ли m.tbumptex туда по приколу прикрутили.

DmitryKz
17.07.2019, 14:18
2. Исправлять саму текстуру, и никакой рамки там не нужно.
Не, ну это само собой — это я по просьбе Volaner'а эксперимент сделал, да и самому стало интересно, как результирующий объект будет выглядеть.
Моя задача в том, чтобы совсем от одноцветной текстуры избавиться, в соответствии с, так сказать, аурановским sdk)


На таком объекте это не имеет никакого значения, ночью ты ничего подобного не увидишь. По-этому есть два варианта:
1. Предпочтительно применить этой меши свойства xxx.m.notex и посмотреть как будут гореть фонари ночью - если устраивает, тогда оставлять так.
Да, выглядит все хорошо. Спасибо!)
https://i.ibb.co/RD4mhSF/1.jpg (https://ibb.co/RD4mhSF)

Для полной ясности хотелось бы взглянуть на сам объект или получить ссылку на скачивание этого дополнения.
Это объект из карты Череповец-Вологда. Нашел ее в результате многодневных поисков на Рутрэкере, в составе какой-то сборки. Установил сборку на виртуалку и экспортировал из нее все, что относилось к упомянутой карте.
Оставшиеся куиды, в том числе и этот, взял из куидницы. Но конкретно этот, <kuid:450244:1020>, там битый (файлы текстур не открываются), так что в итоге исправный нашел в некоей группе ВКонтакте, выложенный там по чьей-то просьбе.
Залил его сюда: https://yadi.sk/d/080XB5b-m01Uvg

OlegKhim
17.07.2019, 16:15
Моя задача в том, чтобы совсем от одноцветной текстуры избавиться
Желание похвальное, думаю в дальнейшем решить подобную проблему будет не сложно. Главное при замене сохранить идентичный цвет текстуры, узнать ее параметры RGB можно в фотошопе и применить их в настройках материала xxx.m.notex



New