#Inferno - Descent Remaster

1226 messages ยท Page 2 of 2 (latest)

wide apex
#

In real aircraft you tend to have a distinction between air-to-air and air-to-ground mastermodes that you select between, and then each mastermode has its own bank of programmed weapon profiles

#

So even if you had 10 weapon types, by switching between master modes you would have a coarse grouping to cut down the options

#

In a real fighter you don't carry that many weapon types but if you had 3 AG weapons (e.g. Mk84, Mk82, AGM65) and 2 AA weapons (AIM120, AIM9), rather than stepping through all 5 weapon types with the MSL STEP button, you'd punch the AG master mode button and then your "cycle weapons" button only goes between 3 options

#

or 2 in the case of AA

#

which is much less tedious and hard to remember the sequence than if you had to step through all 5 trying to remember the order

austere geyser
#

hmm I see, that's an interesting take. I suppose that's not too different to how half life grouped weapons by 'class'

#

in the vanilla version of the game most players just disable half the weapons and cycle through the ones they do like, as the weapon balance is quite bad.
I'm rebalancing the weapons to each have a niche so it's more of an issue now.
also they grouped weapons on the 1 to 0 keys, pressing the number again would toggle the 'super' version of the weapon.

austere geyser
#

so I discovered using a non-physical calculation for the light half-angle for fresnel adds highlights that were missing before. second picture is with the 'tweak'
float3 halfAngle = normalize(viewDir - normalize(l));
I just multiply the normalize(l) by 1.5.

maybe my fresnel calc is bad or too simple? I'm just doing fresnel = pow(max(1.0 - dot(halfAngle , viewDir), 0), 5.0);

#

fresnel did work before, but only at shallow angles. it always felt "wrong" to me though.

#

hmmm it breaks metal specular highlights though

#

changing the frenel exponent from 5 to 2 has a similar effect without breaking metal

primal adder
#

I think the 2nd pic looks ok?

austere geyser
#

the 2nd pic is tweaked one

#

I definitely think my fresnel calc is just garbage. lowering the exponent actually makes metal have visible highlights too

#

either that or my non-fresnel specular isn't contributing enough

#

but I have to put a 10x multiplier on regular specular to get the same intensity, which definitely causes issues

primal adder
#

lighting is a pain in the ass

#

my lighting calcs were fucked up for the longest time before I noticed

austere geyser
#

I'm so far off of 'physical' at this point it's all just made up numbers and multipliers anyway agonyfrog

urban inlet
#

add a randomize button ๐Ÿ˜›

austere geyser
#

randomize? ๐Ÿ‘€

urban inlet
#

to randomize all the numbers and multipliers, like in a character creator of any rpg ๐Ÿ™‚

vapid idol
#
if( Shiny )
{
    Specular *= 100
}
#

quick fix

raw bane
austere geyser
raw bane
#

maybe energy-conserving isn't the right word--i mean that the left one is a lot darker. ideally the left one would have darker highlights, but the highlights would be more spread out (meaning the same total luminance) but that doesn't appear to be the case

austere geyser
#

I think I get what you mean. unfortunately my ambient lighting is done with vertex colors so it really limits that level of precision. it probably should be darker overall, but that tunnel floor is like.. four polygons and 8 vertices

austere geyser
#

I'm struggling to come up with a resource system to address resources across the three games. just feels like I've been spinning my wheels for days.

#

I've got a material system that defines extra properties for each texture (around 3000 for both games). but many of the textures in the second are a duplicate of the first, and I don't want to have to maintain duplicates

#

the ideal workflow would be to define the base definitions, then merge them with the definitions from the second game

#

then in the editor you'd need to specify which resource table is actually being edited...

#

and for a third layer of fun, I need user missions to be able to define their own resource tables on top of the base two

primal adder
#

I swear you've asked this before

#

my suggestion is the same ||mostly cuz I forget why you shot it down in the first place||, basically just a list of files each game needs, then you load up the file and it's basically the resource table

vapid panther
#

hash map?

austere geyser
#

I've almost made sense of the layering system UI. it's not the most intuitive but I couldn't think of anything better.

#

hopefully will have some screenshots in a few days

austere geyser
#

so I had a user report that weapon fire was lowering the music volume which didn't make any sense to me because I never added such a feature.
I looked into it, and I was passing a range limiter flag to xaudio. apparently this causes implicit normalization too.
after removing the flag I had to adjust the silence levels, but everything sounds a lot more raw and punchy now.

#

also fixed the music / weapon fire muffling problem

wide apex
#

Yeah I'm currently in the process of figuring out the magic of audio mixing

#

Turns out letting things clip a bit (whether hard clipping or using a compressor/limiter) is sort of an essential part of what we think of as hard hitting audio

primal adder
#

why xaudio? (just curious)

#

dont typo xaudio into google agonyfrog

restive rose
primal adder
#

I typed it in as xauido

austere geyser
austere geyser
#

someone testing the game out on linux using wine and an integrated gpu, they still get 160 fps

#

DX12 works well enough on linux I'd say frogsippy

austere geyser
#

it's always fun finding stuff people hid in ancient levels

primal adder
#

is there a 69 anywhere nearby

austere geyser
#

it's level 6 if that counts

primal adder
#

ill allow it

austere geyser
#

between lowering the fresnel exponent and making light falloff smoother, I really like how things look now.
it almost feels dreamlike with the oversaturation and highlights

primal adder
#

rt when

austere geyser
#

rt never lol. there's an RT port and it's quite a mess trying to fight all the artifacts and drawbacks.

elfin holly
#

This looks as good as rt to me anyway froge

austere geyser
#

the only place that would really benefit from RT is accurate shadow casting of textures from gates and doors.

#

metal also looks a lot better under RT, but I think proper PBR has a bigger contribution than RT there.

austere geyser
#

baking light source directions into your vertex data is 10/10, can recommend

primal adder
#

why does it look like the uv shifted

#

I assume that's just a trick of the light (pun intended)

austere geyser
#

yep it is, that's what happens with normal maps

#

I'm still in awe at how complex descent's levels are. you just don't see stuff like this anymore.

elfin holly
#

Pretty.

austere geyser
#

@primal adder I spent the past two evenings watching people playtest my project. why are there always more bugs ๐Ÿ˜ญ

primal adder
#

bugs are the only constant, I just found 2 and fixed 1 agonyfrog dont know what causes the other

austere geyser
#

how are you ever supposed to ship anything when the list of problems just keeps getting longer

austere geyser
#

I should have taken my own advice and written a virtual file system from the beginning.
I ended up writing all this logic to merge different data sources together and the performance is terrible because it's hitting multiple folders and zip archives for thousands of files

austere geyser
#

had a remote ... debugging? development? session with a random user yesterday to fix joystick support. I don't have a joystick so I had to give them code to test locally.
they knew how to pull and build the project without any help, still quite the experience

austere geyser
#

I've gotten a lot of positive feedback on the project structure too. contributors like the mostly free function design with namespaces for organization.

austere geyser
#

I can't quite place the feeling of reviving levels someone from 1997 made, allowing people to experience them again

austere geyser
#

sigh, it's never a good feeling when you release an update and users report graphics issues. I barely even change anything.
I hate AMD

#

all I did was add one new parameter to a shader and it suddenly does this?

austere geyser
#

ah validation layer found this one at least

leaden wedge
austere geyser
#

keep getting all these different feature requests for mod support. custom models, normal generation for custom textures, weapon layering.
I'm glad people are playing, but I've been wanting to add fog for months now ๐Ÿ˜ฆ

primal adder
#

couldnt people just open up the asset packs and drop in new files?

#

then again I forget how you did your assets

austere geyser
#

nah people want to be able to supply custom assets per mission, as well as have 'global' mods that affect all levels.
the original assets are in a packed binary format that I can't modify or redistribute.

leaden wedge
primal adder
#

depth relative to the camera, tho

austere geyser
#

it needs to be volumetric fog though

leaden wedge
#

i tried to implement it, and had some issues with occlusion, but an enclosed space / corridor game should work well

austere geyser
#

I tried implementing this before and something fundamental about it didn't work for my game. I think it didn't look good when occluded by corners or something like that

leaden wedge
#

i think we talked out this like a year ago

#

i did have spot lights sorta working (same code just with a cone falloff) and this would make for super cheap "volumetric" headlights, etc

austere geyser
#

I'm planning on adding quake 3 style volumetric fog. I think I can do it with the following approach:

  • create a fog volume mesh from connected segments, omitting the interior faces
  • draw the outside of the mesh and linearize it to a depth texture
  • draw the inside of the mesh, sampling the depth texture and the depth of the mesh pixel to determine the fog depth
#

as long as the volumes are convex I think this should work fine

primal adder
#

can you not fake volumetric fog using a shader? or does it just not look the same

austere geyser
#

oh I'm definitely gonna fake it with a shader

primal adder
#

I was looking at this yesterday but I was curious, cuz I always thought "volumetric cloud/fog/farts" was just faked with shaders on a plane, just using world space

#

I'm tired of these mfin shaders on this mfin plane

austere geyser
#

I still need to add the pass to render the "front" of the volume so the depth is correct

primal adder
#

so much imgui forgelul

austere geyser
#

it's all you need KEKW

primal adder
#

does this require edits to user levels?

austere geyser
#

yeah, designers will need to place the fog manually

#

fortunately the world is already split into volumes, so it's just a matter of flagging them

austere geyser
#

exponential fog and added the object fog shader

#

compression makes it get banding but I promise there's not much ๐Ÿ˜ฆ

primal adder
austere geyser
#

I just need to make the light in the back flicker / strobe

#

maybe add some lasers ๐Ÿ˜„

jade bobcat
# austere geyser compression makes it get banding but I promise there's not much ๐Ÿ˜ฆ

You asked about "dithering" in #wip but I think you are talking about what I would call "banding", which is what you call it here. You asked for suggestions of how to fix it, and it sounds like maybe you are happy with it now with the changes that you've made, but using dithering could be one way to improve this kind of banding. If you want to know more I could find some presentations by Playdead about it.

austere geyser
#

oops, yeah I meant the banding. I know there's a way to use blue noise to help with it but I don't know the details.
I think what I have is good enough for now though. thanks for the offer

primal adder
#

it's probably fine in a game with pixelated art

#

if anything, lean into it and try to mimic the level's palette

austere geyser
#

if I was adventurous I would ๐Ÿ˜„

#

the third game has terrible fog banding. historically accurate KEKW

primal adder
#

how was it implemented?

austere geyser
#

quite similar to what I'm doing, just without shaders.
they determine the near plane of the fog based on the room portals and then calculate the distance to each vertex in the room from that. then draw transparent faces on top of each solid face.

austere geyser
#

it's starting to come together

primal adder
#

I def. never got to that level

austere geyser
#

it's level 21! not in the demo

elfin holly
#

froge_love pretty

leaden wedge
#

honestly, I thought the banding/dithering looked better for the type of game, but that's just me

#

looks sick either way

leaden wedge
austere geyser
#

trying to tint the fog based on ambient vertex lighting. I think it's a bit more natural? on vs off

#

I just wish vertex interoplation didn't make those ugly diagonal lines

leaden wedge
#

hmm.. i could probably do this same trick (sample SH for fog color)

#

wait, that actually works. nice

austere geyser
#

also I just realized I wasn't correcting for srgb on the ambient color. now it's cooking

leaden wedge
#

sorry, 9 vec3s

austere geyser
#

neat. kinda wish I had the tech for that, but the vertex based hacks have gotten me far enough.

leaden wedge
#

you can use it with vertex lighting

#

though may look weird if very low poly

#

this is the state-of-the-art, no lighting here, this is just ambient

#

though may not work for Decent. You kinda need PBR and IBL pipeline

austere geyser
#

yeah that's quite a bit fancier than anything I'm going for

leaden wedge
#

could still be useful if you have probes or baked lighting (using the original version)

#

it would allow objects to go into "shadow" without any real-time lighting

#

or to capture "fake" lighting like emissive textures

austere geyser
#

hmm that's quite interesting

leaden wedge
#

it's still used (the last paper is from the latest call of duty) but it was probably in most games before they could do real time on everything

elfin holly
#

It does sell the fog a lot more, yeah

austere geyser
#

now I wish the overhead lights had light shafts to sell the fog even further... throw some billboards on them and fade when close

leaden wedge
#

such a simple change too

austere geyser
vapid idol
#

Tha fog lava is hella cool

primal adder
austere geyser
#

I don't want to think about terrain yet agonyfrog

leaden wedge
austere geyser
#

are you referring to stationary dust particles some games have?

leaden wedge
#

sorry typo, i meant to say "dust"

austere geyser
#

I like how fog makes it look like the light is diffusing into the room. for such a simple hack it's quite effective for my tech level.

leaden wedge
austere geyser
#

if you stack enough hacks it looks like something KEKW

leaden wedge
#

your fog is looking good too, was there a source for this?

austere geyser
#

not really, I just translated what quake 3 did to a pixel shader

leaden wedge
#

so it's volume based?

austere geyser
#

yeah. I create a volume mesh, draw the outside to get the "near" distance, then the inside to get the far distance and fill the fog.

leaden wedge
#

okay cool

austere geyser
#

I still want to try adding some randomness to the fog sampling though. tiling a 3d noise texture aligned to the world maybe? 2D screenspace texture to vary the depth? idk

leaden wedge
#

i think I'm gonna try again with that fog lighting trick to see if I can figure it out

#

I just have N64 style fog (global depth) which still is better than nothing, but I think with the fake lighting that would work

#

sampling the ambient light works well, thanks for that

#

i'm trying my best so that you need very little to no pre-processing or setup (e.g. creating volumes, etc)

austere geyser
#

how would you determine where the fog is without volumes?

#

if it's not global of course

leaden wedge
#

for a game light decent/quake you would need to define volumes yeah

#

i'm working on a probe system (right now it just reads from a single HDRI map) but in theory you could get this from the probe in some automatic way

#

e.g. you read the sky light, the occlusion, and the general emissive textures, should give you a good ballpark color

elfin holly
leaden wedge
#

there are just various levels from "total hack" to "physically plausible"

leaden wedge
mossy sinew
#

ah i see

#

do you have a project thread friendo

leaden wedge
austere geyser
#

I'm adding an environment system to group segments together and set various properties like fog and wind.
individually marking segments is usable, but it's tedious and error prone for large areas

austere geyser
primal adder
#

this almost makes me want to drop my entire UI and use imgui

leaden wedge
austere geyser
#

apart from the weird srgb issues there's no real problems with it. it's lightweight and just works

elfin holly
austere geyser
#

oh fancy. did you write that spinner yourself?

elfin holly
#

mhm

#

Istg I have videos of me messing with the track lengths and note layouts somewhere but I canโ€™t find them

elfin holly
silver prism
#

Do you trace a cube along the direction?

#

I don't think it's color picking along the square... maybe? nervous

austere geyser
silver prism
#

Into screen space? Aren't you in screen space when the rectangle is being drawn? Or you draw it in world space and then come back into screen space ?
The result of that is Z sorted I suppose.

austere geyser
#

the rectangle is screen space yeah

#

I don't z sort anything for box selections

#

I just project the center of every segment in the level to screen space when you release the selection. surprisingly it's not slow at all.

silver prism
#

I'm surprised it works so well but it's really cool. froge_love
I might try to implement that during a weekend !

austere geyser
#

originally I got stuck trying to project the selection box into the 3d world, then I realized I could flip it the other way

#

for single clicks I create a ring buffer based on depth to allow cycling

austere geyser
leaden wedge
#

Blake? are you lurking here, or did we independently all come up with this...? https://fxtwitter.com/blakezonca/status/1952156692604719301

My first crack at baked volumetric fog for VR. Still some artifacts to work out but it's starting to come together!
๏ธ€๏ธ€
๏ธ€๏ธ€It samples the same SH coefficients that the dynamic objects use so there's no big memory increase or additional setup, just one shader for the volume.

**๐Ÿ” 3โ€‚โค๏ธ 45โ€‚๐Ÿ‘๏ธ 1.0Kโ€‚**

primal adder
#

still workin on this?

austere geyser
#

not much these days. work has been busy and I haven't had the energy

austere geyser
leaden wedge
#

amazing!!!

austere geyser
#

so now I'm knee deep in doing system rewrites that won't have any visible changes, things such as:

  • adding a new texture management system that uses names instead of magical indices in the game data
  • updating the material system to make use of it
  • cleaning up some of the mess that the renderer and resource loading has become
  • proper virtual file system

all of this was instigated by the weapon models, which are using custom textures not stored in the game files. I hacked them in, but it's made even more of a mess with resource management.

primal adder
#

I am super glad I added in an actual material system, even if it is super basic, and adding in a sort of virtual file system was also real helpful (mostly on load, to avoid having to check if a file exists every time)

austere geyser
#

still trying to sort out my texture loading after switching to D3D12 memory allocator.
but using it has reduced GPU memory usage from around 1200mb to 900mb when loading the average level, due to placed resource alignment.

#

I might just always create procedural textures as committed resources to bypass the bug I'm seeing, so I can continue working on the rest of the texture resource refactor

austere geyser
#

well this is progress, and closer to what I would expect for uploading textures

[TextureAllocator.cpp:173] uploaded 420 textures in 100ms
now to load / generate the specular, normal and emissive maps

#

oh, my fence isn't working properly ๐Ÿ™

#

I forgot I wrote wrappers for command queues. not too bad still

[33:23.028] [info] [TID:48792] [MaterialLibrary.cpp:746] uploaded 421 textures in 154ms
[33:23.173] [info] [TID:48792] [MaterialLibrary.cpp:746] uploaded 421 textures in 145ms
[33:23.317] [info] [TID:48792] [MaterialLibrary.cpp:746] uploaded 421 textures in 143ms

austere geyser
#

the texture loading rewrite is making good progress.
mipmap, specular map and normal map generation was quite slow in the old system because it's single threaded.
switching from single threaded to a parallel foreach has sped up texture generation 14x on my machine

#

now I just need to figure out how to reduce the GPU upload time. it's 0.4s for 1200 textures which isn't terrible, but it's only 30mb of data. feel like it should be almost instant.

austere geyser
#

I multithreaded the GPU uploads / copies / cmdlist writing and that has addressed it. nearly instant now in release builds

uploaded 1270 textures
read: 0.003s
generated 0.025s mips/spec/norm 1231/418/400
upload time: 0.093s