#Painkiller
11285 messages ยท Page 12 of 12 (latest)
yeah it's an amazing phone
That phone costs $2700 in my country
๐๏ธ
so like an iphone?
vro I thought my market was cooked
whats an rx6400
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
Low end RDNA 2 card
The RX 6300 also exists but was OEM only
You can lower the Pathtracing intensity like I do for RDNA 2
I meant I can optimize the Pathtracing, not drivers ๐ญ
Iโve seen @potent cedar implement extensions before
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
if you're comfortable building mesa, you can try adapting my patch for your hw, though i dont think there is anything i did that is hw gen specific iirc
i dont think anything can meaningfully improve performance
but ill try your RDNA2 rtx.conf

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
Ye

Yeah, youโre cooked
Can u show a video?
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
yeah i second this, i've done this with portal 2 rtx and it's done wonders for performance, especially if you just turn off engine rendering for statically rendered meshes
you remove a lot of the bottleneck of the original engine and the remix bridge
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
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
what does 'show cached image' actually do? it looks like it almost shows the final image when its enabled
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
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
Just a reminder that you can configure clip distance per level in CLevel using o.FarClipDist
Also it is possible to make things always render no matter the clip distance value
I mean the mushroom cloud is culled the moment you look away from it, it's nothing to do with distance
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?
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!
do you mean in PKRTX? seems OK in the dev build, fixed for upcoming release i suppose!
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!
I used my blender toolkit addon to re-export captured geometry as replacement meshes, they were all attached to an anchor mesh
How did you handle pre-existing material replacements, was it just a drop in soln?
or did you have to do some stuff
At that time, I had to re-do any material replacements manually
proably scriptable
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
true true
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
Never mind! Blender addon exists! ๐
Painkiller game tools. Contribute to max-ego/PK_tools development by creating an account on GitHub.
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
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 ๐
progress
At this point you should be able to assess the performance difference
turns out a lot of it is not from the level geometry itself
but the dynamic objects and particle fx
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
Now check what else you can delete
From here basically
scrap all the visual entities
and health, cups, keys, chests removed
yeh already deleted all the clights and environments which have to do with lights etc
Did we ever implement the 4GB patch in the engine.dll
and vases and slabs removed
you could test it on Vanilla with and without entities
or ask david who knows the exact behaviour of the patch
@vale gust
So deleting all the entities from the level doubles the FPS. We need both the entities and FPS. Is the 4GB patch supposed to help exactly with this?
I've seen people on VK cheering that they can use more stuff now when it released
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
It's not going to boost FPS, it's just going to not make the game crash when you reach 2GB
or unless I specified in the patch notes that I did some fix that boosts FPS
where can I download more FPS
As if Painkiller is not the only one you need in your life
I am pretty sure that getting more FPS is the expected output, since those things move and cast shadow
A thing I keep telling people is to use spawners to spawn items as you progress in the level
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
I like how you just chose the biggest map you could find
good test case, bigger differences are easier to spot
not sure how to handle the materials on this, it is one mesh with about 100 material assignments
Colloseum has a bunch of torches and lamps and lights everywhere
I suppose there are many things to make it slow
similar with atrium
it is barely playable, in fact
Yeah, spawn these lights, torches, particles, etc, when you enter the area, then disable after you leave.
CBox entire black edition
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
lots of manual edits
it also comes into question whether there will be a big FPS stutter when things spawn
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
I wished I got that much in base game
I at most only get 1200 by looking at a wall
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
the FPS scales with user's skill
Have you ever thought of making all these things work better somehow? I know it's like asking a divine entity whether it considered to make the world a better a place lol, but still
Perhaps the math is just slightly off somewhere you know
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
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
yeah, I think the assets are long gone. Silent HIll 2 no longer had source code for the remastered version. Warcraft 3 no longer had the original textures, so they upscaled the 32x32 ones and ended up with atrocities.
what I've learned is that whoever owns the IP doesn't give a shit about the assets
or at least find out the location where they might be stored, some people out there could work with that ๐
it is against the law

SH2 I can comprehend, but Warcraft 3 things being lost is beyond insane from my perspective
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
I thought this was not optimal for raytracing?
it may not be
the other bottlenecks seem bigger in this case from a quick check
well that means that we don't have to worry about chopping the level up into chunks, and we can just plop the whole level's static geometry as a Remix object
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
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..
"cast a significant shadow" yea I'd love to figure out how big a shadow is cast by an object, before any real ray-casting is done
At this point i think its going to be manually tagging objects to be exempt from culling, barring some kind of programmatic approach in the game engine i.e. shoot a software ray from a light source, through the object, and check if the ray intersects with level geometry in front of the camera
Yea manual tagging makes sense. I think xoxor mentioned using a similar approach: a large enough sphere around player to include close objects, and manual tagging of large objects/buildings (also depending on sun position etc). Programmatic approach is probably a headache.. I mean if I could do that easily, I would be a game developer, and not a dilettante ๐
Demon Mode!
that's mad
how is it that the fire is still red
Not sure! It's basically debug mode index 300 with accumulation set to non continuous 1 frame, composited
The souls are green
did you tag this material as World space UI or something lol
Pretty arcane combination
Daamn that's smart
totally forgot that you can use Debug modes instead of PostFX
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
im gonna do some testing with that new dxvk stuff see if that helps
I like how the dxvk repository has not had a release since August, I think they are cooking something
version 3.0 soon
I would expect them to cook something for the Steam Machine release
gotta make that proton real gud
@fringe tangle Hmm is this a case of Red = Bad ?
"Is primary or secondary hit outside NRC's AABB"
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.
I'll ask around internally, but just being red doesn't mean that it's bad. I'm guessing that any secondary ray that goes up to hit the skybox would cause the primary surface it reflected off of to be red.
ahh true, ill see what it looks like indoors!
It seems you may have hit the nail on the head, indoors there is no red ๐
nice. That probably means it's completely fine, but I haven't actually dug through the code or anything.
I'd say that this one resembles the original the most, with enemies mostly black at their core. Not that smooth of a transition between red and black, but still somewhat familiar ๐
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 ๐
One thing that kinda bothers me is sky rendering,
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
just an example of the smearing effect
Motion sick broskies would go nuts over this lol
perhaps just a lil bit but not this much haha
The Moon looks haunted btw ๐ป
It would seem literally anything could be a solution, just gotta brainstorm this stuff fr fr
orig is like black with a red fresnel effect or something
Yeah, it's just that I've no idea how to replicate that
Black stained glass material ?
hmm yeah could work, a translucent shader with really thick umm that thing that makes it dark or whatever
transmission
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.
Thx! Good to check. I believe there are a few places where scene scale interaction is ambiguous to the end user, thought it might have been related!
@mossy plume

Absolutely great tool mate, thanks a lot and keep up the good work maintaining it! Excited about the upcoming PBRFusion4
It was AI?
@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
@robust hollow Could you please pin this message: #1313627595815911448 message
@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.
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.)
This is an excellent explanation and answer, cheers Mark ๐๐ป
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 ๐คฃ
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.
is there a write up on this, Peter Jacksons King kong needs this desperately
It's just a large rectlight with very very low intensity and very very high volumetric contribution factor
The way my jaw just dropped
of course doing non physical weird hacky stuff like this often has unintended side effects ๐
hey peeps, any updates? does Docks still run poorly?
performance is improved ๐
the project is under continuous development, despite it being fairly quiet in here recently ๐
have you uploaded the files somewhere
i still havent finished the game in remix, its been almost a year
I would love to play it
But Iโm not doing 5 separate downloads

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

Not at the moment, I'll yell out once it's up somewhere, but that could be a while from now. Still a lot to do ๐
Things are a-brewin in the Painkiller camp, with the help of some fresh talent, hard at work on models and materials
https://cdn.discordapp.com/attachments/1313627595815911448/1495851010889879684/gem1.png?ex=69ebb3d0&is=69ea6250&hm=57903c68ec0651370390574113aab3d9884a390e8dbd9fbd7df328ba22e822dd& that first picture... is that from Train Station?
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
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!
wait, this means that the culling issues are over? if you are loading the entire level as a single object?
Pretty much. Levels (in most cases) are one "replacement" object with all of the geometry disabled in the OG game
Oh yeah now that sounds like real progress
Hopefully now we can play Docks with good performance
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!
I was asking what GPU you have ๐ญ
It's not a matrox millenium, that's for sure ๐
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 
Ah, yeah
That helps fixes P2 RTX performance as well
Though only like one level was converted in that
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 gameplay
i hope someone makes an auto tool for it
it makes the secrets easier to get when you can mash the movement controls

