Вопросы про формат .bin

Автор nemyax, 24 апреля 2013 18:25:52

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

nemyax

Цитата: UL от 21 мая 2013 23:36:12
Предположения на уровне 3D-моделера не работавшего в дромадере.
Да, именно так. Ну до поры лазить в дармоед и не требуется. Всё равно Zontik, который его знает вдоль и поперёк, отвечает чётко и ясно =)
Цитата: UL от 21 мая 2013 23:36:12
объединения (именно так переводится split)
Split переводится ровно наоборот.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

UL

#16
Цитата: nemyax от 22 мая 2013 00:33:40
Split переводится ровно наоборот.

:rolleyes: П-лять, точно. :embarassed: Чёт щёлкнуло в башке, нарадовался, что программеры Thief были настолько круты, что уже использовали такую фишку в те времена.
Ничто не имеет значения, только цель.

Zontik

Насчет узлов ничего не понял, да и как могут выглядеть "проявления узловатости", представляю с трудом. Короче, поосторожнее с мнением дармоеда, ничего не смыслящего в 3D-моделировании (это я про себя, если кто не понял).
Дайте глазам отдохнуть! Тёмное место

nemyax

Цитата: Zontik от 22 мая 2013 09:20:22
Насчет узлов ничего не понял, да и как могут выглядеть "проявления узловатости", представляю с трудом.
Вот структы этих типов узлов:

typedef struct mds_node_split {
   mde_node type;             // type of node
   mds_sphere sphere;      // bounding sphere
   ushort   pgons_before; // number of polygons to render before split
   ushort   norm;        // index of polygon normal
   float    d;          // plane equation d for normal
   ushort   node_behind; // offset of node in back of the plane
   ushort   node_front;    // offset of node in front of the plane
   ushort   pgons_after; // number of polygons to render after split
   ushort   polys[];
} mds_node_split;

typedef struct mds_node_call {
   mde_node type;
   mds_sphere  sphere;
   ushort   pgons_before; // number of polygons to render before call
   ushort   node_call; // offset of node to jump to
   ushort   pgons_after; // number of polygons to render after call
   ushort   polys[];
} mds_node_call;

typedef struct mds_node_vcall {
   mde_node type;
   mds_sphere  sphere;
   ushort   index; // index of vcall to call
} mds_node_vcall;

Надо полагать:
- Split зачем-то разрезает модель.
- Call избирательно отрисовывает геометрию до и после некоего вызова.
- Vcall делает хз что.
Цитата: Zontik от 22 мая 2013 09:20:22
поосторожнее с мнением дармоеда, ничего не смыслящего в 3D-моделировании (это я про себя, если кто не понял).
Если опытные моддеры с ходу не могут сказать, про что это, то можно сделать вид, что этого не существует. Вместо этого можно использовать обычные ноды, тупо содержащие геометрию.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

nemyax

А как вообще в наш век HD-порнографии производят .bin-файлы? Есть способы кроме перегона из .3ds легаси-утилитой?
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

LongShad

Есть еще плагин для Blender'а, кажись.

nemyax

Цитата: LongShad от 26 июня 2013 07:36:02
Есть еще плагин для Blender'а, кажись.
Я вот не уверен, что он пишет бинки напрямую. Вроде бы он сначала откашливает .3ds, а потом дёргает всё тот же старый усталый 3ds2bin.
А исходников 3ds2bin, надо думать, нет вообще ни у кого?
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

nemyax

Есть ещё  в формате некая сущность под названием light.


// Each element, x,y,z has 1 bit of sign, 1 bit of integer, and 8 bits
// of fraction, for 10 bytes total.  So the x, y, and z values of each
// lighting normal can be extracted in the following manner:

#define X_NORM(norm) ((short)((norm>>16)&0xFFC0))/16384.0
#define Y_NORM(norm) ((short)((norm>>6)&0xFFC0))/16384.0
#define Z_NORM(norm)  ((short)((norm<<4)&0xFFC0))/16384.0

typedef struct mds_light {
   ushort mat;    // material index
   ushort point; // index of of vertex
   ulong norm;    // compacted normal
} mds_light;


Комментарии утверждают, что это нормаль. Но по ходу дела нихрена подобного. В сорсах удалось найти только один пример, когда понадобилась эта структура. Да и там распакованные флоты использовались как множители для компонентов нормали.
Штатных файлов, где совсем нету light-ов, я не нашёл. Везде хоть один да есть (в модельках из одного полигона, типа карточки под пятно крови, бывает один light).
В общем, непонятно, что это и можно ли на это забить (записывать ноль light-ов). Оно проявляет себя как-нибудь в дромеде?
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

UL

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

nemyax

Всё может быть. Надо бы послушать пользователей дромеда.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

Zontik

Ни один пользователь Дромеда никогда не имел с этим дела. Параметр, который не имеет возможностей настройки, обычно лишен практического значения.
Поэтому сочувствую, но помощи здесь не будет. Возможно, R Soul с TTLG случайно что-то об этом знает - он хорошо разбирается в 3D и мог интересоваться просто из теоретических соображений. Больше, пожалуй, мне некого заподозрить в связях с light.
Дайте глазам отдохнуть! Тёмное место

UL

А че если просто тупо попробовать в бинарнике подменить значение флага и сделать скриншоты в гэйммоде для разных значений и сравнить?
Ничто не имеет значения, только цель.

nemyax

Цитата: UL от 04 июля 2013 14:32:10
А че если просто тупо попробовать в бинарнике подменить значение флага и сделать скриншоты в гэйммоде для разных значений и сравнить?
Это можно, но формат хранения хитровые нетривиальный: в 4 байта с потерями запхнуто три числа с плавающей запятой. То есть перед заменой надо ещё правильно упаковать, и неизвестно, насколько ((short)((norm>>16)&0xFFC0))/16384.0 соответствует истине.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

nemyax

Вот ещё пара вопросов:

  • Формат определяет параметр "радиус" для описанной вокруг модели сферы. Этот параметр можно при необходимости перебить в редакторе?
  • Текстуру с каким именем имеет смысл делать дефолтной, если для объекта не определена никакая? Есть что-нибудь типа "хорхе", доступное в любой из даркошных игр?
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

Zontik

Модель в редакторе может вообще не быть сферой. В этом случае размеры перебиваются легко. Если все-таки сфера - тоже, кажется, перебиваются, хотя не уверен, что так же гладко. Какие-то они, эти сферы, не очевидные.
Одной какой-то дефолтной текстуры нет, как на брашах. Зато есть куча "стоковых" текстур, любую из них можно использовать - она гарантированно отобразится правильно в любой игре (если, конечно, игрок не устанавливал всякие там паки-улучшители, подменяющие оригинал). Полный список - в RES\OBJ.CRF (в подпапках TXT и TXT16; большинство текстур из папки TXT доступно и в Thief 1).
Но я не очень понимаю, какой смысл в этом вопросе. Средствами редактора ведь невозможно заменить текстуру на объекте. Есть, правда, одно исключение - специальная текстура "под замену", в оригинале она выглядит как пурпурный фон с большими белыми цифрами. Имя не помню, и вообще уже несколько лет как ею не пользуюсь - неудобно. Гибкости никакой.
Дайте глазам отдохнуть! Тёмное место