<commit_before>---
layout: post
title: IntraEngine - игровой 3D движок
---

- [Скачать демо](https://drive.google.com/open?id=0B0wvbicW8OQIWklzRWphRlZPT1k)

![Скриншот демки]({{ site.baseurl }}/images/intra-engine-screenshot.jpg)
![Скриншот демки]({{ site.baseurl }}/images/intra-engine-screenshot2.jpg)
![Скриншот демки]({{ site.baseurl }}/images/intra-engine-screenshot3.jpg)

**Язык:** C++11
**Graphics API:** OpenGL (есть абстракция от API, чтобы добавить другие)
**Поддерживаемые платформы:** Windows (поддержка Linux почти готова)

## Возможности:
- Процедурная генерация текстур (разные типы шумов, цветовые пространства, основные операции).
- Динамическое попиксельное освещение + normal mapping, parallax (пока без теней).
- Процедурная генерация шейдеров - шейдеры собираются из модулей, которые прикрепляются к шаблону.
- Текстовый декларативный язык описания ресурсов PTC. Пока можно писать эффекты, постобработку, шейдеры, их параметры, шаблоны шейдеров и модули, из которых собираются шейдеры.
- Система частиц полностью на GPU (пока без сортировки). Подробное описание [здесь](flying-particles).
- Постобработка. Есть HDR, SunShafts, FXAA, SSAA, DOF. Легко добавлять свои эффекты (см п. 4).
- Неограниченное количество форматов вершин, включая сжатые, например: позиция + TBN + набор текстурных координат - это 20 байт на вершину.
- Сжатие текстур DXT1, DXT3, DXT5, RGTC_Red, RGTC_RG прямо на шейдерах. Особых различий в качестве с оффлайн сжатием незаметно, но изредка бывают артефакты.
- Звук со стримингом и без.
- Встроенный синтезатор музыки из midi файлов.
- Велосипедные контейнеры: строки, список, динамический массив.
- Почти все ресурсы copyable - когда не требуется реальное копирование внутренних данных, используется внутренний счётчик ссылок. Нужно меньше задумываться об управлении памятью, никакие указатели (даже умные) наружу не торчат, обращение через точку.
- Загрузка MD5 (пока без скелетной анимации), 3DS, OBJ.
- Загрузка BMP, TGA, DDS, KTX, PNG, JPG. Последние два загружаются средствами Windows (GDI+), в Linux'е - через Qt.

 Это последняя версия перед началом масштабной перестройки архитектуры движка. Эта перестройка может занять несколько лет. В конечном итоге движок станет частью [IntraLib](intra-lib).
 В следующей версии ожидаются следующие нововведения:
- Новая, более полная абстракция от графического API в стиле Vulkan, которая позволит иметь поддержку Vulkan, OpenGL(ES) различных версий, DirectX 11, 12.
- Полный переход на uniform буферы.
- Автоматический инстансинг и multi-draw.
- Data-oriented design.
- Новый бинарный и текстовый формат описания данных, который позволит работать с данными самых различных типов: звук, текстуры, файлы локализации, сцены, шейдеры и так далее. Заменит собой PTC.
- Ещё большая универсальность и кастомизируемость всего.
- Б<i>о</i>льшая производительность.<commit_msg>Fixed new pages<commit_after>---
layout: post
title: IntraEngine - игровой 3D движок
---

- [Скачать демо](https://drive.google.com/open?id=0B0wvbicW8OQIWklzRWphRlZPT1k)

![Скриншот демки]({{ site.baseurl }}/images/intra-engine-screenshot.jpg)
![Скриншот демки]({{ site.baseurl }}/images/intra-engine-screenshot2.jpg)
![Скриншот демки]({{ site.baseurl }}/images/intra-engine-screenshot3.jpg)

**Язык:** C++11

**Graphics API:** OpenGL (есть абстракция от API, чтобы добавить другие)

**Поддерживаемые платформы:** Windows (поддержка Linux почти готова)

## Возможности:
- Процедурная генерация текстур (разные типы шумов, цветовые пространства, основные операции).
- Динамическое попиксельное освещение + normal mapping, parallax (пока без теней).
- Процедурная генерация шейдеров - шейдеры собираются из модулей, которые прикрепляются к шаблону.
- Текстовый декларативный язык описания ресурсов PTC. Пока можно писать эффекты, постобработку, шейдеры, их параметры, шаблоны шейдеров и модули, из которых собираются шейдеры.
- Система частиц полностью на GPU (пока без сортировки). Подробное описание [здесь](../flying-particles).
- Постобработка. Есть HDR, SunShafts, FXAA, SSAA, DOF. Легко добавлять свои эффекты (см п. 4).
- Неограниченное количество форматов вершин, включая сжатые, например: позиция + TBN + набор текстурных координат - это 20 байт на вершину.
- Сжатие текстур DXT1, DXT3, DXT5, RGTC_Red, RGTC_RG прямо на шейдерах. Особых различий в качестве с оффлайн сжатием незаметно, но изредка бывают артефакты.
- Звук со стримингом и без.
- Встроенный синтезатор музыки из midi файлов.
- Велосипедные контейнеры: строки, список, динамический массив.
- Почти все ресурсы copyable - когда не требуется реальное копирование внутренних данных, используется внутренний счётчик ссылок. Нужно меньше задумываться об управлении памятью, никакие указатели (даже умные) наружу не торчат, обращение через точку.
- Загрузка MD5 (пока без скелетной анимации), 3DS, OBJ.
- Загрузка BMP, TGA, DDS, KTX, PNG, JPG. Последние два загружаются средствами Windows (GDI+), в Linux'е - через Qt.

 Это последняя версия перед началом масштабной перестройки архитектуры движка. Эта перестройка может занять несколько лет. В конечном итоге движок станет частью [IntraLib](../intra-lib).

В следующей версии ожидаются следующие нововведения:
- Новая, более полная абстракция от графического API в стиле Vulkan, которая позволит иметь поддержку Vulkan, OpenGL(ES) различных версий, DirectX 11, 12.
- Полный переход на uniform буферы.
- Автоматический инстансинг и multi-draw.
- Data-oriented design.
- Новый бинарный и текстовый формат описания данных, который позволит работать с данными самых различных типов: звук, текстуры, файлы локализации, сцены, шейдеры и так далее. Заменит собой PTC.
- Ещё большая универсальность и кастомизируемость всего.
- Б<i>о</i>льшая производительность.
{'fraction_non_alphanumeric': 0.08411867364746946, 'fraction_numerical': 0.007329842931937173, 'mean_word_length': 5.182308522114347, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4299230', 'n_tokens_mistral': 2427, 'n_tokens_neox': 2868, 'n_words': 653}