const particleSystems = []
createCanvas(600, 600, WEBGL)
fbo = createFramebuffer()
postprocessShader = createShader(vert, frag)
guidingCurve: createGuidingCurve(0),
guidingCurve: createGuidingCurve(PI * 0.9),
for (let i = 0; i < 800; i++) {
const eyeZ = (height/2) / tan(PI/6)
perspective(PI/3, width/height, near, far)
const blurIntensity = 0.015
const fogColor = color('#50607a')
const ambientColor = color('#60646e')
const skyColor = color('#f5d2a4')
const sideSkyColor = color('#282d2e')
const treeColor = color('#282e33')
const lightColor = color('#b8b47d')
ambientLight(ambientColor)
pointLight(skyColor, 0, -2 * height, -800)
pointLight(sideSkyColor, width, -100, -200)
pointLight(lightColor, -width*0.1, -400, -600)
for (const system of particleSystems) {
pointLight(lightColor, -width*0.1, 0, -600)
translate(0, height*0.8, -600)
plane(width * 16, width * 16)
lightFalloff(0.1, 0.001, 0)
pointLight(lightColor, -width*0.1, 0, -600)
for (const tree of trees) {
shader(postprocessShader)
_renderer.getTexture(fbo.depth).setInterpolation(
postprocessShader.setUniform('uImg', fbo.color)
postprocessShader.setUniform('uDepth', fbo.depth)
postprocessShader.setUniform('uSize', [width, height])
postprocessShader.setUniform('uIntensity', blurIntensity)
postprocessShader.setUniform('uNumSamples', 15)
postprocessShader.setUniform('uTargetZ', targetDepth)
postprocessShader.setUniform('uNear', near)
postprocessShader.setUniform('uFar', far)
postprocessShader.setUniform('uFogColor', [red(fogColor)/255, green(fogColor)/255, blue(fogColor)/255])
postprocessShader.setUniform('uFogScale', 0.0005)
postprocessShader.setUniform('uTime', t)
rect(0, 0, width, -height)