Class PostProcess
Full screen effects applied to a rendered frame: bloom, a colour grade, vignette and film grain. It is what turns a correctly lit scene into one that looks shot through a lens.
The scene is drawn into an offscreen image, the effects are applied, and
the result is drawn to the screen. Touch controls are drawn afterwards and
are never graded. A device that cannot render offscreen
(GpuCapabilities.isPostProcessSupported is false) draws the scene
directly and ignores this.
GameView view = new GameView() {
protected void update(double deltaSeconds) {
}
};
view.setPostProcess(new PostProcess()
.setBloom(0.75f, 0.6f)
.setGrade(1.08f, 0.9f, 0xff0e1a24, 0xfffff1dc)
.setVignette(0.35f)
.setGrain(0.04f));
All effects start off, so new PostProcess() changes nothing but the cost
of the extra pass.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe texture name a custom pass reads the frame from. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddPass(ShaderMaterial pass) Adds a full screen effect of your own, written with the samecom.codename1.gpu.shader.ShaderNodegraphs as a material.Removes every passaddPassadded.floatReturns the ambient occlusion strength.floatReturns the ambient occlusion radius in pixels.floatReturns the bloom intensity, 0 when bloom is off.floatReturns the bloom brightness threshold.floatReturns the chromatic aberration amount.Returns the lookup table, or null.floatReturns the lookup table strength, 0 when there is no table.floatReturns the contrast multiplier.floatReturns the widest depth of field blur in pixels.floatReturns the focus distance.floatReturns the god ray strength.floatgetGrain()Returns the grain amount.intReturns the highlight tint as ARGB.floatReturns the outline strength.intReturns the outline colour.getPass(int index) Returns a custom pass.intReturns how many custom passes there are.floatReturns the saturation multiplier.intReturns the shadow tint as ARGB.floatReturns the vignette amount.booleanisBloom()Returns true if bloom is on.booleanTrue when an effect reads the depth of the frame: ambient occlusion, depth of field or outline.booleanisFxaa()Returns true when FXAA is on.setAmbientOcclusion(float strength, float radiusPixels) Darkens creases and contact points from the depth of the frame (screen space ambient occlusion), so objects sit on the ground instead of floating over it.setBloom(float threshold, float intensity) Makes bright parts of the frame glow into their surroundings.setChromaticAberration(float amount) Splits the colour channels toward the edges of the frame, the fringe of a cheap lens.setColorLut(Texture table, float strength) Maps every colour through a lookup table after the grade, the way a film look is applied in a colour grading tool.setDepthOfField(float focusDistance, float blurPixels) Blurs what is nearer or farther than the focus distance, as a camera lens with a wide aperture does.setFxaa(boolean on) Smooths jagged edges with FXAA, a single full screen pass that finds edges by contrast and blends along them.setGodRays(float strength) Light shafts from the sun: bright parts of the frame (sky, a sunlit wall) are smeared radially from where the sun sits on screen, so they stream past whatever stands in front of it.setGrade(float contrast, float saturation, int shadowTint, int highlightTint) Grades the colour of the frame.setGrain(float amount) Adds moving film grain.setOutline(float strength, int argb) Draws a line where the depth of the frame jumps, around silhouettes and creases, for a toon or ink look.setVignette(float amount) Darkens the corners of the frame.
-
Field Details
-
SCENE_COLOR
The texture name a custom pass reads the frame from.addPassdeclares it on the pass; read it withcom.codename1.gpu.shader.ShaderNode.sceneColor.- See Also:
-
-
Constructor Details
-
PostProcess
public PostProcess()
-
-
Method Details
-
setBloom
Makes bright parts of the frame glow into their surroundings.
Parameters
-
threshold: how bright a pixel must be to glow, from 0 to 1 of its brightest channel; lower glows more of the frame -
intensity: how strong the glow is; 0 turns bloom off
Returns
this post process for chaining
-
-
setGrade
Grades the colour of the frame.
Parameters
-
contrast: 1 leaves it, above 1 deepens shadows and brightens highlights -
saturation: 1 leaves it, 0 is greyscale -
shadowTint: the colour the darkest tones are lifted toward, as ARGB; black leaves them -
highlightTint: the colour the brightest tones are multiplied by, as ARGB; white leaves them
Returns
this post process for chaining
-
-
setVignette
Darkens the corners of the frame.
Parameters
amount: 0 for none, 1 for black corners
Returns
this post process for chaining
-
setGrain
Adds moving film grain.
Parameters
amount: 0 for none; 0.03 to 0.06 reads as film
Returns
this post process for chaining
-
getBloomThreshold
public float getBloomThreshold()Returns the bloom brightness threshold. -
getBloomIntensity
public float getBloomIntensity()Returns the bloom intensity, 0 when bloom is off. -
isBloom
public boolean isBloom()Returns true if bloom is on. -
getContrast
public float getContrast()Returns the contrast multiplier. -
getSaturation
public float getSaturation()Returns the saturation multiplier. -
getShadowTint
public int getShadowTint()Returns the shadow tint as ARGB. -
getHighlightTint
public int getHighlightTint()Returns the highlight tint as ARGB. -
getVignette
public float getVignette()Returns the vignette amount. -
getGrain
public float getGrain()Returns the grain amount. -
setChromaticAberration
Splits the colour channels toward the edges of the frame, the fringe of a cheap lens. Subtle values sell an action camera; strong ones a hit or a glitch.
Parameters
amount: 0 for none; 0.004 to 0.01 is subtle
Returns
this post process for chaining
-
getChromaticAberration
public float getChromaticAberration()Returns the chromatic aberration amount. -
setFxaa
Smooths jagged edges with FXAA, a single full screen pass that finds edges by contrast and blends along them. Cheaper than multisampling and it also smooths edges inside textures and shaders.
Parameters
on: true to smooth
Returns
this post process for chaining
-
isFxaa
public boolean isFxaa()Returns true when FXAA is on. -
setGodRays
Light shafts from the sun: bright parts of the frame (sky, a sunlit wall) are smeared radially from where the sun sits on screen, so they stream past whatever stands in front of it. The sun's position comes from the scene's light and camera each frame; the shafts fade out as the sun leaves the screen or drops behind the camera.
Parameters
strength: 0 for none; 0.3 to 0.8 for visible shafts
Returns
this post process for chaining
-
getGodRays
public float getGodRays()Returns the god ray strength. -
setAmbientOcclusion
Darkens creases and contact points from the depth of the frame (screen space ambient occlusion), so objects sit on the ground instead of floating over it.
Parameters
-
strength: 0 for none; 0.5 to 1 for visible contact shadows -
radiusPixels: how far around each pixel to look, in pixels
Returns
this post process for chaining
-
-
getAmbientOcclusion
public float getAmbientOcclusion()Returns the ambient occlusion strength. -
getAmbientOcclusionRadius
public float getAmbientOcclusionRadius()Returns the ambient occlusion radius in pixels. -
setDepthOfField
Blurs what is nearer or farther than the focus distance, as a camera lens with a wide aperture does.
Parameters
-
focusDistance: the distance from the camera that stays sharp, in world units -
blurPixels: the widest blur, in pixels; 0 turns depth of field off
Returns
this post process for chaining
-
-
getFocusDistance
public float getFocusDistance()Returns the focus distance. -
getDepthOfFieldBlur
public float getDepthOfFieldBlur()Returns the widest depth of field blur in pixels. -
setOutline
Draws a line where the depth of the frame jumps, around silhouettes and creases, for a toon or ink look.
Parameters
-
strength: 0 for none, 1 for solid lines -
argb: the line colour
Returns
this post process for chaining
-
-
getOutline
public float getOutline()Returns the outline strength. -
getOutlineColor
public int getOutlineColor()Returns the outline colour. -
setColorLut
Maps every colour through a lookup table after the grade, the way a film look is applied in a colour grading tool. The table is a 256 by 16 strip of 16 squares: square
bholds blueb / 15, and inside it the column is red and the row (from the top) green, both 0 to 15.ColorLutsbuilds such strips.Parameters
-
table: the lookup strip, or null for none -
strength: 0 keeps the graded colour, 1 uses the table's
Returns
this post process for chaining
-
-
getColorLut
Returns the lookup table, or null. -
getColorLutStrength
public float getColorLutStrength()Returns the lookup table strength, 0 when there is no table. -
isDepthEffects
public boolean isDepthEffects()True when an effect reads the depth of the frame: ambient occlusion, depth of field or outline. -
addPass
Adds a full screen effect of your own, written with the same
com.codename1.gpu.shader.ShaderNodegraphs as a material. The pass'sShaderMaterial.Hook.BASE_COLORgraph is evaluated for every pixel of the frame:ShaderNode.screenUv()is the pixel's place on screen (0,0 top left) andShaderNode.sceneColor(uv)reads the frame as it stands so far. Its own uniforms, textures andShaderNode.time()work as on any material.import com.codename1.gpu.PostProcess; import com.codename1.gpu.shader.ShaderMaterial; import com.codename1.gpu.shader.ShaderNode; PostProcess post = new PostProcess(); ShaderNode uv = ShaderNode.screenUv(); ShaderNode wobble = ShaderNode.sin(uv.y().mul(ShaderNode.f(40f)).add(ShaderNode.time())) .mul(ShaderNode.f(0.004f)); post.addPass(new ShaderMaterial().set(ShaderMaterial.Hook.BASE_COLOR, ShaderNode.sceneColor(uv.add(ShaderNode.vec(wobble, ShaderNode.f(0f))))));Passes run in the order they were added, each reading the one before, and the built-in effects run on the result. The depth based effects (
isDepthEffects) read the depth of the scene, which a pass does not have, so they are left out of a frame with passes. A device that cannot draw offscreen draws the scene without the passes.Parameters
pass: a shader material with aBASE_COLORgraph
Returns
this post process for chaining
-
clearPasses
Removes every pass
addPassadded.Returns
this post process for chaining
-
getPassCount
public int getPassCount()Returns how many custom passes there are. -
getPass
Returns a custom pass.
Parameters
index: 0 for the first pass added
Returns
the pass
-