Jump to content
System downtime for updates - Monday 21 April 2025 ×
The Dark Mod Forums

Recommended Posts

Posted

Here's the DR 2.10.0pre3 build for every interested mapper to test. It introduces a couple of new features that might increase the average mapper life quality.

Feature: Patch Merging/Welding

patch_welding1a.gif patch_welding2a.gifpatch_welding3.gif

Feature: Maps can be opened from PK4s

Selecting File > Open Map from Project... one can select a .map file that is saved in any PK4 of the current project or from a completely separate PK4 somewhere in the file system:

2020-12-13 07_47_11-Choose Map File.png

And one can select the font size of the OrthoView grid in the preferences now:

2020-12-03 15_50_01-unnamed.map.png

For more things that have changed or fixed, see the list below.

Download Windows Portable x64: https://drive.google.com/file/d/1Q4iCbF--lZYu5p57GWkNM2xaI7vI8LWU/view?usp=sharing
Download Windows Installer x64: https://drive.google.com/file/d/1rKc6ansoAY7Subf70GV5XYsyQTrl7b6D/view?usp=sharing

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.9.0 can be seen on the Bugtracker changelog, here's the summary:

#5436: Feature request: User control of font size of "size" numbers on ortho screen
#5382: Merge patch connect patches
#5108: Allow DR to open .maps that are inside .pk4s
#5309: Creating a model entity creates a "phantom light" near the world origin
#5425: Automatic map saving can crash DarkRadiant
#5097: Layer toggle controls can get out of sync (showing wrong icons)
#5424: Up/down strafe movement not working in camera free look mode
#5426: Can't build Radiant on current arch due to pybind breaking change
#5429: EntityClassManager vs. VirtualFileSystem initialisation order might prevent .def file parsing
#5430: World geometry is blue and cannot be changed when no worldspawn entityDef is defined
#5442: Expose LayerManager interface to Python scripts

Changes since 2.10.0pre1

#5382: Some patch welding improvements to have the merged patches face in the expected direction
#5364: Light colours in the ortho view can be overridden by the colour specified in the scheme
#5452: Update pybind11 version to 2.6
#5448: 16-Bit PNGs and 8-Bit Greyscale PNGs with Alpha channel can be loaded correctly (again)
#5440: DarkRadiant now warns before saving in case the map file has been modified in the meantime

Changes since 2.10.0pre2

#5451: Creating/renaming/deleting a layer didn't flag the map as modified
#5443: Selected light bounds not updated when editing light_radius spawnarg
#5406: Add dropdown list of all map entity names when editing a "Name of single entity" of an Objective component
#5406: Double-clicking an objective will open the editor. Objectives Dialog will automatically select the first objective entity now.
#5444: Brushes were not selectable in orthoview when none of its faces were facing upwards

Thanks for testing, as always!

Posted
20 minutes ago, IZaRTaX said:

Merging patch function works better than I expected what a very good job you've done here !

Thanks, glad you like it. :)

Posted

Something weird happened when I tested the patch welding (which overall looks like a great feature). I made two rectangular patches in the top view, welded them together and the patch seemed to disappear from the 3D view. It turns out the orientation was flipped, so I had to move the camera down and look up at it to see the texture. Is it possible that the welding code is either flipping or ignoring (resulting in undefined behaviour) the patch normals?

Posted
3 minutes ago, OrbWeaver said:

Something weird happened when I tested the patch welding (which overall looks like a great feature). I made two rectangular patches in the top view, welded them together and the patch seemed to disappear from the 3D view. It turns out the orientation was flipped, so I had to move the camera down and look up at it to see the texture. Is it possible that the welding code is either flipping or ignoring (resulting in undefined behaviour) the patch normals?

Press CTRL+I to invert patch that'll fix the issue👍

Posted
3 hours ago, OrbWeaver said:

Is it possible that the welding code is either flipping or ignoring (resulting in undefined behaviour) the patch normals?

I saw this happen a lot too, the merging code is not caring about orientation as of now. The algorithm is merely looking to match up any edge of the two candidates in any direction - I guess the reversal happens in the case the code needs to flip around the other patch for its vertices to match.

But I agree that if both patches are facing upwards, the result should be facing upwards too, it shouldn't counter-intuitively reverse things. It's either a bug in the code or I have to add some steps to preserve the orientation, I just need to look into it.

edit: found a way to improve things, the patch orientation should be preserved now.

 

Posted

To be honest, I haven't looked into performance at all. I take it that 2.8.0 or 2.9.0 didn't have these lags?

It should probably be visible in the profiler, if it's that bad.

Posted

Can't spot anything huge in the profiler for the orthoview, that's dominated by the display list and patch wireframe rendering, as usual.

But the camera renderer has a quite large portion of light intersection handling going on (this is not in lighting mode, just regular fullbright):

2020-12-14 11_53_08-Window.png

Maybe that step isn't all that necessary when doing regular fullbright rendering?

Posted
9 minutes ago, greebo said:

But the camera renderer has a quite large portion of light intersection handling going on (this is not in lighting mode, just regular fullbright):

Maybe that step isn't all that necessary when doing regular fullbright rendering?

No, it shouldn't be necessary at all. That seems like an oversight on my part. We only need to calculate the light intersections in the lighting preview mode.

Even when we are in lighting mode, that 35% worries me (since it happens in every frame). I did do some performance testing with the new lighting code, but didn't see any significant regressions. Maybe the performance characteristics are very different on Windows vs Linux.

Posted

There's a lot of this going on, it evaluates the Light Entity AABB for every check afresh, this takes alone 5% of all time spent on all cam rendering:

profile1.png

Also, it seems includePoint() is really expensive. That check could be refactored to check the two radii first and choose the larger one. But I think most of it can be saved by buffering the m_doom3AABB member - it doesn't have to be recalculated for each test.

Maybe we don't need localAABB() at all and can use lightAABB() instead? I think that one is cheaper.

 

Posted

VectorLightList is also doing a lot of reallocations (4.8% of the render footprint) - while this might be more strongly pronounced in the STL Debug build I've been profiling than it would be in a release build, I guess it'd be better to initialise the vector with a larger capacity to start with.

profile2.png

Posted

I wasn’t able to get back to the computer last night after filtering out items one by one. when I filtered out lights, performance went back to the quicker 2.08 speed.

So I’m glad to see that you’re focused on lighting.

I don’t use advanced camera-view lighting, btw. Just the basics.

Posted
9 hours ago, greebo said:

Maybe we don't need localAABB() at all and can use lightAABB() instead? I think that one is cheaper.

Yes, that seems plausible. We need to be careful though because there are at least two different situations where AABBs are needed — lighting calculations and the selection system — and the AABBs they need are not identical. But I'm sure there is a bit of redundancy from the legacy code that we could simplify.

9 hours ago, greebo said:

VectorLightList is also doing a lot of reallocations (4.8% of the render footprint) - while this might be more strongly pronounced in the STL Debug build I've been profiling than it would be in a release build, I guess it'd be better to initialise the vector with a larger capacity to start with.

Also a good suggestion. We could default initialise it with a "sensible" initial light count like 16, or even try std::list which should have constant time insertions at the expense of slow random access (which is not needed).

In any case, as of a8a19bec7bce6 I have disabled the call to calculateLightIntersections() when in non-lit mode, which should save a few wasted cycles.

Posted
On 12/14/2020 at 11:10 AM, greebo said:

Maybe we don't need localAABB() at all and can use lightAABB() instead? I think that one is cheaper.

This is implemented in e649657d774fc05b.

I actually removed Light::intersectsAABB entirely; now all of the intersectsLight methods just do a simple AABB intersection test between Light::lightAABB and Node::worldAABB, which is much cheaper than the complex long-winded code in Light::intersectsAABB.

I now see relatively little time spent in the lighting intersection calculation, and a much larger amount of time spent in the backend render method of Winding. I suspect this could be improved by the use of OpenGL VBOs to store the winding data, rather than submitting it repeatedly using slow, deprecated OpenGL functions.

profile.png.40b447a99f33727a431e34697833731c.png

Posted

Built and starts up fine for me so far on Linux, but I did notice the PKGBUILD hasn't been updated for cmake yet.  I can fix that up for you guys tonight if you want.

Posted
On 12/15/2020 at 6:12 PM, peter_spy said:

No love for this one, eh? https://bugs.thedarkmod.com/view.php?id=5364

I guess this one needs more votes ;)

I'm happy to work on this one assuming @greebo hasn't started on it himself. I also preferred the single-colour light volumes so I would definitely like an option to disable the per-light colouring, and this ought to be pretty easy to implement.

  • Thanks 1
Posted

I've noticed that the python scripts are no longer found (on Linux at least, it might be fine on Windows):

CMake will install the scripts to PKGDATADIR:

# Install scripts
install(DIRECTORY install/scripts DESTINATION ${PKGDATADIR}
        FILES_MATCHING PATTERN "*.py")

ScriptingSystem.cpp looks for the scripts in PKGLIBDIR:

#if defined(POSIX) && defined(PKGLIBDIR)
	_scriptPath = std::string(PKGLIBDIR) + "/scripts/";
#else
	_scriptPath = ctx.getRuntimeDataPath() + "scripts/";
#endif

Changing the install location to ${PKGLIBDIR} should take care of this.

Posted
6 hours ago, HeresJonny said:

Built and starts up fine for me so far on Linux, but I did notice the PKGBUILD hasn't been updated for cmake yet.  I can fix that up for you guys tonight if you want.

 

4 hours ago, OrbWeaver said:

Sure, I don't run whatever distro uses PKGBUILD so I never touch it myself, but I'll accept patches.

 

I went to take a look and realized there has to be a release tag in Github first.  I'll let Greebo take care of it, he's already been maintaining that file consistently anyways 🙂

Posted

I usually update that file when I'm getting close to a release. Good to know that this file is actually noticed by someone though. :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent Status Updates

    • Wolfmond

      🇬🇧

      2025-04-20
      I'd like to track my level design progress a bit more often now, so I'm using the feed in my profile here.
      I've been working intensively on Springheel's YouTube course over the past few days. I'm currently up to lesson 8. There is so much information that needs to be processed and practiced. 
      I have started to create my own house. As I don't have the imagination to create a good floor plan, I grabbed a floor plan generator from Watabou and experimented with it. I chose a floor plan that I will modify slightly, but at least I now have an initial idea. 
      I used two guards as a measuring tape: The rooms are two guards high. It turned out that I can simply double the number of boxes in DarkRadiant in grid size 8 that are drawn in the floor plan. 
      I practiced the simplest things on the floor plan first. Drawing walls, cutting walls, inserting doors, cutting out frames, creating VisPortals, furnishing rooms.
      I have had my first success in creating a book. Creating a book was easier than I thought. I have a few ideas with books. The level I'm creating will be more or less a chill level, just for me, where I'll try out a few things. I don't have an idea for my own mission yet. I want to start small first.
      For the cellar, I wanted to have a second entrance, which should be on the outside. I'm fascinated by these basement doors from the USA, I think they're called Bilco basement doors. They are very unusual in Germany, but this type of access is sometimes used for deliveries to restaurants etc., where barrels can be rolled or lifted into the cellar. 
      I used two Hatch Doors, but they got completely disoriented after turning. I have since got them reasonably tamed. It's not perfect, but it's acceptable. 
      In the cellar today I experimented with a trap door that leads to a shaft system. The rooms aren't practically finished yet, but I want to continue working on the floor plan for now. I'll be starting on the upper floor very soon.

      __________________________________________________________________________________
      🇩🇪

      2025-04-20

      Ich möchte nun mal öfters ein bisschen meinen Werdegang beim Leveldesign tracken, dazu nutze ich hier den Feed in meinem Profil.
      Ich habe mich in den vergangenen Tagen intensiv mit dem Youtube-Kurs von Springheel beschäftigt. Aktuell bin ich bis zu Lektion 8 gekommen. Das sind so viele Informationen, die erstmal verarbeitet werden wollen und trainiert werden wollen. 

      Ich habe mich daran gemacht, ein eigenes Haus zu erstellen. Da mir die Fantasie fehlt, einen guten Raumplan zu erstellen, habe ich mir einen Grundrissgenerator von Watabou geschnappt und damit experimentiert. Ich habe mich für einen Grundriss entschieden, den ich noch leicht abwandeln werde, aber zumindest habe ich nun eine erste Idee. 

      Als Maßband habe ich zwei Wächter genommen: Die Räume sind zwei Wächter hoch. Es hat sich herausgestellt, dass ich in DarkRadiant in Gittergröße 8 einfach die doppelte Anzahl an Kästchen übernehmen kann, die im Grundriss eingezeichnet sind. 

      Ich habe bei dem Grundriss erstmal die einfachsten Sachen geübt. Wände ziehen, Wände zerschneiden, Türen einsetzen, Zargen herausschneiden, VisPortals erstellen, Räume einrichten.

      Ich habe erste Erfolge mit einem Buch gehabt. Das Erstellen eines Buchs ging leichter als gedacht. Ich habe ein paar Ideen mit Bücher. Das Level, das ich gerade erstelle, wird mehr oder weniger ein Chill-Level, einfach nur für mich, bei dem ich ein paar Sachen ausprobieren werde. Ich habe noch keine Idee für eine eigene Mission. Ich möchte erst einmal klein anfangen.

      Beim Keller wollte ich gerne einen zweiten Zugang haben, der sich außen befinden soll. Mich faszinieren diese Kellertüren aus den USA, Bilco basement doors heißen die, glaube ich. Diese sind in Deutschland sehr unüblich, diese Art von Zugängen gibt es aber manchmal zur Anlieferung bei Restaurants etc., wo Fässer dann in den Keller gerollt oder gehoben werden können. 
      Ich habe zwei Hatch Doors verwendet, die allerdings nach dem Drehen vollkommen aus dem Ruder liefen. Inzwischen habe ich sie einigermaßen gebändigt bekommen. Es ist nicht perfekt, aber annehmbar. 
      Im Keller habe ich heute mit einer Falltür experimentiert, die zu einem Schachtsystem führt. Die Räume sind noch quasi nicht eingerichtet, aber ich möchte erstmal am Grundriss weiterarbeiten. In Kürze fange ich das Obergeschoss an.



      · 2 replies
    • JackFarmer

      On a lighter note, thanks to my cat-like reflexes, my superior puzzle skills and my perfect memory, I was able to beat the remastered version of "Tomb Raider: The Last Revelation" in a new superhuman record time of 23 h : 35 m, worship me!
      · 3 replies
    • Goblin of Akenash

      My mapping discord if anyone is interested, its more of a general modding thing rather than just for TDM 
      https://discord.gg/T4Jt4DdmUb

       
      · 0 replies
    • nbohr1more

      2.13 Moddb Article is up: https://www.moddb.com/mods/the-dark-mod/news/the-dark-mod-213-is-here
      · 1 reply
    • snatcher

      Modpack 5.0 released! Introducing the Light Stones.
      · 0 replies
×
×
  • Create New...