Inspired by Israeli psytrance band Infected mushroom, and their incredible artwork featuring psychadelic themes and sureal mushrooms with faces, we decided to create a world including these themes.
We wanted to create a scene which would look like a description of drug induced hallucinations. Our scene features a gathering of mushroom people in a groove. The atmosphere we want to convey is distorted, magical and dangerous. The colorful fungi creatures are all facing the viewer with glowing eyes and wide open jaws.
In order to reproduce mushroom people such as the ones in the artwork we looked at, we used a standard mushroom model that we got from turbosquid. We enhanced this mushroom in blender by adding spheres for eyes, using the sculpt tool to create a mouth, and to assign material groups. We also added teeth, which we als got on Turbosquid.
In order to make the mushrooms more colorful and out of this world, we adapted the texture of the standard mushroom in multiple ways, as well as changed the .mtl file of our mushrooms. For example, we use a texture were we shifted the colours towards black, and then drew bright lines on the texture. We used this texture as the ambient component of a lambertian material, meaning that the mushroom looks black in darkness, but has a veins that glow underneath its skin. We set the diffuse component to a normal mushroom image, so that it would look normal when lighted. We the same principle to create several mushroom types, such as a "fire" mushroom, which has a bright red ambient colour, coupled with a strong emission and phong. Additionally, we used a mirror material to make some mushrooms look even crazier.
- Lantern Mushroom (First from right): We combined the stem and gills of generic mushroom we found on archive3d with a mirror material with some light-blue self emission. This creates a nice effect giving the mushrooms the appearance of a street light. They can be found in the front corners of the image as well as in the back were they give the illusion of additional illumination .
- Boletus mushroom(Second from right): Using the same technique as for the mushroom people we created colourful boletus mushrooms with high self emission. We used a model from Free3D as a basis.
- Purple Mushroom (Second from left) . We used this model.
- Mirror eyed mushroom (First from right): We used a very simple model and added mirror eyes. In our prototypes, we added point lights into the eye sockets, but later decided against it in order to save performance for some higher detail models. The model is available on turbosquid. We used the central mushroom and used our own materials, since the loader did not work in the beginning.
(Middle) To save on rendering time we implemented a way to directly display 2D images as objects in our scene. We use two different versions of the same image. In the first image the background is coloured red. We intersect with this version and return an intersection failure if the hit pixel was red. If we hit a pixel that is not red we look up the correct colour in the original image. This produces some very ghostly mushrooms. The principle would also work well when trying to add foliage to the scene, which we however decided against. The image is available here.We would have liked to create even more models, but there wasn't mushroom left...
Groovy Mushroom Grove
In order to get the feeling of a mushroom grove, we scaped a floor in blender. We used a grid on which we used the sculpt tools to lower and raise the ground. The bumps resemble a mycel network or roots. The material consists of a mirror and a lambertian with scaled ambient and diffuse psychadelic shaders. This gives the landscape a very alien look. Importantly, the model is also made smoother with smoothtriangles, in order to make the reflections look fluid.
The first thing we implemented was a shader with patterns that are commonly used when depicting hallucinations. This was created by using the texture coordinates, and use them to modulate the red green and blue values of the texture. We use sine waves to create repeating patters. We can then scale, offset, and multiply multiple sine waves together to create even more diffuse patterns. This effect was initially used on a lambertian with a high diffuse value, but was later scaled down in order to shift the focus onto the other objects in the room.
- Lambertian and Phong: These can now be scaled with an RGBcolor.
- Updated loader(load.cpp): Our loader is able to Map textures and scale them with ambient, diffuse, and specular color. We can also map mirror and glass materials.
- Psychadelic shader (psychadelic.cpp & .h): See description above.
- Created models, materials, and textures of mushrooms: See description above.
- 2D textures in 3D space(2Dtextures.cpp & .h): See description above.
- Anaglyph / Red&Cyan 3D image generation (renderingcompetition.cpp & Website):See feature below.
- Images between sampling cycles(threedrenderer.cpp & .h):We write the image after each sample to get the highest number of samples in a given time without knowing the rendering time.
3D works by presenting each eye with a different image, with both pictures been taken slightly offset from each other. Since our ray tracer already includes all of the features needed to easily generate such an offset, we decided to include it in our project, in order to increase the dazzling atmosphere our image conveys.
In order for each eye to see both images differently, we use classic red/cyan or the anaglyph red/blue glasses. The picture for the left eye (cyan lense) is filtered so that it does not contain any red values (Multiply by RGBcolor(0,1,1), and the right image is filtered to only include red. These images are then layered on top of each other. Thus both eyes receive different images, which the brain then combines into one single 3D image.
The main principle works rather well. However, testing with anaglyph glasses, which do not filter out green as strongly, we found that the 3d did not work well. The reason was that for example the psychadelic shader has strong red, green and blue patterns that stretch into different directions. These become very bright on one eye, and completely invisible on the other eye, making the contrast too great for our brain to process this into a 3D image. We can fix this by converting the two images into a grayscale before merging them into an anaglyph image. This results in a loss of colour, but makes the 3D Effect work just as well in Anaglyph.
You can test all of these options out using the sliders below, with some old 3D glasses you have laying around. The two images you see below are the colour-transformed left and right images, which are added together into the 3D image. Ideally, when looking through one lense, you should see one black image and one visible image, but some glasses do not filter all of the colours. You can also try turning your glasses upside down, in case red and blue are swapped in your glasses.
All of the scene was created by both of us together. Most of the code has been peer programmed.
The modelling and texturing was done by Tobias. The 3D feature on the website and in the project, the psychadelic shader, and 2D triangles were mostly implemented by Tobias.
The 3Drenderer.cpp was done by Jan.
Both of us contributed with fixes of older bugs, and performance updates.