ФлеймФорумПроЭкты

Движок iX

#0
(Правка: 8 мар 2026, 13:43) 22:04, 19 янв 2026

Движок на Rust и Vulkan

Старомодный рендер на Vulkan 1.3 с куллингом на CPU, bindless текстуры, базовый рендерграф. Асинхронная загрузка ресурсов, сборка ресурсов в бинарный формат специальной утилитой вместе с загрузкой из исходных форматов в рантайме. Во многом базируется на идеях отсюда: https://www.youtube.com/watch?v=m3bW8d4Brec в частности все ресурсы адресуются поколенческими хэндлами. Какое то количество идей по устройству кода взято из kajiya (https://github.com/EmbarkStudios/kajiya).

Язык: Rust
Платформы: Windows, Linux
GAPI: Vulkan
Шейдеры: GLSL
Рендер: Forward с z-pass

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

В дальнейших планах лисп-образный язык для скриптов, хочу чтобы геймплейные скрипты были монадами, решает массу проблем вроде многопоточного геймплейного кода. И переход на полный bindless с меш-шейдерами и рейтресингом.

Смотреть тут: https://git.sr.ht/~gigablaster/ix-engine

#1
0:15, 20 янв 2026

Давайте картинки)

#2
1:56, 20 янв 2026

mr_ix
Рендер на одном треде или можно в несколько тредов ?

#3
7:48, 20 янв 2026

freesoft
> Давайте картинки)
Красивой картинки пока нет, буду что-то моделить когда дело до следующей стадии визуала дойдёт.
ronniko
> Рендер на одном треде или можно в несколько тредов ?
На нижнем уровне, тот что дёргает вулканские функции, многопоточности сейчас нет из за отсутствия в этом необходимости - 30000 дроуколлов уходит менее чем за 1мс. Но при необходимости можно легко добавить.
На уровне генерации команд после куллинга и сортирвоки многопоточность есть. Сортировка разных групп выполняется параллельно, каждая делится на группы по 256 примитивов и генерация (запись DrawStream'ов) идёт многопоточно, занимает 1-2 мс.

#4
9:14, 28 янв 2026

Добавлен достаточно базовый звук на OpenAL, из форматов поддерживается исключительно ogg vorbis, другие не планируются. Сборщик ресурсов умеет конвертировать из flac и wav, требуется ffmpeg в системе. В планах по звуку управление источниками по приоритетам и расстоянию чтобы сцена могла содержать сколько угодно источников звука. И шины, чтобы группировать звуки и управлять ими как группами.
Так же перевёл на динамический рендеринг (VK_KHR_dynamic_rendering) и поднял базовую версию Vulkan до 1.3, поскольку на мобилках работать не намерен. Чтобы динамический рендеринг можно было использовать без особого геммороя пришлось написать базовый рендер граф. Умеет ничего кроме проставления барьеров.

#5
9:31, 28 янв 2026

без bindless

ну это ты зря.

#6
10:22, 28 янв 2026

ronniko
> ну это ты зря.
Я не вижу смысла особого в текущий момент, у меня узкого места тут нет. Возможно будет иметь смысл в будущем если я захочу код радикально упростить или в сторону gpu-driven поехать.

#7
16:11, 28 янв 2026

Движок Xi и миску риса этому господину

#8
16:45, 28 янв 2026

aliskda
А кошка-жена где?

#9
13:42, 8 мар 2026

Движок очень сильно переделал изнутри, в частности улучшил разделение между частями, добавил что-то похожее на рендерграф, сверху добавил блум. Текстуры теперь bindless, софтварный коммандный буффер удалён. Какие ресурсы ещё надо бндить - те бинлятся через VK_KHR_push_descriptor что вроде бы есть более-менее везде. Шейдера теперь на GLSL.

#10
15:05, 8 мар 2026

mr_ix
Кошки жены нет, но есть кот-бездельник-зассанец, возьмешь на попечение?

#11
18:03, 8 мар 2026

nes
Своего достаточно.

#12
21:09, 8 мар 2026

mr_ix
> Добавлен достаточно базовый звук на OpenAL, из форматов поддерживается исключительно ogg vorbis, другие не планируются.
Погугли аудиоформат opus. Просто ради интереса.

#13
21:45, 8 мар 2026

чесапикское лето
> аудиоформат opus
В курсе про его существование, не хочу использовать.

ФлеймФорумПроЭкты