#Painkiller

11285 messages ยท Page 12 of 12 (latest)

clever gull
#

ThinkPad T14s (6th Gen, 14, Snapdragon)

potent cedar
#

yeah it's an amazing phone

clever gull
#

That phone costs $2700 in my country

potent cedar
#

๐Ÿ‘๏ธ

kindred haven
clever gull
#

vro I thought my market was cooked

odd thicket
#

I could fix it

#

If I can run Remix on a RX 6400
I can run Remix on anything

kindred haven
potent cedar
# odd thicket I could fix it

TAAU at 0.33 res scale still runs at like 10fps when the window size itself if 480p, i dont think anything else other than driver improvements will save it

odd thicket
#

The RX 6300 also exists but was OEM only

odd thicket
clever gull
#

You have 30minutes

#

๐Ÿ••

odd thicket
#

Iโ€™ve seen @potent cedar implement extensions before

clever gull
#

I can't run Remix on Snapdragon 8 Elite drivers for which are 2 days old๐Ÿฅถ

#

guess I'll have to run call of duty zonbies instead

potent cedar
potent cedar
#

but ill try your RDNA2 rtx.conf

odd thicket
potent cedar
#

i assume rtx.upscalerType = 4 is XeSS?

#

remix locks up trying to compile the shaders for whatever upscaler that is

#

yeah upscaler type 1 is TAAU and that works, about 7fps at 0.33% of 480p lmfao

odd thicket
kindred haven
tall iron
#

I don't mean actually culling the map according to bsp , I meant to split the map up into raytracing-friendly sections and adding them in as Remix objects , so the original game engine can proceed with its original culling process which will happen basically invisibly

#

so you are duplicating the entire level's static geometry as a series of Remix objects, which will make sure that the shadows and reflections are consistent , whatever culling happens in the original game engine

#

AFAIK you are already heavily modifying the Atrium level anyway, so you might as well put all those assets you have made into bespoke Remix objects as level chunks

potent cedar
#

you remove a lot of the bottleneck of the original engine and the remix bridge

tall iron
#

apparently Painkiller has a problem with culling , where if you leave it on it runs normally but it messes with the raytracing, but if you force it off by modding the game, the original game engine starts chugging at some levels

potent cedar
#

yeah its the same with source and i assume other BSP-rendered games

#

its better to mod the engine to disable culling but then disable anything that is static so dynamic meshes dont cull

tall iron
# potent cedar

what does 'show cached image' actually do? it looks like it almost shows the final image when its enabled

potent cedar
#

it was a trick to bypass driver crashes on RDNA4 when toggling the debug view

#

im pretty sure it does just show the final image

tall iron
#

I wonder if its possible to mod the Painkiller engine so that it basically 'culls' all the level geometry all the time, while rendering all the dynamic entities all the time too

#

the final level is pretty high-concept but its let down by the built-in culling.... theres this nuclear explosion mushroom cloud frozen in time, and it bathes the entire level in an orange glow because its an Remix light source... but only as long as you keep the mushroom cloud in view, otherwise the light source is culled and the whole level is plunged into darkness

clever gull
#

Also it is possible to make things always render no matter the clip distance valueBinqPlsFix

tall iron
#

I mean the mushroom cloud is culled the moment you look away from it, it's nothing to do with distance

quasi salmon
# potent cedar

That's actually something I can do for idTech games (disable brush rendering, and instead draw an anchor mesh unique for each map).
How did you get the replacement geometry in .usd format? From the Game's own map editor, or something else?

light palm
# potent cedar

just need someone to make level files with just a unique anchor mesh an no other geometry and we can hopefully use the existing .mopp for collision
I think i did try this at some point, perhaps there is a reason i am not doing it already

#

would have to think through how the current material replacements would interact with it, especially if merging meshes before converting to usd format

#

CR's blender toolkit would probably be a big part of making all of that easier!

light palm
#

still having some challenges on Hell level where PK changes the alpha state of the enemies for the ghost effect, but:
On many enemies I had to disable the legacy alpha state to make subsurface work more reliably, so the ghost effect no longer works on those enemies

#

remix logic would probably just straight up fix this, anchor remix logic material change to the skybox, would have to look at it
If anyone is interested in contributing, please let me know, it could really help to push the project along at a much faster pace

#

I have been considering doing some housekeeping on the github repo for the project and making it public so that it is easier for others to contribute!

potent cedar
light palm
#

Quick everyone, peer pressure CR for blender toolkit updates! ๐Ÿ˜ˆ

#

(JK ofc)

light palm
#

or did you have to do some stuff

potent cedar
#

At that time, I had to re-do any material replacements manually

light palm
#

proably scriptable

potent cedar
#

since loading remix toolkit mod.usda's sort of works now (still needs work), you could do that to import all of your replacement materials, meshes, etc, before exporting the capture geometry

light palm
#

true true

light palm
#

Anyone have access to 3dsmax or Maya?
I need the pk maps with all geometry removed except for 1 unique mesh
or at least one to test
for example colloseum

#

seems there is not great blender - pk format interop

light palm
#

Never mind! Blender addon exists! ๐Ÿ˜„

clever gull
#

let us know if it works

#

if it doesn't, don't

#

i will happily believe that it does for the rest of my life

light palm
#

it looks like the collision didnt work

#

fell straight through the floor even though the original mopp were there. It probably ties each mopp to the corresponding mesh in the level

#

so no mesh no mopp i guess

#

replace each mesh with a single triangle instead of deleting perhaps ๐Ÿ˜›

light palm
#

progress

clever gull
light palm
#

turns out a lot of it is not from the level geometry itself

#

but the dynamic objects and particle fx

clever gull
#

From the tinkering with Winlator I found that skinned meshes is a trouble in this game. A static scene runs at 100+FPS, but once some monsters spawn and animations start playing, it drops to like 5FPS. And if you get close to make them all attack simultaneously, it causes a huge lag spike

#

You could say any kind of CPU overhead is multiplied 10x times when emulated

#

I wish it were possible to make such troublesome things perform better in this game

light palm
#

Basically default

#

Particles removed

#

and barrels and ammo removed

clever gull
#

Now check what else you can delete

#

From here basically

#

scrap all the visual entities

light palm
#

and health, cups, keys, chests removed

#

yeh already deleted all the clights and environments which have to do with lights etc

clever gull
#

Did we ever implement the 4GB patch in the engine.dll

light palm
#

and vases and slabs removed

clever gull
#

Riddle me this

#

What if we do and it'll just work

#

It should help with the entities

clever gull
#

or ask david who knows the exact behaviour of the patch

clever gull
#

I've seen people on VK cheering that they can use more stuff now when it released

light palm
#

i would assume if you ran out of memory you would either crash or performance would tank instantly

#

not like a smooth transition in fps the more stuff you remove

clever gull
#

maybe it slows itself down as a precaution

#

๐Ÿ˜„

vale gust
#

or unless I specified in the patch notes that I did some fix that boosts FPS

light palm
#

where can I download more FPS

clever gull
vale gust
#

I am pretty sure that getting more FPS is the expected output, since those things move and cast shadow

vale gust
#

A thing I keep telling people is to use spawners to spawn items as you progress in the level

light palm
#

No changes to the actual level mpk here, just ignored all the base meshes and used a replacement mesh which is the whole level merged as one mesh. helps fps

vale gust
#

I like how you just chose the biggest map you could find

light palm
#

good test case, bigger differences are easier to spot

light palm
vale gust
#

Colloseum has a bunch of torches and lamps and lights everywhere

#

I suppose there are many things to make it slow

light palm
#

similar with atrium

clever gull
vale gust
#

Yeah, spawn these lights, torches, particles, etc, when you enter the area, then disable after you leave.

light palm
#

CBox entire black edition

vale gust
#

You could do this: After beating the wave of enemies in a room, make it so the things in the next one spawn, after you are done with that room as well, despawn once the door closes. Painkiller is pretty linear at times, so this works.

#

And just reveal everything at the very end when all doors open

light palm
#

lots of manual edits

vale gust
#

it also comes into question whether there will be a big FPS stutter when things spawn

light palm
#

could stagger it over some frames or whatever, shouldnt be too bad

#

i highly doubt i could find the time to rework all of the levels logic like this though

#

community project!

#

bring base PK fps from 2500 to 3000

#

need a game to test our new 1000hz monitors on anyway

vale gust
#

I at most only get 1200 by looking at a wall

light palm
#

those are rookie numbers mate, rookie numbers i tell ya

#

๐Ÿ˜›

clever gull
#

The more humorous he gets the more aussie his language is

vale gust
#

Well Colloseum also has an obstacle course in the middle somewhere, I suppose those could also impact the FPS since they move continuously

#

and it also has 3 enemy statues spawned as well, usually CActors cause lag no matter what they do

vale gust
clever gull
#

Perhaps the math is just slightly off somewhere you know

vale gust
#

CActor is like 3000 lines of code, and there is also CActor specific code in other parts, it takes time to just benchmark all of that and see what causes problems.

#

I would also blame LUA, if we were to use LuaJIT or just pure C++, they would've been better

#

like, alternatives that don't just call an interpreter with garbage collector

clever gull
#

imagine convincing the whatever company that holds the Painkiller assets (if there is any left, haha) to handle it all over to help create a project that performs well

vale gust
#

what I've learned is that whoever owns the IP doesn't give a shit about the assets

clever gull
#

or at least find out the location where they might be stored, some people out there could work with that ๐Ÿ˜„

clever gull
clever gull
#

you've gotta look after that HDD man, it's historically significant wtf

#

There's a reason that every single government stores random papers from 1400s in large quantities

#

it matters

#

you will need it at some point

vale gust
#

the AAA quality upscaling

clever gull
# vale gust

People who never played the game won't even discern this mess

tall iron
light palm
#

the other bottlenecks seem bigger in this case from a quick check

tall iron
#

didn't you have a culling algorithm ready a few months ago? one that was good for raytracing because it didn't depend on camera direction

#

it was originally for culling level geometry, but now that the whole level is a Remix object, it would be interesting to see how well it works with dynamic objects...

#

i think that a better solution is to have more of a compromise between the original game engine's culling, and raytracing-specific exceptions to the culling ... most dynamic objects can be culled with little consequence, unless they are a light source, cast a significant shadow, are obviously visible in reflections etc etc

quasi salmon
# light palm it may not be

just to add my 2 cents (of confusion ๐Ÿ˜ ) idTech likes to batch all geometry across the level in one big drawcall (when I disable all culling). And I did not observe a degradation in FPS. I then though maybe light quality is lower between cull-active/inactive, but I did not observe a big change either..
But what Mark says makes complete sense to me, which means I may need to use a GPU debugger maybe I'll get some numbers to compare..
I'm using a 3060Ti on my PC (1080p), so if there's an expensive operation I expect I would see it ๐Ÿ˜„

I may add that in Heretic I had huge FPS drops for alpha surfaces (mostly water). Whenever water was drawn, from 60 it dropped to 15. Initially my fix was to allow culling of alpha surfs. Later on there was this water puzzle with a room being flooded by a big block of water (many triangles ->many drawcalls) -> 1-4 FPS. The fix there was to draw that big block of water in a single drawcall. So I'm guessing there is a significant latency for each drawcall with alpha surfs ? And it keeps adding-up with more drawcalls..

quasi salmon
tall iron
quasi salmon
light palm
clever gull
light palm
#

Not sure! It's basically debug mode index 300 with accumulation set to non continuous 1 frame, composited

clever gull
#

The souls are green
did you tag this material as World space UI or something lol

light palm
#

Pretty arcane combination

clever gull
#

totally forgot that you can use Debug modes instead of PostFX

light palm
#

I like settings haha

#

I'll send a screenie of the setting tomozza

#

Frame dependent on how it looks though

#

I'd like to tweak more but performance is high priority rn

light palm
#

im gonna do some testing with that new dxvk stuff see if that helps

vale gust
#

I like how the dxvk repository has not had a release since August, I think they are cooking something

#

version 3.0 soon

clever gull
#

gotta make that proton real gud

light palm
#

@fringe tangle Hmm is this a case of Red = Bad ?
"Is primary or secondary hit outside NRC's AABB"

light palm
#

Here are some interesting other candidate debug modes for demon effect, let me know if you like any particular one folks! Some of them look unique in motion too.

fringe tangle
light palm
light palm
fringe tangle
#

nice. That probably means it's completely fine, but I haven't actually dug through the code or anything.

clever gull
#

I also see that this debug mode checks for roughness, isn't there like a global roughness value to try and fiddle with?

#

Like make things use a universal roughness value to prevent them from standing out that much like the wall on your screenshot

#

btw some heavy blur is needed, it's a big part of the original and it would get rid of this oversharpened debug look ๐Ÿ˜›

clever gull
light palm
# clever gull btw some heavy blur is needed, it's a big part of the original and it would get ...

the screenshots is just looking at the colors, the other parts of the effect are not enabled in those comparisons. The full effect has a very strong bloom with low threshold and low radius to simulate the blurryness, and I also was experimenting with setting the upscaler to taa ultra performance for some blurriness. The OG demon effect has an extreme smearing effect which is achieved nicely with the accumulation mode ๐Ÿ™‚

#

maybe we can just do a straight up desaturate, then set that unique enemy mat as world space UI so its rastered on top or something ๐Ÿ˜›

#

or tag them as sky

#

i could also set up those particles so they have a unique hash so we do wacky stuff with them

clever gull
#

perhaps just a lil bit but not this much haha

#

The Moon looks haunted btw ๐Ÿ‘ป

clever gull
light palm
clever gull
#

Yeah, it's just that I've no idea how to replicate that

#

Black stained glass material ?

light palm
#

transmission

clever gull
fringe tangle
# light palm <@617500777191047168> Hmm is this a case of Red = Bad ? "Is primary or secondary...

Got a reply from someone who actually knows what they're talking about:

This could happen if sky is geometry and it's outside the AABB and that'd be OK. Otherwise this shouldn't be red for geometry close to the player as the indirect won't be accurately resolved by NRC. So all or at least close enough geometry to player should be within AABB. NRC requires a constant BBOX and we reset it on camera cuts to make it more dynamic.They can adjust rtx.neuralRadianceCache.sceneBoundsWidthMeters, which defaults to 200 [m], to increase this if needed per game, but before doing so they should confirm the Remix scene scale for determining [meters] in the game is properly set.

light palm
clever gull
#

Absolutely great tool mate, thanks a lot and keep up the good work maintaining it! Excited about the upcoming PBRFusion4lesGO

mossy plume
light palm
#

@fringe tangle Nevermind! I had a missing forward slash in the asset path /facepalm ~~do you happen know why I am not having much luck getting point instancing working? I have tried a few things, nothing in game so far though. ~~

#usda 1.0
(
    upAxis = "Y"
)

over "RootNode"
{
    over "meshes"
    {
        over "mesh_6D19ABBC4208BC2C"
        {
            def Xform "PaintTool"
            {
                def Xform "Dead_Tree_rlthg_Mid_84027"
                {
                    def PointInstancer "pointInstancer"
                    {
                        quath[] orientations = [(-0.0784302, -0.150024, 0.985352, 0.0276337), (0.237427, -0.151855, 0.95752, 0.0574341), (0.739258, 0.123413, -0.652832, 0.108948), (0.764648, -0.0807495, 0.622559, 0.14502), (-0.663086, -0.151733, 0.729492, -0.0696411), (0.288574, -0.0845337, 0.950684, 0.0737915), (0.962402, 0.0700073, -0.246704, 0.0876465), (-0.525879, -0.122742, 0.839844, 0.0566711), (0.981445, 0.133667, -0.120483, 0.06427), (0.510254, 0.123474, 0.838379, 0.146484), (0.876953, 0.163086, -0.437012, -0.114685), (0.233276, 0.130371, 0.958496, 0.0981445), (-0.327393, -0.126099, 0.936523, -0.00115585)]
                        point3f[] positions = [(105.15053, 83.56139, -74.72038), (112.18799, 85.26799, -63.3062), (112.76555, 84.92197, -50.089703), (116.62493, 85.57684, -38.501102), (120.8237, 85.72333, -20.042288), (124.58652, 86.41554, -15.032078), (128.62968, 86.01723, -1.8100971), (66.89035, 74.6134, -101.04935), (58.18784, 76.2263, -113.355316), (40.86345, 72.70311, -108.293686), (28.78764, 75.86752, -114.30078), (19.006456, 81.73577, -125.71302), (86.14995, 78.351204, -87.27757)]
                        int[] protoIndices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
                        prepend rel prototypes = </RootNode/meshes/mesh_6D19ABBC4208BC2C/PaintTool/Dead_Tree_rlthg_Mid_84027/pointInstancer/asset>
                        float3[] scales = [(0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288), (0.0033178288, 0.0033178288, 0.0033178288)]

                        def Xform "asset" (
                            kind = "component"
                            prepend references = @.assets/c2/c2l6_swamp/meshes/Dead_Tree_rlthg_Mid.usd@
                        )
                        {
                        }
                    }
                }
            }
        }
    }
}
#

I can almost guarantee that it is something really silly like scene scale etc

#

I swapped out the asset for the same one used in HL2RTX for testing

#

I am seeing this in the log
warn: [RTX] InstanceManager: detected unsupported quad index layout for billboard

light palm
robust hollow
light palm
#

@fringe tangle A few questions on how the runtime handles USD replacement mesh structure, specifically the relationship between material assignments and BLAS construction.

TLDR:
What would the ideal replacement mesh USD file/files look like from the runtime's perspective? My working assumption is spatially coherent geometry chunks with tight bounding boxes, potentially multimaterial, anchored to game side visibility triggers. Is that right?

When I merge level geometry into a single mesh in a DCC tool and ingest into Remix, the resulting USDA is split into separate "def Mesh" blocks per material. I've also seen GeomSubset per material within a single mesh, but had issues with materials showing up in toolkit and/or runtime (whole other can of worms) with that and dropped it.

My concern is whether per-material grouping means spatially scattered geo with the same material end up in the same structure, ie. bounding boxes full of empty space.
How does the runtime map USD(A) mesh structure to BLAS instances? One BLAS per def Mesh? One BLAS with multiple geometry descriptors? Something else?
Is the per material (def Mesh) split a runtime requirement, or an artifact of the ingest pipeline? Can a single BLAS contain multi material geometry?

#

Basically the idea is to maximise performance by modding the painengine to only render dynamic stuff, nothing static, except for specific anchor meshes.
Then feed remix optimal usd data.

fringe tangle
# light palm <@617500777191047168> A few questions on how the runtime handles USD replacement...

There are a few conflicting requirements, so it depends on where your bottlenecks are.

In general for pathtracing, tight bounding boxes are important for GPU performance. Consider the percentage of rays that hit the bounding box, but don't actually hit the triangles. The higher that percentage, the worse the perf will be. There may be some driver trickery to split up bad bounding boxes, but it's always a good idea to give those systems less work.

Each set of triangles is bound to a single material - in the runtime, a single mesh with 4 GeomSubsets is rendered exactly the same way as 4 separate meshes, so just use whichever setup fits your workflow best.

Unfortunately, in current Remix each drawn mesh instance has a fairly high CPU overhead. That is significantly reduced for pointInstancer meshes, but we don't have a good authoring flow for that yet.

This means that while the GPU will perform better if you split things out into a bunch of small, spatially coherent meshes, the CPU will perform worse. So at least for now, you need to perform a balancing act between batching meshes for CPU performance, and optimizing bounding boxes for GPU performance.

(I have a plan to significantly optimize those CPU bottlenecks - in theory the CPU cost per static mesh instance should be almost 0, we just have a lot of tech debt making them cost as much as dynamic meshes. Once we have time to do a significant draw call pipeline refactor and fix that, then the CPU bottleneck should mostly go away, and assets can start prioritizing GPU optimization. Unfortuantely, I've been trying to find time for that refactor for more than a year now, and I can't garauntee how much I'll actually be able to reduce the CPU cost.)

light palm
light palm
#

My current understanding is:

Assuming that we have a scene with each connected mesh having a single material and a relatively tight bounding box:

Our main performance balancing "knob" could be bounding box tightness?

I.e. merging spatially close meshes which have the same material based on the increase of the ratio of bounding box surface area (or volume) to triangle surface area.

Do we have a pre-existing algoritm which I can use to optimise my scenes in this manner, Ie. minimise mesh count and bounding box "emptyness"?

At the moment I can get most of the way there directly in blender. Usd seems to lend itself to some kind of performant heuristic for scene optimisation, potentially even one which can optimise a scene and then adjust the bounding box tightness based on the scene to balance the mesh count vs. BB emptyness ๐Ÿค”

#

Are the bounding boxes axis aligned? Please forgive my ignorance in the matter

#

Scene rotation could be an important performance tuning knob ๐Ÿคฃ

fringe tangle
# light palm My current understanding is: Assuming that we have a scene with each connected ...

Most engines won't suffer the CPU per-instance slowdown Remix currently has, so I'd be surprised if there are any existing tools. I also wouldn't know of them - the last time I really dove into modelling software was back in 2009 ๐Ÿ˜…

I believe the TLAS is axis oriented, not sure about the BLAS. I'd recommend against trying to optimize at that level though, as different vendors / generations could have very different implementations.

untold hearth
#

is there a write up on this, Peter Jacksons King kong needs this desperately

light palm
untold hearth
light palm
#

of course doing non physical weird hacky stuff like this often has unintended side effects ๐Ÿ˜›

untold hearth
#

Well it works!

#

so convincing

tall iron
#

hey peeps, any updates? does Docks still run poorly?

light palm
#

the project is under continuous development, despite it being fairly quiet in here recently ๐Ÿ™‚

tall iron
#

have you uploaded the files somewhere

#

i still havent finished the game in remix, its been almost a year

odd thicket
#

But Iโ€™m not doing 5 separate downloads

tall iron
#

I want to truly experience levels like Colosseum and Stone Pit with Remix , but only if they run properly

robust hollow
light palm
open lotus
#

Things are a-brewin in the Painkiller camp, with the help of some fresh talent, hard at work on models and materials

tall iron
#

also I do wish that more effort would be put into the levels themselves... focusing on the assets like this , its missing the forest for the trees, so to speak

light palm
# tall iron also I do wish that more effort would be put into the levels themselves... focus...

More enhanced static geometry would be nice. what kind of enhancements are you looking for, could you make an example with blender or similar? anyone who wants to open a level, make it awesome (maintaining original collision), and send it - would likely make it in to the project ๐Ÿ‘
there is now a blender addon for painkiller mpk (level) files on moddb, recently released, so quite easy to do now

#

thanks to the gentleman and scholar who kindly provided this!

tall iron
light palm
tall iron
#

Oh yeah now that sounds like real progress

#

Hopefully now we can play Docks with good performance

light palm
#

with dlss ultra performance to avoid gpu bottleneck

#

no frame gen

light palm
# odd thicket GPU?

pretty decent GPU! the cpu bottleneck was the target here, and man it feels good at high fps ๐Ÿ˜ฎ
game like PK really loves the low input latency!

odd thicket
light palm
light palm
# odd thicket Teach me your ways of optimization then

It's basically @tall iron 's suggestion (and others, very helpful input from @quasi salmon and @potent cedar ) To disable the geometry in the OG game (done via lua, pretty easy at the end of the day but took me a while to figure it out) and simply ingest all of the static geometry as a replacement mesh. It is not without issues though, but have worked through them now.

It may even run on PseudoPolish's Samsung S25 kekw

odd thicket
#

Though only like one level was converted in that

clever gull
#

game like PK really loves the low input latency!
Yeah, I really enjoy how precisive the input gets in Painkiller. Makes it possible to juggle ragdolls like crazy

#

Some prefer limiting FPS to 60 in order to prevent things like barrels exploding on touch, but personally I much prefer high FPS buggy physics gameplaysteamhappy

kindred haven
tall iron