feat(fx): evaluate native Op8 smoke emitters
Docs Deploy / Build and Deploy MkDocs (push) Successful in 33s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 33s
This commit is contained in:
3 files changed
+1389
No files matched your search
@@ -13,6 +13,7 @@ pub mod fx_visual;
|
|||||||
pub mod op7;
|
pub mod op7;
|
||||||
pub mod shadow;
|
pub mod shadow;
|
||||||
pub mod sky;
|
pub mod sky;
|
||||||
|
pub mod smoke;
|
||||||
|
|
||||||
/// Advances the native FX 16-bit-pair random state and returns its new high half.
|
/// Advances the native FX 16-bit-pair random state and returns its new high half.
|
||||||
///
|
///
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -285,6 +285,34 @@ Evaluator типа 2 принимает индекс context явно и учи
|
|||||||
семена отдельных экземпляров лишь детерминированно заменяют process-global
|
семена отдельных экземпляров лишь детерминированно заменяют process-global
|
||||||
состояние и не воспроизводят общий порядок вызовов.
|
состояние и не воспроизводят общий порядок вызовов.
|
||||||
|
|
||||||
|
## Частицы Op8
|
||||||
|
|
||||||
|
`fparkan-fx::smoke` разбирает body Op8, хранит кольцевой пул команды и выдаёт
|
||||||
|
quad-ы с ориентацией к камере для активных слотов. Нативная нормализованная
|
||||||
|
фаза окна ограничивается диапазоном 0–1 и задаёт интервал проверки следующего события;
|
||||||
|
сравнение строгое (`schedule_base + interval < update_clock`). Все события
|
||||||
|
catch-up в одном обновлении проверяются по тому же нормализованному интервалу;
|
||||||
|
после события нативный код продвигает базу расписания интервалом, вычисленным
|
||||||
|
по сырой фазе эффекта, а возраст слота считает по нормализованному интервалу.
|
||||||
|
Когда фаза равна единственной границе окна, деление `0/0` даёт NaN, который
|
||||||
|
нативный unordered-путь сравнения ограничивает нулём.
|
||||||
|
|
||||||
|
Нулевая база расписания служит признаком начального состояния: обновление
|
||||||
|
сохраняет текущую опору эмиттера и базу времени, не создавая частицу. Если
|
||||||
|
первое время равно нулю, следующее обновление повторно захватывает опору. При
|
||||||
|
событии скорость опоры считается от сохранённой позиции до текущей за время
|
||||||
|
от базы расписания; слот смещает сохранённую опору на `скорость * due_interval`.
|
||||||
|
Обновление без событий не переносит сохранённую опору к текущему владельцу.
|
||||||
|
Откат часов корректирует только базу расписания до текущего времени: слоты,
|
||||||
|
опора и три потока случайных
|
||||||
|
чисел не сбрасываются.
|
||||||
|
|
||||||
|
Evaluator принимает отдельные начальные состояния для эмиттера, знаковых
|
||||||
|
отклонений и материала. Переход каждого потока совпадает с общим native LFSR,
|
||||||
|
но эти локальные seed не воспроизводят порядок process-global вызовов игры.
|
||||||
|
Предел 100000 событий catch-up — защитная граница evaluator-а; соответствующего
|
||||||
|
лимита в исследованном native цикле не обнаружено.
|
||||||
|
|
||||||
## Что остаётся за владельцем
|
## Что остаётся за владельцем
|
||||||
|
|
||||||
`EnvironmentSystem` не извлекает камеру из renderer, не разрешает материалы
|
`EnvironmentSystem` не извлекает камеру из renderer, не разрешает материалы
|
||||||
|
|||||||
Reference in new issue
Block a user