Author Topic: Vox Loader  (Read 755 times)

0 Members and 1 Guest are viewing this topic.

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Vox Loader
« on: October 26, 2017, 01:30:57 PM »
=============================================================================
Ссылка на готовый билд с исходниками: https://yadi.sk/d/V_BV8-rT3PM8ip
То, что у меня получилось можно поглядеть на видео:
Видео на Youtube
=============================================================================

Как всё начиналось
=============================================================================


Всем привет!
Решил я тут переписать старые свои наработки (с паскаля и OpenGL на Си и WS3D) по загрузке и рендерингу воксельных моделей формата редактора MagicaVoxel. Если всё получится, то данная поделка может стать фишкой WS3D... если так решат авторы.
Здесь я буду выкладывать скрины и отписываться о прогрессе.

На данный момент информация успешно считывается из файликов vox. Осталось её правильно интерпретировать и собрать оптимизированную полигональную модельку.

Есть ошибки в формировании цвета - он не тот, что в оригинале. Воксели собираются из кубов, что неверно, т.к. на выходе должна получится модель с минимальным количеством треугольников.

Скрины на сегодня (кликабельно):



« Last Edit: November 02, 2017, 06:25:00 PM by Vuvk »
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #1 on: October 26, 2017, 02:09:23 PM »
Интересно, будем следить за процессом. Когда-то тов. it_is_good хотел сделать что-то с вокселями, но не слышно что-то.
А разрушаемость/изменяемость мира будет?
Quote
Есть ошибки в формировании цвета - он не тот, что в оригинале.
Это из-за WS3D ?
« Last Edit: October 26, 2017, 02:11:09 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #2 on: October 26, 2017, 02:10:58 PM »
А разрушаемость/изменяемость мира будет?
Хм. Нет. Направление разработки другое. Здесь я хочу добавить загрузку файлов .VOX в wMesh, с которым можно манипулировать, как с обычными мешами.

Quote
Это из-за WS3D ?
Нет. Там закодирован 16-битный цвет, а ожидается 32-битный RGBA.


P.S.: а ещё меня добивает, что некоторые штуки на С++ работают не так, как на Си. Ну это так, крик души  :D
« Last Edit: October 26, 2017, 02:15:20 PM by Vuvk »
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #3 on: October 26, 2017, 02:24:13 PM »
Quote
некоторые штуки на С++ работают не так, как на Си
И заметь, иногда быстрее (с твоих же слов)
Code: [Select]
Там закодирован 16-битный цвет, а ожидается 32-битный RGBAВ иррле есть возможность работать с 16-битным цветом.
Code: [Select]
enum ECOLOR_FORMAT
{
//! 16 bit color format used by the software driver.
/** It is thus preferred by all other irrlicht engine video drivers.
There are 5 bits for every color component, and a single bit is left
for alpha information. */
ECF_A1R5G5B5 = 0,

//! Standard 16 bit color format.
ECF_R5G6B5,

//! 24 bit color, no alpha channel, but 8 bit for red, green and blue.
ECF_R8G8B8,

//! Default 32 bit color format. 8 bits are used for every component: red, green, blue and alpha.
ECF_A8R8G8B8,

/** Compressed image formats. **/

//! DXT1 color format.
ECF_DXT1,

//! DXT2 color format.
ECF_DXT2,

//! DXT3 color format.
ECF_DXT3,

//! DXT4 color format.
ECF_DXT4,

//! DXT5 color format.
ECF_DXT5,

//! PVRTC RGB 2bpp.
ECF_PVRTC_RGB2,

//! PVRTC ARGB 2bpp.
ECF_PVRTC_ARGB2,

//! PVRTC RGB 4bpp.
ECF_PVRTC_RGB4,

//! PVRTC ARGB 4bpp.
ECF_PVRTC_ARGB4,

//! PVRTC2 ARGB 2bpp.
ECF_PVRTC2_ARGB2,

//! PVRTC2 ARGB 4bpp.
ECF_PVRTC2_ARGB4,

//! ETC1 RGB.
ECF_ETC1,

//! ETC2 RGB.
ECF_ETC2_RGB,

//! ETC2 ARGB.
ECF_ETC2_ARGB,

/** The following formats may only be used for render target textures. */

/** Floating point formats. */

//! 16 bit format using 16 bits for the red channel.
ECF_R16F,

//! 32 bit format using 16 bits for the red and green channels.
ECF_G16R16F,

//! 64 bit format using 16 bits for the red, green, blue and alpha channels.
ECF_A16B16G16R16F,

//! 32 bit format using 32 bits for the red channel.
ECF_R32F,

//! 64 bit format using 32 bits for the red and green channels.
ECF_G32R32F,

//! 128 bit format using 32 bits for the red, green, blue and alpha channels.
ECF_A32B32G32R32F,

/** Unsigned normalized integer formats. */

//! 8 bit format using 8 bits for the red channel.
ECF_R8,

//! 16 bit format using 8 bits for the red and green channels.
ECF_R8G8,

//! 16 bit format using 16 bits for the red channel.
ECF_R16,

//! 32 bit format using 16 bits for the red and green channels.
ECF_R16G16,

/** Depth and stencil formats. */

//! 16 bit format using 16 bits for depth.
ECF_D16,

//! 32 bit format using 32 bits for depth.
ECF_D32,

//! 32 bit format using 24 bits for depth and 8 bits for stencil.
ECF_D24S8,

//! Unknown color format:
ECF_UNKNOWN
};
Может, стоит что-либо предпринять?
« Last Edit: October 26, 2017, 02:26:44 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #4 on: October 26, 2017, 02:27:27 PM »
Quote
В иррле есть возможность работать с 16-битным цветом. Может, стоит что-либо предпринять?
Посмотрим... Там два формата бывает: RGB1555 и RGB565.
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #5 on: October 26, 2017, 02:30:41 PM »
Они первые два в списке, если не ошибаюсь.
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #6 on: October 27, 2017, 10:32:33 AM »
Всем привет.
У меня назрел вопрос к движку. Я для создания меша передаю набор вершин с параметрами координат, нормалей и цвета. Плюс ко всему массив индексов.
Ну так вот. В функции wCreateMesh (текущее название) ожидаются индексы в виде 16-битных чисел. Большие модели попросту не влазят. Да, я ещё далек от оптимизации на 100%, но это обстоятельство удручает.
Получаю сообщения вида:
Quote
Too many vertices for 16bit index type, render artifacts may occur.
И модель рисуется частями.

Вопрос: можно ли индексы передать в виде 32-битных целых чисел?
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #7 on: October 27, 2017, 11:05:14 AM »
Quote
Вопрос: можно ли индексы передать в виде 32-битных целых чисел
В текущий момент нельзя.
Но, думаю, можно исправить. Правда, потребуется перекомпиляция иррла и WS3D.
Посмотрю, что и как.
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #8 on: October 27, 2017, 12:55:11 PM »
Прогресс на сегодня:
Исправил баг с цветами. Вспомнил, что нумерация цветов идёт не с 0, а с 1. Поэтому брался соседний цвет из палитры.
Реализовал первый шаг к оптимизации - рисование только внешних граней, т.е. теперь модель внутри полая. Но, если взглянуть на сетку, то можно заметить, что кол-во полигонов всё равно сумасшедшее.

Далее через боль и страдания мне предстоит реализовать объединение всех одноцветных граней, лежащих в одной плоскости и поблизости друг от друга. Пожелайте мне удачи 😃


Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #9 on: October 27, 2017, 01:00:45 PM »
Quote
Далее через боль и страдания мне предстоит реализовать
Такова судьба прогера...
Удачи.
Я тут пытаюсь собрать иррл с 32-битными индексами.
Все классы в нем правлю. Не знаю пока, будет ли это иметь последствия...
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #10 on: October 27, 2017, 01:15:59 PM »
Я тут пытаюсь собрать иррл с 32-битными индексами.
Все классы в нем правлю. Не знаю пока, будет ли это иметь последствия...
Кроме классов нужно будет править рендер. Не знаю, что там в софтверном рендере и directx, но в OpenGL что-то такое для передачи буффера индексов:
Code: [Select]
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLUShort) * Count, Indices, GL_STATIC_DRAW);

glDrawElements(
     GL_TRIANGLES,      // режим
     Count,    // количество
     GL_UNSIGNED_SHORT,   // тип
     (void*)0           // смещение в элементном буфере
 );
Нужно будет поменять GLUShort => GLUInt и GL_UNSIGNED_SHORT => GL_UNSIGNED_INT
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #11 on: October 27, 2017, 01:48:35 PM »
Вот пробная версия текущей версии с 32-битными индексами. Проверь, что и как.
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #12 on: October 27, 2017, 02:01:44 PM »
Вообще ничего не выводит. Ни одного треугольника...
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 59
Re: Vox Loader
« Reply #13 on: October 27, 2017, 02:05:03 PM »
Хм. Примеры стандартные вроде работают.
Quote
Вообще ничего не выводит. Ни одного треугольника
Зато фпс каков! ;D
Ладно, посмотрим в OpenglDriver.h/cpp и прочих более внимательно. Но обещать не будем...
« Last Edit: October 27, 2017, 02:14:14 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 30
  • Lokemundux Desco Domus Shaantitus
Re: Vox Loader
« Reply #14 on: October 27, 2017, 02:18:00 PM »
Вот тестовая версия для тестов (подмены библиотек)...
Скачать без регистрации и СМС
Crudux Cruo!