Jump to content

Szico VII

Members
  • Posts

    1,054
  • Joined

  • Last visited

Posts posted by Szico VII

  1. Originally written by Rgoer

    • Title: Terrain Creation in EasyGen
    • Subject: How to create terrain using EasyGen
    • Written by: Rgoer
    • Tutorial written for: JK2/3
    • Similar concept work like in: Hand-Shaped Terain in Radiant.
    • Difficulty level: 4/10
    • Expected time to complete for first attempt: 30mins
    • Prerequisites:Basic proficiency in JK3 modding and radiant.


    Download EasyGen (as of this writing, version 1.42 is the most recent)

    This version INCLUDES the custom rgoer templates...but don't fire EasyGen up quite yet.

    Before we get going, we need to create a heightmap. A heightmap is just a greyscale bitmap file, where each pixel defines the elevation of one brush vertex of EasyGen terrain.
    FRlkOwy.jpg

    This is an example of a heightmap:

    S0v6C43.jpg

    When you paint your own heightmap, you need to keep in mind that your heightmap needs to be one pixel wider in every dimension than the number of terrain brushes you want to make up one "side" of your terrain "square." For example, I wanted a 48-by-48 terrain, so I painted that example heightmap to be 49-by-49 pixels. This is because each heightmap pixel corresponds to a single brush vertex, and the vertex count is always one more than the brush count (one single brush has two vertexes per side).

    Anyway, heightmaps aren't that complicated: brighter pixels represent higher elevation, and darker pixels are lower. White is the highest, black the lowest. If you have access to landscape software like Bryce or Terragen, you can export some nice heightmaps from those programs...

    The only important peculiarities about EasyGen heightmaps is that they must be greyscale (8/16/24 bit all work fine), and they must be in Windows Bitmap (*.bmp) format.

    Now it''s time to fire up EasyGen...
    When you first start EasyGen up, you''ll probably see something like this:
    52ZU1J7.jpg

    Now is a good time to familiarize yourself with EasyGen''s 3D view controls. For the most part, you can move the camera with the same controls you use in Radiant. You also can drag the camera on the x/y plane with the right mouse button, and orbit with the left. Once you feel comfortable with EasyGen''s camera, feel free to move on.

    As with any new software, one of the first things you want to do is check out the preferences. This tutorial was written with Star Wars Jedi Knight: Jedi Academy in mind, but you can alter the JA specific stuff here to work with whatever game you please. Here is how you should set your preferences up to work with JA:
    wH6nXAW.jpg

    Hit "OK" to save your changes to the preferences; now it''s time to import our heightmap:
    L8cgfqD.jpg

    You'll be confronted with a "Bitmap Import Setup" window. Hit the "Browse..." button and find your heightmap, then set the height to something larger than the default 256 units... however tall you had in mind when you painted the heightmap, something in the 1024 to 2048 range generally works for most cases.
    GbfS8B9.jpg

    Now, once we've imported the heightmap, we should see something along these lines:
    xvst9rY.jpg

    And now the important stuff...
    All of the EasyGen magic happens in the "Alphamap" tab... so let''s head that way:
    lGFol8j.jpg

    We need to load some textures in order for EasyGen to have something with which to work its wonders... if you're working with JA, and you want to use default JA textures, you''ll need to unpack some from assets1.pk3 (in base). After you've done that, choose "Add folder..." from the "Textures" menu:
    rrZhpnR.jpg

    In the little browser, navigate to whatever texture directory you want to work with; I chose the "desert" set that I unpacked from assets1.pk3. At this point, notice that EasyGen tells you exactly what to do, right on the screen:
    o4jLW3b.jpg

    Click the first black square, pick a color, then choose a texture from the textures well. Oooh, ahhh; hit the little brown and green button I have circled in that image, and you''ll see that the terrain is now covered in the texture you just picked.

    Now you want to create a palette of more color/texture combinations. Pick as many textures as you think you'll want to blend together on your terrain. Set your brush size with the "Paint radius" slider, and go to town painting on your terrain by holding ctrl+shift and using the left mouse button.

    Keep this in mind:
    Quake III (and, by extension, any Q3-engine game) can only blend at most TWO textures on a single surface triangle. EasyGen knows this, and warns you if you start creating three-way (or more than three-way) blends by turning the offending triangles black. If you start noticing triangles going black, it means you are trying to blend too many textures on a single surface, and you need to go back and repaint your blends until you have, at most, two textures blending on any given surface.

    And now we wrap things up...
    Eventually, you''ll end up with something like this:
    ao4rZZH.jpg

    Once you're satisfied with how your terrain looks (and you''ve remedied any black-triangle blending errors), you're ready to hit the "Export Terrain Entity" button (circled in red). You''ll be greeted with the "Radiant .map and related stuff settings" window... you want to set it up following this example:
    RV3Xi8H.jpg

    It is key that you installed the "rgoer" templates correctly, and that you added "rgoer" (without quotes) to the templatelist.txt file. Also, note that I used the name "tutorial" for all my map-specific names; you will want to use whatever the name of your map or project is in those instances.

    The alphamap should be saved to the base directory; just click the little "..." button and give it a name. This creates a .pcx file that indexes which textures should be placed where by the compiler.

    The shader should be saved to the scripts directory; EasyGen was designed to work with Quake III: Arena, and this is a throwback to that game. We'll move the shader file to the shaders directory in a minute.

    Lastly, make sure that you put "system/terrain" in for the "top" and "system/caulk" in for the "sides" of your terrain brushes. This is a must (pretty much everything on this export settings screen needs to be set up just right, or your terrain blending won''t work).

    Now you're ready to hit "Continue >>", give your terrain map a name, and let it rip.
    L7OJPvF.gif

    Now we're really getting there. Move your .shader file from the scripts to the shaders directory, and open it up in your text editor; there is one small change that must be made by hand, due to a bug in EasyGen.

    Down at the bottom of the shader defitions, the very last one should be a definition for a shader called "terrain_base." This is the shader called by all the q3map_baseshader lines in the rest of the shader file, so it should be first (not last). Select this shader, cut it from the end, and paste it back in at the top so that it is the very first shader defined in your .shader file. Save it and you''re done.

    Finishing Up:
    All you have to do now is add your shader file to shaderlist.txt and copy/paste your terrain entity from the .map EasyGen created into whatever .map you''re working on.

    You don't want to use the .map created by EasyGen, because it puts a bunch of garbage into the worldspawn that makes the .map unusable.

    The terrain entities (which are really just func_groups) are fine, though, and you can just select the terrain, copy it, and paste it into whatever .map you want to, or load the map as a prefab into a new map.

    • Subject: How to create teleports that can be switched on and off without scripting
    • Written by: Szico VII
    • Tutorial written for: JK3
    • Similar concept work like in: N/A
    • Difficulty level: 8/10
    • Expected time to complete for first attempt: 0.5-1.5 hours
    • Prerequisites: Proficiency with entities, linking and basic building


    "Toggleable" - My word for meaning "being able to be turned on/off (made active/inactive)

    You can download the example/source files for this tutorial here

    Okay, so you want to make a toggleable teleport do you? Okay, for this tutorial I'm not going to be creating any structures to be teleported between, I'm just going to show you the SETUP of a teleport and entities to make it toggleable. You will have to place the entities in your map in the relevant places on your own.

    Firstly you'll want to create your trigger brush (which the player has to touch to be teleported away) Cover it with the system/trigger texture as you would normally when creating a teleport, but don't go any further. Instead of making it a trigger_teleport, you need to make it a trigger_multiple. This is because for some reason, the trigger_teleport entity doesn't function properly when you try to make it inactive, plus you cannot start it as inactive (e.g when you load the map it starts OFF.)

    We simply have to make the trigger_multiple believe it is a trigger_teleport. (let this be called Trigger #1 from now on) Don't worry, its very easy.

    Now, create a target_teleporter and link the trigger_multiple to it, so the trigger points toward the target. (Ctrl+K) You'll notice this is how you'd create a normal teleport destination if you had been using a trigger_teleport. However, we need to add another step before the trigger_multiple will act as a teleport. For ease of this process, I recommend you place the target_teleporter right above the teleport, or somewhere close to it, far away from where you want he final teleport destination to be.

    Now, we're going to set the destination for the teleport. Create a target_position in the place where you wish your player to be teleported to, and then link it FROM the target_teleporter. The link structure should be as shown below:

    Trigger #1 -------> target_teleporter -------> target_position

    cF1VKNU.gif

    Remember, the target_position is where the player will be teleported TO, and the trigger_multiple where they will be teleported FROM. The target_teleport simply acts as a midway point which actually makes the trigger_multiple act as a trigger_teleport.

    From this point, there are now 2 ways to go about actually turning this trigger on and off. One is using quite a lot of entities, OR you can use less entities but some scripting. I personally think the scripting bit is easy, even nobody who has ever used BehaveED before should be able to do it. However I will show how to use the entity method, as it requires no scripting. For this tutorial I will be using a button (which can be pressed by the player) to toggle the teleport on/off. (You can also do it using say a func_breakable, which ''destroys'' your teleport or something like that when broken, but this is probably the best example.

    First, create the brush that will be your button, and texture it with an according texture. Then create a brush which encompasses the button, and make it a trigger_multiple. Add a noise key if you wish. DO NOT ADD A WAIT KEY. Check the ''Use Button'' box as well. Here you can go two ways, depending on whether you want the teleport to reactivate with the same switch, or a different one. For this tutorial I will assume you want just the one switch, as it is harder and a little more confusing.

    Select the trigger_multiple you just created (let it be called Trigger #2 from now on) and copy it, creating a duplicate trigger. However, check the box in the entity window that says ''Inactive'' for this trigger. (Let this one be called Trigger #3 from now on) Move both triggers aside from the button, move trigger #2 to the left, and trigger #3 to the right, as shown below:
    Ma3BsZW.gif

    Now we need to make the other entities required for activating/deactivating the teleport when the button is used. I personally find it easier to put all the entities in and then link them afterward, but the order you do it is up to you. Here is how you should set it up in terms of linking.

    Trigger #2 ----------> target_delay -----------> target_activate -------> Trigger#3
    Trigger #2 ----------> target deactivate-------> Trigger#1
    Trigger #2 ----------> target deactivate-------> Trigger#2

    Trigger #3 ----------> target_delay -----------> target_activate ----->Trigger#2
    Trigger #3 ----------> target activate --------> Trigger#1
    Trigger #3 ----------> target deactivate ------> Trigger#3

    Give both target_delays' the following keys.

    Key: wait
    Value: 4

    It should look similar to this setup now:
    2FyXowJ.gif

    This is how your overall setup SHOULD look by now (Remember, Triggers #1, #2 and #3 are all actually trigger_multiples''):

    Trigger #1 ----------> target_teleporter ---------> target_position

    Trigger #2 ----------> target_delay --------------> target_activate -------> Trigger#3
    Trigger #2 ----------> target deactivate ---------> Trigger#1
    Trigger #2 ----------> target deactivate ---------> Trigger#2

    Trigger #3 ----------> target_delay --------------> target_activate -------> Trigger#2
    Trigger #3 ----------> target activate -----------> Trigger#1
    Trigger #3 ----------> target deactivate ---------> Trigger#3

    Triggers #1 and #2 both start off active (useable), but not Trigger #3 (due to you checking the ''inactive'' flag). As trigger #1 starts active, the teleporter will start active.

    When you press the use key whilst in Trigger#2, the following will happen. It will fire all its targets, initiating the following events. Firstly, it will deactivate itself, and Trigger #1. (The teleport) Then, after 4 seconds (due to the wait key we put on the target_delay) it will activate Trigger #3.

    The teleport will not function at this point - it has been turned OFF. To turn it back on again, go now to Trigger #3 and use it. The following will happen. It will fire all its targets, initiating these events.

    Firstly, it will deactivate itself, and ACTIVATE Trigger #1 (The teleporter.) After 4 seconds it will re-activate Trigger #2, allowing the cycle to start again.

    However, you will notice that we have 2 triggers used to operate the teleport, but only one button. If you want the 2 buttons in separate places, simply create another button, and place Trigger #2 over the one which will DE-ACTIVATE the teleport, and trigger #3 over the one which will RE-ACTIVATE it. If you want to operate the teleport from the same switch, drag BOTH triggers'' #2 and #3 into exactly the same place around the centre button. They should be exactly the same size and shape.

    Due to the 4 second delay between you can press the next trigger in the sequence, there should be no problems in-game. The final result is as shown below.
    HQSRSeI.gif

    Of course, you can also have the sequence the OTHER way around e.g the teleporter starts INACTIVE, and you have to activate it. To do this simply give check the ''Inactive'' box on both Triggers'' #1 and #2, and uncheck the ''Inactive box'' on Trigger #3

    You can download the source files at the top of this tutorial



    Adding a Teleporter effect

    Ok, so you've setup your teleporter sequence, and button, but how can people tell whether the teleport is on or not without actually trying it?

    Most teleports which can be turned on or off give some indication of which state they are in, on or off, so now I''m going to show you how to do this. First of all, choose an effect for your teleport. This could either be a brush/patch with a fancy glowing shader, a light, an fx_runner or something similar. All can be used in a similar way. For this tutorial, I shall be using a patch with my teleporter shader on it. I have also added a teleport model to the setup. Here is the teleporter model with the effect in a temporary location.
    HicwvAl.gif

    The teleporter model will never disappear, but the effect inside it will - by the time we are finished.

    But first things first. Select your effect brush/patch and make it into a func_useable. Depending on whether your trigger_multiple (Trigger #1) is set to start off or on, check the ''Start Off'' flag for this the newly created func_useable accordingly.

    Now, create another trigger_multiple exactly the same size and shape as Triggers #2 and #3. It shall be called ''Trigger #4'' Check its ''Use Button'' flag.

    Give it the following key:
    Key: wait
    Value: 4

    This wait value corresponds with the delay between Trigger #2 deactivating and Trigger #3 activating, so that the teleporter effect and the trigger_multiple which actually teleports the player won't go out of sync with each other. Now target this trigger (Trigger #4) at your func_useable
    p3wWhXC.gif

    Now it's time to finish this thing off. Drag Trigger #4 into exactly the same place as Triggers'' #2 and #3 - You now have three trigger_multiples in the exact same place, but due to the delays and wait values we have implemented everything should work smoothly. Also move your teleporter model (or move Trigger #1 to the teleporter model) so that when you go into the teleporter field you will appear to be teleported.

    Final setup in Radiant is as shown below.
    iyimpPP.gif

    And here's what it looks like ingame:
    cezD1iS.gif

    And there you have it - A toggleable teleporter, complete with cool effects. You can also implement the func_useable effect on the button itself, by making 2 buttons, turning each separately into a func_useable (giving one an ''off'' texture and one an ''on'' texture, and using the ''startoff'' flag on the ''on'' switch, then targeting both with Trigger #4 (As well as the teleporter effect). Experiment around and have a go!

    The overall entity setup if you've followed me this far will be:

    Trigger #1 ----------> target_teleporter ---------> target_position

    Trigger #2 ----------> target_delay --------------> target_activate -------> Trigger#3
    Trigger #2 ----------> target deactivate ---------> Trigger#1
    Trigger #2 ----------> target deactivate ---------> Trigger#2

    Trigger #3 ----------> target_delay --------------> target_activate -------> Trigger#2
    Trigger #3 ----------> target activate -----------> Trigger#1
    Trigger #3 ----------> target deactivate ---------> Trigger#3

    Trigger #4 ----------> func_useable(s)

    All done!
    • Title: Shadowing Effects and Alpha shadowing
    • Subject: How to create cool looking shadows that are well defined.
    • Written by: Szico VII
    • Tutorial written for: JK3
    • Similar concept work like in: N/A
    • Difficulty level: 4/10
    • Expected time to complete for first attempt: 10 mins
    • Prerequisites: Ability to map basic structures, create entities and to implement shaders.


    You can get shadows normally in JK3 simply by design, as the engine usually calculates reasonable shadows for you. But what if you want that special effect to enhance the atmosphere, chances are, you're gonna need to do it manually. This tutorial will go over the basics of creating cool, more realistic and defined shadows, using the alpha shadowing techniques. You will end up with something like this:
    gRiu7HC.gif

    The Setup
    First off, you'll want to find the area of your map which you want the cool shadowing on. Make sure you have a light source for the shadows, and I highly recommend it is shader-lit, with a fairly strong glow. In the example above, I have a texture of various control panels, which is emitting yellow light. This is covered by a brush with a grate texture on it. The same setup is repeated with the white light at the top, except I have used a less powerful light there and a different grate texture.

    So here is what you need to do:
    Create a square room and texture the ceiling and walls with ''textures/doomgiver/basic.'' Texture the floor with your light emitting shader, as shown below. If you do not have a light-emitting shader, you will need to make one. For testing purposes, you may use the shader given below. The image it refers to is just a solid 4x4pixel yellow square.

    RYqwUDs.gif

    Light emitting-shader: (Copyable version shown below)
     

    textures/mymap/yellowglow
    {
    qer_editorimage textures/mymap/yellowglow
    q3map_surfacelight 500
    q3map_lightRGB 1.00 0.99 0.42
    {
    map $lightmap
    }
    {
    map textures/mymap/yellowglow
    blendFunc GL_DST_COLOR GL_ZERO
    }
    {
    map textures/mymap/yellowglow
    blendFunc GL_ONE GL_ONE
    glow
    rgbGen identity
    }
    }

    Getting the grates put in:
    Once this is complete, you need to add your grate texture and shader. You can simply borrow one of Raven's grate textures, (make sure it is a .tga with an alpha channel or an equivalent png) however, you will need to give it a new shader, as we are going to give it alpha shadowing. Alpha shadowing is a technique whereby light can pass through some areas of a texture but not others. Which areas it can pass through is determined by its alpha channel. Transparent areas, light will go though, not transparent areas, it won't. Without this command, light wont go through the texture at all regardless of the presense of an alpha channel.

    Here is the shader -(Copyable version shown below)

    textures/mymap/grate
    {
    qer_editorimage textures/imperial/grate02
    surfaceparm nonopaque
    surfaceparm trans
    surfaceparm alphashadow
    cull twosided
    qer_trans 1.0
    {
    map textures/imperial/grate02
    alphaFunc GE128
    blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
    depthWrite
    }
    {
    map $lightmap
    rgbGen identity
    blendFunc GL_DST_COLOR GL_ZERO
    depthFunc equal
    }
    }

    Now we are ready to apply the shader, so go back to your map and create a brush covering the entire floor space, which lines up about halfway between the floor and ceiling (You can change this for different shadow effects later,) as shown below. DON'T FORGET TO MAKE THIS A DETAIL BRUSH! (Select it and hit Ctrl+ M)

    f8FttAG.gif

    Now, turn this brush into a func_group. Give it the following keys and values:
    Key: _castshadows
    Value: 1

    Key: _lightmapscale
    Value: 0.1

    Next, select all surfaces you want shadows to be cast onto by this particular light source (In this case, all the walls textured with the doomgiver/basic texture.) Make these brushes also into a func_group and give it the following keys and values.

    Key: _recieveshadows
    Value: 1

    Key: _lightmapscale
    Value: 0.1

    Now add in a player spawn, and compile! You should get something looking as follows:
    Ir6dkzU.gif

    Of course, you can mess about with the light shader colours and strength, different gratings, and try moving the grating closer or further from the light source for different effects. You can also use higher _lightmapscale values on your func_groups if your map is very large and the light compile is taking ages, but never go higher than 0.99 (as 1 is the default) This will give you reduced shadow precision and quality however. For example, in the shots below, I have tried lowering the grating.
    j9zbqHN.gif

    You may have spotted that the shadows look a little grainy toward the bottom. Making your texture repeat less will solve this, as will adding a small ambient light or perhaps putting the light source closer to the grate, or, as shown in the shot below, reduce the strength of the light (I also changed the texture used).
    vvmdYLc.gif

    As a final note, if you want to add new brushes to your func_group, if you realise there is a brush you left out, simply select first the brush, and then a brush in the func_group. Right click in the 2D view, and go ''Move into Entity.'' Remember, if you want to cast shadows onto a brush which is already an entity and cannot be made into a func_group, you should just add the same keys and values as you would if it were a func_group.

    And of course this will work with brushes as well as alpha shadowed textures - just follow the same principle, make the brushes you want cast shadows and voila!

    But, there is one last thing. Sometimes, shadows require color, for example, when light is shining through coloured glass. For this kind of shadow, there is an extra command you must add to your shader. It is:

    surfaceparm lightfilter

    This uses the colors in the texture to generate the colours for the shadows, so if you had a green texture, you''d get a green shadow.
    • Title: Updating the compiler (Q3map2)
    • Subject: How to update your BSP compiler
    • Written by: Szico VII
    • Tutorial written for: GTK Radiant 1.4.0
    • Similar concept work like in: N/A
    • Difficulty level: 5/10
    • Expected time to complete for first attempt: 5mins
    • Prerequisites: Text editor.


    Before you do anything, you''ll first need to download the most recent version of q3map2 (the BSP compiler program.) This is the box that comes up when you compile a map and goes through loads of lines, and the -meta -vis and -light stages.

    Download Q3map2 for 64bit Windows

    You will also need a text editor with a ''Replace text'' function, I used Notepad/Wordpad.

    How to update:
    First, you''ll need to locate your GTKRadiant-1.4 directory.

    As default this is C:/Program Files/GTKRadiant-1.4 - You then want to unzip the files in the .zip you just downloaded into this folder. This can be done using the Winzip in Wizard mode, and simply selecting the GTK Radiant program directory as the folder to unzip files to. This will automatically place the files where they need to be.

    If you then browse to the folder, you should see a new subfolder called ''q3map2'' that should look like this:
    xKUmTJw.gif

    Inside this folder there is another subfolder called 'extras' which should contain the files shown below.
    9tXrcak.gif

    Okay, so we've imported the new files into the right directory. Now we just need to tell radiant to use these new files instead of the old ones. This is where you need your text editor.

    Browse to the following directory: JKA/GameData/base/scripts

    Here you will see a file called ''default_project.proj'' and perhaps others such as ''user0.proj,'' ''user1.proj,'' and so on and so forth. We need to edit all of these project files, so let's get cracking.

    Open the first file (default_project.proj) using Notepad or Wordpad. It will look different in notepad due to the formatting - it will be hard to read and contain lots of square symbols, so I advise using Wordpad, although it isn't necessary really.

    Now, either hit Ctrl+ G or go Edit>Replace to bring up the text replacement window. In the ''Find what'' box, type q3map2. In the ''Replace with'' box, type q3map2/q3map2, as shown in the picture below, and press the ''Replace All'' button.

    SAVE THE FILE (Ctrl+ S) (Make sure you are saving it as .proj and not .txt if you decide to save it using the menu.)
    tYw2UaK.gif

    Repeat this process for any further project (.proj) files you have in your scripts folder, saving each one.

    Next time you load up Radiant, and compile a map from the menu, it will use the updated compile. You can check that it is by having a quick look at the header of the box as you begin compiling. You should see the lines "2.5.16" and "Voter turnout" if you have done it correctly.

    If you haven't done it correctly, you'll get an error pop up in the compiler box. To fix this you should find the GTK Radiant install.exe file and run it''s repair function, and then try editing the project files again.

    Congratulations, that's it!'

    • Title: Getting started with Mapping
    • Subject: The tools you need for editing.
    • Written by: Szico VII
    • Tutorial written for: GTK Radiant 1.4.0
    • Similar concept work like in: N/A
    • Difficulty level: 1/10
    • Expected time to complete for first attempt: Depends on your download connection speed
    • Prerequisites: None.


    So you want to map do you, huh? Well, before you can even think about making your map, you're going to need the right tools to do it with. Following is a list of all the tools you'll need for most maps, however this list doesn't include any optional programs which are only needed for further customisation, such as custom texture creation. The programs needed for such tasks will be listed as they come up - So let's get going shall we?

    Please not this tutorial does NOT use the v1.5.0 versions of radiant which are inferior (in my opinion) and completely change button layouts e.t.c

    Things you Need:


    Once you have the Install file (.exe) for GTK Radiant, you can install the program to your hard drive. Make sure you know exactly whereabouts your Jedi Academy/GameData folder is on your Hard drive - this can be found by doing a search (Windows XP - Right click the Start button and then left click the Search button) (Windows 98-2000 - Right click the Start button and then left click the Find button)

    You then want to search your hard drive through all files and folders (Usually C: for ''jamp.exe'' (without the quote marks.) The folder this file is in will be your JKA/GameData folder. Make sure you remember this path. If you are sure you have installed Jedi Academy in the default directory, you can find jamp.exe in:

    Hard Drive Letter (usually C):/Program Files/LucasArts/Star Wars Jedi Knight Jedi Academy/GameData

    So for me the path is: C:/Program Files/LucasArts/Star Wars Jedi Knight Jedi Academy/GameData - from here on in always replace C:/ with the letter of your own hard drive.




    Installing GTK Radiant v1.4.0

    Step 1) Double click the install (.exe) file - Download HERE

    Step 2) Wait for the contents of the packages to be read.

    Step 3) "The Install Shield Wizard will now Install GtkRadiant-1.4.0 on your computer. To continue, click next" - So get on with it and click next then!

    Step 4) Accept the License Agreement by clicking the ''Yes'' button.

    Step 5) Press ''Next'' to carry on from the Supported Games list

    Step 6) Leave the GtkRadiant install path as default (C:/Program Files/GtkRadiant-1.4)

    Step 7) If you want to set up Radiant for JEDI KNIGHT II: JEDI OUTCAST, locate the jk2mp.exe file on your hard drive using the search method outlined above and browse for the path to the JK2/GameData folder.

    Step 8) Press ''Next'' to Continue

    Step 9) Press Next again, leaving the folder name for GtkRadiant-1.4 as "Radiant-1.4"

    Step 10) Repeat the process for the other supported games, leaving any games you don't own as default paths

    Step 11) It will get to the Jedi Academy Destination Folder, which you will leave as default, unless you have installed the game in a non-default location (Which can be found using the search method illustrated previously.) NOTE: C:/.../GameData simply means C:/pathtoJKA/GameData, with the ... representing a filepath which the computer is too lazy to display.

    Step 12) Choose ''Full Install'' and then press ''Next''

    Step 13) Choose where you want the Shortcut to start up radiant to appear on your start menu

    Step 14) Press Next to start ''reviewing files'' and complete installation.

    Step 15) Once the Progress Bar reaches 100%. click ''Finish'' to complete installing Radiant.



    Setting up GTK Radiant v1.4.0
    When you first Start up Radiant, you'll see a dialogue box like this:
    1WJ8Ett.gif

    Depending on whether you want to map for JK2 or JK3, you should select the relevant option in the top section by clicking the downward arrow and selecting the correct option from the list. As these tutorials are for Jedi Knight: Jedi Academy (JK3) - I've selected the correct option.

    If you do not own any of the other games displayed in the list, you may want to select the ''Auto-Load selected game on Startup'' box. This will automatically load whichever game you have selected when you start Radiant, and you will not see this screen again.

    If you have other members in your family who use Radiant, and you each want separate preferences, select the ''Networked install'' option.

    Only tick the ''Log console to radiant.log'' option if you want to find errors with Radiant and your map - however this is for advanced users and takes up a lot of memory - as radiant will tell you if you select this option.

    Hit OK when you're finished. Radiant will now load up!




    Installing the Software Developers Kit

    Step 1) Download the Jedi Academy SDK, if you haven't already.

    Step 2) Open the file using Winzip and extract all files within it to a temporary folder (or your desktop, you can delete this later)

    Step 3) Double-Click the ''Jedi_Academy_SDK(MP).exe file to start the extraction process. (It'll be in the folder you extracted the .zip file to)
    VLt9u0V.gif

    Step 4) In the ''Unzip to Folder'' Box, replace the filepath with:\r\nC:/PATHTOJKA/GameData (Where ''PATHTOJKA'' is as default, C:Program Files/LucasArts/Star Wars Jedi Knight Jedi Academy)

    Step 5) Press the ''Unzip Button,'' and read the Disclaimer which comes up after it finishes unpacking, if you wish.

    Step 6) You can now find all the Developer's Kit Modding tools in the Gamedata/Tools Folder!
    Mike Tallway and Smoo like this
  2. Tutorial originall by Immenor

    • Title: Hand Shaped Terrain
    • Subject: How to create your own terrain by hand.
    • Written by: Immenor
    • Tutorial written for: GTK Radiant 1.4.0
    • Similar concept work like in: N/A
    • Difficulty level: 6/10
    • Expected time to complete for first attempt: 35 mins
    • Prerequisites: Basic familiarity with mapping and GTK Radiant


    Hand Shaping terrain is creating brushes that seamlessly fit together, so that when a rock or grass texture with *phong shading is applied to the brushes, it appears as sloping hills or steep rock walls in-game.

    Video Walkthrough Downloads:
    VIDEO #1
    VIDEO #2
    VIDEO #3
    VIDEO #4

    Introduction

    First we will cover the concept of how terrain in video games is made. Terrain is made up of either:

    1. Trisoups
    2. Quadsoups

    A trisoup is a collection of triangles, which create the terrain and a quadsoup is a selection of squares that make up the terrain.

    Figure 1 is a picture of a Trisoup in radaint.
    mFICTYO.jpg

    Figure 2 is a picture of a quadsoup in radiant.
    kpktBer.jpg

    When I am making terrain, I use a combination of both trisoups and quadsoups. I mix and match them to get the proper shape of terrain I desire, as well as to position the blending of textures. For now however, It is important that you learn how to create terrain with both methods.

     


    Tri-Soups

    There are 2 main ways I create basic Trisoups. The first way, is to make a square brush and cut it in two with the cutter tool. This is shown in figure 3.

    WwvBbAD.jpg

    You will now have 2 triangles that together form a square. Duplicate this pair of triangles, 3 times and position them so that they look like in figure 4.
    kWM7eDu.jpg

    Now you have a collection of 8 triangles that form a square, as well as a diamond shape (or tilted square) in the middle. Select all 8 triangles and copy them 4 times so that you have 3 more collections of the 8 triangles, lined up against your first collection, like in figure 5.
    5sZHSyE.jpg

    Select a group of 8 triangles and press V. Vertexes will appear on the triangles. This is how you are going to shape your terrain. The vertexes on the top of your terrain are the ones you will be manipulating. Figure 6 is a picture of 8 triangles selected, with there vertexes showing.
    9LyhC6Z.jpg

    Now drag the vertex''s on the top of the triangles to adjust the height of each triangle that makes up your terrain. Remember that Terrain is made out of many triangles, and also remember that each vertex of one triangle must touch another. If it doesn't then the triangles don't fit seamlessly together, the terrain in-game will not appear smooth. Figure 7 is a example of 8 triangles that I have changed the vertices of. I made one edge stick higher up, and one edge go farther down. I have also applied the grass texture to it so it is easier to see.
    EWQUJsu.jpg

    Do this same process for the other 8 triangles, make sure that all the triangles fit seamlessly together, so that in the end, you have a continuous surface.

    Figure 8, is a example of all the triangles when I finished shaping them.
    OJ1kekg.jpg

    Figure 9 is the same triangles, but with there vertexes showing.
    sCUeIFq.jpg

    You have now created a small patch of ground terrain. Congratulations. Now onto Quadsouped Terrain.



    Quad-soups

    Quadsoup] basicaly can be created in the same way Trisoups are, except instead of 2 triangles to make up a square, its just one square. When making a Quadsoup and adjusting its vertices you do not want the squares in it to have splits down the middle. You want them to be flat. Figure 10 shows 4 squares in a basic trisoup properly done.
    UtETLXX.jpg

    Figure 11 Shows four squares in a trisoup done the way you don't want.
    jSLbd1B.jpg

    As you can see in figure 11, some of the vertex'' have been dragged down farther creating lines on the squares. If you want to get the same shape that this gives you, that's where you use tri-souping. If your going to be shaping with squares, keep with flat tops.

    Shaping with quad-soups seems to almost shape itself as you build. if you want one edge lower down you must drag others upwards to keep the top plane straight. In this way, quad-soups can begin to form themselves. If you require more precision, then that is where tri-soups come into place.

    Quad-soup Templates
    The next thing you must learn about quad souping is making templates. A template is a set of brushes that yo u will duplicate and modify. First you must make a template. Figure 12 is a example of a completed template.
    1kpkxyl.jpg

    To make a template, first create 1 square on the top view grid (z). Then go onto a size view, and place your cursor on the side of the brush, hold down ctrl, and drag downwards. This is shown in figure 13, and 14.
    a66ZyMs.jpg6pmk33W.jpg

    Copy this square, and move it over so it is right next to the last square. Then use the ctrl drag so that the two squares sides fit together, then drag the other side to where you want it to be. Repeat this, until your template is finished.

    Now select your whole template, and duplicate it. Move it over so it is next to its original self, like in Figure 15.
    ZDjVcQF.jpg

    Navigate in the 3d view so that your camera can see the side of your copied template that is not touching anything (figure 16).
    ueYzbsB.jpg

    Position your mouse on one of the brushes in the 3d view, and once again click and drag downwards. The end result will be like in figure 17.
    one7r0L.jpg

    Now, continue doing this dragging your template up and down with the ctrl drag feature. Also, try dragging it left and right, by positioning yourself in the 3d view looking down at the template from above. Clicking on the side of the template and dragging with ctrl left or right (figure 1.)
    a9unsyR.jpg

    Fiddle around with this, and copy your template enough to make a small amount of terrain like in figure 19.
    Wvzy92J.jpg

    Figure 20 is the same patch of quad-souped terrain with all the brushes selected.
    Ht7pGiZ.jpg

    Proper use of Tri-souping and quad-souping
    When I am creating a terrain, this is how I use quad-souping and tri-souping. I use them together. I start with a template, and then build off it with tri-souping when I need more accuracy in the shape of the terrain.

    Remember these things when building your terrain:

    • Quad-souping is good for Dotproduct2 blending, because you have more control over where your blends are.
    • Quad-souping is good for creating terrain you need less control over, because it tends to shape itself, and often makes more realistic differences between how fast a hill or land form will rise up or down.
    • Tri-soups are good for creating terrains with exacting accuracy. You have more control over the shape they will create then quad-soups.
    • Combine your quad-soups and tri-soup techniques so that all your brushes fit together the way you want. Your not restricted to one or the other, be creative, and use the ideas to form your own ways

  3. Creating a Skybox using a JKA Map

    tutorials-61-0-59595100-1367141412_thumb.png
    Szico VII

    • Title: Creating a Skybox using a JKA Map
    • Subject: How to turn a 3D scene created in Radiant for Jedi Academy into a Q3 skybox using a little script trickery.
    • Written by: Szico VII
    • Tutorial written for: JK3
    • Similar concept work like in: N/A
    • Difficulty level: 03/10
    • Expected time to complete for first attempt: 5-10 minutes
    • Prerequisites: JA SDK and BehavED installed, knowledge of map creation and compiling, ideally a monitor that supports resolutions of 1024x1024 or greater.

    Getting started:

    First off copy the code below into a txt file and save it into base/scripts.
     

    //Generated by BehavEd
    
    rem ( "Skybox Screenshot Script" );
    camera ( /*@CAMERA_COMMANDS*/ ENABLE );
    camera ( /*@CAMERA_COMMANDS*/ MOVE, $tag( "cam1", ORIGIN)$, 0 );
    rem ( "===========================" );
    rem ( "sky_rt" );
    camera ( /*@CAMERA_COMMANDS*/ PAN, < 0.000 0.000 0.000 >, < 0.000 0.000 0.000 >, 0 );
    
    affect ( "player", /*@AFFECT_TYPE*/ FLUSH )
    {
    sound ( /*@CHANNELS*/ CHAN_VOICE, "sound/chars/r2d2/misc/r2d2talk03.mp3" );
    }
    
    wait ( 4000.000 );
    rem ( "===========================" );
    rem ( "sky_bk" );
    camera ( /*@CAMERA_COMMANDS*/ PAN, < 0.000 90.000 0.000 >, < 0.000 0.000 0.000 >, 0 );
    
    affect ( "player", /*@AFFECT_TYPE*/ FLUSH )
    {
    sound ( /*@CHANNELS*/ CHAN_VOICE, "sound/chars/r2d2/misc/r2d2talk03.mp3" );
    }
    
    wait ( 4000.000 );
    rem ( "===========================" );
    rem ( "sky_lf" );
    camera ( /*@CAMERA_COMMANDS*/ PAN, < 0.000 180.000 0.000 >, < 0.000 0.000 0.000 >, 0 );
    
    affect ( "player", /*@AFFECT_TYPE*/ FLUSH )
    {
    sound ( /*@CHANNELS*/ CHAN_VOICE, "sound/chars/r2d2/misc/r2d2talk03.mp3" );
    }
    
    wait ( 4000.000 );
    rem ( "===========================" );
    rem ( "sky_ft" );
    camera ( /*@CAMERA_COMMANDS*/ PAN, < 0.000 270.000 0.000 >, < 0.000 0.000 0.000 >, 0 );
    
    affect ( "player", /*@AFFECT_TYPE*/ FLUSH )
    {
    sound ( /*@CHANNELS*/ CHAN_VOICE, "sound/chars/r2d2/misc/r2d2talk03.mp3" );
    }
    
    wait ( 4000.000 );
    rem ( "===========================" );
    rem ( "sky_dn" );
    camera ( /*@CAMERA_COMMANDS*/ PAN, < 90.000 0.000 0.000 >, < 0.000 0.000 0.000 >, 0 );
    
    affect ( "player", /*@AFFECT_TYPE*/ FLUSH )
    {
    sound ( /*@CHANNELS*/ CHAN_VOICE, "sound/chars/r2d2/misc/r2d2talk03.mp3" );
    }
    
    wait ( 4000.000 );
    rem ( "===========================" );
    rem ( "sky_up" );
    camera ( /*@CAMERA_COMMANDS*/ PAN, < -90.000 0.000 0.000 >, < 0.000 0.000 0.000 >, 0 );
    
    affect ( "player", /*@AFFECT_TYPE*/ FLUSH )
    {
    sound ( /*@CHANNELS*/ CHAN_VOICE, "sound/chars/r2d2/misc/r2d2talk03.mp3" );
    }
    
    wait ( 4000.000 );
    camera ( /*@CAMERA_COMMANDS*/ DISABLE );

    Then open it up in BehavED and compile it into an IBI file.
    Then, you must make a ref_tag in your map where you wish the "camera" to take pictures from, and have a spawn point trigger link to a target_scriptrunner which activates this script.
    Give the ref_tag a targetname "cam1"

    COMPILE THE MAP (Duh.)

    Load up Jedi Academy SINGLE-PLAYER mode.

    Open the console and (depending on your maximum screen resolution) set a custom resolution of 1024x1024 or 2048x2048 using the following commands:
    r_mode -1
    r_customheight 1024
    r_customwidth 1024
    vid_restart


    (You can also try cg_fov to get different results)

    NB: You could use values in-between, say 1600x1600 pixels, just be aware you'd have to re-size them afterward to 1024 or 2048 pixels.

    Now run your map using the /devmap mymapname command.

    It will boot into a cutscene - Your job is to take a screenshot (bind it to a number key, say "2") every time the view changes, without allowing the 'screenshot xxx taken' message to ruin your lovely pictures.

    The script will show you 6 views from the point you placed your ref-tag, which you can then use as your 6 skybox images. It will make a beep noise as it changes view, and it changes every ~4seconds.

    Now rename the screenshots to skybox_bk, ft, lf, rt, up and dn as appropriate.

    VOILA.

    Examples:

    AsPsshY.jpg

     

     

    DhzVAbd.jpg

     

    Smoo and DarthValeria like this
  4. Creating Curved (Corner) Cylinders

    Szico VII

    • Title: Creating Corner Cylinders
    • Subject: How to create bends in pipes, t-junctions and corner pipes
    • Written by: Szico VII
    • Tutorial written for: GTK Radiant 1.4.0
    • Similar concept work like in: N/A
    • Difficulty level: 3/10
    • Expected time to complete for first attempt: 5 mins
    • Prerequisites: Ability to construct cylinders and use the grid

    Creating Curved (Corner) Pipes

    In order to create a ''curved'' pipe, which is basically a corner junction for two other pipes, you'll need to know a little bit about radiant and be able to effectively use the grid-snapping. However, this isn't too hard, and after a while you should be able to do it easily. So let's get started!

    Firstly, make sure the ''Snap to grid'' option is turned on. You can do this by going to the ''Grid'' menu at the top, and then selecting ''Snap to grid.'' This (when turned on) will have a small tick next to it. This is important, as the curved patch involves editing vertices, which will deform the patch if a point is even one unit out of place. Therefore it is best to work to a large grid-size, and then resize the patch afterward. So set your grid-size to 256. (Again, under the grid menu.)

    Now, you'll want to create a cubed box, with all it's dimensions the same. With the box selected, hit the ''Q'' key to bring up the measurements, and be sure each side is the same width (swap between views in radiant by pressing Shift+ Tab) Obviously, you can also easily tell by looking at the grid units in radiant, but when working with smaller grid sizes, this is a good check.
    MQfwBZr.gif

    Now, select the cube, and go to the ''Curve'' menu, then select ''Cylinder.'' This will turn your cube into a cylinder. Rotate if necessary, until the side of the cylinder (i.e not the top circular bit) is in alignment with the original cube, as shown below:
    ng2YYej.gif

    Now we need to start editing the vertices, so make sure the cylinder is selected and hit the ''V'' key. 9 Points (vertices) should show up on the 2D view, as shown below.
    Z52ivA5.gif

    Ok, now we need to move these vertices around in order to create the curved pipe. Start by clicking the middle-right point (vertex), and dragging it up to the top-right vertex, so both the middle-right and top-right are now in the same place, as shown below. Note that you may need to change the gridsize down to 128 in order to align both properly.
    WX2DzJw.gif  nrNJ2bV.gif

    Note how I've decreased the grid-size (in the second picture, to 128, in order to put the point in the right place.) Next we need to move the bottom-right vertex, up to the middle-right point (which we had previously moved to the top.) The images below illustrate how it should be done.
    S4TTUOd.gif  4UY4Dep.gif
    Now we need to move the middle-bottom vertex to the middle-right point. Just follow the diagrams below if you're unsure.
      4NOAsUn.gif  xMZxlyg.gif

    Nearly there! Okay, now take the bottom-left vertex and move it to the bottom-right point, as shown below:

    Op5bcTd.gif  6YDEwmG.gif

    You'll notice it doesn't look quite right as it is, but don't worry, there is still one more vertex to move. Click the middle-left vertex and move it to the bottom-left point:

      fSw4XUV.gif  fCIcIGS.gif


    And there you go, a curved (corner) pipe. Feel free to resize it if need-be, and remember, when changing patch vertices, always try to stick to the grid, or you'll end up with some nasty results where things don't quite line up properly Feel free to texture your pipe now - hit ''V'' again to come out of vertex-editing mode, then select the pipe, choose a texture.

    Creating T-Junction Pipes

    Firstly, you'll need to create three identical cylinders with equal width, height and length. Place them as shown below:

     

    yr95FAa.gif  hzP3ndD.gif

    The gap between the three cylinders should be the same size as the cylinders i.e if you made a fourth cylinder it would fit into the gap perfectly.

    Okay, again press ''V'' to go into Vertex-Editing mode. Again put your grid-size down to 128, from 256 (or the one below whichever scale you are currently working at) so that you can place the points correctly. Firstly, select the lower cylinder (which is not in line with the other two.) and select the Top-Middle vertex. Drag it up to the centre point of the gap above, as shown below.
      

    O8yzv4p.gif  eIOIx74.gif

    Now you need to do the same thing with the other two cylinders, with the left hand one, drag the middle-right point to the centre of the gap, and with the right hand one, drag the middle left point to the centre of the gap, as shown below.

     

    8jqZj3Q.gif  r4pWMq0.gif

    Finally, you should take the top-right point of the left hand cylinder, and the top-left point of the right hand cylinder, and drag each vertex (separately though, not at the same time, or it won't work.) Into the top-middle point of the gap, as illustrated below.
      

    eUwCuQh.gif  

    Texturing this junction effectively can be a bit of a pain in the arse, so have a few experiments and see which things fit best for the pipes. You CAN resize this construction, however you need to resize each cylinder separately, or it will go wrong. Don't try selecting all three cylinders and re-sizing. Rotation is fine and you can use it for this construction as you would a set of brushes.

     

    nUUJTuP.gif

    Creating Hollow Pipes

    So now you know how to create curving cylinders and T-junctions. But what if you want a hollow pipe? One that a player can walk through or one which has an opening to look into? To do this, the edge (or wall) of the pipe needs to be given depth, which a single patch on its own does not have, as it only essentially has one face, unlike a brush. In order to accomplish this, we must use several patches - one for the outer surface of the pipe, one for the inner surface of the pipe, and one to cap the end of the pipe, joining the inner and outer surfaces together.

    So here is how you go about it. For the purposes of this tutorial and for learning, follow the exact design of the pipe shown here - but remember you can of course change the dimensions, thickness and size of any of the components once you are familiar with the construction process.

    Firstly, create a brush that is 512(W)x512(D)x256(H) units in radiant. You can press the Q key to have radiant show you the units. I'm am using Grid size 64 for this tutorial - because remember, the vertex movements must be precise and having them even a single unit out of place will cause misalignment. Then make sure you are looking at the brush from the top-down view in radiant (XY view)

    Now select your brush, and go to the menu:

    CURVE -------> CYLINDER.

    This will convert your brush into a cylindrical patch mesh as shown below
    bQo0wxl.jpg

    Now create a second brush in the center of the cylinder with dimensions 256x256x256. Repeat the process to convert this into a cylindrical patch mesh, as shown below:
    1U3eHsV.jpg

    Once this mesh has been created, you need to invert its surface so the textured side is facing inwards. With the smaller cylinder selected, you can do this with the keyboard shortcut Ctrl+I. Alternatively, you can go Curve----->Matrix------->Invert.

    Your construction should now look like this:
    pKTGDGU.jpg

    Now we have both the inner and outer surface of our hollow pipe. The next job is to cap the end off so it will appear to the player in-game that the pipe has true thickness. This is done using a different type of patch, the 'simple patch mesh.'




    Capping the Pipe

    Create a third brush (of any depth, it does not matter) which spans the distance between the outer and inner cylinders vertically, and the far right edge of the outer cylinder horizontally, as depicted below:
    MSddKsu.jpg  hsX6Y6c.jpg

    Now, with this brush selected, turn it into a simple patch mesh as follows:
    Curve------>Simple Patch Mesh. (Alternatively use the shortcut Shift+P)

    This will bring up a small menu labelled 'Patch Density.' You will want to leave the values as they are, at 3 for width and 3 for height. (This determines the number of vertices used to control the patch. You should always use the minimum number possible for the construction required, for simplicity. Click 'OK' and you should now have a simple patch mesh that looks like this:
    qNK3DS6.jpg  riXRpQx.jpg

    Press the 'V' key to enter vertex editing mode. Your patch should have 9 vertices.
    F6KsJOW.jpg

    Now we must move these vertices, as in the previous sections, to align this patch between the inner and outer cylinders around the top right quarter of the shape.

    Firstly, select the Bottom-Right vertex and move it 2 grid boxes (128 units on a 64-size grid) below the Bottom-Middle vertex, as shown below.
    iY4MKD1.jpg

    Next, select the Middle-Right vertex and move it 1 grid box to the right of the vertex you previously moved:
    l1mosJa.jpg

    Then, select the Top-Right vertex, and move it 1 grid box to the right of the previous vertex you moved.
    TwG6DMe.jpg

    Next, select the Top-Middle vertex, and move it to where the Top-Right vertex originally was (2 grid boxes to the right):
    Gb50M6n.jpg

    Finally, move the Middle-Center vertex to where the Middle-Right vertex originally was (2 grid boxes to the right):
    ZQ9LsXx.jpg

    Your construction should now appear as shown below:
    BLcbrSK.jpg

    Now, the only thing left to do is to duplicate your patch (Ctrl+C) and paste it (Ctrl+V.) Then rotate the new patch mesh 90 degrees using the z-axis rotate tool, and repeat the copy and rotate twice more until the entire edge has been capped. Then all you have to do is apply your textures (Shift+S). Use the 'Cap' fit option on the simple patch meshes and the 'natural' fit option on the cylinders for the best effect!
    gl7b8Py.jpg  NAK86of.jpg

    NB: Remember if resizing you must re-size each patch individually to avoid deforming the other patches. An alternative would be to merge your 4 simple patch meshes together using Plugins------>Bobtoolz------>Merge Patches. It'll only let you merge 2 at once though, so you'll have to merge 2 quarters together on each side, and then merge the 2 newly created halves together afterward for one single , convenient patch.
    reeed and Smoo like this
  5. Someone on Steam reminded me of this and found it on old hard drive - so I have submitted what I had finished as an unfinished file to JKHub.

    I found that I cant get rend2 to work (Xycaleths latest buildbot) with OpenJk without it a)crashing b)not working or c) breaking fog and other effects so there's no rend2 support for it unfortunately. Source files included

    ChalklYne, SomaZ, yeyo JK and 2 others like this
  6. @@Xycaleth - Map is finished, if it has what you need for testing.
     

    Dont know how I missed your post. That looks great, Szico! :D something that irks me about q3map2 is that it doesn't bleed the colours from textures on to surrounding surfaces. You would expect some of the red and green on the pipes and walls to show up on the floor and walls but it doesn't. I guess it saves on having to compile the map every time you change the textures but it would look so much better if it could do that :)


    Yeah, isn't that called subsurface scattering?

    http://www.youtube.com/watch?v=Jaqqwk2UaC0
    oK3SyNLm.jpgxNYqp90m.jpg
    1pkfcx5m.jpgaVHk52Sm.jpg
    ic2gR1Gm.jpgKsJ6Ny5m.jpg

  7. Well the ladder shadow and the grate shadow do have "fake" shadows made with textures and alpha maps (easily removed).

     

    But dear god - using dynamic lights adds SO much - i didn't think the spec of bump maps were actually doing much until put lightsaber near them! I faked more with effect (fx_runners) but does lag the framerate :P

     

     

    kDNy08h.jpg

    dp1PB9T.jpg

    pOBOdOu.jpg

    CQ9o3ox.jpg

     

     

    z3filus, Smoo, Exmirai and 6 others like this
×
×
  • Create New...