In the
interest of adding some a quick enhancement to the graphics of our game, I
looked through some additional effects
Fog
Fog is the
natural phenomenon in which water in the air obscures light, the further away,
the more fog obscures the light reaching the viewer. Fog can be useful as a way
to hide geometry and create a sense of depth and atmosphere. In old OpenGL fog
can be achieved by just enabling it and setting various attributes. It is
performed at the end of the pipeline, affecting the final pixels. With the use
of shaders, variance and customization is available to create more interesting
varieties of fog. To create a fog effect, the distance of a pixel to the camera
is taken into account, the further away, the more foggy; this is akin to depth
of field. There are many ways to create fog such as by using height or even
particles so that the fog can be affected by light and shadow.
A simple
implementation:
vec3 fogColour = vec3(0.722, 0.961, 0.949); float z = gl_FragCoord.z / gl_FragCoord.w; float density = 0.001; float fog = exp2(-density * density * z * z); fog = clamp(fog, 0.0, 1.0); fragColour.rgb = mix(fogColour, diffuse, fog);
For more
advanced fog effects, the location of the light source can be taken into
account to create regions in which fog is illuminated the closer it is to the
light source – blend between the color of the fog and the color of light using
the dot product of the light vector and the distance to the pixel (similar to
diffuse lighting), do this on top of regular fog calculations.
God Rays,
also known as light scattering and crepuscular rays is the effect of rays of light hitting small
surfaces such as particles or fog and scattering. The resulting scatter of
light creates a visible streak of light. God rays are a post-processing effect.
Firstly, a vector is created from the light source to the screen space specific
pixel in the fragment shader. This vector is then sampled along with different
values of decay and weighing to determine its color.
To continue
from last week’s blog, I’ve managed to implement a basic particle system
rendered using the geometry shader. The important element on top of using it for
smoke, clouds and ash in game is that it serves the purpose of creating in-game
messages such as score updates and player instructions.
Quilez, I.
(2010). Better Fog. [Web log post] Retrieved from
http://www.iquilezles.org/www/articles/fog/fog.htm
No comments:
Post a Comment