
Vulkan PostFX
Experimental VPFX shader pack loader and post-processing framework for Minecraft’s modern Vulkan-based rendering path.
Нет описания изменений
Vulkan PostFX 1.15.1
This update introduces the first-generation VPFX in-game UI.
The old pack selection experience has been replaced with a cleaner Reese-style VPFX settings screen. This makes pack switching, backend inspection, reload testing, and debugging much easier while reducing the amount of screen space taken by large vanilla-style buttons.
Added
-
Added the first-generation VPFX settings UI.
-
Added a new Reese-style VPFX pack/settings screen.
-
Added tabbed VPFX pages:
- Packs
- General
- Backend
- Debug
- Developer
- About
-
Added a compact VPFX pack browser.
-
Added pack status display, including source, backend hint, pass count, and target count.
-
Added backend status display for the active runtime backend.
-
Added native direct / PostChain runtime state visibility in the UI.
-
Added fallback reason and failed effect information to the UI state snapshot.
-
Added
VpfxUiStatefor UI-facing runtime snapshots. -
Added
VpfxUiServiceas a UI facade for reading VPFX state and submitting UI requests. -
Added first-pass tooltip support for UI rows and buttons.
-
Added compact action buttons for Apply, Reload, and Done.
-
Added paged pack listing for cleaner navigation when multiple VPFX packs are available.
-
Added a 26.2 snapshot-compatible screen bridge for opening and closing VPFX screens more safely across unstable mappings.
Improved
- Improved the VPFX pack selection workflow.
- Improved visibility of the currently active VPFX pack.
- Improved visibility of the active backend.
- Improved development ergonomics when testing multiple VPFX packs.
- Improved UI readability by replacing the old large-button layout with a cleaner custom layout.
- Improved diagnostics visibility for broken or fallbacking VPFX packs.
- Improved separation between UI code and runtime code.
Changed
- F7 now opens the new VPFX settings / pack browser experience.
- Pack selection is now handled through the new VPFX UI.
- Runtime and pack information is now collected through a UI snapshot layer before being rendered.
- VPFX settings are now organized into category pages instead of a flat button list.
Notes
This is the first generation of the VPFX UI.
The goal of this version is to establish a cleaner in-game control surface for VPFX development and testing. The UI is not final yet, and more polish will be added in later versions.
Future UI work may include:
- more complete tooltips
- better pack detail panels
- clearer native compatibility diagnostics
- more developer/debug controls
- visual polish
- improved responsive layout behavior
- better localization coverage
Vulkan PostFX is still experimental. The native runtime, VPFX pack format, and UI may continue to change as the project evolves.
-
Vulkan PostFX 1.15.0 — Native & Shadow Stabilization
Highlights
VPFX 1.15.0 focuses on stabilizing the new native rendering path and fixing several long-standing shadow artifacts. This release improves shader pack switching, native backend selection, shadow depth handling, and terrain shadow receiver logic.
Added
-
Added native-first shader pack selection.
- VPFX now prefers native-compatible external VPFX packs when available.
- Unsupported packs can still fall back to the Minecraft PostChain backend.
-
Added support for native shadow depth inputs.
- Native pipelines can now recognize
vulkanpostfx:shadow_depthandminecraft:shadow_depth.
- Native pipelines can now recognize
-
Added support for
use_depth_bufferadmission in native graph validation.- Valid scene/depth target usage is no longer rejected too early.
-
Added configurable diagnostic throttling options for native and shadow logs.
-
Added default in-world hard resource reload for development builds.
- Shader pack switching inside a world is now much easier during testing.
Changed
-
Reworked terrain shadow receiver logic.
- Replaced unstable screen-derivative receiver normal estimation.
- Replaced unreliable direct
Normalattribute usage. - Added a stable axis/grid-based receiver mask for block surfaces.
-
Reduced shadow artifacts on vertical block faces.
- Vertical surfaces that should not receive strong parallel-light shadows are now filtered more safely.
-
Reduced excessive native runtime and shadow diagnostic logging.
- Legacy NR-1C / NR-1F diagnostic output is now silent by default.
- Shadow pass and shadow sync logs are throttled by default.
-
Improved failed-pack warning behavior.
- Failed external pack warnings are no longer spammed every frame.
-
Improved shader pack reload behavior in-world.
- Development workflow is smoother when repeatedly changing VPFX ZIP packs.
Fixed
- Fixed shadow/light behavior appearing to rotate with the player camera.
- Fixed excessive striping on vertical faces perpendicular to the sun/moon movement plane.
- Fixed
use_depth_buffer=truecausing valid VPFX packs to be rejected from native admission. - Fixed repeated warning spam when an external VPFX pack was marked as failed.
- Fixed old builtin/default configuration behavior that could leave users stuck on the Builtin Debug Pack.
- Fixed native backend selection not being obvious when external VPFX packs were available.
Developer Notes
- The current stable terrain shadow receiver strategy is axis/grid based.
- VPFX no longer relies on screen-space
dFdx/dFdynormals for terrain shadow receiver masking. - VPFX also does not yet implement the full Iris/Sodium-style extended terrain vertex normal pipeline.
- Native multi-pass execution and Showcase pack support continue to be developed.
- Entity and player shadows remain a later-stage task.
Recommended Test Points
- Test vertical walls under sun and moon lighting.
- Test rotating the camera while observing terrain shadows.
- Test F7 shader pack switching inside a loaded world.
- Test native-compatible VPFX packs with scene depth and shadow depth inputs.
-
Vulkan PostFX 1.14.1 — Stability & Shadow Tuning
This is a stability-focused update for Minecraft 26.2-rc2.
Added
- Added safer VPFX shader pack auto-selection behavior.
- Added configurable sun/moon shadow tuning through JVM properties.
- Added throttled shadow diagnostics to reduce log spam.
Changed
- Improved sun/moon primary light selection near sunset and moonrise.
- Moonlight shadows are now much weaker by default.
- Shadow intensity now fades more smoothly during light transitions.
/vpfx reload autois safer in-world and avoids unnecessary hard resource reloads.
Fixed
- Fixed cases where VPFX could get stuck on the built-in invert debug effect.
- Fixed fallback behavior when external VPFX pack loading fails.
- Fixed excessive per-frame shadow pipeline logging.
- Fixed sunset/moonrise shadow flickering caused by sun/moon light source fighting.
Notes
- Native VPFX runtime work is still experimental.
- Entity shadows and player shadows are not yet part of this release.
- If a shader pack fails to load, VPFX should fall back to vanilla rendering instead of disrupting the world.
Shadow tuning properties
Advanced users can tune shadow behavior with:
-Dvulkanpostfx.shadow.moonMaxIntensity=0.10 -Dvulkanpostfx.shadow.baseDarkness=0.42 -Dvulkanpostfx.shadow.logIntervalFrames=300These are optional and mainly intended for testing.
Нет описания изменений
Vulkan PostFX — Minecraft 26.2 Pre-Release 2 Compatibility Update
This release updates Vulkan PostFX for Minecraft 26.2 Pre-Release 2 and continues stabilization work for the experimental VPFX Native Runtime.
Highlights
- Added Minecraft 26.2 Pre-Release 2 compatibility.
- Added NR-1F-C.2 user shader
RenderPipelinecache dry-run. - Added pipeline cache diagnostics for user shader native pipeline creation.
- Fixed invalid runtime shader
ResourceLocationconstruction. - Split vertex and fragment shader runtime locations.
- Improved fallback logging for user shader pipeline creation.
- Resource reload now clears cached user shader pipelines safely.
Native Runtime Status
The VPFX Native Runtime path remains experimental and opt-in.
This release can create and cache a user shader
RenderPipelinein dry-run mode, but it still does not execute the user shader draw path.Current behavior:
- User shader
RenderPipelinecreation: enabled for dry-run validation - User shader native draw: disabled
- Actual draw pipeline: built-in passthrough
- External PostChain skip behavior: unchanged
- Native backend default state: disabled
Tested
./gradlew clean build- Client startup
- In-game native runtime execution path
- Built-in passthrough draw
- User shader
RenderPipelinecreation dry-run - Resource reload cache invalidation
Notes
This update does not add multi-pass native rendering, custom native targets, scene depth native access, shadow depth native access, or VPFX schema changes.
Vulkan PostFX — 26.2 Pre-Release 1 Compatibility Update
This release adds compatibility for Minecraft 26.2 Pre-Release 1.
Changes
- Updated project configuration for Minecraft 26.2 Pre-Release 1.
- Updated Gradle properties and dependency targets.
- Rebuilt against the latest pre-release environment.
- Verified that the mod loads correctly in-game.
- Confirmed that core post-processing functionality works as expected.
Testing
The update has been tested successfully with Minecraft 26.2 Pre-Release 1. Client startup, mod loading, and core rendering functionality were all verified.
Notes
Vulkan support is still experimental in the Minecraft 26.2 cycle, so additional updates may be required for later pre-releases, release candidates, or the final release.
Vulkan PostFX 1.12.0-alpha for Minecraft 26.2 Snapshot 8
Highlights
- Ported to Minecraft 26.2 Snapshot 8.
- Kept VPFX Native Runtime experimental path available on Vulkan.
- Verified builtin native fullscreen passthrough diagnostic path.
- Verified external PostChain skip in native diagnostic mode.
- Added user shader resolve / preprocess dry-run.
- Added user shader pipeline planning / hash dry-run.
Native Runtime Status
The VPFX Native Runtime is still experimental and opt-in.
Currently verified:
- Builtin native fullscreen passthrough draw
mainTarget -> transientColorcopy- external PostChain skipped after successful native diagnostic draw
- user shader source resolve / preprocess dry-run
- user shader pipeline planning dry-run
Not supported yet:
- user shader native draw
- multi-pass native graph execution
- custom native targets
- scene_depth / shadow_depth native inputs
- compute shaders
Snapshot 8 Note
Minecraft 26.2 Snapshot 8 defaults to OpenGL and marks Vulkan as experimental.
Vulkan PostFX native runtime testing requires the Vulkan graphics backend.
If you want to test VPFX native runtime features, manually select Vulkan in the Graphics API setting.Vulkan PostFX 1.11.0
This release introduces the first experimental VPFX Native Runtime milestone.
Highlights
- Added VPFX Native Runtime v0 skeleton.
- Added VPFX v2 runtime roadmap documentation.
- Added native runtime dry-run support checks.
- Added native fullscreen pipeline planning.
- Added transient render target planning and lifecycle validation.
- Added
mainTarget -> transientColorcopy validation. - Added the first builtin native fullscreen passthrough draw path.
- Added opt-in diagnostic mode that can skip the external PostChain path after a successful builtin native passthrough draw.
Native Runtime Status
The native runtime is still experimental and opt-in only.
Current supported native diagnostic path:
minecraft:main -> copy to transientColor -> builtin fullscreen passthrough native draw -> minecraft:mainThis is currently limited to:
- single-pass native-v0-compatible graphs
- builtin passthrough shader only
- no user shader native execution
- no multi-pass
- no custom targets
- no scene_depth / shadow_depth native inputs
- no compute shaders
Verified
./gradlew build- Minecraft 26.2 Snapshot 7 startup
- VPFX Minimal Showcase loading
- native runtime execute flag
- native diagnostic draw succeeded
- external PostChain skipped in diagnostic mode
- fallback backend remains available
- no black screen / no crash observed during local testing
Notes
- The default backend is still
minecraft_postchain. - Native runtime is not enabled by default.
- User VPFX shaders are not executed by the native runtime yet.
- This release is an experimental milestone for testing native runtime infrastructure.
Vulkan PostFX 1.10.0
This release ports Vulkan PostFX / VPFX to Minecraft 26.2 Snapshot 7.
Changed
- Updated target Minecraft version to
26.2-snapshot-7. - Updated Fabric Loader / Fabric API target for Snapshot 7.
- Ported render-stage mixins to the new Snapshot 7 render method signatures.
- Revalidated VPFX v1 alpha on Snapshot 7.
- Kept
minecraft_postchainas the current VPFX execution backend.
Verified
- VPFX Minimal Showcase F8 loading
minecraft:scene_colorexternal target bindingsampler_name = "In"/InSamplercompatibility- External pack failure diagnostics
- Broken VPFX pack fallback behavior
- VPFX validation smoke tests
- VPFX runtime materialization smoke tests
Notes
VPFX v1 remains alpha.
The current execution backend is still Minecraft PostChain.
Native VPFX runtime is not implemented yet.
Compute shaders are still unsupported.
Shadow depth support remains experimental.- Updated target Minecraft version to
Vulkan PostFX 1.9.2
Added
- Added VPFX failure diagnostic report.
- External VPFX pack failures now write:
run/vulkanpostfx_runtime/diagnostics/latest-vpfx-error.txt - Diagnostic reports include:
- timestamp
- pack name / external post effect id
- backend id and capabilities
- failure stage
- exception class and message
- fallback state
- stack trace
- Added VPFX troubleshooting guide:
docs/vpfx-troubleshooting.md
Improved
- External VPFX failures are now easier to diagnose from user reports.
- Diagnostic write failures are logged as warnings and do not crash the game.
- README now links to the VPFX troubleshooting guide.
Notes
VPFX v1 remains alpha.
The current execution backend is stillminecraft_postchain.Vulkan PostFX 1.9.1
Fixed
- Improved failure handling for external VPFX post chains.
- External VPFX pack execution failures are now caught during both:
PostChain.addToFrame(...)- frame graph execution
- Fixed a state issue where an internally failed external VPFX chain could still be marked as successfully applied.
- Failed external VPFX packs are now marked unavailable for the current runtime session.
- When an external VPFX pack fails, Vulkan PostFX now falls back to vanilla rendering instead of allowing invalid pipelines to crash the client.
- Preserved
minecraft:scene_colorexternal target support for theminecraft_postchainbackend. - Preserved
sampler_name = "In"/InSamplercompatibility for VPFX Minimal Showcase.
Notes
This is a stability patch for VPFX v1 alpha.
VPFX v1 remains experimental, and the current backend is still Minecraft PostChain.Vulkan PostFX 1.9.0
Highlights
Vulkan PostFX 1.9.0 introduces VPFX v1 alpha, a new standardized shader pack / post-processing pack format for declaring pack metadata, capabilities, render graph structure, shader paths, and runtime resources.
This release focuses on VPFX infrastructure rather than new visual effects. It adds the pack format, validation pipeline, runtime materialization tests, backend abstraction, test packs, and authoring documentation.
Added
- Added VPFX native pack format v1 alpha.
- Added
pack.jsonmanifest parsing and validation. - Added VPFX graph parsing and validation.
- Added pass
id/debug_labelsupport for clearer diagnostics. - Added non-
post/shader path support.- Shader references now use
<namespace>:<path>. - Zip entries are resolved as
shaders/<path>.vshandshaders/<path>.fsh.
- Shader references now use
- Added shader include preprocessing.
- Supports
#include "...". - Rejects
..path traversal. - Detects recursive include cycles.
- Supports
- Added VPFX validation smoke test.
- Added VPFX runtime materialization smoke test.
- Added
positive_minimalminimal VPFX test pack. - Added multiple
negative_*test packs for validator coverage. - Added explicit VPFX runtime backend abstraction:
VpfxRuntimeBackendVpfxRuntimeBackendCapabilitiesVpfxPostChainBackend
ActivePostEffectBridgenow materializes VPFX packs through the explicit runtime backend abstraction.- Added VPFX v1 pack format documentation.
- Added VPFX testing documentation.
- Added VPFX minimal pack authoring guide.
- Added known issues documentation.
Improved
- VPFX graph validation now checks:
- undeclared output targets
- missing input targets
- undeclared texture inputs
- self read/write passes
- missing final output to
minecraft:main - future target dependencies
- Runtime materialization now runs through the explicit
minecraft_postchainbackend. - Backend information is now visible in runtime/test logs.
- VPFX documentation now describes the current alpha boundaries, test workflow, and known limitations.
- The minimal example pack uses
composite/finalto verify that VPFX no longer depends on the legacypost/path assumption.
Known Limitations
- VPFX v1 is still an alpha spec.
- The current execution backend is still Minecraft PostChain.
- The native VPFX runtime is not complete yet.
- Compute shaders are not supported.
shadow_depthis experimental.- Iris / Sodium compatibility is not guaranteed.
- This build primarily targets Minecraft 26.2 snapshot / Fabric.
- VPFX schema may still change during the alpha period.
For Shader Pack Authors
Start with:
docs/vpfx-pack-format-v1.mddocs/vpfx-authoring-minimal-pack.mddocs/vpfx-testing.md
A minimal VPFX pack contains:
pack.json post_effect/main.json shaders/composite/final.vsh shaders/composite/final.fshVPFX shader references use:
<namespace>:<path>and resolve to:
shaders/<path>.vsh shaders/<path>.fshv1.8.1
Added
- negative_missing_pack_json test case: verifies tryLoad() returns null for zips without pack.json
Fixed
- VpfxPackValidationSmokeTest: three-tier judgment logic
- missing_pack_json: null = PASS (code=NOT_VPFX)
- positive_*: non-null = PASS, null/exception = FAIL
- other negative_*: VpfxPackLoadException = PASS, null/success = FAIL
I've rewrite shadow renderer, we now have more stable shadows.
VulkanPostFX 1.6.0+mc26.2-snapshot2-2026-04-29
This update fixes and stabilizes the shadow rendering pipeline for Minecraft 26.2 Snapshot 2 on the Vulkan backend.
Added
- Working shadow depth generation.
vulkanpostfx:shadow_depthinjection into the post-processing chain.ShadowDepthSampleraccess for external shader packs.- Dedicated terrain shadow pass support.
- Debug/probe support for validating shadow depth output.
Fixed
- Fixed shadow depth not being written correctly.
- Fixed post effects not receiving usable shadow depth data.
- Fixed reversed-Z depth handling for the Vulkan shadow pass.
- Fixed depth clear / depth compare mismatch in the shadow pipeline.
- Fixed custom shadow terrain pipeline issues that prevented valid caster submission.
Changed
- Reworked shadow pass state setup for the Vulkan backend.
- Improved shadow depth validation workflow.
- Improved internal shadow pass logging and debugging behavior.
Notes
This is primarily a shadow pipeline repair release. Projection tuning, bias, filtering, and final visual polish will continue in later versions.
Still fixing shadow render calculate problem.
VulkanPostFX v1.5.1
Overview
Still solving sun angle calculate problem.
VulkanPostFX v1.5.0
Overview
This release marks the transition from a runtime validation prototype to a practical authoring-ready VPFX pipeline.
The VPFX Native Pack format is now capable of:
- Loading textures from ZIP packs
- Binding them into PostFX passes
- Sampling them reliably inside shaders
This version introduces the first reference texture workflow, enabling authors to build real post-processing effects (LUT, grain, vignette) without relying on legacy shader pipelines.
Key Features
1. VPFX Native Texture Binding (First Fully Working Version)
-
pack.jsonnow supports atexturessection -
Declared textures are:
- Extracted from ZIP packs
- Materialized into runtime resource packs
- Registered via
vpfx/textures.json - Bound into PostChain as
TextureInput
Supported features:
- Linear / nearest filtering
- Custom texture namespace isolation
- Stable runtime binding via logical texture names
2. Runtime Texture Materialization Pipeline
A complete pipeline has been implemented:
pack.json (textures) → runtime textures.json → runtime asset generation → TextureInput injection → shader sampler bindingThis ensures:
- No direct ZIP streaming during rendering
- Full compatibility with Minecraft resource system
- Deterministic reload behavior
3. Reference Texture Pack (Authoring Baseline)
A new VPFX Reference Textures Pack v1 is introduced as a minimal working example.
It demonstrates:
- LUT-based color grading
- Film grain overlay
- Vignette masking
This pack is intended as:
- A starting point for shader authors
- A validation baseline for texture input behavior
- A canonical example for documentation
4. Stable External ZIP PostChain Execution
- External PostFX chains can now be loaded from ZIP packs
- Fully integrated with runtime resource reload
- Safe switching via debug key (F8)
5. Improved Debug & Logging
-
Texture materialization logs now include:
- Runtime path
- Resolution
- Filtering mode
-
PostChain selection and activation clearly logged
-
Runtime texture manifest generation is traceable
Fixes
- Fixed invalid fullscreen vertex shader (removed dependency on external vertex attributes)
- Fixed missing
texCoordvarying between vertex and fragment shaders - Fixed PostFX pipeline crashes caused by shader interface mismatch
- Fixed incorrect shader compatibility assumptions with Mojang PostPass system
- Fixed incorrect runtime capability expectations for shadow depth
- Improved safety of runtime texture binding path
Known Limitations
shadow_depthis currently a mirrored main depth buffer (not a true shadow map)- No multi-pass graph optimization yet
- No compute shader support
- Texture sampling is limited to PostFX passes (no material pipeline integration)
How to Use (Reference Texture Pack)
1. Install the Pack
Place the ZIP file into:
run/shaderpacks/
2. Set Active Pack
Edit the config file:
run/config/vulkanpostfx.jsonSet:
{ "active_pack_id": "vpfx_reference_textures_v1" }
3. Launch & Toggle
- Start the game
- Press F8 to enable/disable the VPFX PostChain
4. Expected Visual Result
- Slightly warmer color tone (LUT)
- Subtle film grain
- Mild vignette at screen edges
If you see:
- Strong color shift → LUT too aggressive
- Heavy dark corners → vignette too strong
→ Adjust shader parameters or replace textures.
Authoring Notes
Texture Declaration (pack.json)
"textures": { "ColorLut": { "path": "textures/lut/day_grade.png", "filter": "linear" } }
Shader Usage
uniform sampler2D ColorLutSampler;Sampler naming rule:
sampler_name + "Sampler"
Post Effect Input
{ "sampler_name": "ColorLut", "texture": "ColorLut" }
Breaking Changes
- Non-VPFX ZIP packs are no longer accepted
pack.jsonwithformat_versionis now required- Old compatibility paths (Iris / OptiFine style) are fully removed
Summary
v1.5.0 is the first version where:
- VPFX is no longer just a loader
- It becomes a usable authoring platform
This release establishes:
- A stable texture pipeline
- A reproducible runtime model
- A clear path toward advanced PostFX features
Next focus:
- Multi-pass graph expansion
- Proper shadow map support
- Built-in uniform system
- Authoring documentation (Wiki)
Vulkan PostFX 1.4.0 — VPFX Native Pack Format v1 Update
This update moves the project onto the new VPFX native pack pipeline.
Added
- Added support for VPFX Native Pack Format v1 as the primary shader pack format.
- Added native
pack.jsonmanifest parsing for VPFX packs. - Added native
post_effect/main.jsongraph parsing for VPFX packs. - Added validation for VPFX graph structure, runtime capabilities, and shader resource references.
- Added native ZIP pack discovery through the VPFX loading path.
- Added runtime materialization for VPFX ZIP shader assets.
- Added runtime loading for VPFX post-effect graphs from external ZIP packs.
Changed
- Switched external ZIP shader pack discovery to the new VPFX-native loading path.
- Updated the external pack activation flow so VPFX packs can now be selected directly from config and loaded as the active pack.
- Moved the pack pipeline away from the previous wrapper-style manifest assumptions toward a stricter native format.
Fixed
- Fixed the issue where external packs could load through the old path but were not yet attached to the new native pack standard.
- Fixed ZIP pack selection so valid VPFX packs are now discovered, selected, materialized, and loaded through the main runtime path.
- Fixed external PostChain activation for VPFX packs loaded from ZIP resources.
- Fixed runtime external target expansion so
vulkanpostfx:shadow_depthis available to external post chains. - Fixed runtime PostChain bundle injection for the custom shadow depth target.
Runtime Status
The runtime now successfully:
- parses the VPFX graph,
- loads a VPFX native ZIP pack,
- selects the configured external pack,
- materializes ZIP shader assets into the runtime namespace,
- loads the external
post_effect/main.json, - resolves the external PostChain,
- and injects the runtime shadow depth target during execution.
Notes
- This release establishes the native VPFX pack standard as the main external pack path.
- VPFX is a native format for this project and is not intended to be an OptiFine or Iris compatibility layer.
- The current release is focused on native pack loading, validation, and execution bring-up.
- Visual quality and shadow behavior will continue to improve in later updates.
Known Limitations
- This is still an experimental native-pack milestone rather than a final visual-complete shader release.
- Logging is currently verbose in some runtime paths and may be reduced in future updates.
- The project is now standardized around VPFX-native packs, so older non-VPFX pack layouts are not the target path going forward.

