Repository navigation
Releases: gmrdad82/pfx
Release list
v0.28.1
Fixed
- trace: Sobol shifts each pixel's patterns by a random offset per dimension (Cycles' Cranley-Patterson rotation), so scenes lit by small or narrow lights match PCG's mean (Manfred's workshop: -0.11% before, +0.01% now) with the same noise gain.
- editor: the stored shots follow egui 0.36's tighter rows.
v0.28.0
Added
- trace: Cycles' tabulated Sobol sampler, the default (Sampler::Pcg or PFX_TRACE_SAMPLER=pcg keeps PCG); the same noise in about half the samples.
Changed
- pfx sends no crash reports and writes no job records: pfx-report left the engine and its CLI; a game that wants reports wires its own.
- render: finals take 16 to 64 samples and drafts 6 to 12, PCG's noise at 32 to 128 and 8 to 16; the neutral desk's 4K final traces in 7.9 s of GPU time instead of 15.
- trace: on scenes lit by small or narrow lights Sobol's mean sits up to 0.15% under PCG's (Manfred's workshop: 0.11%, about 0.25/255).
v0.27.0
Added
- trace: ray queries over a TLAS where the adapter offers them (Vulkan, DX12, Metal on Apple Silicon), the software BVH elsewhere; 2.6x faster 4K finals and 2.3x faster drafts on the neutral desk.
- docs: wgpu30.md, the changes an app that uses wgpu or egui directly makes to move with pfx.
Changed
- move to wgpu 30.0.1, naga 30 and egui 0.36.2.
- archive: a pre-release tag such as v1.0.0-rc.1 pins a master like vX.Y.Z, in archive import and render's --rev.
- editor: clear egui's texture deltas once painted.
- editor: the shell's App::ui takes a Ui instead of a Context.
- editor: drop the pgpu play hook.
- trace: cut a dense strip into column pieces before dropping lanes.
- bake: the batch Frame is 176 bytes with the column field.
Moving an app that uses wgpu or egui directly: docs/wgpu30.md.
v0.26.0
Added
- denoise: port Open Image Denoise's RT filter to wgpu compute.
- trace: windows of a larger frame and a per-round adaptive report.
- live: build a plate off the render thread and swap it in.
- gpu: enable VK_EXT_image_drm_format_modifier when the adapter offers it.
- archive: import a master an app made itself.
- ci: lint and build the game crates and the denoiser on macOS.
Changed
- trace: start every trace at 64 lanes, ten times faster on ordinary scenes.
- trace: aim its bands at 10 ms.
- render: denoise finals and drafts; finals stop at 128 samples, drafts at 16.
- ci: run the gate as a parallel matrix, nightly too.
- check every text file out with LF line endings.
Fixed
- gpu: open Vulkan with DRM format modifiers on Linux only, so pfx-gpu builds on macOS.
pfx 0.25.3
pfx 0.25.3
- System ffmpeg. Both kinds of render (
pfx renderand the asset clips) now encode with the ffmpeg onPATHinstead of downloading and unpacking a pinned archive into the machine cache. Install your system's ffmpeg with libx264 and zscale; ffmpeg 9 or later is recommended, since earlier releases write no colour range into the ProRes alpha master. Manifests record the ffmpeg used as{path, version, sha256}in place of the archive'surlandsha256.crates/run/render.tomlkeeps only the moved dependencies, andpfx-runno longer depends on ureq or toml. An oldffmpeg/folder in the cache is still listed bypfx cacheandpfx cache --prunedrops it once it has gone unused for 30 days. - Pacing. The timing a paced slice hands to the next
Turns::addis now kept per thread, so pacers on different threads no longer classify each other's adds. - CI runs on Ubuntu 26.04 with the system ffmpeg installed.
pfx 0.25.2
A patch release: pfx steam stage accepts a game build reached through the tree's own target symlink.
Install the pfx tool with cargo install --locked --git https://github.com/gmrdad82/pfx --tag v0.25.2 pfx, and depend on a crate by the same tag, for example pfx-game = { git = "https://github.com/gmrdad82/pfx", tag = "v0.25.2" }.
What's new
pfx steam stagefollows the tree'stargetlink. A clone that shares warm builds by making itstargetfolder a symlink into a cache writes its binaries inside the tree by name but outside it once resolved, and v0.25.1 refused them. A depot'spathmay now also sit under the folder that the caller's own<tree>/targetlink resolves to, alongside the caller's git tree and theCARGO_TARGET_DIRpfx runs with. A link that holds the caller's tree widens nothing, the manifest itself still has to sit in the tree, and a path outside all of them is refused with a message that names every folder it was checked against (docs/steam.md, "steam.toml").
Notes for callers
- No API changes. A
pfx steam stagethat was refused for a path under its tree'stargetlink now stages; every other refusal is unchanged, and a refusal's message now lists the target link's folder when there is one.
pfx 0.25.1
A patch release: pfx steam stage accepts a game build from a shared cargo target folder.
Install the pfx tool with cargo install --locked --git https://github.com/gmrdad82/pfx --tag v0.25.1 pfx, and depend on a crate by the same tag, for example pfx-game = { git = "https://github.com/gmrdad82/pfx", tag = "v0.25.1" }.
What's new
pfx steam stagestages builds underCARGO_TARGET_DIR. A depot'spathmay now sit in the caller's git tree or in theCARGO_TARGET_DIRthat pfx runs with, so a game built into a shared target folder outside its clone stages without copying its binaries in first. A symlinked target folder is followed by its own name. ACARGO_TARGET_DIRthat holds the caller's tree widens nothing, the manifest itself still has to sit in the tree, and a path outside both is refused with a message that names the target folder (docs/steam.md, "steam.toml").
Notes for callers
- No API changes. A
pfx steam stagethat was refused for a path under itsCARGO_TARGET_DIRnow stages; every other refusal is unchanged.
pfx 0.25.0
The first public release of pfx, a game and render engine in Rust. Earlier versions were developed privately and their tags are not in this repository, so games pin v0.25.0 or later. These notes cover what changed since 0.24.1, the last private release.
Install the pfx tool with cargo install --locked --git https://github.com/gmrdad82/pfx --tag v0.25.0 pfx, and depend on a crate by the same tag, for example pfx-game = { git = "https://github.com/gmrdad82/pfx", tag = "v0.25.0" }. The README covers the rest.
What's new
- Open source under MIT. Every crate declares
license = "MIT". NOTICE.md lists the licence of each font, image and model the repository ships. TRADEMARKS.md keeps the names and logos reserved. The repository also has a code of conduct and a security policy. - Every dependency comes from a public source over https. pfx-scene (the scene format) and pfx-report (the reporting hook) are pinned by their public
v0.1.0tags. - The editor crates are part of the workspace. pfx-editor-style, pfx-editor-shell, pfx-editor-doc, pfx-editor-toml and pfx-editor-viewport live in
crates/editor-*, with their tests and an editor example.pfx-editorandpfx-themeuse them by path, and a game or tool takes them at the same tag as the other pfx crates (docs/editor-crates.md). - Bound text in scenes. A
[text.*]string's{key}tokens are filled at load from a process-wide table (pfx_load::scene::bind,bound,filled).pfx_game::Config::bind_text()binds the game'snameandversionbefore a scene loads, in the game, headless and in<game> edit.pfx edit <project>binds the project's name and its Cargo version. A token with no value stays as written, andpfx bakebinds nothing. - A prefab's text moves with its placement. A prefab's
[text.*]is placed by the placement's world matrix, like its meshes. A scene's own text is unchanged. - The scaffold shows its version.
pfx newputsv{version}under the wordmark in the default scene, in IBM Plex Mono, which ships unmodified with its OFL undercontent/fonts/. - Command-line errors follow clap's form.
pfxand every game's launcher answer input they can't parse the way clap does: clap's wording, oneUsage:line, the--helphint and exit code 2. The answer is coloured in a terminal and plain otherwise (NO_COLOR,TERM=dumb,CLICOLOR=0). A barepfxprints that error rather than the help.pfx helpandpfx -Vwork. Bad values that used to fail at run time are checked before anything starts. The shared code ispfx_core::cli. - Crash reports and job progress go through pfx-report. It is a small hook crate whose every call does nothing. A build from this repository sends no reports and writes no job records, and
pfx --versionsays so on a second line,crash reports: off (this build sends none). The engine's library crates never link it. Theping,jobsandestatefeatures are gone. - The archive root comes from the build.
pfx rendercopies deliberate masters to an archive only whenPITO_ARCHIVEis set, or when the build setPFX_ARCHIVE_ROOT. Masters go to<root>/Masters/pfx/<product>/…, and the catalog is<root>/Masters/catalog.jsonlwithtoolpfx.pfx archive --reindextakes each entry's path from where its manifest sits.pfxre-runs itself in a pinned systemd build slice only when the build setPFX_MACHINE_ENV. Other builds run where they are started. - The input glyph font is named "PITO Input Glyphs" (PostScript
PITOInputGlyphs-Regular). Its glyphs are unchanged. - A public gate.
bin/gateruns formatting, clippy with-D warnings, the build, the unit tests and the repository checks with plain cargo. CI runs it on Rust 1.97.1.
Notes for callers
- Behaviour change: a prefab's
[text.*]used to sit at its ownatin world space. It is now relative to the prefab's placement. - Behaviour change:
pfx editwith no path, and<game> editwith an extra argument in a scaffolded game, exit 2 instead of 1. A launcher's unknown command or flag, and a command's usage error, print clap's shape instead of<game>: no command …and<game> <command>: …. - Gone:
pfx_bench::USAGE,pfx_text::subset::USAGE, and the root package'sping,jobsandestatefeatures. - Added:
pfx_core::cli,pfx_game::Commands::usage(command, shape),pfx_game::Config::bind_text,pfx_load::scene::{bind, bound, filled},pfx_project::Project::version,pfx_text::subset::{parse, Request}andpfx_assets::check. A game that declares an argument-free command calls.usage("<command>", ""), and the scaffold does so foredit. - Moved: the editor crates come from this repository as
pfx-editor-*, at the same tag as every other pfx crate. - Archive: a build without
PFX_ARCHIVE_ROOTarchives only withPITO_ARCHIVEset. The archive's layout isMasters/pfx/…, with the catalog atMasters/catalog.jsonl. crates/run/render.tomlno longer lists the engine's earlier repository name under[[moved]].