VPFX Community Quick Start
VPFX, also known as Vulkan PostFX, is an experimental post-processing and shadow pipeline for the Minecraft Fabric client.
The goal of VPFX is not to ship only one fixed visual style. The goal is to provide a runtime where external VPFX shaderpacks can be loaded, tested, shared, and improved by the community.
VPFX now has a working foundation for external shaderpacks, post-processing passes, world shadow maps, shadow_depth, terrain shadows, entity shadows, player shadows, block entity shadows, and an in-game shaderpack selection GUI.
This means the project is ready to move beyond “players waiting for updates.”
Players can start testing. Pack authors can start writing.
1. Who is this for?
VPFX currently welcomes two types of community participation:
1. Players / testers2. Shaderpack authors / pack creatorsThe VPFX core runtime is still maintained by the main project.
Community members are not expected to modify the Java renderer, Mixins, runtime loader, or shadow pipeline.
2. For Players and Testers
You do not need to know GLSL, rendering pipelines, shadow matrices, or shader programming.
You can help by:
Installing VPFXTesting VPFX shaderpacksTaking screenshots or videosReporting visual issuesReporting crashesTesting performanceTrying different hardware and settingsGiving feedback to pack authorsGood player feedback is extremely valuable. A clear screenshot, a short video, or a reproducible bug report can help improve VPFX much faster than vague comments like “it does not work.”
3. For Shaderpack Authors
Shaderpack authors can create external VPFX packs without modifying the VPFX mod itself.
You can write:
Post-processing effectsTone mappingColor gradingVignette effectsBloom-style effectsDebug shaderpacksShadow receiver effectsCinematic showcase packsVPFX packs can use runtime-provided resources such as scene color, scene depth, and shadow depth, depending on what the pack declares and what the runtime supports.
The recommended first step is not to write a complex shadow shader.
Start with a minimal color post-processing pack, make sure it loads, then gradually move into depth and shadow features.
4. What VPFX is not
VPFX is not currently intended to be a full Iris replacement.
VPFX is also not an OptiFine shaderpack compatibility layer. Existing OptiFine or Iris shaderpacks should not be expected to run without modification.
A better way to describe VPFX is:
An experimental external post-processing and shadow-pack platform for Minecraft Fabric.VPFX packs should be written specifically for VPFX.
5. Player Quick Start
Step 1: Install VPFX
Install VPFX like a normal Fabric client mod.
Basic setup:
1. Install Fabric Loader.2. Install VPFX.3. Launch Minecraft.4. Enter the game.VPFX uses the Minecraft shaderpacks/ folder for external VPFX packs.
Step 2: Install a VPFX shaderpack
Place the VPFX shaderpack .zip file into:
.minecraft/shaderpacks/Important:
VPFX shaderpacks are not the same as OptiFine or Iris shaderpacks.A valid VPFX pack zip should contain pack.json at the root of the zip.
Correct:
my_vpfx_pack.zip├─ pack.json├─ post_effect/│ └─ main.json└─ shaders/ └─ composite/ ├─ final.vsh └─ final.fshIncorrect:
my_vpfx_pack.zip└─ my_vpfx_pack/ ├─ pack.json ├─ post_effect/ └─ shaders/If pack.json is hidden inside an extra folder, VPFX may not detect the pack correctly.
Step 3: Select a pack in-game
Use the VPFX in-game shaderpack menu.
Default controls:
F7 - Open the VPFX shaderpack menuF10 - Reload the current VPFX packUseful commands:
/vpfx list/vpfx reload/vpfx reload auto/vpfx reload builtin/vpfx offCommand notes:
/vpfx listLists detected VPFX packs.
/vpfx reloadReloads the currently selected VPFX pack.
/vpfx reload autoScans the shaderpacks folder and tries to load an available external pack.
/vpfx reload builtinLoads the built-in VPFX debug or showcase pack.
/vpfx offDisables VPFX and returns to the vanilla rendering path.6. How to Report Bugs
When reporting a bug, please include as much useful information as possible.
Recommended bug report format:
Minecraft version:Fabric Loader version:VPFX version:Operating system:GPU:CPU:RAM:Shaderpack name:Shaderpack version:World shadows enabled:Entity shadows enabled:Player shadows enabled:Block entity shadows enabled:Screenshot or video:Steps to reproduce:latest.log:Good reports help a lot.
Bad reports are hard to act on.
Example of a useful report:
When using VPFX 1.15.5 with the BSL Tone Shadow Showcase pack, player shadows work, but block entity shadows flicker when I rotate the camera near chests. This happens in a flat world at noon. F9 shadow debug shows the chest depth appearing and disappearing. Log attached.Example of a bad report:
shadows broken7. Shaderpack Author Quick Start
A minimal VPFX pack looks like this:
minimal_vpfx_pack/├─ pack.json├─ post_effect/│ └─ main.json└─ shaders/ └─ composite/ ├─ final.vsh └─ final.fshWhen zipped, pack.json must be at the root.
Correct zip layout:
minimal_vpfx_pack.zip├─ pack.json├─ post_effect/main.json└─ shaders/composite/final.vsh└─ shaders/composite/final.fsh8. Minimal pack.json
pack.json describes the pack.
Example:
{ "format_version": 1, "pack_id": "example_minimal_pack", "name": "Example Minimal VPFX Pack", "version": "1.0.0", "author": "Your Name", "description": "A minimal VPFX post-processing pack.", "entry_post_effect": "post_effect/main.json", "capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": false, "custom_targets": true, "compute": false }}Recommended rules:
Use lowercase pack IDs.Use only letters, numbers, underscores, hyphens, and dots.Keep the first pack simple.Do not enable shadow_depth in your first test pack.Start with scene color only. Once your pack loads and renders correctly, move on to scene depth and shadow depth.
9. Minimal post_effect/main.json
Example:
{ "targets": {}, "passes": [ { "id": "final_composite", "debug_label": "Final Composite", "vertex_shader": "example_minimal_pack:composite/final", "fragment_shader": "example_minimal_pack:composite/final", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "minecraft:main" } ]}This pass reads:
minecraft:scene_colorThen writes to:
minecraft:mainThe shader reference:
example_minimal_pack:composite/finalmaps to:
shaders/composite/final.vshshaders/composite/final.fsh10. Minimal final.vsh
#version 150
out vec2 texCoord;
void main() { vec2 pos;
if (gl_VertexID == 0) { pos = vec2(-1.0, -1.0); } else if (gl_VertexID == 1) { pos = vec2(3.0, -1.0); } else { pos = vec2(-1.0, 3.0); }
texCoord = pos * 0.5 + 0.5; gl_Position = vec4(pos, 0.0, 1.0);}11. Minimal final.fsh
#version 150
uniform sampler2D InSampler;
in vec2 texCoord;out vec4 fragColor;
void main() { vec4 color = texture(InSampler, texCoord); fragColor = color;}Sampler naming note:
sampler_name: "In"becomes:
uniform sampler2D InSampler;So:
In -> InSamplerColor -> ColorSamplerScene -> SceneSampler12. First simple effect
After your minimal pack works, try a very small color effect:
#version 150
uniform sampler2D InSampler;
in vec2 texCoord;out vec4 fragColor;
void main() { vec4 color = texture(InSampler, texCoord);
float contrast = 1.06; vec3 contrasted = (color.rgb - 0.5) * contrast + 0.5;
vec3 warm = contrasted * vec3(1.04, 0.98, 0.92);
float vignette = 1.0 - smoothstep( 0.48, 1.32, length(texCoord - 0.5) * 1.38 );
fragColor = vec4(warm * vignette, color.a);}This does not use scene depth or shadow depth.
It is a good first test because it only modifies the final image color.
13. About shadow_depth
VPFX provides shadow_depth for shadow-aware packs.
It may contain:
Terrain castersEntity castersPlayer castersBlock entity castersImportant rules:
shadow_depth is not the main camera depth.shadow_depth uses shadow-space depth.shadow_depth uses reversed-Z.shadow_depth is based on shadowOrigin-relative world positions.shadow_depth should be used with VPFX-provided shadow uniforms.Do not assume shadow_depth works like minecraft:scene_depth.
If you are writing your first VPFX pack, do not start with shadow_depth.
Start with scene color, then scene depth, then shadow depth.
A separate VPFX shadow_depth Guide should be used before writing custom shadow receivers.
14. Common mistakes
Pack does not appear
Check:
The zip is inside shaderpacks/.pack.json is at the root of the zip.pack.json is valid JSON.pack_id is valid.The pack is not inside an extra nested folder.Shader is missing
Check:
The shader path uses pack_id:path.The pack_id matches pack.json.The shader files are inside shaders/.Both .vsh and .fsh exist.File names and folder names match exactly.Black screen
Check:
The fragment shader writes fragColor.The sampler uniform name is correct.The final pass outputs to minecraft:main.The pack is not reading from a target before it has been written.Self-read/write issue
Do not read and write the same custom target in one pass.
Bad example:
{ "inputs": [ { "sampler_name": "Temp", "target": "example_pack:temp" } ], "output": "example_pack:temp"}Use separate targets or a ping-pong setup instead.
15. Recommended learning path
For players:
1. Install VPFX.2. Install a VPFX shaderpack.3. Select it with F7.4. Reload it with F10.5. Submit screenshots, videos, and useful bug reports.For pack authors:
1. Create a minimal post-processing pack.2. Modify the final fragment shader.3. Add simple color grading.4. Learn custom targets.5. Learn multiple passes.6. Learn scene depth.7. Learn shadow depth.8. Publish your own VPFX shaderpack.16. Current community goal
The current goal is to build a healthy VPFX pack ecosystem.
We need:
More testersMore screenshotsMore hardware feedbackMore minimal working packsMore tone mapping packsMore debug packsMore shadow experimentsMore showcase packsIf you are a player, start by testing and reporting.
If you are a pack author, start with a minimal post-processing pack.
VPFX is moving from a single mod into a small shaderpack platform.
The next step is community-made packs.