Знакомая картинка? Думаю, что знакома она многим. Дети 90-х (ух, что тогда творилось, в песне Монеточки это всё описано), видели этот логотип при старте приставки PS1. И оказалось, что
Оказалось, что это 3D объект. И содержится он на каждом диске с игрой. Содержится он там естественно в проприетарном формате.
Когда-то мне стал интересен процесс программирования под эту консоль, и я наткнулся на сайт psxdev.net, где в разделе загрузок можно найти как официальные средства разработок, так и официальную документацию. В числе этой документации есть и описание применяемых типов файлов. Одним из таких типов оказался формат TMD. Поняв как устроен его заголовок, я начал искать по нему файлы в различных образах игр. И каково было моё удивление, что в самом начале диска, ещё до объявления реквизитов игры, была найдена подобная сигнатура. Ради интереса было проверено ещё несколько образов. И всё повторилось. TMD файл лежал в несжатом виде в самом начале образа. Это 5 сектор диска. А к примеру само представление игры происходит на 16 секторе. Где описывается платформа и название игры
Ну обо всём по порядку. Сигнатурой данного типа файлов является значение 0х00000041. И далее идут служебные данные. Вот на представленном скриншоте это отлично видно. Если открыть документацию, а она очень легко гуглится, файл называется "fileformat47", и немного почитать. Становится понятно, что модель состоит из одного объекта, имеет 337 вершин (0х00000151), 153 нормали (0х00000099), 560 полигонов (0х00000230), и значение масштаба = 7, вернее это степень в которую надо возвести 2, чтобы получить масштаб.
Сразу стал вопрос, а как это отобразить, как посмотреть, что там за фигура. Да. Можно было пойти каким-то незамысловатым путём, и найти какой-нибудь конвертер в DXF или RSD, чтобы открыть в каком-либо 3d вьюере. Но хотелось своего опыта. Поэтому было принято решение самому написать, что-то, что позволило бы его отобразить. Тем более, что посмотрев структуру файла, я понял, что сам объект не тяжелый, без текстур с одноцветными полигонами без градиентов, про это говорят заголовки полигонов 0х2000304.
Я начал копать в сторону opengl, и быстренько (за неделю так, примерно) накидал программку, которая бы позволила отобразить это. И оно отобразилось. Я увидел логотип, но так как мои знания в программировании равноценны знаниям третьеклассника по математике, то через какое-то время (полтора года), я решил, что неплохо бы было перегнать файл во, что-то общеизвестное, что позволяло бы его открывать в известных программах, например стандартный 3D viewer из Windows 10. Я начал смотреть какие форматы он способен открыть. И вот один из них мне понравился, это был формат OBJ. Я погуглил, что он из себя представляет, и мне показалось, что это вполне реализуемо. Ведь по сути устройство файлов примерно похоже. Есть массив вершин, массив нормалей, и полигоны, которые определены индексами вершин и нормалей.
Имея какие-то навыки работы с Си, благо уже были наработки, я, уже действительно быстро, накидал программку по трансформации данных в файл OBJ. На самом деле, сначала, я это сделал на python, но не осилил процедуры создания файлов, а в Си, как по мне, это проще. Да, получилось, но оказалось, что в этих файлах нет информации о цвете полигонов. Пришлось так же гуглить как передать информацию о цвете. Оказалось, что надо создавать ещё один файлик с раширением MTL (сокращение от "материал"). Оба файла должны быть вместе, как Бонни и Клайд.
Получилось. Да код не идеален. Можно сгруппировать полигоны по цветам, а не присваивать каждому полигону свой цвет, как это делаю я. Но оно получилось.
А если кому интересно то я оставлю ссылку на каталог с исходниками: https://disk.yandex.ru/d/Kwk8tYfHonyl6g
P.S. То, что это логотип я понял в феврале 2020 года. И в силу разных обстоятельств оставил этот проект. И вот, после того как я опубликовал эту статью, я узнал, что примерно год назад уже была подобная статья от какого-то австралийского блогера. Но там узнали о трехмерности после какого-то глитча. Даже есть видос, как его крутят прямо в момент заставки. И вообще это старая городская легенда, как оказалось.
Комментарии (12)
AcckiyGerman
15.08.2022 10:06+12Могу ли я посоветовать вам хранить код в системах хранения кода (github, gitlab, gitbucket) ?
Да, придется освоить git, но:git специально спроектировали для хранения кода и его истории изменений
github (и аналоги) будут надежнее для целей хранения, чем yandex.disk
люди смогут просматривать ваш код, даже не скачивая его
код и его описание будет индексироватся поисковиками, что позволит легче его найти другим людям
Iv38
У меня не было PSone, поэтому я не в курсе, этот логотип там анимировался? Зачем он так хранился?
lisovsky1 Автор
Не. Он статично показывался в виде картинки. Я сам не понимаю. Я всегда думал, что это картинка
SadOcean
Ну прямо 3д может и оверинженеринг, но хранение в векторном виде - очень хорошая практика, позволяющая экономить ресурсы.
Возможно им почти ничего не стоило использовать 3д (готовая библиотека), а вот представление в виде полигонов оказалось гораздо компактнее растра.
Возможно они так же экспериментировали с анимацией, что делает это еще логичнее.
tormozedison
Сделали в 3D, чтобы покрутить, но затем забыли покрутить.
SadOcean
Да, вполне.
Все равно результат - векторный рисунок, зачем переделывать на растр потом?
calculator212
Насколько я помню, для PS1 карта памяти выдавалась на 8кб (видимо память была очень дорогой), так что экономия места звучит как наиболее разумный вариант
Nikita22007
PS1 грузился с CD дисков.
SadOcean
Но это не значит, что это место не нужно экономить.
Лучше обязать разработчиков использовать заставку на пару килобайт, чем на пару мегабайт из 700
lisovsky1 Автор
Размер исходного файла 12920 байт
SadOcean
Да, но это только 3d модель или там еще софт, спрайт с надписью Sony Computer Entertaiment, звук загрузки и предыдущее лого?
Если там не только 3д модель - то это все равно оправданно.