IPB

>

Вскрытие ресурсов Метро 2033

 
 Panisher
сообщение 18.03.2010, 10:28
Сообщение #201


Почти Игрок
**

Группа: Забанен
Сообщений: 28
Регистрация: 22.10.2009
Пользователь №: 12736



ЭкшнШутерПостапокалипсис
93 %
81/100
Разработчик: 4A Games
Дата выхода: 16 марта 2010
Здесь технический разговор между создателями ПО на тему ресурсов игры.

ПО для работы с ресурсами игры

Обсуждение ПО для работы с ресурсами

Мелкие моды и фиксы

Моддинг. Общее обсуждение

Советы и решения

Работа с bump- и normalmaps (от iOrange)
В альфе лежит бамп, а в зеленом канале (если я правильно понял) лежит Gloss-Map (регулирующая силу specular-бликов).
Если Вам нужна normal-map, то бапм легко в нее превратить:
1) Качаем плагин nVidia для фотошопа (тыц)
2) Открываем в фотошопе интересующий бамп (например act\act_bab_body_bump.512.dds)
3) Выделяем все четыре канала (RGB + Alpha)
4) Жмем Filter->NVIDIA Tools->NormalMapFilter...
5) В появившемся окне в разделе Height Source выбираем Alpha Channel
6) Ставим нужный scale (я ставлю 10)
7) Жмем OK
8) Наслаждаемся результатом

(IMG:http://img.gameru.net/th/c49ec.gif)

(IMG:http://img.gameru.net/th/86f79.gif) (IMG:http://img.gameru.net/th/c0be6.gif)


Сообщение отредактировал Deimos - 20.04.2010, 17:01
Перейти в начало страницы
 
 
 
Ответов
 Kolmogor
сообщение 29.03.2010, 23:22
Сообщение #202


Опытный Геймер
*******

Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008
Пользователь №: 8878



Цитата(surfer @ 29.03.2010, 22:48) *
Я расковырял формат модели .model, я - инсайдер (IMG:style_emoticons/default/biggrin.gif)

не похож ты на инсайдера (IMG:style_emoticons/default/tongue.gif)
Цитата
96-й байт от начала

Правильнее оперировать не смещениями от начала, а чанками(блоками)
Тогда
Цитата
после нее какое-то четырехбайтовое поле, а после 4 байта - содержащие размер вертексного буффера

превратиться в чанк с вертексным буффером, а какое-то четырехбайтовое поле - станет идентификатором чанка
Перейти в начало страницы
 
 
 surfer
сообщение 30.03.2010, 04:45
Сообщение #203


Почти Игроман
*********

Группа: Забанен
Сообщений: 631
Регистрация: 25.11.2009
Пользователь №: 13092



Хех, работает (IMG:style_emoticons/default/smile.gif)
(IMG:http://img.gameru.net/th/d127f.jpg)

Маска, была обнаружена в файле lib_dead_body.model
Перейти в начало страницы
 
 
 Скиф
сообщение 30.03.2010, 05:59
Сообщение #204


какой жим, вы о чем?)
**********************

Группа: Участник
Сообщений: 7234
Регистрация: 30.05.2009
Пользователь №: 10964



Тоесть уже можно вытащить в Макс модели игры со скелетом и прочими атрибутами?
Перейти в начало страницы
 
 
 BAC9-FLCL
сообщение 30.03.2010, 10:01
Сообщение #205


Lo Res Chairman
**************

Группа: Участник
Сообщений: 1796
Регистрация: 09.09.2007
Пользователь №: 6792



Цитата(Скиф @ 30.03.2010, 06:59) *
Тоесть уже можно вытащить в Макс модели игры со скелетом и прочими атрибутами?

Нет.
Перейти в начало страницы
 
 
 VEN0M
сообщение 30.03.2010, 11:35
Сообщение #206


Опытный Игрок
****

Группа: Участник
Сообщений: 59
Регистрация: 31.12.2009
Из: Сыктывкар
Пользователь №: 13373



да и без скелета пока что подойдёт если модельки в сталкер перетаскивать (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 surfer
сообщение 30.03.2010, 13:07
Сообщение #207


Почти Игроман
*********

Группа: Забанен
Сообщений: 631
Регистрация: 25.11.2009
Пользователь №: 13092



Нехорошо это, имхо, модели выдергивать пока не будем, по крайней мере до выхода или невыхода сдк Метро 2033. Вот если он не выйдет в итоге, тогда дернем (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 [SОC]
сообщение 30.03.2010, 13:12
Сообщение #208


Почти Игроман
*********

Группа: Участник
Сообщений: 684
Регистрация: 25.01.2010
Пользователь №: 13612



surfer, по всей логике СДК будет поддерживать только импорт в форматы самой игры, никак не в обратную сторону (вспомним логику ПЫС, откуда вышли 4А). Да и раз поддержки все равно нет (даром, что название компании-родителя поменялось), отчего тянуть? Свободная фанатская программа, вот так-то.
Перейти в начало страницы
 
 
 VEN0M
сообщение 30.03.2010, 13:18
Сообщение #209


Опытный Игрок
****

Группа: Участник
Сообщений: 59
Регистрация: 31.12.2009
Из: Сыктывкар
Пользователь №: 13373



Цитата
Нехорошо это, имхо, модели выдергивать пока не будем, по крайней мере до выхода или невыхода сдк Метро 2033. Вот если он не выйдет в итоге, тогда дернем smile.gif

гдето слышал что не раньше аддона выйдет, так что долговато ждать (IMG:style_emoticons/default/smile.gif)
Цитата
surfer, по всей логике СДК будет поддерживать только импорт в форматы самой игры, никак не в обратную сторону (вспомним логику ПЫС, откуда вышли 4А). Да и раз поддержки все равно нет (даром, что название компании-родителя поменялось), отчего тянуть? Свободная фанатская программа, вот так-то.

согласен (IMG:style_emoticons/default/smile.gif)
да и кто нибудь другой к тому времени уже наверное сделает, так что лучше не тянуть (IMG:style_emoticons/default/smile.gif) (IMG:style_emoticons/default/wink_old.gif)
Перейти в начало страницы
 
 
 Veresk
сообщение 30.03.2010, 17:14
Сообщение #210


Почти Мастер
***********

Группа: Забанен
Сообщений: 1131
Регистрация: 25.01.2010
Из: Москва
Пользователь №: 13613



Цитата(surfer @ 30.03.2010, 14:07) *
Нехорошо это, имхо, модели выдергивать пока не будем, по крайней мере до выхода или невыхода сдк Метро 2033

извините, но это бред. Вся статика и без вашей утилиты выдергивается, остались только неписи и монстры. А вы пай-девочку строите (уж извините за откровенность и некоторую некультурность)

Сообщение отредактировал Veresk - 30.03.2010, 17:16
Перейти в начало страницы
 
 
 Veresk
сообщение 30.03.2010, 18:13
Сообщение #211


Почти Мастер
***********

Группа: Забанен
Сообщений: 1131
Регистрация: 25.01.2010
Из: Москва
Пользователь №: 13613



тот же самый противогаз без особого шаманства (со вторым слоем на стекле с кровушкой)
(IMG:http://savepic.org/445573m.jpg)

так что смысла в "Нехорошо это" нету никакого

Сообщение отредактировал Veresk - 30.03.2010, 18:38
Перейти в начало страницы
 
 
 VEN0M
сообщение 30.03.2010, 18:19
Сообщение #212


Опытный Игрок
****

Группа: Участник
Сообщений: 59
Регистрация: 31.12.2009
Из: Сыктывкар
Пользователь №: 13373



Цитата
тот же самы противогаз без особого шаманства (со вторым слоем на стекле с кровушкой)

ооо дай ссыль (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 kalinin11
сообщение 30.03.2010, 18:24
Сообщение #213


Геймер
******

Группа: Участник
Сообщений: 103
Регистрация: 12.01.2009
Пользователь №: 9683



VENOM :
в шапке ищи метод с 3д риппером, затем действуй по инструкции.

Сообщение отредактировал kalinin11 - 30.03.2010, 18:25
Перейти в начало страницы
 
 
 VEN0M
сообщение 30.03.2010, 18:27
Сообщение #214


Опытный Игрок
****

Группа: Участник
Сообщений: 59
Регистрация: 31.12.2009
Из: Сыктывкар
Пользователь №: 13373



kalinin11, что бы им воспользоваться нужно запустить игру а её я никак не запущу так как видюха моя имеет первые шейдеры а метро требует третьи (IMG:style_emoticons/default/smile.gif)

Сообщение отредактировал VEN0M - 30.03.2010, 18:28
Перейти в начало страницы
 
 
 Deimos
сообщение 30.03.2010, 18:35
Сообщение #215


Доктор Игровых Наук
*******************

Группа: Забанен
Сообщений: 3591
Регистрация: 16.09.2009
Из: Украина
Пользователь №: 11874



surfer, молодец, доделывай и выкладывай скрипт на модели.

Это уже достижение.
Перейти в начало страницы
 
 
 surfer
сообщение 30.03.2010, 18:45
Сообщение #216


Почти Игроман
*********

Группа: Забанен
Сообщений: 631
Регистрация: 25.11.2009
Пользователь №: 13092



(IMG:http://s39.radikal.ru/i083/1003/89/b8126a0a4d30t.jpg)

Цитата(Deimos @ 30.03.2010, 19:35) *
доделывай и выкладывай скрипт на модели.

Плагин надо писать для 3DS, сейчас пользуюсь на скорую руку написанной прогой для конвертации в формат Ogre .mesh

Цитата(VEN0M @ 30.03.2010, 14:18) *
кто нибудь другой к тому времени уже наверное сделает

Да я в принципе не против (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 Deimos
сообщение 30.03.2010, 18:53
Сообщение #217


Доктор Игровых Наук
*******************

Группа: Забанен
Сообщений: 3591
Регистрация: 16.09.2009
Из: Украина
Пользователь №: 11874



Цитата(surfer @ 30.03.2010, 18:45) *
Плагин надо писать для 3DS, сейчас пользуюсь на скорую руку написанной прогой для конвертации в формат Ogre .mesh

Макс-скрипт вроде похож на эти КвикБМСы.
Цитата
Да я в принципе не против (IMG:style_emoticons/default/smile.gif)

Но но но. (IMG:style_emoticons/default/smile.gif) *угрожающе водит пальце в воздухе*

Сообщение отредактировал Deimos - 30.03.2010, 18:55
Перейти в начало страницы
 
 
 iOrange
сообщение 31.03.2010, 00:43
Сообщение #218


Половина землекопа
**************

Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010
Из: Planet Earth
Пользователь №: 13811



Здравствуйте всем.

Я новенький на вашем форуме, вот прошел игру и начал тоже в ней копаться, так и вышел на ваш форум.
Вопщем surfer'у спасибо за инфу, только она верна лишь для небольшого количества моделей, у остальных смещения не те, копаю в эту сторону. Попутно пишу импортер в 3DS Max.

Вот первые скрины.
(IMG:http://img.gameru.net/th/253d5.gif)

(IMG:http://img.gameru.net/th/b7ec9.gif)

Ага - файл все-таки чанковый, так же похоже что в каждом файле модели хранятся также и лоды.

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

Скрин с импортированой бабкой (content\meshes\static\babka\sdf.model)
(IMG:http://img.gameru.net/th/0af15.gif)

для нетерпеливых - вот очень ранняя версия плагина (под 2010-й макс 32-бита), в принципе импортирует любую статику (см. аттач)

Всем спасибо, пошел спать (утром на работу)

Сообщение отредактировал MetroStalk - 31.03.2010, 05:40
Прикрепленные файлы
Прикрепленный файл  Metro2033MeshImport.zip ( 7,23 килобайт ) Кол-во скачиваний: 178
 
Перейти в начало страницы
 
 
 Veresk
сообщение 31.03.2010, 06:56
Сообщение #219


Почти Мастер
***********

Группа: Забанен
Сообщений: 1131
Регистрация: 25.01.2010
Из: Москва
Пользователь №: 13613



просто ШАЙТАН (IMG:style_emoticons/default/blink.gif)

Спасибо за импортер, но если можно сделайте его ещё для 2009 макса. 2010 ну просто жутко ненравится своей гламурностью.

Кстати, а никто не пробовал расковырять формат моделей игры You are Empty, там тоже есть на что посмотерть (я уж неговорю про архитектуру)
http://www.playerzblog.com/wp-content/big_s_57.jpg
http://www.3dnews.ru/documents/12791/yae.jpg
http://www.fpsteam.it/img2005/YouAreEmpty/...re_empty_09.jpg

Сообщение отредактировал Veresk - 31.03.2010, 07:10
Перейти в начало страницы
 
 
 iOrange
сообщение 31.03.2010, 08:31
Сообщение #220


Половина землекопа
**************

Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010
Из: Planet Earth
Пользователь №: 13811



Цитата(Veresk @ 31.03.2010, 06:56) *
Спасибо за импортер, но если можно сделайте его ещё для 2009 макса. 2010 ну просто жутко ненравится своей гламурностью.

Да не вопрос - прикрепил в аттаче (для 3DS Max 2009 32-бита)

Сегодня вечером постараюсь как можно больше доделать импорт, и тогда же выложу с исходниками.

Прикрепленный файл  Metro2033MeshImport_max2009.zip ( 7,13 килобайт ) Кол-во скачиваний: 284


Сообщение отредактировал iOrange - 31.03.2010, 08:31
Перейти в начало страницы
 
 
 surfer
сообщение 31.03.2010, 14:57
Сообщение #221


Почти Игроман
*********

Группа: Забанен
Сообщений: 631
Регистрация: 25.11.2009
Пользователь №: 13092



Вау, внезапно )))

Цитата(iOrange @ 31.03.2010, 01:43) *
она верна лишь для небольшого количества моделей, у остальных смещения не те

Нет, формат один для всех статических моделей, но есть еще файлы .mesh, там формат отличается
Цитата(iOrange @ 31.03.2010, 01:43) *
файл все-таки чанковый, так же похоже что в каждом файле модели хранятся также и лоды.

Файл состоит из нескольких сеток, например в файле lib_dead_body.model кроме маски еще 3 сетки есть, среди них дохлое тело должно быть.

вот часть исходного кода моего плагина
формат файла

Код
#ifndef __MODELFORMAT_H__
#define __MODELFORMAT_H__

typedef struct
{
    float x, y, z, w;            // координаты вершины
    unsigned a, b;                // наверное diffuse и specular
    float u, v;                    // текстурные координаты
}    VERTEX_FORMAT;

typedef unsigned short INDEX_FORMAT;

typedef struct
{
    unsigned chunkId;            // идентификатор, всегда = 3
    unsigned vbsize;            // размер вертексного буфера
    unsigned unknown1;            // всегда = 2
    unsigned vcount;            // кол-во вертексов
}    VERTICES_CHUNK_HEADER;

typedef struct
{
    unsigned chunkId;            // идентификатор, всегда = 4
    unsigned ibsize;            // размер индексного буфера
    unsigned nindices;            // число индексов
}    INDICES_CHUNK_HEADER;

typedef struct
{
    unsigned chunkId;            // номер блока
    unsigned chunkSize;            // размер блока
    unsigned modelNum;            // порядковый номер модели
    unsigned length1;            // длина строки, всегда 64 байта
    char stringData[64];        // строка (crc32) ?
    unsigned unknown1;            // всегда = 2
    unsigned length2;            // длина строки
    char stringArray[1];        // название текстуры, материала, модели
}    STATIC_MODEL_CHUNK_HEADER;

typedef struct
{
    unsigned fileId;            // идентификатор
    unsigned fileSize;            // размер файла
}    STATIC_MODEL_FILE_HEADER;

#endif // __MODELFORMAT_H__



sceneimport.h

Код
#ifndef __SCENEIMPORT_H__
#define __SCENEIMPORT_H__

#include <Max.h>
#include <sstream>

class CSceneImport : public SceneImport
{
public:
    CSceneImport();

    ~CSceneImport();

    int ExtCount();

    BOOL SupportsOptions(int  ext, DWORD  options );

    const char* Ext(int n);

    const char* LongDesc();

    const char* ShortDesc();

    const char* AuthorName();

    const char* CopyrightMessage();

    const char* OtherMessage1();

    const char* OtherMessage2();

    unsigned int Version();

    void ShowAbout(HWND hWnd);

    void loadModel( const char* name );

    void unloadModel();

    int DoImport(const char* pszName, ImpInterface* pImpInterface, Interface* pInterface, BOOL bPrompts = FALSE );

private:
    std::stringstream mStream;

}; // CSceneImport

#endif // __SCENEIMPORT_H__



sceneimport.cpp

Код
#include <SceneImport.h>
#include <fstream>
#include <exception>
#include <locale>
#include <ModelFormat.h>

CSceneImport::CSceneImport()
{
}

CSceneImport::~CSceneImport()
{
    unloadModel();
}

int CSceneImport::ExtCount()
{
    return 1;
}

BOOL CSceneImport::SupportsOptions(int  ext, DWORD  options )
{
    return 0;
}

const char* CSceneImport::Ext(int n)
{
    return "model";
}

const char* CSceneImport::LongDesc()
{
    return "";
}

const char* CSceneImport::ShortDesc()
{
    return "";
}

const char* CSceneImport::AuthorName()
{
    return "";
}

const char* CSceneImport::CopyrightMessage()
{
    return "";
}

const char* CSceneImport::OtherMessage1()
{
    return "";
}

const char* CSceneImport::OtherMessage2()
{
    return "";
}

unsigned int CSceneImport::Version()
{
    return 100;
}

void CSceneImport::ShowAbout(HWND hWnd)
{
}

void CSceneImport::loadModel( const char* model )
{
    std::ifstream source;
    unsigned length;
    char *buffer;

    source.open( model, std::ios::binary );
    if( source.good() == 0 )
    {
        throw std::exception( "File not found" );
    }

    source.seekg( 0, std::ios::end );
    length = source.tellg();
    source.seekg( 0, std::ios::beg );

    buffer = new char[length];
    source.read( buffer, length );

    mStream.write( buffer, length );

    delete buffer;
    source.close();
}

void CSceneImport::unloadModel()
{
    mStream.clear();
}

int CSceneImport::DoImport(const char* pszName, ImpInterface* pImpInterface, Interface* pInterface, BOOL bPrompts )
{
    try
    {
        STATIC_MODEL_FILE_HEADER fileHeader;
        STATIC_MODEL_CHUNK_HEADER chunkHeader;
        INDICES_CHUNK_HEADER indicesHeader;
        VERTICES_CHUNK_HEADER verticesHeader;
        VERTEX_FORMAT* vertices;
        INDEX_FORMAT* indices;

        unsigned filePtr;

        setlocale( LC_ALL, ".1251" );

        loadModel( pszName );

        filePtr = sizeof(STATIC_MODEL_FILE_HEADER);
        mStream.read( reinterpret_cast<char*>(&fileHeader), filePtr );

        while( filePtr < fileHeader.fileSize )
        {
            mStream.read( reinterpret_cast<char*>(&chunkHeader), sizeof(STATIC_MODEL_CHUNK_HEADER) );
            mStream.seekg( chunkHeader.length2-4, std::ios::cur );
            mStream.read( reinterpret_cast<char*>(&verticesHeader), sizeof(VERTICES_CHUNK_HEADER) );

            vertices = new VERTEX_FORMAT[verticesHeader.vcount];
            mStream.read( reinterpret_cast<char*>(vertices), verticesHeader.vbsize-8 );

            mStream.read( reinterpret_cast<char*>(&indicesHeader), sizeof(INDICES_CHUNK_HEADER) );

            indices = new INDEX_FORMAT[indicesHeader.nindices];
            mStream.read( reinterpret_cast<char*>(indices), indicesHeader.ibsize );

            ImpNode* node = pImpInterface->CreateNode();
            node->SetName( "test" );

            TriObject* obj = CreateNewTriObject();

            // ...

            node->Reference( obj );

            pImpInterface->AddNodeToScene( node );

            delete indices;
            delete vertices;

            filePtr += chunkHeader.chunkSize;
        }

        unloadModel();

        return IMPEXP_SUCCESS;
    }
    catch( ... )
    {
        return 0;
    }
}



Правка, хотя, да, есть файлы у которых id = 9, а есть такие у которых = 1, они немного отличаются.

Сообщение отредактировал surfer - 31.03.2010, 15:17
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 04.12.2021, 10:11