-
Posts
3317 -
Joined
-
Last visited
-
Days Won
116
Everything posted by peter_spy
-
Getting started with the EFX room reverb system (wip)
peter_spy replied to peter_spy's topic in TDM Editors Guild
My thoughts exactly, we need a set of templates and guidelines, so mappers can start with something, and then adjust values to their liking. Sure! Again, I can't say I understand how all values work (I still haven't touched stuff like environment size or environment diffusion), but we should be able to come up with something by just using main values. -
With TDM 2.06 mappers and players can use OpenAL EFX system, which is basically an open-source software replacement for systems like EAX, which, at the time, was available only for dedicated hardware by Creative. This allows us to set reverb definitions for rooms, and in my opinion, it's a game-changer for TDM FMs. If you ever played old Thief games with EAX-enabled hardware, you know what I mean. Otherwise, try playing Kingsal's Volta and the Stone with EFX On and Off to see the difference. It's a new life for game environments. The EAX reference page in the Wiki can be quite intimidating though, there are many values to tinker with. I have some basic sound recording experience, but I'm not an audio guy. The purpose of this thread is to create clear guidelines for other non-audio guys. If you're an audio guy, these values will be familiar to you, because you can find similar parameters in Reverb plugins, e.g. for Adobe Audition. (Btw. feel free to correct me whenever I'm wrong about something.) First off, your map has to use location system. EFX system needs location names, and it will define reverb per location. It also needs location separators touching visportals to make proper transition between reverb for different locations. Create 'efxs' folder in your project root folder, create a text file map_name.efx, and open it. Now, first thing EFX system needs is a version number, so every .efx file needs start with Version 1 (I don't think any other number works). So, a typical .efx file with room definitions looks like this: Version 1 reverb "location1_name_here" { values here } reverb "location2_name_here" { values here }etc. And that's it. It seems like you don't need to include every parameter you see in the Wiki reference. Some variables don't do much or hardly do anything. Even if you delete something, the system will use the default value. You can have an empty set like above, and you won't break anything. You can also change the order of parameters, e.g. if you have your own workflow. Even then, making efx presets for all your locations manually can be really time-consuming. I bet a lot of mappers will want to make this as fast as possible, so they can move to more important things. That's where default presets come in handy. I prepared a set of general-purpose presets you can use in your locations. I tested them both on headphones and speakers, and they tend to sound quieter on speakers. If you think a preset is too quiet or too loud for your location, just put a "room" parameter in your definition, to change the volume. -1500 is the default value, and the volume range is from -5000 to 0 where 100 equals 1 db. Also, feel free to modify these presets as you wish: // Castle courtyard "environment diffusion" 0.6 "room hf" -1500 "room lf" -2000 "decay time" 2.13 "decay hf ratio" 0.61 "decay lf ratio" 0.23 "reflections" -500 "reflections delay" 0.16 "reverb delay" 0.36 "echo depth" 0.37 // Castle bathroom "environment size" 1.5 "environment diffusion" 0.75 "decay time" 1.8 "decay hf ratio" .5 "decay lf ratio" 2 "room hf" -4000 "reverb" 500 // Sewer pipe "environment diffusion" 0.8 "room hf" -1500 "room lf" 0 "decay time" 2.81 "decay hf ratio" 0.14 "reflections" 0 "reflections delay" 0.014 "reverb" 600 "reverb delay" 0.021 // Cave "environment size" 1.3 "environment diffusion" 0.75 "room hf" -200 "decay time" 3.5 "decay hf ratio" 1.5 "reflections" 400 "reflections delay" 0.015 "reverb" 1000 "reverb delay" 0.022 // Forest "room hf" -2000 "decay hf ratio" 0.54 "reflections" -1500 "reflections delay" 0.162 "reverb" -4300 "reverb delay" 0.088 "echo depth" 1 // Short stone corridor "environment diffusion" 0.6 "room hf" -400 "decay time" 1.2 "decay hf ratio" 0.75 "reflections" 400 "reflections delay" 0.004 "reverb" 1000 "reverb delay" 0.003 "echo time" 0.06 "hf reference" 5168.6 "lf reference" 139.5 // Small stone room "room hf" -400 "decay time" 1.15 "decay hf ratio" 0.75 "reflections" 0 "reflections delay" 0.006 "reverb" 600 "reverb delay" 0.005 "echo time" 0.06 "hf reference" 5168.6 "lf reference" 139.5 // Medium stone room "room hf" -400 "decay time" 1.5 "decay hf ratio" 0.75 "reflections" -1000 "reverb" 800 "echo time" 0.12 "hf reference" 5168.6 "lf reference" 139.5 // Large stone room "room hf" -400 "decay time" 2.2 "decay hf ratio" 0.75 "reflections" -2800 "reverb" 750 "reverb delay" 0.03 "hf reference" 5168.6 "lf reference" 139.5 // Short wood corridor "environment diffusion" 0.6 "room hf" -600 "room lf" -1600 "decay time" 1.75 "decay hf ratio" 0.5 "decay lf ratio" 0.87 "reflections" -650 "reflections delay" 0.012 "reverb" 200 "reverb delay" 0.024 "hf reference" 4705 "lf reference" 99.6 // Small wood room "room hf" -1200 "room lf" -800 "decay time" 0.79 "decay hf ratio" 0.32 "decay lf ratio" 0.87 "reflections" -500 "reflections delay" 0.032 "reverb" 0 "reverb delay" 0.029 "hf reference" 4705 "lf reference" 99.6 // Medium wood room "room hf" -1000 "room lf" -650 "decay time" 1.47 "decay hf ratio" 0.42 "decay lf ratio" 0.82 "reflections" -650 "reflections delay" 0.049 "reverb" 0 "reverb delay" 0.029 "hf reference" 4705 "lf reference" 99.6 // Large wood room "room hf" -600 "room lf" -650 "decay time" 2.65 "decay hf ratio" 0.33 "decay lf ratio" 0.82 "reflections" -650 "reflections delay" 0.066 "reverb" -400 "reverb delay" 0.049 "hf reference" 4705 "lf reference" 99.6 // Cathedral "environment diffusion" 0.87 "room hf" -1800 "room lf" -2400 "decay time" 9.48 "decay hf ratio" 0.19 "decay lf ratio" 0.1 "reflections" -500 "reflections delay" 0.09 "reverb" 0 "reverb delay" 0.042 "echo depth" 0.12 "hf reference" 2854.4 "lf reference" 20 // City streets "environment diffusion" 0.78 "room hf" -600 "room lf" -750 "decay time" 1.79 "decay hf ratio" 1.12 "decay lf ratio" 0.91 "reflections" -750 "reflections delay" 0.046 "reverb" -1000 "reverb delay" 0.028 "echo depth" 0.2 // City - abandoned "environment diffusion" 0.69 "room hf" -200 "room lf" -100 "decay time" 3.28 "decay hf ratio" 1.17 "decay lf ratio" 0.91 "reflections" -1200 "reflections delay" 0.044 "reverb" -1800 "reverb delay" 0.024 "echo depth" 0.2 "air absorption hf" -3.2 // Museum "room hf" -1800 "room lf" -1800 "decay time" 3.28 "decay hf ratio" 1.4 "decay lf ratio" 0.5 "reflections delay" 0.039 "reverb delay" 0.0034 "echo time" 0.13 "echo depth" 0.17 "hf reference" 2854.4 "lf reference" 107.5 (...) Now, if you're more interested in how the system works and how you can adjust values to get what you want, take a look at these values. Main values "room" Value Range: -10000 to 0 (-100 to 0 db) Master volume (gain) for both early reflections and reverb. Default value sits around -1500. Lower values actually decrease natural sound reverb. "reverb" Value Range: -10000 to 2000 (-100 to 20 db) Reverb gain parameter. Default value is 0. Higher values feel like you're in a medium or small room with reflective surfaces. Lower values actually decrease natural reverb of the sounds. "reflections" Value Range: -10000 to 0 (-100 to 0 db) Early reflections gain. The louder and less delayed these are, the more it feels like you're closer to the wall (inside a small empty room). "decay time" Value range: 0.1 to 20 (0.1 to 20 seconds) Time for the reverb to decay. Helps determine the size of a room. Average small rooms will have a reverb decay around 0.35 sec. A cathedral or a cavern will have 4-6 sec. Default value is 1.49. (...) Values for fine-tuning "reverb delay" Value range: 0.0 to 0.1 (0-100 ms) Creates delayed reverb effect. Default value is 0.011. "reflections delay" Value range: 0.0 to 0.3 (0-300 ms) Delays early reflections. Default value is 0.007. (...) Example workflow: 1. Use "reverb" to define how dead or live the room is. Add some delay with "reverb delay" if needed. 2. If the room is large (think cavern, canyon, or cathedral), use "decay time" to define bigger space. 3. Use "room" if you want to make "reverb" or "decay time" sound louder or quieter than the default (-1500). 4. Use "reflections" to tweak early sound reflections. (...) Notes / tips: 1. For volume / db parameters, don't bother with testing very low values. In real life, good self-noise characteristics for microphones and recorders is around -60 db. That means most people won't hear that noise. So, whenever you have ranges from -10000 to 0 or 2000, using values below -6000 probably won't do much. 2. If possible, use closed headphones for testing and tweaking, and then see how it holds up on your PC speakers. (...) As you see, this is work in progress, I will update this post with new information and useful things we come up with.
- 55 replies
-
- 12
-
-
I've been playing with these values for quite some time today. I can't say I understand what each of these parameters does yet, but there are some good news here. First of all, you don't need to include every parameter you see in the Wiki reference. There are quite a few variables that don't seem to do anything. Even if you delete something important, the system will just skip that parameter or will use the default value. You can also change the order of the parameters, which is good, because the wiki reference doesn't have the most logical order (or any workflow in mind). Secondly, from what I've tried so far, I can say that you'll need only 2-3 major parameters per location to achieve most common acoustic effects. The rest is just tweaks or very peculiar effects, like dampening high or low frequencies, either for the reflected sound or the source sound (which is cool, but often not necessary).
-
Also, having a console command for restarting OpenAL/EFX system would help a great deal in setting up these definitions in your map. Right now, you have to restart the game and reload the map to hear the changes, which is time-consuming. (I use a separate test room to do it faster).
-
Re: EFX, Right now it's safe to assume that room reverb settings affect all the sounds. Things like player/narrator voice, UI sounds, and ambience_zoned sounds played via location system are also affected. If you want to test it for yourself, you can use values like these in your efx definition:
-
I think we should thoroughly test how EFX affects all types of sounds and teach mappers to use sound channels properly. For now, we know that it affects player voice (incorrect), player grunts (correct), frob loot sound (IMO, incorrect). I also have a tiny, teeny suspicion that it affects ambient music streamed via location system, but I'll need to verify it later.
-
As for the strange motion: launch the St. Lucia mission, walk up to the 3 lit windows nearby, and then try looking around, and then strafing, with multi-core option on/off, and with the uncap fps option on/off. Do you see the same stuttering I do? With uncapped fps set to off I see these little jumps while moving. WIth both options set to on, the fps counter shows 60 fps, but the movement is as if it was 24 fps or something. Looking around is fluid though. (This was on x64 version.)
-
Not source of inspiration per se, but free source of precious knowledge. It's amazing how back in the day this was reserved only to industry specialists. Now it's open to everyone. There's even a full character rigging tutorial. https://www.youtube.com/user/3dsMaxHowTos/playlists?sort=dd&view=50&shelf_id=21
-
Yup, 2 quicksave slots, 2 autosave slots (to avoid file corruption problem), and manual save slots is kind of all-around system. As for saving conditions, AFAIR Dishonored doesn't even allow manual saves while you're in combat, which makes sense too. I don't think checkpoints are typically for linear games, although they're sure easier to implement there. MGSV is an open-world game, and it has checkpoints only. The game saves before you pass any outpost, town or other section of the map, and when you enter/exit mission zones. There's no manual save. And this was a conscious design decision. First off, you don't have to think about saving. You also can't do cheap "perfectionist" runs. You have to learn the location layout, see where key items are, watch for AI patrols etc. You have to improvise and use gadgets if you fail at stealth, which you typically do when you don't know the location yet. You can also flee, but you'll have to start that area from scratch. That seems a bit frustrating to "compulsive perfectionists", but it also makes any perfect stealth/ghost runs feel like they're truly earned. That is a victory not cheapened by mashing Save button every time you think you might fail. These missions rarely take more than 15-20 minutes, so there's not much progress lost. Story missions are longer, but they have checkpoints every now and then. Dark Souls is a semi-open world game, and it autosaves basically all the time. Every time you hit/kill a monster, every time you get hit/killed, when you open/close the game menu, talk to an NPC etc. Bonfire autosaves are more of the "mental checkpoints" for the player, so you can divide your playing sessions into manageable chunks. You can Alt+F4 out of the game and you barely lose any progress. These two games save it for you, but what is more important, they make you deal with consequences of your actions, with Dark Souls being obviously more brutal than MGSV. But in both cases the world and gameplay design had to support this system, so it's definitely not an easy thing to make. Another thing is what Pete already mentioned: sometimes I'm so immersed in the game, that I actually forget to save. And after some 20 minutes of gameplay, I make a stupid mistake, fall off a ledge and get killed. (Edit: too many typos)
-
Not really, the player psychology is much bigger problem, at least from the designer standpoint. That's why insead of letting player save all the time and expoit that feature, designers create checkpoint systems that try to handle this seamlessly, so the player focuses on gameplay. You may think that manual saving is the best thing since sliced bread, and of course you're entitled your opinion, but it's not superior to anything else, as you're trying to imply. It's just one of many systems.
-
To be more precise, probably all developers' presentations on stealth game design I've ever seen stress that the game should look like it's challenging. So it's more about subtle way of making players feel smart. To "Create the illusion of a securely guarded area that the player can sneak through. Make the player feel like they are special enough to do the impossible".
-
This is both kind of nitpicking (difference between 20 and 30 minutes, reallY? even though it's not even designed this way, since checkpoints are usually location and task-based), and it implies that only your approach is rational, which isn't true either. I'm not saying it's easy, but you could design a whole mission with save system managed by the game only. And it would be a fun mission, where players would have to learn the environment better, improvise in the face of AI alarm, or live with consequences of their actions (if there are such choices to be made). Exploring other choices, striving for level mastery would be possible by replaying the map, not mashing the save and load buttons. That of course requires very good mission design to begin with. Some futher listening/reading: http://www.roningamedeveloper.com/Materials/RandySmith_MiGS_2007_SaveLoadCompulsions.ppt http://www.gdcvault.com/play/556/How-To-Help-Your-Players
-
I think even saving can be immersion breaking, especially when players use save scumming and play it safe. Actually, a good checkpoint system would encourage experimentation and not relying on save system too much. That said, the level design would have to enable improvisation and failure, e.g. some spots where player can retreat too after failing and alerting the AI.
-
I too think checkpoints are more about game design than difficulty. If they supplement the design and they're triggered often enough, they're like chapters in a book, or even paragraphs on a page. You stop thinking about saving after a while, and the whole system alters your play style a bit, i.e. you divide your playing sessions to get to next checkpoint.
-
DR 2.4.0 - objects not rotating on origin
peter_spy replied to Bikerdude's topic in DarkRadiant Feedback and Development
Hmm, I have it enabled all the time (Ctrl+R), and it works with both brushes and meshes. -
Now, that would be great
-
The thing is, that would be helpful for what, some generic cubemaps that are switched per location? If we want to have a proper parallax-corrected system in the future (and I think we do), and proper fake reflections, we'll need to rely on proper placement of ambientCubicLights in the world anyway, and their uniform radius (the same value for xyz). What is more, ambientCubicLight would need to have either some kind of cubemap sampler, or at least a parameter for envshot to be taken in-game, using origin point of such light. Unreal4/Unity5 have reflection probes that create preview in the editor, but as the DR's perspective view rendering is mostly shit, we'd have to rely on some in-game console commands, just like we take envshots now.
-
This looks like overcomplicating things, why one would want to set up coordinates within location system, while you can manually place multiple ambientCubicLights, exactly where you want them, and set their radius accordingly? What we'd need is to make seamless transition between cubemap reflections as player moves between ambientCubicLights, but that should be done automatically by the engine, just like in the video I posted above (cubemap reflections before parallax correction).
-
Btw. is there any console command for refreshing/restarting EFX system, so mappers can test different settings? Commands like s_restart or reloadSounds don't work.
-
FYI, it you want to hear new OpenAL EFX system in action, Volta is one of few missions that use efx settings for rooms. I looks like a few things need to be tweaked here and there, but the overall impression is great. The environment feels much more alive.
-
A short but replayable mission without saves whatsoever might be interesting too. That would probably require more sandbox approach, a la missions in MGS5.
-
Btw. are there any practical examples of using AmbientCubicLights in Dark Mod? I tested those briefly in 2.05, and they work fine, but honestly, I can't think of any use for them in a mission.
-
I'm not sure I'll have the time to do this, but I'm also super curious about the results Just a quick test to show you how it works so far. There are two omni ambientCubicLights here. The light where the player is uses skybox_afternoon_01_cube, while the light at the other end of the room uses skybox_industrial_01_cube. The wall and floor material doesn't use any cubemap.
-
I only tested it for a while yesterday, but the main difference is that cubicLight projects textures in cubemap, just like a spot light with projection texture would do, but in 6 directions instead of 1. AmbientCubicLight project a cubemap reflection onto surfaces, as if it was added in the material definition itself. So it seems perfect for parallax-corrected solution we discussed before in other threads, reflective floors and whatnot.
-
I have no idea what cubic blendlights are, but parallax-corrected cubemaps in ambientCubicLights would be something practical mappers can actually use, as discussed here: http://forums.thedarkmod.com/topic/19147-parallax-corrected-cubemaps/