====== Lab 7: Special Effects ====== {{:public:t-vien-14-1:lab7.png?400|}} ===== Goal ===== The goal of this lab is to try out and appreciate some very simple but effective techniques for producing a life-like environment. Simple illusions. ===== Preparation ===== * You need to download these {{:public:t-vien-14-1:lab7-textures.zip|ready-made textures}}. ===== Documentation ===== * Unity's [[https://docs.unity3d.com/Documentation/Manual/ParticleSystems.html|Particle Systems]] * Unity's [[https://docs.unity3d.com/Documentation/Components/class-Projector.html|Projector]] ===== Procedure ===== - **Make Room** Start by making a room you can walk around in and use the textures supplied in the zip file above. At least use the door texture somewhere, the others are optional. We will be building the effects around the door. Remember to adjust the First Person controller to an appropriate height so that the scale of the door will seem right. Keep the room fairly dim (don't add any light sources other than the **Ambient** light, which you can adjust in **Edit->Render Settings**). If you wish to darken the walls, you can adjust the ''color'' value for the wall materials after applying the textures, by darkening the color, the overall texture will darken. - **Seeing Through Windows** For wall segments that contain windows, you should pick ''Transparent/Diffuse'' as the material shader type so that the transparency value of the texture will get picked up by the shader. This should result in windows you can see through. NOTE: There seems to be a bug with these textures (or maybe Unity), the transparency only appears in **Scene** view but not in **Game** view. - **Make Outside Environment** You should put something on the outside of those windows, at least a sky box with a bright and sunny sky. Another possibility is to place a texture of some landscape or city scape on a Quad a few meters away (essentially a [[http://en.wikipedia.org/wiki/Matte_painting|matte painting]]. - **Add Sun Shafts** Strong light coming through windows may illuminate particles in the air and create visible shafts of light. Instead of modeling volumetric lighting (i.e. the actual interaction of light with particles), we can fake these shafts with a few well placed textures. Create a **quad** and place it perpendicular to the quad representing the door wall segment. Apply the **beams** texture to this quad and ensure that transparency is used by the material. Adjust the placement so that it looks like the beams are coming from the broken windows. Duplicate this quad a few times and spread them across the window. To make them visible from more angles (they are of course very thin!) you can rotate some of them a little bit and even flip some completely. - **Add Light Projector** Make sure you have imported the **Projectors** package from the **Assets** menu. Find and add the **Blob Light Projector** game object to your project. Place the projector outside of the door such that the light from it will fall on the floor on the inside. Now you have to create a light texture that mimics the pattern of the broken window. In any paint program such as Photoshop or [[http://www.gimp.org/|Gimp (free)]], use the door texture to create another texture of the same size (1024x1024) but completely transparent aside from white areas where the broken windows are located. There are many ways to accomplish this. One way is to open the door texture and use a selection tool (e.g. flood select) to select only the broken window parts. Then create a new 1024x1024 texture with a transparent background and use the selection to fill with white exactly the same broken window area. In Unity, create a new material with shader type **Projector/Light** and assign the new texture to it. Also, in the texture properties (select the texture itself, not the material) set ''Wrap Mode'' to ''Clamp'' to prevent it from being repeated many times across the floor. Finally adjust (e.g. fiddle with placement and the ''field of view'') until it looks right. - **Add Particles** Right above your **Hierarchy** panel select **Particle System** from the **Create** drop-down menu. It should already be producing shiny little particles. Place the system right where the beams of light hit the floor and rotate it so that the particles travel in the direction of the beams towards the window. Look at the parameters you can adjust in the **Inspector** panel for the particle system. You need to make these particles imitate very small dust moving very slowly through the air. You can play with the following adjustments: * In the **Shape** module: Select the ''Box'' emitter shape. This will shoot the particles in one direction (which you can control by rotating the box). * In the **Emission** module: Slow down the rate of particle generation until you just get a few per second (e.g. 3 per second or so). * In the **Particle System** general parameter module: Play with ''Start Speed'' and ''Start Size''. Make them really really small! If you press the down arrow next to a parameter value, you can choose from some dynamic options instead of just using a constant value. For example, try making the speed random. * In the **Color over Lifetime** module (you have to first add a check mark to include this module): Click on the color bar to open the [[https://docs.unity3d.com/Documentation/Manual/GradientEditor.html|Gradient Editor]]. Make the particles fade in from full transparency to full opacity and then again back to full transparency. To do this you need to add one new **Alpha** marker in the middle, which you set to full opacity (Alpha 255), while setting the other two **Alpha** markers to full transparency (Alpha 0).