UAF CS 485 → Computer Graphics Rendering (Fall 2022)

Problem Statement

Summarized as balancing physical weather effects and their corresponding representation in Godot, the initial starting point for this project began with light pillars and ice fog characteristics, as narrowing down the scope was critical for setting attainable goals for this semester.

The attempted effect drew inspiration from a US National Weather Service Fairbanks Alaska post (see above), where they observe tiny ice crystals forming radiant columns of light as vertically stacked mirrors float within the atmosphere.

Technical Approach

Each pillar consisted of an apex and base (both PrisimMesh) on either end of a CylinderMesh. The Spatial Ice Shader by NekotoArts & Gabriel Aguiar formed the foundation of inspiring color gradients along the original light pillars.

First Draft: .gif of FBX Weather Transitions

Ice fog builds upon a Godot tutorial titled Adding atmospheric 3D fog patches to a scene by Martin Senges. Starting with a circular drawing in GIMP with CPUParticles and Atmospheric particles yields a realistic effect at differing intensity levels.

GIMP Ice Fog Example

Node Configuration Warning

Note that on macOS, particle rendering is much slower than CPUParticles due to transform feedback implementation on the CPU instead of the GPU. When targeting macOS devices, utilize the project setting (within the toolbar options) to convert to CPUParticles.

Godot Ice Fog Example

The ground is 2500 x 2500 QuadMesh rotated and transformed about the origin. Materials such as Fog from a Custom Color world environment – with a slight depth curve – yield a convincing skyline of Fairbanks, Alaska.

Second Draft: Proof of Concept Light Pillars

After the minimum viable tech demo, the focus shifted towards adding light source objects for pillars within a ray-traced object. Raytracing demo 2: sphere and plane by Dr. Orion Lawlor adapted nicely into a raytraced cylinder intersection.

Project Code of Ray Cylinder Intersection

Each lamp post consists of a light cap (CylinderMesh) and color temperature calibrated with OmniLight. The street lamp originates from a free 3D model by tyrosmith, broken into six different surfaces.

Light Cap Example

Additional colors are added via the Albedo color to improve contrast with the background. The ground texture formulates from a zoomed-in image of Aerial Asphalt 01 texture by Rob Tuytel (CC0). Alterations to the 4K graphic show similarity to snowfall on a highway road.

Final Screenshot of Light Pillars Project


Some key takeaways and lessons learned include taking the subsection of shape when given an inverted normal (like a light pillar). Knowing how to adapt the camera perspective and the ability to cull a 2D object also prove valuable.

Possible next steps for this project include improving scalability via different light sources (such as street lamp color temperature) and feathering edges of cylindrical objects as smooth surfaces.

My code and graphical assets are within the GitHub repository. This project runs on Godot Engine v3.5.1 Stable Edition.

Further Reading