Gildor's Forums

Author Topic: VertMesh .3d  (Read 11561 times)
kisly00
Full Member
***
Posts: 89



View Profile WWW
VertMesh .3d
« on: August 22, 2015, 04:06 »

Quote
Submitted by Gildor on 1 October, 2008 - 21:27.
Unreal Model Viewer project has been updated. Most significant change is export of vertex meshes from Unreal1, UT and DeusEx in Epic's .3d format. Full changelog may be found in readme file

А описание этого .3d есть ? Уж очень хочется извлечь кое-что из VertMesh
Logged

Lineage2 + unity3D
Gildor
Administrator
Hero Member
*****
Posts: 7969



View Profile WWW
Re: VertMesh .3d
« Reply #1 on: August 22, 2015, 09:51 »

Что-то есть здесь
http://paulbourke.net/dataformats/unreal/
Logged
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #2 on: August 22, 2015, 16:09 »

Gildor, а подскажи по материалам\шейдерам ue2.

Вот например mat файл. Как его понимать ?

Quote
Diffuse=SSQ_Door102
Specular=SSQ_Door102

В смысле, получается что материал в ue2 может иметь более одного шейдера ?
Logged

Lineage2 + unity3D
Gildor
Administrator
Hero Member
*****
Posts: 7969



View Profile WWW
Re: VertMesh .3d
« Reply #3 on: August 22, 2015, 16:44 »

Звучит загадочно. Материал это по сути и есть шейдер. Если перевести на русский, получается "материал может иметь два материала" Smiley

Расшифровываю текст mat-файла. UModel пытается разложить материал на текстуры. С UE2 это получается более-менее нормально. UModel рендерит каждый материал как набор текстур diffuse, opacity, normal, и т.п. Когда материал экспортируется, создаётся mat-файл для ActorX Importer. В нём каждая строка - это указатель, какую тукстуру использовать для какого канала материала. В данном случае, для diffuse и specular это одинаковая текстура.
Logged
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #4 on: August 23, 2015, 01:26 »

А ActorX Importer воспринимает все каналы материала ? Или только первый ?
Logged

Lineage2 + unity3D
Gildor
Administrator
Hero Member
*****
Posts: 7969



View Profile WWW
Re: VertMesh .3d
« Reply #5 on: August 23, 2015, 01:30 »

Все которые экспортируются umodel-ом.
Logged
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #6 on: August 23, 2015, 01:36 »

Просто когда я импортирую BSP в Unity некоторые поверхности ссылаются на .mat
Вот я и думаю, как лучше интерпретировать его содержимое. Всеравно спасибо, ваша помощь неоценима
Logged

Lineage2 + unity3D
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #7 on: September 19, 2015, 17:28 »

Наконец появилось время (ох уж эти дела дела дела) заняться vertMesh'ами, появился такой вопросец:

Беру самый простой меш (12 полигонов, 12 вертексов), в заголовке aniv

Quote
00000000 | 2C 01 30 00 B2 54 C6 CB                                                                         |
где

2C 01 -> 300 кол-во фреймов
30 00 -> 48 фрейм сайз

B2 54 C6 CB -> первый vertex( или vector x,y,z) и занимает этот участок до конца файла 14400 = 300*48

Почему фрейм_сайз равен 48 ? вертексов то 12! Получается 4 "значения" на вертекс. В чем магия ? Мб первые 12 значений во фрейме - это традиционный keyframe, а остальные три - это фазы ? Просто для меня, как для человека никак не связанного с графикой это просто темный лепс.
Logged

Lineage2 + unity3D
Gildor
Administrator
Hero Member
*****
Posts: 7969



View Profile WWW
Re: VertMesh .3d
« Reply #8 on: September 19, 2015, 17:39 »

Смотрите FMeshVert
https://github.com/gildor2/UModel/blob/master/Unreal/UnMesh2.h#L64

это вертекс упакованный в 4 байта.
Logged
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #9 on: September 19, 2015, 21:10 »

Что-то я там не могу найти десериализацию..

Подскажи как восстановить знак в координатах вертексов ? если число было отрицательным (например x = -105.75), то чтобы получить его обратно, надо применить формулу
x = (float)((4byteVertex & 0x7ff)|0xFFFFF800)/8.0f
В случае же если чило было изначально положительным, то блок [ |0xFFFFF800 ] не нужен и надо использовать x = (float)(4byteVertex & 0x7ff)/8.0f. А как определить когда какую формулу использовать ?
« Last Edit: September 19, 2015, 21:50 by kisly00 » Logged

Lineage2 + unity3D
Gildor
Administrator
Hero Member
*****
Posts: 7969



View Profile WWW
Re: VertMesh .3d
« Reply #10 on: September 19, 2015, 23:17 »

Если писать на C++, то объявление структуры следующее
Code:
struct FMeshVert
{
int X:11; int Y:11; int Z:10;
};

Это битовые поля, стандартная фича ещё со времён C. X, Y, Z используются напрямую как целые числа, но они доможаются на MeshScale, который есть в любой модели UE1-UE3.

Quote
...|0xFFFFF800
Расширение знака надо делать, но только если (опять же) не используете битовые поля, и в вашем коде число всегда будет отрицательным. Т.е. "OR" надо делать только если старший бит 1.

Посмотрел код дизассемблером. Генерися что-то вроде этого:
Code:
   int32 tmp;
    int32 vert; // 32-бит, упакованные данные
    FVector Unpacked;

    tmp = vert << 21 >> 21;
    Unpacked->X = tmp * MeshScale.X;
    tmp = vert << 10 >> 21;
    Unpacked->Y = tmp * MeshScale.Y;
    tmp = vert >> 22;
    Unpacked->Z = tmp * MeshScale.Z;

То есть для расширения знака компилятор сдвигает число влево так, чтобы знак битового поля стал знаком (31-м битом) в tmp, а потом сдвигает его вправо чтобы остались только биты этого поля.
« Last Edit: September 19, 2015, 23:33 by Gildor » Logged
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #11 on: September 20, 2015, 13:45 »

они домножаются на MeshScale, который есть в любой модели UE1-UE3

В _d.3D есть только поле fixScale, который всегда равен нулю. Или он где-то в скриптах лежит , как текстуры ? ?
Logged

Lineage2 + unity3D
Gildor
Administrator
Hero Member
*****
Posts: 7969



View Profile WWW
Re: VertMesh .3d
« Reply #12 on: September 20, 2015, 13:54 »

Scale присутствует в u-файле, но не попадает в .3d по причине ограничений формата. Егно можно посмотреть в UModel, а можно экспортировать в текстовый файл - добавьте в командную строку ключик "-uc" и тогда рядом с каждой моделью будет создан файл .uc в котором будут все настройки. Он по-идее предназначен для UnrealEd, но при этом вполне читаем.
Logged
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #13 on: September 20, 2015, 13:56 »

Хмм спасибо!
Logged

Lineage2 + unity3D
kisly00
Full Member
***
Posts: 89



View Profile WWW
Re: VertMesh .3d
« Reply #14 on: September 20, 2015, 22:37 »

Мм.. Gildor, встречался ли тебе тутор по созданию keyframe из maxScripta ?
Logged

Lineage2 + unity3D
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS