|   Basic Lighting
        In this tutorial we will go through the basic steps of setting up
        lighting in a level. In Max Payne 2 we have a new lighting system which
        is called Global Illumination System (also known as GIS). Basically the
        new system works better and produces results much faster than the
        previous system in Max Payne (2001). Setting up the lights
        First let's simply set up lighting in one single room. Like in the
        first Max Payne, lights are emitted by defined polygons on any mesh. Make a small room first and create a box shaped mesh. Go into F6 mode
        and point at one polygon and press L. 
 
        Following dialog box will then open: 
 
        The color defines the color of the light. It's a simple RGB value. The new lighting system creates a certain amount of emitters on the
        surface of the defined lighting polygon. It depends on values defined
        elsewhere (more on that later). Every emitter emits light at the same
        direction as the normal of the surface. The hotspot and falloff angle
        defines the corresponding values of each single light emitter. 
 
        There will be a lot of emitters on the polygon surface, so it's
        basically a pretty uniformed light which leaves the polygon. Leave the values alone and press "OK". Now we'll render the
        lights and see how it looks like. Go into the maxed directory and start
        the batch file LocalRender.bat. It will start a Global Illumination
        Server and a client which automatically connects to it. GIS calculation
        always requires a server which will divide the map in cells and the
        clients does the actual lighting calculation. As you can see, the server
        and client can run on the same machine. If you have other computers, you
        can connect them as well on the server. You just need to define a new
        address in the top line of config.txt found in the GISClient -directory.
        The address is naturally the IP of the server machine. Check that two command prompts are started. The other one should be
        "CalculationTestServer.exe" and the other one "WinCalculationClient".
        If the server does not start, go into the GISServer -directory under the
        maxed -directory and open the config.txt. Check that the X_SharedDBDir
        points to your database-directory. Also make sure that the ShareDir
        exists. When the lighting calculation has been completed with your
        level, it will be put in the defined ShareDir. You can see the server status by opening up an internet browser
        (works at least in Internet Explorer 6) and typing the address "localhost"
        in the address bar. After you have started the client and the server, go back to maxed. Choose GIS and "Send Level" from the top menu bar. A
        dialogue box opens asking the GIS server IP. Type "localhost"
        there and press OK. Now the level is sent to the server for processing.
        The server splits the level up in cells, and each cell is sent to a
        client. You can monitor it all via the generated webpage. After the process is done, the level is put into the defined "ShareDir".
        You have to load it up again in MaxED. It should automatically switch on
        the view with diffuse and lightmaps. You can switch the view type by
        pressing 1, 2 or 3 on the numpad (in case it doesn't work, check that
        numlock is switched on). 
 
        The lighting should look something like this. We could change the hotspot and falloff values to smaller. With
        values 40 for hotspot and 50 to falloff, the light would look like this: 
 
        Notice how sharp the light border becomes in comparison. It's also
        quite useless without the help of other lights. Often this kind of sharp edged approach is good for drama or small
        lamps, but usually it is more practical to have a smaller hotspot and
        larger falloff angle, say 70 and 150 degrees: 
 Adjusting Lights
        You can emulate a real life spotlight by making a small light source
        with a high intensity value. The maximum intensity is 2000. There's a
        limit to how small a light is actually useful - under 5x5cm lights are
        usually too small for practical use, not only because they emit small
        amounts of light (even with high intensities), but also because the
        lightmap resolution needed for showing the light coming for a small
        source needs to be very high to be able to represent the results without
        grave inaccuracies. Unlike old radiosity, the GI system gets slower the more lights you
        have in your level. So it's not smart to set all polygons on a complex
        sphere-shaped lamp object to emit light. Rather make a cube around the
        lamp, make the six sides of it to emit the light and check the
        "Exclude from Game" -flag on at the object properties. Then it
        will cast the light, but it's not visible in the game itself. Apart from aforementioned values (angles, intensity), there are a few
        things that affect the end result of your lighting, the first and most
        obvious one being the lightmap resolution; basically the higher the
        resolution the more accurate shadows and lights you get, but also
        slightly slower rendering times. Like textures, lightmaps eats up memory
        as well: The more accurate lightmaps you have, the more they eat up
        texture memory. You can change the lightmap resolution by going into F6
        mode, pointing the polygon and pressing K. A resolution of 4 is
        considered a relatively high value. You can change lightmap resolutions
        of whole objects in F5 mode as well, by choosing the objects and
        pressing shift-K. You can also choose "solid color" on the lightmap
        properties. It will basically "fake" a lightmap. It's useful
        for lamp objects which does not emit light itself but uses a dummy light
        for the actual lighting. Remember to freeze lightmaps on objects such as
        these (lightmap freezing is explained below).  There is a tool for checking whether the lightmaps are too high. You
        can access it by pressing F1 and setting the flag "lightmap
        density" ON. Then check that you have Lightmap and Diffuse -mode
        ON. You can put it on by pressing number 3 on the numpad. If you want to remove or change properties of a light source, you
        need to look it up on the hierarchy window. 
 
        Then right-click it to see the menu selections for the light. You can
        find delete and properties from there. Also, there is an option to smooth lightmaps around several polygons,
        to make them look more round. First you have to add a polygroup for the
        object. You can do that by looking up the object in the hierarchy tree
        and right-clicking it. Then choose "Add Polygroup". 
 
        A new child object appears, called Polygroup_00. You can add and
        remove polygons from the group by choosing the group in the hierarchy
        list and going into F6 -mode. Then shift-click on the polygons on the
        object. When a polygon is in the polygroup, it will appear as light
        blue. To switch lightmap smoothing on, you have to edit the polygroup
        properties by right-clicking the polygroup in the hierarchy list and
        choosing "properties". 
 
        Look up the "Smooth Lightmaps" flag in the middle of the
        dialog and check it on. You also have such options as "Freeze Lightmaps" and
        "Ray Tracing". "Freeze Lightmaps" locks the
        lightmaps so that a new GIS render does not affect them. Ray tracing is an enhanced version of the lighting calculation and
        will provide more accurate results. It is however slower and is not
        recommended for general use. Ray tracing should be used when there are
        clear artifacts on lightmaps. This can happen for instance on two
        objects right next to each other (like a door and a frame). Rendering
        More important from the quality aspect are the 'Viewport size', 'GIS
        MaxEnergyPerShoot' and 'GIS StopAtEnergy' values. The viewport size
        determines the quality of the light, MaxEnergyPerShoot the accuracy of
        the light and StopAtEnergy corresponds a bit to the old 'rendering
        passes' value, meaning it determines how 'far/long' the emitted light
        bounces from surfaces. The GIS values are inversed, so the smaller the
        numeric value, the higher the rendering quality. You can change these
        settings by opening the document preferences (Tools -> Document
        preferences or CTRL-P) and looking at the bottom part of the revealed
        dialog window. "Average lightmap borders" filters the edges of lightmaps.
        It might look better or worse, it's hard to say. Best way to find out is
        to test it. It was not used in Max Payne 2. Here are some sample shots of different values (Viewport/MaxEnergyPerShoot/StopAtEnergy). 
 
        In Max Payne 2, we used generally values 512 - 3.0 / 0.3. In certain
        areas it was as small as 512 - 1.0 / 0.1. There is more 'noise' when using small viewport sizes and the scene
        is darker and in a way blurrier when using higher MaxEnergy/StopAt
        values. Here's an image to emphasize the differences in lighting: 
 
        In effect these are exaggerated images showing the difference between
        128 and 512 viewports (2.0/0.2 on the left and 50/10 on the right). Volume Calculation
        For character lighting and shadows we have a method called Volume
        Calculation. It is based on lightmaps already calculated in the level.
        After you have calculated the lightmaps, you can proceed on calculating
        the volume lighting. It is done by starting VolumeCalculationServer.exe
        in the VOLSERVER -directory under the maxed -directory. After the server
        is running, go back to maxed and choose "GIS -> Send Level (vol)".
        Then choose "localhost" as the address. It will then send the
        level to the volume lighting calculation server; the client will start
        automatically when the server receives the file. If there are problems in running the VolCalc server, check the
        config.txt -file found at the VOLSERVER -directory. It should have the
        same X_ShareDBDir value as GIS. The resolution defines in meters how
        accurate the volume calculation is. We used a value of "1" in
        Max Payne 2.  In case there are large areas where there is no character movement,
        you can use volume lighting boxes. In case there are one or several
        volume lighting boxes in a room, only the volumes inside those boxes
        will be calculated. You can place a box like this by going into F3 mode
        and pressing N. Then choose Volume_Lighting_Box from the dropdown menu.
        You change the box dimensions by opening its properties.  That's the basic information you need for making lighting in Max
        Payne 2. 
 |