API Reference GE Extensions Client Depth of Field PostFX Multi-pass depth-of-field post-processing effect with auto-focus support (vehicle tracking or center raycast) and configurable near/far blur equations.
Multi-pass depth-of-field post-processing effect with auto-focus support (vehicle tracking or center raycast) and configurable near/far blur equations.
Property Value Source lua/ge/client/postFx/dof.luaReturns Module table M Dependencies PFX_DefaultStateBlock, camera system, vehicle system
Function Args Returns Description M.updateDOFSettings- - Reads $DOFPostFx::* vars, applies to PostEffect, enables/disables
Function Args Description setFocalDistdof, distSet manual focal distance (ignored if auto-focus on) setAutoFocusdof, enabledToggle auto-focus mode setDebugModedof, enabledToggle debug visualization setFocusParamsdof, nearBlurMax, farBlurMax, minRange, maxRange, nearSlope, farSlopeConfigure blur curve parameters setLerpDistdof, d0, d1, d2Set CoC distribution weights (small/medium/large blur)
Pass PostEffect Shader Input Output 1. Downsample DOFPostEffectPFX_DOFDownSampleShader$backBuffer + prepass#shrunk (40%)2. Blur Y DOFBlurYPFX_DOFBlurYShader#shrunk$outTex3. Blur X DOFBlurXPFX_DOFBlurXShader$inTex#largeBlur4. Calc CoC DOFCalcCoCPFX_DOFCalcCoCShader#shrunk + #largeBlur$outTex5. Small blur DOFSmallBlurPFX_DOFSmallBlurShader$inTex$outTex6. Final composite DOFFinalPFXPFX_DOFFinalShader$backBuffer + blurs + prepass$backBuffer
All intermediate targets use GFXFormatR16G16B16A16F (half-float).
Vehicle tracking : If player vehicle exists and is in camera frustum, focus on vehicle distance
Center raycast : Fallback - raycast from camera center against static/terrain/vehicle/dynamic masks
Far distance : If nothing hit, use $Param::FarDist
Uses newTemporalSmoothing() with rate 150 for smooth focus transitions
Applied via viewSmoother:getWithRateUncapped()
Bluriness (0-1)
| __(ns,nb) (fe,fb)__
| \ ←near eq far eq→ /
| \ /
| \(ne,0)------(fs,0)/
Depth (0-1)
ns = near blur start nb = near blur max
ne = near blur end fs = far blur start
fe = far blur end fb = far blur max
Near and far blur equations are linear: y = slope * x + bias, evaluated per-pixel.
Constant Type Description $dofEqWorldfloat3 Near blur equation (slope, bias, 0) $dofEqFarfloat3 Far blur equation (slope, bias, 1) $maxWorldCoCfloat Max near blur amount $maxFarCoCfloat Max far blur amount $dofLerpScalefloat4 CoC distribution weights $dofLerpBiasfloat4 CoC distribution biases $isDebugModestring "1" or "0"
Variable Purpose $DOFPostFx::EnableEnable/disable DOF $DOFPostFx::EnableAutoFocusAuto-focus toggle $DOFPostFx::EnableDebugModeDebug visualization $DOFPostFx::BlurMin / BlurMaxNear/far max blur $DOFPostFx::FocusRangeMin / FocusRangeMaxFocus range extents $DOFPostFx::BlurCurveNear / BlurCurveFarSlope of blur curves
Global Type Description DOFPostEffectCallbackstable onAdd and setShaderConsts callbacks
Object Purpose PFX_DefaultDOFStateBlockPoint sampling, z-disabled PFX_DOFCalcCoCStateBlockLinear sampling for CoC calculation PFX_DOFDownSampleStateBlockMixed linear/point for downsample PFX_DOFBlurStateBlockLinear clamped for blur PFX_DOFFinalStateBlockAlpha blend (One, InvSrcAlpha) for composite
-- Enable DOF with auto-focus
local dof = scenetree. findObject ( "DOFPostEffect" )
if dof then
setFocusParams (dof, 0.3 , 0.3 , 50 , 500 , - 5 , 5 )
setAutoFocus (dof, true )
dof : enable ()
end
-- Update from preset
local dofModule = require ( "client/postFx/dof" )
dofModule. updateDOFSettings ()
Based on GPU Gems 3, Chapter 28 (DOF technique).
Disabled by default.
Focus range expands with distance (min/maxRange lerped by normalized focal depth).
The downsample target is 40% resolution (targetScale = "0.4 0.4").
Reference paper: http://developer.nvidia.com/GPUGems3/gpugems3_ch28.html