Jump to content
The Dark Mod Forums

Search the Community

Searched results for '/tags/forums/texture/' or tags 'forums/texture/q=/tags/forums/texture/&'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General Discussion
    • News & Announcements
    • The Dark Mod
    • Fan Missions
    • Off-Topic
  • Feedback and Support
    • TDM Tech Support
    • DarkRadiant Feedback and Development
    • I want to Help
  • Editing and Design
    • TDM Editors Guild
    • Art Assets
    • Music & SFX

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. So giving it none of those tags, but making the AI invisible, silent, non-solid, and on a team neutral to everyone would not work? Oh well, it was a horrible inelegant idea anyway.
  2. Hello, everyone! In this multi-part, comprehensive tutorial I will introduce you to a new light type that has been available in The Dark Mod since version 2.06, what it does, why you would want to use it and how to implement it in your Fan Missions. This tutorial is aimed at the intermediate mapper. Explanations of how to use DarkRadiant, write material files, etc. are outside of its scope. I will, however, aim to be thorough and explain the relevant concepts comprehensively. Let us begin by delineating the sections of the tutorial: Part 1 will walk you through four, distinct ways to add ambient light to a scene, the last way using irradiance environment maps (or IEMs). Lighting a scene with an IEM is considered image-based lighting. Explaining this concept is not in the scope of this tutorial; rather, we will compare and contrast our currently available methods with this new one. If you already understand the benefits IBL confers, you may consider this introductory section superfluous. Part 2 will review the current state of cubemap lights in TDM, brief you on capturing an environment cubemap inside TDM and note limitations you may run into. Three cubemap filtering applications will be introduced and reviewed. Part 3 will go into further detail of the types of inputs and outputs required by each program and give a walkthrough of the simplest way to get an irradiance map working in-game. Part 4 will guide you through two additional, different workflows of how to convert your cubemap to an irradiance map and unstitch it back to the six separate image files that the engine needs. Part 5 will conclude the tutorial with some considerations as to the scalability of the methods hitherto explained and will enumerate some good practices in creating IEMs. Typical scenes will be considered. Essential links and resources will be posted here and a succinct list of the steps and tools needed for each workflow will be summarized, for quick reference. Without further ado, let us begin. Part 1 Imagine the scene. You’ve just made a great environment for your map, you’ve got your geometry exactly how you want it… but there’s a problem. Nobody can appreciate your efforts if they can’t see anything! [Fig. 1] This will be the test scene for the rest of our tutorial — I would tell you to “get acquainted with it” but it’s rather hard to, at the moment. The Dark Mod is a game where the interplay between light and shadow is of great importance. Placing lights is designing gameplay. In this example scene, a corridor with two windows, I have decided to place 3 lights for the player to stealth his way around. Two lights from the windows streak down across the floor and a third, placeholder light for a fixture later to be added, is shining behind me, at one end of the corridor. Strictly speaking, this is sufficient for gameplay in my case. It is plainly obvious, however, that the scene looks bad, incomplete. “Gameplay” lights aside, the rest of the environment is pitch black. This is undesirable for two reasons. It looks wrong. In real life, lights bounce off surfaces and diffuse in all directions. This diffused, omni-directional lighting is called ambient lighting and its emitment can be termed irradiance. You may contrast this with directional lighting radiating from a point, which is called point lighting and its emitment — radiance. One can argue that ambient lighting sells the realism of a scene. Be that as it may, suppose we disregard scary, real-life optics and set concerns of “realism” aside… It’s bad gameplay. Being in darkness is a positive for the player avatar, but looking at darkness is a negative for the player, themselves. They need to differentiate obstacles and objects in the environment to move their avatar. Our current light level makes the scene illegible. The eye strain involved in reading the environment in these light conditions may well give your player a headache, figurative and literal, and greatly distract them from enjoying your level. This tutorial assumes you use DarkRadiant or are at least aware of idtech4’s light types. From my earlier explanation, you can see the parallels between the real life point/ambient light dichotomy and the aptly named “point” and “ambient” light types that you can use in the editor. For further review, you can consult our wiki. Seeing as how there is a danger in confusing the terms here, I will hereafter refer to real life ambient light as “irradiant light”, to differentiate it from the TDM ambient lights, which are our engine’s practical implementation of the optical phenomenon. A similar distinction between “radiant light” and point lights will be made for the same reason. Back to our problem. Knowing, now, that most all your scenes should have irradiant light in addition to radiant light, let’s try (and fail, instructionally) to fix up our gloomy corridor. [Fig. 2] The easiest and ugliest solution: ambient lights. Atdm:ambient_world is a game entity that is basically an ambient light with no falloff, modifiable by the location system. One of the first things we all do when starting a new map is putting an ambient_world in it. In the above image, the darkness problem is solved by raising the ambient light level using ambient_world (or via an info_location entity). Practically every Dark Mod mission solves its darkness problem1 like this. Entirely relying on the global ambient light, however, is far from ideal and I argue that it solves neither of our two, aforementioned problems. Ambient_world provides irradiant light and you may further modulate its color and brightness per location. However, said color and brightness are constant across the entire scene. This is neither realistic, nor does it reduce eye strain. It only makes the scene marginally more legible. Let’s abandon this uniform lighting approach and try a different solution that’s more scene-specific. [Fig. 3] Non-uniform, but has unintended consequences. Our global ambient now down to a negligible level, the next logical approach would be hand-placed ambient lights with falloff, like ambient_biground. Two are placed here, supplementing our window point lights. Combining ambient and point lights may not be standard TDM practice, but multiple idtech4 tutorials extol the virtues of this method. I, myself, have used it in King of Diamonds. For instance, in the Parkins residence, the red room with the fireplace has ambient lights coupled to both the electric light and the fire flame. They color the shadows and enrich the scene, and they get toggled alongside their parent (point) lights, whenever they change state (extinguished/relit). This is markedly better than before, but to be honest anything is, and you may notice some unintended side-effects. The AI I’ve placed in the middle of the ambient light’s volume gets omnidirectionally illuminated far more than any of the walls, by virtue of how light projection in the engine works. Moving the ambient lights’ centers closer to the windows would alleviate this, but would introduce another issue — the wall would get lit on the other side as well. Ambient lights don’t cast shadows, meaning they go through walls. You could solve this by creating custom ambient light projection textures, but at this point we are three ad hocs in and this is getting needlessly complicated. I concede that this method has limited use cases but illuminating big spaces that AI can move through, like our corridor, isn’t one of them. Let’s move on. [Fig. 4] More directional, but looks off. I have personally been using this method in my WIP maps a lot. For development (vs. release), I even recommend it. A point light instead of an ambient light is used here. The texture is either “biground1” or “defaultpointlight” (the latter here). The light does not cast shadows, and its light origin is set at one side of the corridor, illuminating it at an angle. This solves the problem of omnidirectional illumination for props or AI in the middle of the light volume, you can now see that the AI is lit from the back rather than from all sides. In addition, the point light provides that which the ambient one cannot, namely specular and normal interaction, two very important features that help our players read the environment better. This is about as good as you can get but there are still some niggling problems. The scene still looks too monochromatic and dark. From experience, I can tell you that this method looks good in certain scenes, but this is clearly not one of them. Sure, we can use two, non-shadowcasting point lights instead of one, aligned to our windows like in the previous example, we can even artfully combine local and global ambient lights to furnish the scene further, but by this point we will have multiple light entities placed, which is unwieldy to work with and possibly detrimental to performance. Another problem is that a point light’s movable light origin helps combat ambient omnidirectionality, but its projection texture still illuminates things the strongest in the middle of its volume. I have made multiple experiments with editing the Z-projection falloff texture of these lights and the results have all left me unsatisfied. It just does not look right. A final, more intellectual criticism against this method is that this does not, in a technical sense, supply irradiant light. Nothing here is diffuse, this is just radiant light pretending the best it can. [Fig. 5] The irradiance map method provides the best looking solution to imbuing your scene with an ambient glow. This is the corridor lit with irradiance map lights, a new lighting method introduced in The Dark Mod 2.06. Note the subtle gradients on the left wall and the bounced, orange light on the right column. Note the agreeable light on the AI. Comparing the previous methods and this, it is plainly obvious that an irradiance environment map looks the most realistic and defines the environment far better than any of the other solutions. Why exactly does this image look better than the others? You can inform yourself on image-based lighting and the nature of diffuse irradiance, but images speak louder than words. As you can see, the fact of the matter is that the effect, subtle as it may be, substantially improves the realism of the scene, at least compared to the methods previously available to us. Procuring irradiance environment maps for use in lighting your level will hereafter be the chief subject of this tutorial. The next part will review environment cubemap capture in TDM, the makeIrradiance keyword and three external applications that you can use to convert a TDM cubemap into an irradiance map. 1 “ Note that the color buffer is cleared to black: Doom3 world is naturally pitch black since there is no "ambient" light: In order to be visible a surface/polygon must interact. with a light. This explains why Doom3 was so dark ! “ [source] Part 2 Cubemaps are not new to The Dark Mod. The skybox materials in some of our prefabs are cubemaps, some glass and polished tile materials use cubemaps to fake reflections for cheap. Cubemap lights, however, are comparatively new. The wiki page linked earlier describes these two, new light types that were added in TDM 2.05. cubicLight is a shadow-casting light with true spherical falloff. An example of such a light can be found in the core files, “lights/cubic/tdm_lampshade_cubic”. ambientCubicLight is the light type we will be focusing on. Prior to TDM 2.06, it acted as a movable, on-demand reflection dispenser, making surfaces in its radius reflect a pre-set cubemap, much like glass. After 2.06, the old behavior was discarded and ambientCubicLight was converted to accept industry standard irradiance environment maps. Irradiance environment maps (IEMs) are what we want to make, so perhaps the first thing to make clear is that they aren’t really “handmade”. An IEM is the output of a filtering process (convolution) which requires an input in the form of a regular environment cubemap. In other words, if we want to make an IEM, we need a regular cubemap, ideally one depicting our environment — in this case, the corridor. I say a snapshot of the environment is ideal for lighting it because this emulates how irradiant light in the real world works. All radiating surfaces are recorded in our cubemap, our ambient optic array as it were, then blurred, or convoluted, to approximate light scatter and diffusion, then the in-game light “shines” this approximation of irradiant light back to the surfaces. There is a bit of a “chicken and the egg” situation here, if your scene is dark to begin with, wouldn’t you just get a dark irradiance map and accomplish nothing? In the captured cubemap faces in Fig. 6, you may notice that the environment looks different than what I’ve shown so far. I used two ambient lights to brighten up the windows for a better final irradiance result. I’ve “primed the pump”, so to speak. You can ignore this conundrum for the moment, ways to set up your scenes for better results, or priming the pump correctly, will be discussed at the end of the tutorial. Capturing the Environment The wiki has a tutorial on capturing cubemaps by angua, but it is woefully out of date. Let me run you through the process for 2.07 really briefly. To start with, I fly to approx. the center of the corridor with noclip. I then type “envshot t 256” in the console. This outputs six .tga images in the <root>/env folder, simply named “t”, sized 256x256 px and constituting the six sides of a cube and depicting the entire environment. This is how they look in the folder: [Fig. 6] The six cube faces in the folder. Of note here is that I do not need to switch to a 640x480 resolution, neither do I need to rename these files, they can already be used in an ambientCubicLight. Setting Up the Lights For brevity’s sake, I’ll skip explaining material definitions, if you’ve ever added a custom texture to your map, you know how to do this. Suffice it to say, it is much the same with custom lights. In your <root>/materials/my_cool_cubemaps.mtr file, you should have something like this: lights/ambientcube/my_test_IEM_light { ambientCubicLight { forceHighQuality //cameraCubeMap makeIrradiance(env/t) cameraCubeMap env/t colored zeroClamp } } We’ll play with the commented out line in just a bit. Firstly, let’s place the actual light in DarkRadiant. It’s as simple as creating a new light or two and setting them up in much the same way you would a regular ambient light. I select the appropriate light texture from the list, “my_test_IEM_light” in the “ambientcube” subfolder and I leave the light colored pure white. [Fig. 7] The corridor in DR, top view, with the ambient cubic lights highlighted. I can place one that fills the volume or two that stagger the effect somewhat. Remember that these lights still have a spherical falloff. Preference and experimentation will prove what looks best to you. Please note that what the material we defined does is load a cubemap while we established that ambientCubicLights only work with irradiance maps. Let’s see if this causes any problems in-game. I save the map and run it in game to see the results. If I already have TDM running, I type “reloadDecls” in the console to reload my material files and “reloadImages” to reload the .tga images in the /env folder. [Fig. 8] Well this looks completely wrong, big surprise. Wouldn’t you know it, putting a cubemap in the place of an irradiance map doesn’t quite work. Everything in the scene, especially the AI, looks to be bathed in slick oil. Even if a material doesn’t have a specular map, it won’t matter, the ambientCubicLight will produce specular reflections like this. Let’s compare how our cubemap .tga files compares with the IEM .tgas we’ll have by the end of the tutorial: [Fig. 9] t_back.tga is the back face of the environment cubemap, tIEM_back.tga is the back face of the irradiance map derived from it. As you can see, the IEM image looks very different. If I were to use “env/tIEM” instead of “env/t” in the material definition above, I would get the proper result, as seen in the last screenshot of part 1. So it is that we need a properly filtered IEM for our lights to work correctly. Speaking of that mtr def though, let’s not invoke an irradiance map we haven’t learned to convert yet. Let’s try an automatic, in-engine way to convert cubemaps to IEMs, namely the makeIrradiance material keyword. makeIrradiance and Its Limitations Let’s uncomment the sixth line in that definition and comment out the seventh. cameraCubeMap makeIrradiance(env/t) //cameraCubeMap env/t Here is a picture of how a cubemap ran through the makeIrradiance keyword looks like: [Fig. 10] Say ‘Hi’ to our friend in the back, the normalmap test cylinder. It’s a custom texture I’ve made to demonstrate cubemap interactions in a clean way. Hey now, this looks pretty nice! The scene is a bit greener than before, but you may even argue it looks more pleasing to the eyes. Unfortunately, the devil is in the details. Let’s compare the makeIrradiance keyword’s output with the custom made irradiance map setup seen at the end of part 1. [Fig. 11, 12] A closer look at the brick texture reveals that the undesired specular highlighting is still present. The normal map test cylinder confirms that the reason for this is the noisy output of the makeIrradiance keyword. The in-engine conversion is algorithmic, more specifically, it doesn't allow us to directly compare .tga files like we did above. Were we able to, however, I'm sure the makeIrradiance IEM would look grainy and rough compared to the smooth gradient of the IEM you’ll have by the end of this tutorial. The makeIrradiance keyword is good for quick testing but it won’t allow you fine control over your irradiance map. If we want the light to look proper, we need a dedicated cubemap filtering software. A Review of Cubemap Filtering Software Here I’ll introduce three programs you can produce an irradiance map with. In the coming parts, I will present you with a guide for working with each one of them. I should also note that installing all of these is trivial, so I’ll skip that instructional step when describing their workflows. I will not relay you any ad copy, as you can already read it on these programs’ websites. I’ll just list the advantages and disadvantages that concern us. Lys https://www.knaldtech.com/lys/ Advantages: Good UI, rich image manipulation options, working radiance/specular map filtering with multiple convolution algorithms. Disadvantages: $50 price tag, limited import/export options, only available on Windows 64-bit systems. cmftStudio https://github.com/dariomanesku/cmftStudio Advantages: Available on Windows, OSX and Linux, free, open source software, command line interface available. Disadvantages: Somewhat confusing UI, limited import options, missing features (radiance/specular map filtering is broken, fullscreen doesn’t work), 32-bit binaries need to be built from source (I will provide a 32-bit Windows executable at the end of the tutorial). Modified CubeMapGen https://seblagarde.wordpress.com/2012/06/10/amd-cubemapgen-for-physically-based-rendering/ Advantages: Free software, quickest to work with (clarified later). Disadvantages: Bad UI, only Windows binaries available, subpar IEM export due to bad image adjustment options. Let’s take a break at this point and come back to these programs in part 3. A lot of caveats need to be expounded on as to which of these three is the “best” software for making an irradiance map for our purposes. Neither of these programs has a discreet workflow; rather, the workflow will include or exclude certain additional programs and steps depending on which app you choose to work with. It will dovetail and be similar in all cases. Part 3 The aim of this tutorial is twofold. First, it aims to provide the most hands-free and time-efficient method of converting an envshot, environment cubemap to an IEM and getting it working in-game. The second is using as few applications as possible and keeping them all free software that is available for download, much like TDM itself. The tutorial was originally going to only cover IEM production through Lys, as that was the app I used to test the whole process with. I soon realized that it would be inconsiderate of me to suggest you buy a fifty dollar product for a single step in a process that adds comparatively little to the value of a FM, if we’re being honest (if you asked me, the community would benefit far more from a level design tutorial than a technical one like this, but hey, maybe later, I’m filling a niche right now that nobody else has filled). This led me to seek out open-source alternatives to Lys, such as Cubemapgen, which I knew of and cmftStudio, which I did not. I will preempt my own explanations and tell you right away that, in my opinion, cmftStudio is the program you should use for IEM creation. This comes with one big caveat, however, which I’m about to get into. Six Faces on a Cross and The Photoshop Problem Let’s review. Taking an envshot in-game gives you six separate images that are game-ready. Meaning, you get six, split cubemap faces as an output, you need six, split irradiance map faces as an input. This is a problem, because neither Lys nor cmftStudio accept a sequence of images as such. They need to be stitched together in a cube cross, a single image of the unwrapped cube, like this: [Fig. 13] From Lys. Our cubemap has been stitched into a cross and the “Debug Cube Map Face Position” option has been checked, showing the orientations of each face. In Lys only panoramas, sphere maps and cube maps can be loaded into the program. The first two do not concern us, the third specifically refers to a single image file. Therefore, to import a TDM envshot into Lys you need to stitch your cubemap into a cross. Furthermore, Lys’ export also outputs a cubemap cross, therefore you also need to unstitch the cubemap into its faces afterwards if you want to use it in TDM. In cmftStudio you can import single map faces! Well… no, you can’t. The readme on GitHub boasts “Input and output types: cubemap, cube cross, latlong, face list, horizontal and vertical strip.” but this is false. The UI will not allow you to select multiple files on import, rendering the “face list” input type impossible.2 Therefore, to import a TDM envshot into cmftStudio you need to stitch your cubemap into a cross. Fortunately, the “face list” export type does work! Therefore, you don’t need to unstitch the cubemap manually, cmftStudio will export individual faces for you. In both of these cases, then, you need a cubemap cross. For this tutorial I will use Adobe Photoshop, a commercial piece of software, to stitch our faces into a cubemap in an automated fashion (using Photoshop’s Actions). This is the big caveat to using cmftStudio, even if you do not want to buy Lys, PS is still a prerequisite for working with both programs. There are, of course, open source alternatives to Photoshop, such as GIMP, but it is specifically Photoshop’s Action functionality that will power these workflows. GIMP has its own Actions in the form of Macros, but they are written with python. GIMP is not a software suite that I use, neither is python a language I am proficient with. Out of deference for those who don’t have, or like working with, Photoshop, I will later go through the steps I take inside the image editor in some detail, in order for the studious reader to reconstruct them, if they so desire, in their image editing software of choice. At any rate, and at the risk of sounding a little presumptuous, I take it that, as creative types, most of you already have Photoshop on your computers. 2 An asterisk regarding the “impossibility” of this. cmftStudio is a GUI for cmft, a command line interface that does the same stuff but inside a command prompt. I need to stress that I am certain multiple faces can be inputted in the command line, but messing with unwieldy prompts or writing batch files is neither time-saving nor user-friendly. This tutorial is aimed at the average mapper, but a coder might find the versatility offered in cmft interesting. The Cubemapgen Workflow You will have noticed that I purposefully omitted Cubemapgen from the previous discussion. This is because working with Cubemapgen, wonderfully, does not need Photoshop to be involved! Cubemapgen both accepts individual cubemap faces as input and exports individual irradiance map faces as output. Why, then, did I even waste your time with all the talk of Lys, cmftStudio and Photoshop? Well, woefully, Cubemapgen’s irradiance maps look poor at worst and inconsistent at best. Comparing IEMs exported from Lys and cmftStudio, you will see that both look practically the same, which is good! An IEM exported from Cubemapgen, by default, is far too desaturated and the confusing UI does not help in bringing it to parity with the other two programs. If you work solely with Cubemapgen, you won’t even know what ‘parity’ is, since you won’t have a standard to compare to. [Fig. 14] A comparison between the same irradiance map face, exported with the different apps at their respective, default settings. Brightened and enlarged for legibility. This may not bother you and I concede that it is a small price to pay for those not interested in working with Photoshop. The Cubemapgen workflow is so easy to describe that I will in fact do just that, now. After I do so, however, I will argue that it flies in the face of one of the aims of this tutorial, namely: efficiency. Step 1: Load the cubemap faces into Cubemapgen. Returning to specifics, you will remember that we have, at the moment, six .tga cubemap faces in a folder that we want to convert to six irradiance map faces. With Cubemapgen open, direct your attention to these buttons: [Fig. 15] You can load a cubemap face by pressing the corresponding button or using the hotkey ‘F’. To ensure the image faces the correct way, you must load it in the corresponding “slot”, from the Select Cubemap Face dropdown menu above, or by pressing the 1-6 number keys on your keyboard. Here is a helpful list: X+ Face <1> corresponds to *_right X- Face <2> corresponds to *_left Y+ Face <3> corresponds to *_up Y- Face <4> corresponds to *_down Z+ Face <5> corresponds to *_forward Z- Face <6> corresponds to *_back ...with the asterisk representing the name of your cubemap. With enough practice, you can get quite proficient in loading cubemap faces using keyboard shortcuts. Note that the ‘Skybox’ option in the blue panel is checked, I recommend you use it. Step 2: Generate the Irradiance Map [Fig. 16] The corridor environment cubemap loaded in and filtered to an irradiance map. The options on the right are my attempt to get the IEM to look right, though they are by no means prescriptive. Generating an IEM with Modified CubeMapGen 1.66 is as easy as checking the ‘Irradiance cubemap’ checkbox and hitting ‘Filter Cubemap’ in the red panel. There are numerous other options there, but most will have no effect with the checkbox on. For more information, consult the Sébastien Lagarde blog post that you got the app from. I leave it to you to experiment with the input and output gamma sliders, you really have no set standard on how your irradiance map is supposed to look, so unfortunately you’ll have to eyeball it and rely on trial and error. Two things are important to note. The ‘Output Cube Size’ box in the red panel is the resolution that you want your IEM to export to. In the yellow panel, make sure you set the output as RGB rather than RGBA! We don’t need alpha channels in our images. Step 3: Export Irradiance Map Faces Back in the green panel, click the ‘Save CubeMap to Images’ button. Save the images as .tga with a descriptive name. [Fig. 17] The exported irradiance map faces in the folder. These files still need to be renamed with appropriate suffixes in order to constitute a readable cubemap for the engine. The nomenclature is the same as the table above: “c00” is the X+ Face, to be renamed “right”, “c01” is the X- Face and so on. Right left, up down, forward and back. That’s the order! This is all there is to this workflow. A “cameraCubeMap env/testshot” in the light material will give us a result that will look, at the very least, better than the inbuilt makeIrradiance material keyword. [Fig. 17] The map ended up being a little bright. Feel free to open Fig. 4 and this in seperate tabs and compare the Lys/cmft export with the cubemapgen one. A Review of the Workflow Time for the promised criticism to this workflow. I already stated my distaste for the lack of a standardised set of filtering values with this method. The lack of any kind of preset system for saving the values you like makes working with Cubemapgen even more slipshod. Additionally, in part 2, I said that Cubemapgen is the fastest to work with, but this needs to be qualified. What we just did was convert one cubemap to an irradiance map, but a typical game level ought to use more than a single IEM. Premeditation and capturing fake, “generic” environment cubemaps (e.g. setting up a “blue light on the right, orange on the left” room or a “bright skylight above, brown floor” room, then capturing them with envshot) might allow for some judicious reuse and keep your distinct IEM light definition count down to single digits, but you can only go so far with that. I am not arguing here for an ambient cubic light in every scene either, certainly only those that you deem need the extra attention, or those for which the regular lighting methods enumerated in Part 1 do not quite work. I do tentatively assume, though, that for an average level you would use between one and two dozen distinct IEMs. Keep in mind that commercial games, with their automated probe systems for capturing environment shots, use many, many more than that. With about 20 cubemaps to be converted and 6 faces each to load into Cubemapgen, you’ll be going through the same motions 120 whole times (saving and renaming not included). If you decide to do this in one sitting (and you should, as Cubemapgen, to reiterate, does not keep settings between sessions), you are in for a very tedious process that, while effective, is not very efficient. The simple fact is that loading six things one by one is just slower than loading a single thing once! The “single thing” I’m referring to is, of course, the single, stitched cubemap cross texture. In the next part, I will go into detail regarding how to make a cubemap cross in Photoshop in preparation for cmftStudio and Lys. It will initially seem a far more time-consuming process to you than the Cubemapgen workflow, but through the magic of automation and the Actions feature, you will be able to accomplish the cubemap stitch process in as little as a drag-and-drop into PS and a single click. The best thing is that after we go through the steps, you won’t have to recreate them yourself, as I will provide you with a custom Actions .atn file and save you the effort. I advise you not to skip the explanations, however. The keen-eyed among you may have noticed that you can also load a cube cross in Cubemapgen. If you want to use both Cubemapgen and Photoshop together to automate your Cubemapgen workflow, be aware that Cubemap gen takes crosses that have a different orientation than the ones Lys and cmftStudio use. My macros (actions) are designed for the latter, so if you want to adjust them for Cubemapgen you would do well to study my steps and modify them appropriately. For the moment, you’ve been given the barebones essentials needed to capture an envshot, convert it to an irradiance map and put it in your level at an appropriate location, all without needing a single piece of proprietary software. You can stop here and start cranking out irradiance maps to your heart’s content, but if you’re in the mood for some more serious automation, consider the next section.
  3. Builder Compound Pack will help you create better environments for your Builder-themed map sections! The aim of this experimental package is to provide high-quality models, materials, and other assets that don't put a big strain on the idtech4 engine. This early version is slightly more bare-bones than I wished for, as some modular sets (e.g. the roof) proved to be too complex and unfit for general use. Don't worry though, the set will be updated and expanded in future releases. Tweaks – Arch door and arch with hinges models have been removed. They were just static models, not actual door entities, and they weren't super useful, e.g. hey couldn't act as visportal closing entity due to gaps and transparent parts. – Detail texture stage added to selected materials (mostly those you can get very close to). As you approach a surface, you should see a slightly grainy layer that enhances the details. New content – Door01 and door01_frame have been added to both models and entities. This is a basic door for this corridor section. By default, it's locked (with easy lock) and AI will notice if it's left ajar. You may want to disable the latter (set ShouldBeClosed to 0) if you have a section with many AIs and doors, as it will probably disrupt AI patrolling too much. The frame will work with walls that are 16 units thick. Both door and the frame will work with grid of 8 and smaller. You can use the grid of 4 to change the door position within the frame. Look for grooves in the frame model. First of all, launch the map to see a simple section that was made with these assets. Use the menu or type map bc in the console to start the map. Noclip though the north wall, if you want to get to the staging area and see all pieces used to make this section. General info and tips: Make sure you have Rotate func_* entities around origin (Ctrl+R) enabled (Dark Radiant top icons) to use models efficiently. All models have custom pivot / origin point placement to make them snap to grid and geometry really fast. If you have keyboard shortcuts configured for RotateSelectionX/Y/Z and FloorSelection, placing these models around the map will be a breeze. I also recommend having shortcuts for SelectNudgeUp/Down/Left/Right, so you can move models in ortho views without using a mouse. DR detects models in a weird way, e.g. if your model is one-sided, or has some faces turned back to the camera in ortho view, selecting and moving it around will be difficult. Using keyboard is often more seamless and precise. You can select a model in perspective view, and then move it around in X/Y/Z plane using keyboard. Optimal scale for tileable materials is 0.125. This provides good pixel density vs repetition. Materials are optimized to be used both with and without post-processing, and the default gamma of 1.2. In some cases, specular hotspot might look slightly overblown with post-processing enabled. Correct look without post-processing was the first priority. Same principles apply to using lamp. The main idea behind this set is that you can use simple brushes for walls and floors, and wall panels have proper offset, so you don't need to use special surrounding BSP behind them. You can place panels right where your walls are, and there will be no z-fighting or clipping. Assumed basic measure for a corridor is 192 x 192 (length / width), but you can go lower if you don't plan to use arches and metal doors. The smallest wall panel piece is 24 units long. Use brushes to create basic space, then adjust it to what you can make with wall panels (combinations of 24, 48, 96, 192 etc.). DR's measurement tool is your friend. Default grid for placing most pieces is 8, but it goes down with smaller / more complex models and setups. One special case is matching metal doors to arch with hinges, this needs grid of 2. That's a mistake on my part. I didn't think of better pivot placement until it was too late. The example map contains a "staging area" where you'll find grouped arch, hinges, and doors, so you can use that as a template. As per The Dark Mod license, you may modify this pack's contents, although I'd advise against it. Most textures are compressed in lossy DDS format and compressing them again will result in loss of image quality. If you want to make changes, need alternative versions of a model or material contact me first. I'll see what I can do. Last but not least, I hope you'll find this pack useful and fun to work with, as I had plenty of fun while making it I already have a long list of models and features to include in subsequent releases, but I'm always open to feedback and suggestions. Thanks! Credits: Springheel, Obsttorte, Spooks, nbohr1more, STiFU, Destined and other TDM Forum members: guidance, encouragement, and fruitful discussions Epifire: asset feedback and critique The Black Arrow: inscription texts Plans for upcoming releases: Corridor: - Fixing the wall panel collision model, so strafing along it isn't wobbly Done. - Roof modular set Done. - Making metal door an entity with proper sounds and open/close times. Done, made proper door instead. - Floor switch model/entity for metal doors - Window set Done. Roadmap: All work is on hold for now. I'm working on a small FM that will use some of these assets plus many more. Some of existing assets will get reworked too. All links are taken down, and I have no release date yet, sorry.
  4. I have quite a few assets from WIPs I'll probably never use elsewhere, so I thought I could share it here. Some of these are older and not necessarily matching the TDM lore, but I hope someone will find use for them. In terms of package format, I'll be creating 7zip packages with just model and/or texture files, so you can place them wherever you like in your project. I'll also include example material or def setup. I'll leave textures in .tga format, so you can make edits on uncompressed source and save as .dds later. So first up is a door/frame/key combo: Temp upload of all assets: https://we.tl/t-BOdrlNEXWJ See readme_notes for design / placement instructions.
  5. Horror themed fan mission - exploration of seemingly deserted keep in the middle of swamps. Spiders, undead, darkness. ----------------------------------------------------------------------------------------------------------------------------- This is the story about the fate of my family. My uncle, Ralph Mac Roberts, is the baron of a keep nestled deep within the Rahenaen marshes. It was once an important outpost tasked with guarding one of the few Builder roads that cross the marsh, but after the Inventor`s Guild built a system of nearby dams that flooded the whole land, the road closed and there was no longer anything to watch over anymore. The keep itself needed reinforcement against the raising water level and the trade routes become almost impassable, not only for the carriages but for lone couriers as well. There hadn`t been any messages coming from the keep for over a year and my father was about to assemble a caravan so he could go on an expedition to the keep himself. However, in the middle of the night before he was set to leave, a carrier pigeon landed on his windowsill. My father received the letter and read the apologies from my uncle and his family, excusing their long absence. As a way to make reparations for their extended silence, my uncle invited me to the keep to stay there for a fortnight or so. My uncle had instructed me to leave my horse three leagues away from the keep by the nearest charcoal burning hut and hike the remainder of the road on foot, as the trek through the marsh is treacherous for horses. The weather will be awful this time of year, but my father insists that I should go anyways to ensure that our relatives are okay. These plains become dreadfully deserted - to the point where you more expect to meet the dead than the living. And by the way - I think I`m lost. ----------------------------------------------------------------------------------------------------------------------------- Download link: https://1drv.ms/u/s!Aj1DVS465udZgVkXteBbr6cUxdPH Thanks: to the TDM team for great tools, and all the contributors for their assets, to betatesters: Amadeus, Bienie, Boiler's_hiss, Dragofer, Filizitas, Judith, nbohr1more, s.urfer, again to Amadeus for proofreading and text tweaks, and to all the players for their time! Few screenshots: http://forums.thedarkmod.com/topic/10003-so-what-are-you-working-on-right-now/?p=434716 http://forums.thedarkmod.com/topic/10003-so-what-are-you-working-on-right-now/?p=429558 http://forums.thedarkmod.com/topic/19886-fm-marsh-of-rahena-beta-testing/?p=434507 Enjoy! Walk-through !major spoilers! Finding a way across the marsh area: Getting inside: Bed objective: Light sources: Maps: Enemies: Room objective: Hut objective: Sealed objective: Gold: Key: Bodies:
  6. This issue has been occurring in the last few weeks, and my first thought was that it is due to a regression that happened during the code reorganisation and the necessary changes to GL context handling. In my Ubuntu 20.10 machine I walked back the git history up to the point of the DR 2.8.0 release, but as it turns out, the problem is happening there too. When switching between Media and Texture tabs, the GL widget is not refreshed, unless you resize the tabs using the splitter between cam and orthoview: So I launched my other VM running Ubuntu 19.10 and was rather surprised that this problem does not happen there, even with the latest git checkout: I'm not sure where this behaviour is coming from all of a sudden. While I can't rule out that DR is doing something wrong in terms of context handling, there sure seems to be a difference between the two Ubuntu 19/20 setups. Any suggestions on how to go ahead and find out where the problem is rooted? The one idea I have: Since Ubuntu 19 is using wxGTK 3.0.4 and Ubuntu 20 is using the latest wxGTK 3.0.5, I will try to compile the older wxWidgets 3.0.4 release from source and use that in the newer Ubuntu 20 version, to see if the problem goes away.
  7. EDIT: EVGA 980ti on latest drivers, if that matters. I've been plugging away at my cave map, but I keep running into issues so it's taking a long time. Now, the skybox isn't working. Basically the sky texture is just transparent. I fixed it by deleting the brushes, creating new ones and texturing just one face as sky. After DMAP that worked. So I then textured the other 3 sides and then it was broken again. Changing the other 3 sides back to regular textures didn't fix the broken sky rendering. Now, even deleting the skybox prefab, the offending textures/brushes etc, won't fix it. I created a test map, and copied and pasted the same brushes and prefab and it's also broken there. Deleting the prefab and readding it, and texturing new brushes with sky, won't work. In 2.08: In SVN: You can see the prefab is very close to the sky texture. I've also tried moving the skybox prefab outside the map and at various places, even to 0,0,0 but that didn't help. The skybox looks fine in game, I can noclip into it and see all the little details. I've attached the map file, you'll have to rename the file from maps.zip.txt to maps.zip to extract it. skytest.zip
  8. Right, I forgot that's also a reason why TDM has every single texture from cgtextures listed in license.txt. But, according to current EULA, that might not be enough:
  9. Sorry to resurrect an old thread, but what is the conclusion here? I'm particularly asking about textures.com, because in my latest FM (WIP) I've used tons of textures from there. When I first looked at it, I had concluded that it was OK to use them, but now I'm second guessing that because of this (also mentioned above): Please note that it is not allowed to release our images under Open Source licenses (even when the materials are modified). If you are working on an game that is released under an Open Source license, you need to release content that has been created using our materials under a closed source license. However, this here make me think it might be OK? From https://www.textures.com/support/faq-license#3d-model CAN I USE THE MATERIALS ON A 3D MODEL OR SCENE OR VIDEO GAME LEVEL WHICH I WILL OFFER OR SELL ON A DIGITAL MARKETPLACE? Regular textures may be bundled with 3D models, scenes or video game levels under the following conditions: you have customized the materials for the 3D model, scene or game level, all materials are actually used on the 3D model, in the scene or game level you are selling the model and materials in one package. In other words: do not use bundling as a loophole to sell a texture or material pack. Please add the following text in the documentation accompanying the model: "One or more textures bundled with this project have been created with images from Textures.com. These images may not be redistributed by default. Please visit www.textures.com for more information." IMPORTANT: the exception to this is any content in the Special Content categories: 3D Scans, 3D Scans Atlas, 3D Objects, 3D Foliage, Substance, PBR Materials, Decals, HDR Spheres, HDR Skies, Graphic Designs and 3D Ornaments. The materials in these categories may NOT be bundled with 3D models or scenes. This even applies when you modify the materials: modification does not mean you are allowed to bundle these types of materials. Again I'm specifically talking about using these are part of a fan mission, not the core game. To satisfy the conditions above, I will: customisation: all textures have been converted to different formats (.dds and .tga) or resized I won't include any textures in the .pk4 that aren't included in the mission the FM will be bundled into a single .pk4 package (and I'm obviously not selling it). I'm only using the 'regular textures', not PBR or 3D materials. I will include the text 'One ore more textures...' in the FM readme.
  10. The latest dev build (dev16629-10139) contains some changes regarding frob highlight. The full explanation is given in 5427. Most importantly, the material stages are now generated by default if they are missing. The core materials will be cleaned accordingly in near future. Also we added new syntax for customizing frob-highlight in simple cases. First of all, you can set frob-highlight with custom texture (e.g. it can be specular map) and arbitrary coefficients: frobstage_texture textures/darkmod/sfx/whiteglass2 0.25 0.5 Since diffuse texture is used in most materials, here is a shortcut for it: frobstage_diffuse 0.1 0.35 The first number is the multiplier applied to texture, and the second number is the amount of white color added. You can also make non-white multiplier or addition by putting three numbers in parentheses, e.g.: frobstage_diffuse (0.15 0.35 0.15) 0.4 Of course, the most recommended approach is to not write any frob text, in which case frobstages are added implicitly as "frobstage_diffuse 0.15 0.4". The implicit frobstages are added only if there are no frobstages specified explicitly. If you want to suppress implicit generation of frobstages (not recommended), you can write: frobstage_none Finally, if you want to make something special and customizations listed above are not enough, then you can just write frobstages the old way via parm11 parameter. The old frob-highlight stages should continue to work properly. If you write frobstages manually, please follow the rules (or you'll get warnings): Start every frobstage exactly with if (parm11 > 0) condition. Do not mention parm11 outside frobstages. P.S. Here is previous discussion of frob highlight, in case anyone is interested:
  11. This is something I had in mind a while back. To me, both names and usage of those tabs is kind of overlapping and confusing, especially to newcomers. First off, the naming convention. Media tab lists all available material shaders (and not any other media, like sound shaders), while Textures tab is a list of material shaders currently used in the map. Not only the tab names are technically wrong, but also the functionalities could be merged into one tab, I think. If you ever worked in other engines, a typical content/material browser does load all materials used in current map, but it also has a folder structure list on the left hand side (this would be the equivalent of Media tab). Double clicking a package name loads the material and displays its preview tile in the pane on the right hand side. To achieve similar functionality, I imagine the Media and Textures tabs would have to be merged into one Materials tab. I only have doubts about having it as a embedded window in Regular or Regular Left window layout (i.e. under the perspective view and sharing its width lock with it). Having it as separate floating window, as with other inspectors, would probably work better. In general, this should speed up mappers work and make the use of materials more intuitive (I hope). Your thoughts? @greebo, @OrbWeaver are there technical blockers in terms of DR coding? Edit, a mock up:
  12. No problem btw there's no vertex blend texture, the vertex colors are baked in the mesh itself, meaning they should be exported in the .ase file itself. And yes the first "path" in a material is just a material name, it can be any unique identifier, the real textures are defined inside the material itself. materialname { //global space { // diffuse material stage blend diffusemap map path/to/the/real/texture.tga } } or materialname { //global space diffusemap path/to/the/real/texture.tga }
  13. Anything collection of polygons can be a collision model. It just needs a collision texture. To convert a non-solid visual model to collision, replace the texture with a texture that has inherent or explicit collision. To make a collision model visible in DR? Re-Texture it with a visible texture or skin. Beware of nonsolid entity arguments that override the collision texture. See also "surface parameters": https://modwiki.dhewm3.org/Global_material_keywords_(Doom_3)
  14. I was wondering if there's a special DarkRadiant technique/tool for adjusting a texture orientation by an edge. A level designer I'm working with made a demo video describing this: Basically, right now he is doing some calculator work to angle a texture along an edge -- is there a shortcut of some kind to do this? Thanks!
  15. I think a little dynamics to the windows (with light) on various buildings would add quite some life to the dark mod. A first step might be to just simply animate the brightness of *some of* the window texture slightly and randomly +/- 5% or so to give the impression of a candle burning inside. Windows that are close to rooms - for example a window next to a window that you can open could perhaps be enhanced by shadows moving inside (for example when a guard/person is moving by). Not sure if this have been suggested before, or if this at all possible. Personally I think it would add a lot of life to the game and make it less static in places.
  16. Hello, I want to discuss DR's texture tool and the way Radiant handles texture mapping in this topic. The texture tool is a window (Ctrl+Alt+T) where you can fine tune how a given texture gets mapped on a brush's face. I have noticed that, oftentimes when selecting multiple sides of a brush, the unwrapped UV islands are placed way too far from each other. Not something you'd care about during regular mapping, but I think this is a problem in theory, which can become a problem in practice when exporting models from DR. This is actually my impetus for starting this thread, as I imported a DR model in Blender only to find its UV map being all over the place. Here is an example of what I consider problematic. You can see that the face I've selected, behind the Surface Inspector, is already in the negative quadrant of the UV coord grid. Yet the surface inspector shows both horiz. and vert. shift to be at 0. Moreover, if I start changing those values with the arrow keys, the shifts will go up to 255 and then wrap back to zero, while the UV map will continue to scroll through the UV grid infinitely, instead of looping back to where it was. Couple this with the arcane way in which the Paste Shader commands work, and you have situations where two brush faces might look aligned in 3D but have their UV maps be thousands of units apart in 2D. Is there an explanation for why this works the way it does? Any way to make it better? Obviously, I'm not asking for DR to magically clamp all UV maps to the 0-1 UV space or unwrap brushes' sides like a modelling app would. It does, however, seem weird why there'd no apparent anchor for mapping faces to the UV space and they keep straying from the origin constantly.
  17. Not so long ago I found what could make a pretty good profile picture and decided to try it out on these new forums. But I couldn't find a button anywhere that would let me change it. I asked on Discord and it seems Spooks also couldn't find anything anywhere. So I logged into an old alternative account and, lo and behold, that account has a button. This is on the first screen I get when I: 1) click on my account name in the top-right of the browser -> 2) click on 'profile'. Compared to my actual account: Are you also missing this button on your account? It'd be very much appreciated if that functionality could be restored to any of the affected accounts.
  18. Though this is related to PBR as a component in getting it done right (like reflection probes) I thought it's an improvement of its own that's worth discussing. I don't know if this is implemented or estimated in some form, but working with light entities in my own FM's I haven't seen any spawnargs for it so I presume it's not. At the moment lights in TDM act as zero-scale points, light sources have no actual radius. I know what you might be thinking: Of course lights have a radius, it's the box that decides how far a light shines and what it affects! What I'm referring to is not the range but the emission radius, representing the scale of the bulb itself: Think of it as a minimum radius... at the moment lights only have a maximum radius, the minimum is currently a point. In modern engines this affects both specularity and shadow softness as well as how the light is distributed. Like most engines we shouldn't need anything more than a float describing the size of the bulb, a simple sphere ought to be enough... given we already work with radius boxes, we could instead use a separate box which would give us better control with unevenly shaped bulbs. Every default light entity should of course be updated to use this: Torches / candles would set it to the average size of their flame particles, gas / electric lamps should have it represent the scale of the light bulb or the lamp head. If done right this can greatly improve our graphics and add more realism, but as with most things it's not going to be that simple. Also this would create changes to the lightgem in all FM's but very minuscule ones that shouldn't even be detectable. There's 3 different components I presume we have to tackle independently. Soft shadows: Shadowmap softness is probably the easiest, just add the average bulb radius to their value. Specularity: At the moment all lights seem to produce specular orbs of the same fuzziness on shiny surfaces. What we probably want is for lights that keep their min radius 0 to produce a fully sharp orb or dot, softness is added to each light's ball based on this radius. Light projection: The biggest aspect is changing how light is distributed, the projection texture / falloff material would emanate very differently. Everything inside the bulb would shine at the intensity of the center pixel and should start fading from the min radius toward the max, the projection texture would get slightly inflated like a balloon. The best solution (which also accounts for blur) seems like a 2D shader that copies the light texture onto itself at slightly different offsets to make it fuzzy: There's already a blur filter that does just that when you're underwater for example, we could to get away with doing the same thing to light textures using the min radius as the offset parameter. As lights typically don't change scale, this should be possible to do only once at map start rather than every frame including for moving lights like torches, this way we should have no performance loss.
  19. Public release v1.7.6 (with Dark Mod support) is out. Improvements since the final beta 14 are: Fixed a few remaining bugs with zip/pk4 support. Game Versions window now properly displays TDM version. Import window no longer has a vestigial off-screen TDM field (because TDM doesn't need or support importing). Web search option is now disabled if an unknown/unsupported FM is selected. If an FM with an unknown or unsupported game type is selected, the messages in the tab area now no longer refer to Thief 3 ("Mod management is not supported for Thief: Deadly Shadows"). The full changelog can be viewed at the release link. The de facto official AngelLoader thread is here: https://www.ttlg.com/forums/showthread.php?t=149706 Bug reports, feature requests etc. are usually posted there. I'll continue following this thread though. Thanks everyone and enjoy!
  20. I think the new thread started from me posting about a sharp texture, I didn't understand what was causing it to be pixel-grainy, it was later clarified that lack of mipmaps can do that. I suspected it might be a common occurrence and combined that with the same happening to sharp edges. Hence me wondering if a solution to address all such artifacts can exist. Personally I think FXAA would be an improvement, but if the other devs feel it would look ugly I understand that. I don't agree the issue isn't noticeable due to darkness, I tend to notice it a lot and look for ways around it. I understand an easy solution isn't possible now, like I said the thread branched as I posted about a sharp texture error which I misunderstood as being related to (texture) AA in some form.
  21. Thanks for the replies, gonna try those spoiler Tags again now for my short review (oh well it inserted one above my text now and I can't seem to delete it on mobile - this text editor is strange)
  22. Just finished this mission and wow I gotta say in great honor to Grayman and of course the rest of the team picking it up, this was something I've never seen before in any other TDM mission, especially visually wise. I am so happy that grayson gave green light for other experienced mappers to finish his last mission. And what came out of this is really something special. I'll put my review in spoiler tags since I'm now referring to critical mission details. Edit - How do I put spoiler text here on mobile?? [spoiler] test [/spoiler][SPOILER] test [/SPOILER] [spoiler[spoiler [sfah
  23. Good work! I enjoy short missions because things are nice and focused - you get in, you get out. Also I tend to do better with the loot amounts and I was able to get all the loot without too much trouble, which is rare for me. If I were to make a suggestion though - I found the intro briefing sequence a bit distracting because it was so obvious the narration was pitch-shifted to make a deeper voice. If you felt the original voice wasn't deep enough for your needs, I would either get someone on the forums to record it for you or just leave as is. That's my only real complaint and it's not even about the mission itself, so pretty good first start!
  24. Okay, I had no idea, I have googled it up now and you are right, to my own surprise. Done, I´ve put some paragraphs which were previously not in spoiler tags into spoilers.
  25. Thebigh is right. The pronunciation tripped me up too, but that is apparently how Leicester is pronounced. Also @TarhielI'm glad you are loving the FM but do you mind putting spoiler tags on your post please
×
×
  • Create New...