#Greenmote
1 messages Β· Page 2 of 1
These'll go onto the Nexus post in next update
But, boolin with dad playing SS2 tonight
Here are some before/after shots from latest build @rough sentinel
tabbed + multi-unclip UI
can you explain these to me? [unclip] verbose = false structured = false write = false
verbose is verbose, structured prints json, write actually does the patch
I'm kind of thinking about just getting rid of dry runs in the GUI though. Or at least defaulting to write mode. It's a little... overdone
multi-unclip + working unclip cancel morj
I'll probably strip a couple options out of the config file as well like verbose or write as those're run-specific options you probably don't want to persist unless I just implemented them wrong, which, I'd say I did
I honestly wouldn't suggest anyone but me run it in verbose mode to the point I'm thinking about also removing that switch from the GUI
The logs are so ginormous you couldn't really give them to me anyway
multi-unclip builds up
That took a surprisingly long time.
The github runners are absolutely shitting today.
Build times have doubled from 5M to 10M since 2AM!
UNACCEPTABRU
As though I can do something about it.
well. You just shouldn't use recursion
its unsafe. You have unbounded arbitrary graphs authored by insane modders here
rust is 1mb stack size on windows. You might run this in parallel from god knows how many rayon workers
Oh I didn't notice it went back to recursion
you should never do anything recursively
I already dealt with that like twice now too
what would happen?
stackoverflow -> crash
wow my favorite
wait yea this isn't recursive
oh, i assumed just from the function name
No it was recursive at one point and then I switched it over to iterative uh
Maybe after I posted idr
without reading the whole program the rules are pretty simple
If there's a RootCollisionNode in the root node's child list. That is used as the collision root.
If there's not, but there is a RCN extra data, do a recursive search and take the first RootCollisionNode as the collision root.
If neither of those are valid. Use the actual scene graph itself as collision.
looks like you are doing some of that from a glance
fn affine3a_from_nif(value: NifAffine3A) -> Affine3A {
Affine3A::from_cols_array(&value.to_cols_array())
}
This part is kinda dumb
I think you could just .transpose().into()
or maybe just .into()
why do you have 2 dif Affine3A types anyways?
did my glam version fall too far behind rapier3d ?
i've been trying to keep the glam version sync'd with bevy because most of the rest of the gamedev ecosystem converges around there
π€ not sure what I should do to resolve that. I could make different features like glam-0-30 and glam-0-32i guess
sorry I was washin my dog
I could either bump glam version and potentially break other ppls stuff. Or add temporary features for it.
pluggable glam version seems like best option to me
Kinda like how mlua does the runtimes
I think it's technically breaking the rules of cargo
features are suppose to be only additive. these would be disjoint and conflict with each other. but ive seen other crates do it too
Although actually
in this case the glam desync is just on my part
You and rapier3d actually use same glam
well i know there is popular rapier integration for bevy so they likely do have at least some way to use 0.30
my pipelines blow up sometimes if the test cache ends up using newer deps than release so i just kinda did a --recursive update without really thinking too much about it
I can just downgrade off 33 tho
In what sense?
I have had mrs open already which is half the battle.
mrs?
merge requests
https://gitlab.com/modding-openmw/momw-configurator/-/merge_requests/11
https://gitlab.com/modding-openmw/momw-tools-pack/-/merge_requests/6
Thank you!
I'm tweaking the params a little bit and replacing --write with --dry-run
no guarantees of course like with anything π
Tried samply for the first time going over unclip performance one last time before I tag next release. This is waaaayyyy better than old-school perf runs 
Does this look right to you?
Says a lot of the time spent is just default-initializing LAND records π
Do you do your own initialization or using tes3's routines?
It's about as fast as possible because it uses low level zeroed_box()
just allocations are expensive no matter what
yea nothing fancy just filtering CELL | LAND etc
well I guess if that much time is in plugin loading prolly not a lot left to optimize at this point
mostof your flame graph is in adjust_reference_for_terrain_and_static_bounds
well not most but thats the largest chunk of the ones around similar size
where is the LAND loading slow?
mostly calling ::default in Vertex/Normals/Heights
the rest seems expected
I'm running against uhhh
Aesthesia Grass Vanilla 2
where's that at in the UI
im used to vtune
I see you're not using hashbrown, so you have std's hasher which is slow (made to be DoS resistent)
plugin loading is only this little portion of the entire app
which considering how crazy those grass plugins are, is pretty decent
ive been thinking of making a non-parallel version so that people can more easily do their own parallelization strategy. Which might be faster then doing per-record parallel (parellel at per-files level rather than per-record level)
meh
the invert call stack has intersection, sampling, and hashing as the highest cost
greenmote::unclip::terrain::TerrainIndex::height_at_global_vertex
you're paying more for the hashmap lookup here than the actual heigh sampling math. because you're using a hasher not made for small number (xy) lookups
use something like rustc_hash, and probably better refactor so you only do the land lookup once and then do all the samples with it at once, if possible. I.e. bucket everything by cell then sample in tight loops
I need to mess with this some more then I'm not used to reading the output like this
Perf is less fancy but more straightforward
remember that rust does bounds checking on []
Does it? I thought array indexing was unsafe
heights[local_y][local_x] == chance of panic == have to compile branch with stack unwind etc
nope its unsafe in C but not rust
you have to either use _unchecked methods or write your function in a way that the numbers are clear to the compiler that they cannot panic
I'm just misremembering something from vfstool_lib then
trying to run this on FGM with Zafirbel Beacons https://www.nexusmods.com/morrowind/mods/59176
I still have some floating groundcover, with default options. any suggestions?
are you using the build on Nexus?
this looks like it's one of the bugs I fixed already, getting ready to repost at some point today
but unclip should work on these
yeah I used a nexus build
I'd like to be able to set the path of the output file π
I'm running it on the Azura's Coast beacon now to check
ohhh yeah, uh, unfortunately the original impl of unclip was super naive and basically useless
your new build worked like a charm, ty π
same!
I didn't see any floaters on the terrain but
This does make me wonder if we should allow relocations to place grass instances under the water level or not, even if it's within range π€
their are entire sea-floor groundcover mods
whole purpose is to place grass under water
exactly
You'd have totally different fauna above or below the water level
Depending on the region, maybe

Just posting this here for posterity -finally got around to trying the latest dev version
dat luk gud! π
that's without the mesh generator ini too. Cause I've processed the entire merged TR plugin of FGM
flying around thirr valley and places where e.g. Magical Mainland Homes had conflicts - the placement just in general seems better. Some odd angles on that orange lichen especially are gone
I think you should generally be able to get away without using them anyway, I've been testing the merged FGM_TR as well
Yeah, Seems like it so far. If I find any weirdness I'll report. But several places that have been annoying me previously and/or broke with the original release version - are now perfectly fine.
Well, except for occasional grass where a submod adds a road, but that's out of scope
yeah road textures seem like the only persistent weirdness
that seems trivial tbh
like we just, try to move stuff, and then if the final location looks like a road texture, yeet it.
Could have a list of 'em similar to occluders and grass ids
I mean, if that's implemented - this will be the ultimate ( as in the last ) grass tool we'll ever need
Seems legit.
I'm trying some micro-optimizations in the unclip paths before I do that and push 0.2.0
the white monster can sent me for some reason 
haha right that mod is pretty fire
tried preallocating some of the sets but most end up not really working, unfortunately
looks like most instances cause severe over-reservations and the iterations to get the counts even out the alloc times
damnit
unclip UI /w selectable output
What would it take to make you post the latest greatest version here?
If itβs not already on Nexus.
being finished
oh, wait, what?
.
I've been doing that every single time
the links never change either
But yeah that's why I post all the links in here. They are my changelog and download links so you can always be up to date
This is why you make CI π
I misread at first and thought you asked why the nexus build wasn't updated yet
Every time you see this
This is updated with 5-10 minutes
how many updates lol
you can rest
no I'm only halfway done I slept through the deadline
so, the unclip feature is it safe to use?
nice
It won't do this anymore though, if they go above or below the water level from landscape changes it will just delete them (by default)
ok nice
I would just wait for nexus release in like 30min or w/e
πΏ Greenmote 0.2.0 is out! πΏ
Folks, hereβs the deal: 0.1.0 had the shape of a good tool. 0.2.0 is where Unclip starts showing up to work with a hard hat.
The big change is Unclip. The old pass was pretty naive β mostly βis this grass fully buried in a static?β Now it has Rapier3D-backed collision checks, better mesh/collider handling, clearance probes, smarter static move/delete planning, terrain-aware placement/orientation, and a pile of caching so itβs dramatically faster while doing much better work.
New cleanup tools:
water-delete: remove grass that terrain fixes would shove across the water planeroad-delete: remove grass on configured road texture paths- improved
static-move/static-delete - safer writes with backups
--dry-runwhen you only want inspection
The GUI got a serious glow-up too: Convert and Unclip tabs, batch Unclip targets, cancellation, localized statuses, write confirmation, selectable output plugins, and cleaner settings.
Convert improved as well: scriptless ACTI records can now join STAT records in groundcover conversion, exterior-only behavior stays intentional, and missing meshes still fail before broken output gets written.
Config handling is cleaner: runtime-only switches stay runtime-only, stale keys are ignored instead of blowing up in your face, and generated defaults are more useful.
Short version: faster Unclip, better physics, safer writes, better GUI, cleaner configs, and fewer hand edits. Not magic. Infrastructure. For grass.
I'm tired of fucking with this thing now I wanna make UI mods
the menus, they vex me
I am still kinda confused about the whole groundcover stuff, so I will ask
1Β° When generating, should I keep the esps from groundcover mods active?
2Β° If yes for the latter question, does it mean the groundcover.omwaddon is the only one I will need disabled and in the groundcover section of my settings?
Keep it simple, don't mess with your load order to run it
You can check the auto-enable box to enable the converted plugins
I am talking about the groundcover thingy
Like
I have remiros and stuff as my grass mods
Should I make the esps part of the list while generating the groundcover? If yes, does it mean the only groundcover esp that matters is the groundcover.omwaddon generated?
Yes, I understand
Do not change your load order to run Convert
It does not change mods which are already groundcover, like rem's
the plugins Convert generates convert things which aren't already groundcover, so load it alongside whatever you're already using. You can use the auto-enable button to do that, or do it yourself some other way
I see, thank you! :3
Np!
Ok. So
I ran it with my groundcover mods out of curiosity, and a few of the stuff got converted, not all, but still, should I keep what got converted enabled? V: no idea how it happened, kinda worrying too
I'm not sure what there could possibly be to be worried about
You should enable it, yes
Again, Convert will not touch groundcover mods by design, that is not its job
Convert changes objects that could be loaded as groundcover from non-groundcover mods into groundcover, so that they run faster and don't have collision
Morrowind.esm, Bloodmoon.esm, that kinda thing
It does not care about what grass mods you load and indeed does not even look
The some of the stuff that got converted came from groundcovers mods though
Show me, please, then
Just a sec, gov
This is probably a logging error or something else confusing
God damnit, I messed up something, not the groundcover stuff
Let me just fix my load order real quick
Somehow the plugin I use in MO2 to keep the load order in check just broke
My bad luck aside
I'm a little rusty on my MO2 setups, unfortunately.
The only reason it would touch a groundcover mod is if it were loaded incorrectly as content=
Load order broke, ignore the divorce between bloodmoon and tribunal, those 6 little guys are the impostors among the groundcovers, it seems
I use forked versions of them for BCOM, so it might be something RandomPal did, idk
you know
honestly, that's kind of evil, but, that would totally fucking work lmao
You COULD enable groundcover mods as content on purpose and use convert to merge them, I guess
that is evil but 100% functional tbh
Doing that might have broken something on my side, so there is karma π
it should work fine, I think
Never thought of that, but, I'm pretty sure it should be okay
might screw up load time I guess
For some reason REM_AL still has all the groundcover privileges
Those already are pretty screwed on my low end pc
Though I use a forked VRAMr to optimize the textures and balance it out
Speaking off
What would be the ideal output for a VRAMr for Morrowind? V: the one that works well enough for Skyrim doesn't give me as much performance you are the most Morrowind guy that I know, that's why I am asking ya that
Vramr turns textures into BC7
But idk if BC7 is good on OpenMW
It's interesting you ask me about this particular thing
Oh?
Yea BC7 support has recently been added, we've discussed an openmw-focused tool similar to VRAMr
Although I've literally never heard of this before you asked me about it
I can't really speak for this tool tbh nor have I gotten into many details of texture compression, but, I'd give it a try at least
β’<β’ I just remembered how much my Skyrim became better to run after using VRAMr and I thought "Hey, maybe OpenMW could use that too"
β’-β’ performance actually got worse
But this only happened because I used a forked version of the current VRAMr
Maybe one more fine-tuned to Morrowind textures + That compress the textures in a more wise way (BC7 doesn't add much performance) would work
I've never known BC7 to be a performance optimization in the first place tbh
Fuck me...
Anyways, older versions of VRAMr do BC3 if I remember correctly
So this explains the performance boost
Or I might be wrong
one thing that can really fuck up your performance is if you have big textures that don't have mipmaps
like landscape textures
Do you use PBR
well I was just going to use a PBR mod as a specific example
saintj's landscape textures ran really badly for a while because they didn't have mip
This isn't an area I'm especially well educated, once we start getting to like. The computer talking to the GPU. You should ask someone like AON about that
But we've been discussing making a similar openmw-focused app for a little while now
the config and the vfs stuff always become this big compatibility issue with other tools
I'd expect VRAMr somehow to have good results tho, everyone was really excited for BC7. For whatever reason you would be
Maybe they are faster, I'm not really the guy there
Hmm.. All I know for sure is
If you wanna to make something like VRAMr for Morrowind, make it based on the older versions of VRAMr or at the very very least β’<β’ the single mod optimizer from the VRAMr mod page, it's the one that gave the best performance results to me
I have really 0 clues about technicalities, maybe something in the fork messed stuff up, maybe I am just a dummy, but like, the current VRAMr tools don't work very well with Morrowind textures
Surprise surprise, the Skyrim Special Edition modding tool doesn't work well with it's great-grandfather game -w-
But yeah, fucked up
I'm tempted to try that out myself now that you mention it broke things for you
I wouldn't really expect it to run worse, unless your card/system didn't properly support BC7
but then it should just, not draw the textures
It's really just a matter of changing the setup.bat of the original tool to make so it asks for an input texture folder instead of trying to find Skyrim.exe or the MO2 virtual folder
oh right it's a Windows app
is okie we set it on fire
Damn
Well, this actually makes me think an OPENMW, an proper OpenMW, counterpart could be good
But it's a lot of troubleshooting, and I have no brains for it -w-"
Thinking of it a bit more
Very unlikely it's because of the BC7 format
Maybe something in the modern tools of VRAMr are built to fine tune some stuff for Skyrim SE, maybe I did something wrong myself
Can't know for sure.
I bet if you posted one of the before/after textures I could get an idea
there aren't, like, a shitton of things that could go wrong, there
texture blew up 8x in size, no mipmaps
Bet, give me a minute or two
I might have picked the wrong mod to do the test π
Alright, here, it's one heather from the original epic plants mod and one downscaled and turned into BC7 by the current VRAMr stuff
Yeah, it compresses stuff
Maybe it's some setting on my pc, I doubt it's the textures alone that are making the performance weird
Yo @shut hazel I thought a little bit, and.. Why not do the groundcover compilation stuff? You said it was evil (I know it was a joke -w-), but really, why not? What bad could it actually make?
Well, it's just kind of a strange way to do it
you could merge them together a little more cleanly with this
I mean v: idk I kinda like the whole master groundcover idea, it sounds cooler
What's the point of merging groundcover for openmw anyway? Imo it's a waste of time.
I wanna tbh
Besides, I suppose there are chances that some groundcovers mods might be made incorrectly, with the method of just putting everything in a single box you will be able to cut those edges without having to test and find like I did v:
Merging groundcover plugins into single plugins just makes them harder to work with imo. For the vanilla engine it makes sense because they have a 512 plug-in limit or maybe 1024. For openmw it's like a billion plugins.
Depending on your load order, really, in cases like mine, that would have come in handy, Divines know how many other groundcover mods out there don't cover the ground as they should.
Besides, one individual not using a tool doesn't mean that the tool won't be used by someone else.
My load order per example is quite light, only 277 plugins, having 5 more won't make that much of a difference in my case.
Well but why would it be added here? There are already tools that handle this. People don't implement word into paint because they might want to write a short story about the image for example.
I mean
Groundcover tool
Groundcover feature for a groundcover tool β’-β’
It's not like I am asking for pizza in a Burger King
merging groundcover plugins is not different from merging any other plugins. And while "why would you even do that" - there's already a tool for that
well the main thing is that if you used convert to do it, you'd have to enable those incorrectly, and then keep them enabled incorrectly, and also it'd move the meshes around but they'd be in the right place in the first place
It's not that merging them is wrong, it's just that convert is a stupid way to do it
you would essentially have them enabled three times for all intents and purposes
Damn β’-β’
Terrible out of scope ideas:
- move non-grass meshes like trees
- make sure doors are in doorframes
I mean technically you could include trees in the grass id list
I won't promise that's gonna go well, but, you can do it