PixelArtCrt

CRT and LCD display simulation for pixel art. Runs once per screen pixel over a low resolution render texture (see ceramic.PixelArt in CRT mode, which owns the parameters and their documentation).

Techniques borrowed, with their origin:

  • crt-lottes by Timothy Lottes (public domain): Gaussian pixel reconstruction (gaus, horz3, horz5), scanline weights (scan and the three-row sum in main), the four phosphor masks (maskTv, maskAperture, maskVgaStretched, maskVga), the warp curvature and the halo + mask composition in linear light.
  • crtemu by Mattias Gustavsson (MIT or public domain): low resolution pre-blur for the halo (rendered by ceramic.PixelArt, sampled here as bloomTex), the vignette formula, grain and flicker.
  • gba-color by Pokefan531, after hunterk's Color Mangler (public domain): color matrix and luminance applied in linear light; the GBA values live in ceramic.PixelArtPreset.
  • SameBoy LCD shader by LIJI32 (MIT): the idea of splitting a pixel in three RGB subpixels with darker gaps (maskLcd), rewritten.
  • crt-geom by cgwg, Themaister and DOLLS (GPL, no code taken): the idea that the beam widens with brightness (beamScale).
  • Pixel art antialiasing as described by Inigo Quilez, Themaister, Claudio Fernandes and Ben Golus: bilinear interpolation limited to a band one output pixel wide around texel edges (sharpTexel).

Instance Members

shade
warpY(value: Float): Void
Name Type
value Float

shade
warpX(value: Float): Void
Name Type
value Float

shade
vignetteStrength(value: Float): Void
Name Type
value Float

shade
time(value: Float): Void
Name Type
value Float

shade
sharpBand(value: Float): Void
Name Type
value Float

shade
screenRect(x: Float, y: Float, z: Float, w: Float): Void

The filter on screen, in screen pixels: origin in xy, size in zw. Gives each fragment its screen position, so that phosphor masks stay fixed on the screen like the glass of a real tube, whatever the content does (gl_FragCoord is not available on every target)

Name Type
x Float
y Float
z Float
w Float

shade
scanlineStrength(value: Float): Void
Name Type
value Float

shade
resolution(x: Float, y: Float): Void
Name Type
x Float
y Float

shade
quality(value: Float): Void
Name Type
value Float

shade
projectionMatrix(m00: Float, m10: Float, m20: Float, m30: Float, m01: Float, m11: Float, m21: Float, m31: Float, m02: Float, m12: Float, m22: Float, m32: Float, m03: Float, m13: Float, m23: Float, m33: Float): Void
Name Type
m00 Float
m10 Float
m20 Float
m30 Float
m01 Float
m11 Float
m21 Float
m31 Float
m02 Float
m12 Float
m22 Float
m32 Float
m03 Float
m13 Float
m23 Float
m33 Float

shade
outputScale(value: Float): Void
Name Type
value Float

shade
noiseStrength(value: Float): Void
Name Type
value Float

shade
modelViewMatrix(m00: Float, m10: Float, m20: Float, m30: Float, m01: Float, m11: Float, m21: Float, m31: Float, m02: Float, m12: Float, m22: Float, m32: Float, m03: Float, m13: Float, m23: Float, m33: Float): Void
Name Type
m00 Float
m10 Float
m20 Float
m30 Float
m01 Float
m11 Float
m21 Float
m31 Float
m02 Float
m12 Float
m22 Float
m32 Float
m03 Float
m13 Float
m23 Float
m33 Float

shade
maskType(value: Float): Void
Name Type
value Float

shade
maskScale(value: Float): Void
Name Type
value Float

shade
maskLight(value: Float): Void
Name Type
value Float

shade
maskDark(value: Float): Void
Name Type
value Float

shade
mainTex(texture: shade.Sampler2D): Void
Name Type
texture shade.Sampler2D

shade
luminance(value: Float): Void
Name Type
value Float

shade
lcdSubpixelLow(value: Float): Void
Name Type
value Float

shade
lcdGridStrength(value: Float): Void
Name Type
value Float

shade
hardScan(value: Float): Void
Name Type
value Float

shade
hardPix(value: Float): Void
Name Type
value Float

shade
gamma(value: Float): Void
Name Type
value Float

shade
flickerStrength(value: Float): Void
Name Type
value Float

shade
cornerSmooth(value: Float): Void
Name Type
value Float

shade
cornerRadius(value: Float): Void
Name Type
value Float

shade
colorMatrix(m00: Float, m10: Float, m20: Float, m01: Float, m11: Float, m21: Float, m02: Float, m12: Float, m22: Float): Void
Name Type
m00 Float
m10 Float
m20 Float
m01 Float
m11 Float
m21 Float
m02 Float
m12 Float
m22 Float

shade
brightness(value: Float): Void
Name Type
value Float

shade
bloomTex(texture: shade.Sampler2D): Void
Name Type
texture shade.Sampler2D

shade
bloomAmount(value: Float): Void
Name Type
value Float

shade
beamMin(value: Float): Void
Name Type
value Float

shade
beamMax(value: Float): Void
Name Type
value Float

shade
beamAmount(value: Float): Void
Name Type
value Float

shade
new(): Void

Private Members

shade
resolveTextureSlot(name: String): Int
Name Type
name String
Returns
Int

Metadata

Name Parameters
:build shade.macros.ShadeMacro.buildShaderClassFields()
:autoBuild shade.macros.ShadeMacro.buildShaderClassFields()
:build ceramic.macros.EntityMacro.buildForCompletion()
:autoBuild ceramic.macros.EntityMacro.buildForCompletion()
:build tracker.macros.EventsMacro.build()
:autoBuild tracker.macros.EventsMacro.build()