Donate with PayPal button New New

+ Ответить в теме
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 22

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

  1. #1
    Модератор Аватар для jim_spb
    Регистрация
    20.09.2009
    Страна
    Адрес
    Stanice Praha hlavní nádraží
    Возраст
    56
    Сообщений
    2,681

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

    Исправление ошибки/предупреждения "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, только открытие файлов в нем занимает больше времени.
    Находим в нем ссылку на нашу текстуру

    Рис. 1 Окно меш текст вьювера

    Ссылка на текстуру отмечена красным прямоугольником. Поднимемся чуть выше и посмотрим название материала, к которому относится текстура (отмечено зеленым прямоугольником) Как видим, тип материала "m.onetex"
    Если нет Меш текст вьювера, то же самое можно увидеть в AssetX. Откройте ассет в нем (Add Asset, укажите папку с дополнением, открытым для редактирования в эксплорере). А дальше в нижнем левом окне выбираем im файл, и в панели инструментов слева от окна рендеринга - пиктограмму тестового вида.

    Рис. 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

    В окошке перехода адрес будет автоматически преобразовываться в шестнадцатиричный формат (0х974)
    Перешли (Рис. 4)


    Видим 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)

    Выделяем и копируем все (Ctrl+A, Ctrl+C), переходим к окну нашего меша и вставляем вместо исходных значений (Ctrl+V), Рис. 6.


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

    2. Коррекция числа текстурных карт, удаление сведений о текстуре.
    Поскольку наш новый материал не будет использовать текстуру, нужно удалить упоминания о ней. См. Рис. 1, строка "2472 Number of textures: 1"
    Вместо 1 надо вписать 0. Идем по адресу 2472 (0х9А8). Убеждаемся в том, что там единица. Вместо единицы вписываем 0 (Рис. 7)

    Поле количества текстурных карт имеет целое четырехбайтовое значение, обведено в зеленый прямоугольник. Все, что следует за ним до символов GEOM (тип текстурной карты, ее имя, Texture amount), отмечено красным прямоугольником. Все эти байты необходимо удалить. Делаем так: наводим указатель мыши на первый из них
    (адрес 2476 = 0х9АС), зажимаем левую кнопку мыши и аккуратно обводим эти поля. Отпускаем кнопку мыши. Должно получиться так (Рис. 8).

    Если ошиблись, снимаем выделение (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)


    У нас остается отмеченным следующий байт за полем имени. Длина уменьшилась на 4 байта, поэтому 4 байта остались лишними. Аккуратно нажимаем кнопку Delete 4 раза. Запись об удалении высвечивается в журнале (Рис. 10)


    4. Правка индексов
    Для того, чтобы все заработало, нужно сменить 3 индекса и сохранить меш-файл.
    Посчитаем, сколько байт мы удалили. Получилось 0x64 (100) + 4 = 0x68 (104)
    Теперь смотрим Рис.1, строки отмеченные коричневым и желтым прямоугольником. Это длины чанка и описания материала в нем. Только надо учесть, что в меш текст вьювере для этих параметров дается адрес начала 12-байтового поля, содержащего 3 параметра, в котором длина занимает с 5-го по 8-й байт. Соответственно, к указанным двум адресам надо прибавить 4. Эти поля длин идут непосредственно за символами CHNK и MATL. Значения - четырехбайтовые целые числа, записанные в интеловском виде. Т.е. длина чанка 5c 15 00 00 в нормальном виде будет выглядеть: 0х0000155С. (Рис. 11)

    От каждой из них нужно отнять число удаленных байт и вписать обратно результат:
    0x155C - 0x68 = 0x14F4
    0xE0 - 0x68 = 0x78
    (Рис.12)

    Осталось последнее действие. Поднимаемся в начало файла. С 5-го по 8-й байт с начала файла находится еще один индекс, с которым надо проделать то же самое.
    (Рис. 13)

    0x334C - 0x68 = 0x32E4
    (Рис. 14)

    Теперь можно смело нажимать Ctrl+S, а вспомогательный файл не сохранять. Закроем хекс-эдитор и посмотрим, отображается ли наш отредактированный меш в меш-вьювере. Кстати, если цвет отличен от белого/серого/черного, то в отображении в меш-вьювере возможна значительная разница. (Рис. 15)

    Не обращайте внимание на это, в игре они будут одинаковыми. (Рис. 16)

    Осталось удалить ненужную больше текстуру (bulb.tga и bulb.texture.txt), проверить на наличие ошибок/предупреждений и прокоммитить объект.
    Последний раз редактировалось jim_spb; 10.09.2013 в 21:15.
    Instagram: @jim_spb


  2. #Trainz
    Реклама
    Регистрация
    Постоянная
    Адрес
    Весь мир
    Возраст
    2010
    Сообщений
    Много

    Donate with PayPal button N3v New New

     

  3. #2
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379

    По умолчанию

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

  4. #3
    Пользователь Аватар для Рома
    Регистрация
    17.10.2012
    Страна
    Адрес
    Уфа
    Возраст
    29
    Сообщений
    3,540

    По умолчанию

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

  5. Сказал спасибо:


  6. #4
    Пользователь Аватар для antikiller_bm
    Регистрация
    20.09.2009
    Страна
    Возраст
    33
    Сообщений
    3,236

    По умолчанию

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

  7. #5
    Пользователь Аватар для Volkman
    Регистрация
    25.03.2010
    Возраст
    28
    Сообщений
    564

    По умолчанию

    Не проще 1 пиксел сделать темнее/ярче?

  8. #6
    Пользователь Аватар для Slavik_ЭП1м
    Регистрация
    19.02.2011
    Страна
    Адрес
    Ростов-на-Дону, ТЧЭ-6 БТК
    Возраст
    33
    Сообщений
    4,948

    По умолчанию

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

  9. #7
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию

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

  10. Сказал спасибо:


  11. #8
    Пользователь Аватар для Doctor X
    Регистрация
    25.06.2011
    Страна
    Адрес
    Ногинск
    Возраст
    31
    Сообщений
    742

    По умолчанию

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

  12. Сказали спасибо: (2)


  13. #9
    Пользователь Аватар для Govsan73
    Регистрация
    21.04.2011
    Адрес
    Нижний Новгород
    Возраст
    50
    Сообщений
    139

    По умолчанию

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

  14. #10
    Пользователь Аватар для DmitryKz
    Регистрация
    02.07.2019
    Страна
    Адрес
    Сергиев Посад
    Возраст
    50
    Сообщений
    469

    По умолчанию

    Подскажите, пожалуйста, можно ли через im editor получить такую картинку:

    У меня получается так:

    Хочу исправить пред с uniform color, это текстура в подпапке night, я так понимаю, играет роль маски.

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

    Максимум, чего удалось добиться:

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

+ Ответить в теме

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения