Jump to content
The Dark Mod Forums

Search the Community

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

Didn't find what you were looking for? Try searching for:

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • 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


Last Updated

  • Start


Filter by number of...


  • Start





Website URL







Found 6039 results

  1. Hum in that case can't you just use the available AI script code? Unless the TDM team changed totally the Doom 3 AI code, the original AI had this script functions, see if they are available (and work...). .faceEnemy(); .faceEntity(); .canSee(); .TurnTo(); .TurnToPos(); .TurnToEntity(); .LookAt(); // For the heads .LookAtEnemy(); // for the heads And others. Here is the code for the Doom 3 sentry robot, where some of those are used, here just as a guide, I don't claim any of this works on TDM but no harm in trying I guess. /* ===================== char_sentry::state_Combat ===================== */ void char_sentry::state_Combat() { float attack_flags; eachFrame { faceEnemy(); lookAtEnemy( 1 ); if ( AI_ENEMY_DEAD || !getEnemy() ) { startSound( "snd_target_lost", SND_CHANNEL_VOICE, false ); AI_ENEMY_DEAD = false; clearEnemy(); setState( "state_Idle" ); } attack_flags = check_attacks(); if ( attack_flags ) { do_attack( attack_flags ); continue; } if ( canReachEnemy() ) { combat_chase(); } else if ( !find_attack_position() ) { ignore( getEnemy() ); checkForEnemy( false ); } waitFrame(); } } (edit): To make a entity spawn in front if the player, try something like this, change has needed to work on TDM: float someDistanceValue = 128.0; // Doom units tweek has needed vector playerOrigin = self.getOrigin(); // player needs to exist in the world already vector playerAngles = self.getAngles(); vector playerForwardVec = sys.angToForward(playerAngles); vector enemySpawnPosition = playerOrigin + (playerForwardVec * someDistanceValue); entity enemy = sys.spawn( "classname" ); enemy.setOrigin( enemySpawnPosition ); Not sure if the spawn code itself is correct at all.
  2. Thought it would be a good idea to collate a useful list for new and old mappers alike and this post will update as we go. Abandoned works: Any WIP projects that were abandoned by the original author - http://forums.thedarkmod.com/topic/12713-abandoned-works/Darkradiant & Darkmod shortcut settings: Some example settings for new mappers - http://forums.thedarkmod.com/topic/15152-darkradiant-and-darkmod-shortcut-folder-settings/Darkradiant howto, must knows, tips and faqs - http://forums.thedarkmod.com/topic/12558-usefull-important-editing-links/?do=findComment&comment=272581Info for Beginners: Newbie DarkRadiant Questions - http://forums.thedar...iant-questions/Dark Radient Must Know Basic Intro - http://wiki.thedarkm...now_Basic_IntroEditing Tips for Beginners - http://wiki.thedarkm...s_for_BeginnersEditing FAQ (Troubleshooting & How-To) - http://wiki.thedarkmod.com/index.php?title=Editing_FAQ_-_Troubleshooting_%26_How-ToSotha's excellent Mapping Tutorial series: http://forums.thedarkmod.com/topic/18680-lets-map-tdm-with-sotha-the-bakery-job/Springheel's New Mapper's Workshop: http://forums.thedarkmod.com/topic/18945-tdm-new-mappers-workshop/ Inspiration: Collection of screenshots and images people have found online - http://forums.thedarkmod.com/topic/11610-darkmod-inspiration-thread/Mapping Resources: List of Voice actors available for voice recording - http://modetwo.net/d...6-voice-actors/Lengthy collection of city reference pictures - http://modetwo.net/d...rence-pictures/Collection of texture resource sites - http://modetwo.net/d...ture-resources/Free Ambient Tracks - http://skeksisnetlabel.wordpress.com/2009/12/30/10-songs-for-free-download-vol-10-full-moon-over-noricum/Mapping Tools: 3 useful tools for texture creation - http://forums.thedarkmod.com/topic/18581-must-have-tools-for-the-descerning-mapper/Modular Building: What is Modular building - http://forums.thedarkmod.com/topic/14832-modular-building-techniques/Working example tutorial on modular building - http://forums.thedarkmod.com/topic/18680-lets-map-tdm-with-sotha-the-bakery-job/Springheels new modular models - http://forums.thedarkmod.com/topic/18683-using-springheels-205-modules/Some related mapper recipies -Easy Vaults - http://forums.thedarkmod.com/topic/14859-easy-vault-recipe/?hl=%2Beasy+%2BrecipeEasy Outdoors - http://forums.thedarkmod.com/topic/16159-easy-outdoors-recipe/?hl=%2Beasy+%2BrecipeEasy Caverns - http://forums.thedarkmod.com/topic/14469-quick-caverns-recipe/?hl=recipeEasy Alert Ai - http://forums.thedarkmod.com/topic/17157-easy-alert-ai-recipe/?hl=%2Beasy+%2BrecipeEasy Alert Ai Custom Behavour - http://forums.thedarkmod.com/topic/17160-easy-alert-ai-custom-behavior-recipe/?hl=recipeTutorials: Collection of video tutorials for DR - http://modetwo.net/d...in-darkradiant/Using Lighting and detail effectively: - http://forums.thedar...l-and-lighting/Voice Actors list: List of available voice actors - http://forums.thedarkmod.com/topic/12556-list-of-available-voice-actors/Usefull Console commands: A list of console commands for testing in-game - http://wiki.thedarkm...Useful_Controls
  3. DarkRadiant 2.8.0 is ready for download. Next to a considerable number of bugfixes and improvements, a nice amount of new editing features made it into this build. There's a new way to select items by filter, it's possible to retain grouping information when copy-pasting between DarkRadiant sessions, a new "Select Parent Entities" command has been added, and more. A new DarkRadiant User Guide is being worked on and available on the website https://www.darkradiant.net/userguide (also accessible through the About > User Guide menu option). Windows and Mac Downloads are available on github: https://github.com/codereader/DarkRadiant/releases/tag/2.8.0 and of course linked from the website https://www.darkradiant.net Thanks go out to all who helped testing this release! Please report any bugs or feature requests here in these forums, following these guidelines: Bugs (including steps for reproduction) can go directly on the tracker. When unsure about a bug/issue, feel free to ask. If you run into a crash, please record a crashdump: Crashdump Instructions Feature requests should be suggested (and possibly discussed) here in these forums before they may be added to the tracker. Changes since 2.7.0 Feature: Selection by Filter Feature: Preserve grouping information when copy-pasting between multiple open instances of DR Feature: Add Portable Map Format storing map and additional data in one single file Feature: Preserve grouping information in prefabs Feature: Model chooser now lists .md3 models Feature: The Dark Mod: Let DR look for either 32-bit or 64-bit TDM .exe's Feature: The Dark Mod: Added ability to edit difficulty names Feature: The Dark Mod: Add Move up/down buttons to Conversation Editor Feature: Add type-to-search ability to AI vocal set and head chooser dialogs Feature: Let DR remember the shader in ShaderClipboard after closing Feature: Add option to show "Other Materials" in Texture Browser Fixed: Edit Objectives dialog doesn't adjust its height when selecting a component Fixed: DR can't find materials whose names start with table Fixed: It's possible to delete the classname spawnarg through the context menu Fixed: All spawnargs with the same value as the "name" spawnarg iterate when the entity is cloned Fixed: Removing a Stim/Response entry can break the remaining entries Fixed: Loading error caused by non-Latin character in filename Fixed: Texture Tool: crashes on brush surfaces with texture scale 0 Fixed: Undo after thickening a cylinder cap along vertex normals causes crash Fixed: Readable Editor Crash Fixed: Python 3.8 does not get linked (Linux) Fixed: ConnectNamespacedWalker Warning when cloning selection containing links and targets Fixed: Show English difficulty names in the Difficulty Editor instead of the #strNNNNN IDs Fixed: 'Reload models' reveals hidden models Fixed: 'Show help' etc. checkboxes in entity inspector aren't remembered by DR Fixed: 'Show help' tooltip text updates incorrectly Fixed: Changing classname ties entity's visibility to 'Default' layer Fixed: Resized Models lose their scale in auto-saved maps Fixed: Autosaves don't save last camera angle & position Fixed ToggleFullScreenCamera command for Embedded and RegularLeft layouts Tweak: Removed/disabled close button from all dialogs Tweak: Allow fixed Subdivisions to go higher than 32 Tweak: Targeting projected lights: let the line point to the light source instead of the light volume's midpoint Tweak: Collapsing a folder in a treeview now collapses all child elements too The list of changes can be found on the our bugtracker changelog. Have fun mapping!
  4. Full-bright and semitransparent describes it perfectly. These are all textures or skins that were defined by the base game, not custom ones by me. I heard at some point (I don't know if this is true) the assets for the base game got broken out into a bunch of different pk4 files. I wonder if some materials defs got lost in the transition? Just a stab in the dark here, with nothing to guide me but a full-bright semitransparent basin.
  5. In order to thank the team (and other mappers) for their relentless efforts in contributing, I hereby give the community.... Ulysses: Genesis A FM By Sotha Story: Read & listen it in game. Link: https://drive.google.com/file/d/0BwR0ORZU5sraTlJ6ZHlYZ1pJRVE/edit?usp=sharing http://www4.zippysha...95436/file.html Other: Spoilers: When discussing, please use spoiler tags, like this: [spoiler] Hidden text. [/spoiler] Mirrors: Could someone put this on TDM ingame downloader? Thanks!
  6. Inn Business It's business, at an inn, over three nights. Development screenshots: Download: https://drive.google...dit?usp=sharing Update 1.48 uploaded March 8th, 2014, one change: patches key rarely not being frobable in one of its possible spots Big thanks to my beta testers: Airship Ballet, Kyyrma and AluminumHaste! Development supporters of note: Sotha, Springheel and Obsttorte. Also thanks Sotha, for urinating in my mission. ;-) And thanks Kyyrma for the title screen! My appreciation to all forum/wiki contributors, without whom, this wouldn't exist. Thanks to positive commenters on my previous mission too, extra motivation helps! :-) Note this uses campaign features, what you use the first night, impacts subsequent nights. And to quote a tester, "...the level is maybe best experienced in more than one sitting". If you do pause between nights, please be sure to save, you can't begin partway through effectively. (If you accidentally start a night you already completed, just fail the kill objective to switch to another night.) If your frame rates are too low facing the cemetery, please reduce your "Object Details LOD" setting. It was designed with "AI Vision" set to "Forgiving", to be able to sneak through with minimal reactions, if you want more/less, adjust your settings accordingly. There are several random, conditional aspects, and ways of going about things, so others might have slightly different experiences. Post here if you discover hidden objectives for extra points! My condolences to loot completionists, I made a bit on the third night hard, you've got your challenge cut out for you! Speaking of which, there's a TDM bug that mission complete totals too high, here are the real amounts per night: 2026/970/202. Oh, there is something that in the U.S. would be rated PG, in case you play with kids in earshot. I hope you enjoy playing it, feel free to let me know you did, and I'm glad to respond to inquiries (like how stuff was done, nothing was scripted). (Note which night you are referring to if it's something specific.) (Please remember spoiler tags to not expose things meant to be discovered by playing.) Like so: [spoiler]secrets[/spoiler] Developed for TDM 2.01. PS: Thiefette, good news, no spiders! Springheel, if you find an optional objective you can skip...you might find it immersion breaking. Others, no undead! There are a couple other interactive critters though. :-) Edit note: Some posts below were from users of an unreleased version of TDM 2.02 which broke several things, they do not reflect regular game-play.
  7. We didn't make the holidays (such a busy time of year) so here's a New Year's gift, an unusual little mission. Window of Opportunity Recover an item for a regretful trader out in a wilderness setting, and discover more! Available within the in-game mission downloader or: Download: http://www.thedarkmo...ndetails/?id=79 Alternative: https://drive.google...WTMzQXZtMVFBSG8 Some unorthodox gameplay on regular/ghost difficulties. (Arachnophobes might prefer short mode...) Please expect to need your lantern in regular and ghost modes! Short ("easy") mode is a smaller map, so if you are looking for areas others reference below, or 100% of the loot, you'll need to play on another mode. I wanted to create my first mission before I became influenced by too many others' ideas, and limited myself to what has been done before. As such, this mission is not set in a city/town, and has some features that are likely to be provocative. There's a section some really like, which others don't, either way I kept it short to not last too long. That being said, I hope you do find it fun! :-) Special thanks to those who provided valuable testing and feedback: Goldwell, Kyyrma, plotzzz, 161803398874989, PPoe & Bikerdude (who also contributed a sound). (Please remember spoiler tags to not expose things meant to be discovered by playing.) Like so: [spoiler]secrets[/spoiler] If you are having trouble finding the main objective, here's what to pay attention to in the mission for hints: There is a spot it's possible to get stuck on the ground in the corner by the cliff/rockfall where there's a rope laying on the ground, please take care if you poke around there!
  8. Description: Fleece the mansion of a former colleague that betrayed you. This is a relatively small, straightforward thieving mission set in an upper-class neighborhood. Version: 1.0 File: The mission is now available via the in-game downloader. If you need to download it separately, the link is below: PK4: https://drive.google...dit?usp=sharing Beta Testers: Airship Ballet RJFerret Thanks: First, to my excellent beta testers, who were prompt with responses and thorough with their testing. Several small but important gameplay tweaks came about as a result of beta testing, and the mission is better off for them. Second, to Fidcal, who I've not had the pleasure of "meeting" on the forums. His incredible tutorial made this mission possible. Third, to everyone who helped me out in small ways on the forums. Grayman graciously fixed a couple problems for me via PM, and several of you answered my questions in the Newbie thread. Notes: This is my first FM for any Thief game, and incorporates many of the techniques learned in Fidcal's A-Z tutorial (as well as a couple others I picked up along the way or during beta testing). It was intended as equal parts playable, fun mission, and as a way for me to learn how to make a functional level using DR. I'm happy with the result, and I hope you are too! As a secondary note, from installing Dark Radiant to typing this sentence, it couldn't have been than two months. My hobby-level skills as a graphic designer and programmer undoubtedly helped some, but honestly most of it was just slogging through Fidcal's tutorial in my free time. Anyone can learn this quickly and create working, fun levels. Preview Shots: {note, some of these locations will look slightly different in the final version, as these were taken before beta testing} http://imgur.com/a/AuxWJ
  9. There's now an editable fan mission list on the wiki, for the sake of tracking missions made for The Dark Mod. Please read and follow the guidelines, and help keep the list up to date! Direct link, but also accessible from the wiki title page: http://wiki.thedarkmod.com/index.php?title=Fan_Missions_for_The_Dark_Mod Discussion of changes (format, policies, entries, etc.) can take place in this thread. --------------------------------------- There is also now a wiki page to track upcoming fan missions: http://wiki.thedarkmod.com/index.php?title=Upcoming_Fan_Missions Submissions, progress, and any discussion for missions under construction can take place here: http://forums.thedarkmod.com/topic/11639-upcoming-fan-missions/
  10. 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.
  11. Just so this is available in a stickied place https://forums.thedarkmod.com/index.php?/topic/20384-video-introduction-to-dark-radiant-for-new-mappers/
  12. DarkRadiant 2.7.0 has been released, this thread is out of date: Here's the DR 2.7.0pre5 build for motivated mappers to test. It's a maintenance build for the most part, but it contains a few smaller improvements. As usual, a bit of refactoring and improvement has been happening under the hood, but this shouldn't have any negative impact. Especially, I would be interested if installation works, as I've moved forward to Visual Studio 2019 for this build. OrbWeaver has been working on a DarkRadiant user guide which is continuously expanded and available on the website https://www.darkradiant.net/userguide (also accessible through the About > User Guide menu option). Windows Installer x64: https://drive.google.com/open?id=1ePE5oYYBq_2AcoNtQSBFGjXTBWk3fuWe Windows Portable x64: https://drive.google.com/open?id=1hCO5nxhcmm5jQipRPa8lBNrzstfdj-AR Linux folks need to compile this stuff from source, instructions for various distributions are on the wiki. If you happen to run into a crash, please record a crashdump: How to record a crashdump Changes since 2.6.0 can be seen on the Bugtracker changelog, important stuff includes so far: #5071: General: Upgrade VC++ projects to VS2019 #4889: Feature: A method to deprecate models without breaking existing maps #4873: Feature: Game/Project Setup should show recently used custom paths in the mission drop down list #5021: Fixed: DR gets unhandled exception on start up #4792: Fixed: Rotation of x-oriented particles in Particle Editor is different than in-game #5054: Fixed: Highlighted vertices of hidden brushes will move when moving highlighted vertices of visible brushes. #4904: Fixed: Unmaximised DarkRadiant not remembering main window size and location #4966: Fixed: Reload Models option in Create Model dialog window doesn't update the model #4999: Fixed: Problem with satisfying readable objective "when closed" #4859: Fixed: DR thinks an entity name of the form "Cylinder01" is the same as "Cylinder1" #4885: Fixed: Syntax error in "Test for missing targets" script #4880: Fixed: Bad normals produced by .ASE exporter #4876: Fixed: No confirmation dialogue box when exporting combined models #4861: Fixed: Undo/Redo Does Not Restore Light Color #4874: Fixed: Compile error with gcc-7 (and gcc-8) #4841: Fixed: Blend export script fails #4840: Fixed: Mouse Binding settings for Aux1 do not work Changes since 2.7.0pre1 #5078: Fixed: Search feature in TreeView controls seems to be broken #5081: General: Updated Xcode project, DR compiles again in macOS #5077: Fixed: Compilation failed in Ubuntu 19.10 Changes since 2.7.0pre2 #5104: Fixed: Exporting bell_hand.lwo as ASE is producing an invalid model, which will fail to dmap #5101: Fixed: Model exporter doesn't remember last export location #5092: Fixed: Buttons to change spawnargs can affect entities that aren't currently selected #5091: Feature: Add "Choose Skin" button when editing model spawnarg of an existing entity #5095: Fixed: Search box persists for some seconds after closing window or shifting focus #5094: Fixed: Choose Skin dialog will crash in 2.7.0pre2 #5093: Fixed: When no GL context is present, OpenGLModule::assertNoErrors() runs into an endless loop until your memory runs out #5086: Fixed: In DR 2.7.0 pre2: S/R interface issues with adding stims or responses #5087: Fixed: Connecting lines to targeted entities don't show up if 'Default' layer was hidden #5082: Fixed: Layers window: first click after opening isn't registered properly Changes since 2.7.0pre3 #5095: Even more fixed: Search box persists for some seconds after closing window or shifting focus #5112: Feature: Let the 'Matching skins' folder start in expanded state when showing the SkinChooser #5113: Fixed: 'Choose skin' from model spawnarg: hitting cancel sets model spawnarg as skin #5114: Fixed: Model selection: materials/verts/polys display always refers to previously selected model #5117: Fixed: Entities with non-existent classnames are shown white instead of blue in orthoview Changes since 2.7.0pre4 #5088: Fixed: Hitting cancel in 'Create Speaker' still creates a speaker And an untracked change to make the Entity Inspector columns resizable. Thanks for testing, as always!
  13. Don't be disheartened. Look at it as an opportunity to go back and make it the best you can do. Find lots of images of museums, librarys, or any buildings of the type you're interested in. Find a look from those set of images then try to make it. Creating a map out of thin air is fine, but it's a whole lot better when you have reference material to guide you. Then you can mix and match and that's where the real creativity comes from.
  14. Ah thank you fpr so much input on FMs that use scripted sequences and on the creation process. I remember doing some main character voice sets when I was building my FM, but those didn't evolve NPCs, so I only had to record it (actually a helpful member of the forums did it - thank you @betpet) and write a shader. I read through the wiki and saw that there is a convenient tool for creating NPC dialogues, that at least from the looks of it doesn't really seem to be that much work considering the huge benefits those conversations are able to give to an FM's atmosphere and story telling. However somehow I never noticed some FMs you were mentioning. The Accountant is a very nice example of how you can use NPC dialogues or even to give new objectives ingame without text boxes or books. I will make sure to check the other FMs as well. Thank you for all your suggestions! What is your opinion on making "pre-defined" conversations? Would it make sense to have some audio files available for mappers to setup custom conversations? I remember in the game Half-Life NPCs had some kind of stock material for random chatter in the way of "Question from NPC 1 -> Answer from NPC 2". For TDM there could be audio material for each of the current voice sets and mappers could set up small conversations apart from the automatic monologues we currently have for NPCs. So a big chuck for generating dialogues would be erased (recording and normalizing speeches and creating their shaders). To try to keep them non-repetive for multiple FMs these pre-recorded lines could be like in Half-Life where each chunk of a dialogue can be interchangeable with the question -> answer setting. I think this would make it easier for mappers to create a little variety with NPCs and make them more lifelike without a big hassle. What do you guys think?
  15. Story Tease On the run from her husband, me and my girl. With a bribe to a ship's captain, we're away. What could go wrong now? Oh, dammit. Links "Away 1 - Air Pocket" Version 1.0 is available from the in-game downloader and its mirrors. As well as here. There are two extra documents contained in your installed .pk4 and also conveniently available here - For gamers needing hints, this Q&A uses "invisible ink" to selectively hide the answers: Air Pocket - Hints and Spoilers [Jan. 29, 2020].docx For understanding what's under the hood: Maintenance Guide to Away 1 - Air Pocket [Jan 29, 2020].docx For more about the innards and interations, see this FM's Beta Testing thread. Author's Note This is my first substantive TDM FM, a nautical adventure, and what I hope will be part of a longer story arc. Enjoy. Gallery Credits & Acknowledgements Thanks to TDM community members for encouragement - and assistance with newbie questions - while building this, my first FM (not counting an earlier nanoMission). Kudos in particular to Dragofer for the wonderful ship models (modified here), newly-created ship davits, and assets like kelp models from 'Down by the Riverside'. Also a custom cannon-ball hole through the hull, and much helpful guidance. The skybox is adapted from 'lagoon' by Hazel Whorley (CC BY-NC; hw_lagoon.zip at www.custommapmakers.org/skyboxes). Finally, my deep appreciation to all who tested or assisted during the beta: Biene, Cambridge Spy, Dragofer, duzenko, peter_spy, and stgatilov
  16. Root cause is: wxgtk also tags incomplete releases, so the latest isn't offered to install.
  17. I notice that the Issue has been Fixed. Can I ask which fix was implemented? Also, one of the comments by duzenko in the bugtracker mentions this thread: https://forums.thedarkmod.com/index.php?/topic/20365-script-string-length-128-workaround/&tab=comments#comment-446786. I don't have access to this thread for some reason. Is it important that I read this thread? If so, I'll need access. Thanks
  18. freyk


    A more recent topic about this, see https://forums.thedarkmod.com/index.php?/topic/18701-subtitles-in-intro
  19. I was referring to D3W advice in general, not the specific text you posted. I've seen several forum posts on D3W and I think even these forums where people have repeated the "fact" that Doom 3 has a problem with more than 3 lights hitting a surface, and advised mappers to cut up brushes to make sure they never see a cyan surface in the r_showLightCount view, even though this was a waste of time that made no difference to frame rates back when I was doing it on a Radeon 9800 XT in 2006. I suspect that the "3 light limit" comes from the descriptive text in the explanation of r_showLightCount: 1. Black= No light hitting the surface. 2. Red= 1 light hitting the surface (this is excellent). 3. Green= 2 lights hitting a surface (this is great). 4. Blue = 3 lights hitting a surface (This is getting bad. You need to keep these areas small, but it is ok to have a number of smaller areas in a room that are blue). 5. Cyan, pink, or white= 4+ lights hitting a surface this is bad and you should only have this in very small, isolated areas. It would be easy to interpret these descriptions as implying that something bad happens between 2 lights ("this is great") and 3 lights ("this is getting bad"), even no there is no such limit and these textual descriptions were (as far as I can tell) just off-the-cuff phrases that never actually reflected any empirical performance testing. There is no such limit for maximum lights, because light count is just one of many factors influencing performance, along with poly count, shadow count, shadow mesh complexity, number of shadow-casting lights, number and size of open/closed visportals and many other things. Giving suggested limits for particular scene elements is counter productive because these limits tend to get enshrined in documents and forum posts and propagated through time as a sort of "cargo cult", where people believe that as long as they have fewer than a certain number of lights or polygons then their scene will be fast to render, even though there may be many cases where having more lights/polygons would be fine if other elements of the scene are simpler, and vice versa. The only meaningful way to address performance is based on empirical testing, with guided optimisations based on this data. For example, if you have a scene that is particularly slow to render, and you find that you have a large surface hit by 20 different lights and they all cast shadows, this might be the thing to optimised, whereas in another scene you might find that you have 10 million polygons in view due to a reflection surface and too many open visportals, and these are the things you need to fix. But in no case does this mean that if you stick to 19 different lights and only 9 million polygons, you will never have a problem with performance. No need to get defensive; I wasn't criticising you, just pointing out that some of that old advice from D3W and other forums isn't particularly accurate and shouldn't be relied upon by today's mappers, particularly when it asserts particular numeric limits that quickly become obsolete due to the evolution of hardware, and might not have been correct to begin with. Nothing wrong with looking at light counts in conjunction with other items (but you must also consider the area of the over-lit polygons, not just the count, and consider the effect of light scissoring which considerably restricts the actual area that is illuminated based on the size of the light, even if that light hits a large polygon), provided you don't become attached to certain fixed "ideal light counts" which are just too crude a measure to be useful. Overall my advice with light count and everything else (polygons, shadows etc) is: Minimise everything as far as you possibly can without compromising the artistic intent. Use in-game diagnostics and statistics as a guide, without being hung up on particular numeric thresholds and values. Test on a variety of hardware (especially mediocre hardware) if you can, to avoid producing a map which only runs well on your super high-end rig.
  20. On that subject, I added some basic unit tests (using Boost.Test) last year when I was working on the asset deprecation functionality, which you might find useful as a basis or guide to implementing new unit tests for saving and loading. The Boost macros and test fixture system is quite nice to use; the challenge of course is being able to split up the code so that it can be tested in isolation without needing to pull in dozens of other module dependencies which don't work in the test environment.
  21. see also our reactions at topic: https://forums.thedarkmod.com/index.php?/topic/19755-nice-game-development-series-war-stories/
  22. Things are pretty hectic over here, I wasn't on the forums for a week so even that ping might've not been a saving grace if I didn't log in to divert responsibilities from other things I gotta do... Anyway, yeah! The command seems to work alright, reloading the game properly resets the materials, but reloadModels all doesn't reset material changes on brushes, aptly enough. I'm not sure that's that important, though.
  23. The number of mirrors is not too high today, and new mirror would definitely be welcome. However, we have been split on the question of whether we could use a server as official mirror when its owner has zero posts on these forums. The TDM code does not properly verify downloads, so we must be sure that mirrors owners can be trusted. Sorry.
  24. Announcing the Release of 'Requiem' for The Dark Mod! Download Download the latest version of the Dark Mod here: http://www.thedarkmo...wnload-the-mod/ Download the mission here: Mediafire: http://www.mediafire...u89/requiem.pk4 Southquarter: http://www.southquar...ons/requiem.pk4 Fidcal.com: http://www.fidcal.co...ons/requiem.pk4 Create a folder in your Dark Mod install with the path "darkmod/fms/requiem" and place the downloaded .pk4 file inside. When you load up The Dark Mod, the mission will appear on the "New Mission" page. Requiem can also be found directly using the in-game loader. Gameplay Notes While this mission is playable in TDM 1.8, for an optimal experience please download and play in TDM 2.0 (or higher). Most inventory items in the game can be dropped, so no need to carry them around after they are no longer of any use. Note that If you use noclip or other console commands while playing, there is a good chance that you will break the intended flow of gameplay. Credits Mapping and Readables: Gelo R. Fleisher Voice Acting: Goldwell Additional scripting: Obsttorte Additional textures and assets: Flanders, Sotha, Grayman, Springheel, Bikerdude, Obsttorte Additional map optimizations: Bikerdude Testers: Bikerdude, Obsttorte, Gnartsch, AluminumHaste, Baal, nbohr1more, PPoe Custom Soundtrack: Leonardo Badinella - http://leonardobadinella.com/ Additional Music: Lee Rosevere - http://freemusicarch...c/Lee_Rosevere/ Marianne Lihannah - http://www.funeralsinger.net/ Vox Vulgaris - http://www.last.fm/music/Vox+Vulgaris/ A note from the author Hi all. While I've been involved in indie game development for a while now, I'm first and foremost a writer. My most recent project has been a novella that tries to capture the visual feel and tone of the Thief series (you can find the link below). As I was writing, I found myself playing a lot of Thief and Dark Mod fan missions, and got to thinking that maybe I wanted to make one myself, as a companion piece to the book. When I finished up writing, I had a bit of down time and decided to take the plunge. Having never done any serious mapping before, my plan was to make a small mission that I could bang out in a month or two and call it a day. Well, as sometimes happens, the project got a little bit bigger than I had planned. Ten months, and lots of elbow grease later, Requiem is finally ready for you to play. I'd like to thank everyone who helped pitch in to help make Requiem come alive, from those who took the time to answer my many questions on the forums to those who actively contributed to the FM. I especially want to thank Bikerdude who served as my mapping mentor, and Obsttorte whose clever scripts really turned what was in my head into the game that you are playing. Above all, I want to thank you for downloading and playing Requiem; I hope you enjoy it. Links of Interest Author's Blog: http://gfleisher.blogspot.com/ Companion Novella (Amazon): http://www.amazon.co...k/dp/B00BYEW02M Companion Novella (Smashwords): http://www.smashword...oks/view/298956
  25. 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.
  • Create New...