#Greenmote

1 messages Β· Page 2 of 1

shut hazel
#

I don't use grass mods. Why do you think it came out in the condition it did? πŸ˜›

#

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

shut hazel
#

tabbed + multi-unclip UI

placid atlas
#

can you explain these to me? [unclip] verbose = false structured = false write = false

shut hazel
#

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.

shut hazel
#

Hey @hybrid obsidian does second commit look correct? I got a little confused tbh

hybrid obsidian
#

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

shut hazel
#

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

placid atlas
#

what would happen?

hybrid obsidian
#

stackoverflow -> crash

placid atlas
#

wow my favorite

shut hazel
#

wait yea this isn't recursive

hybrid obsidian
#

oh, i assumed just from the function name

shut hazel
#

No it was recursive at one point and then I switched it over to iterative uh

#

Maybe after I posted idr

hybrid obsidian
#

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

shut hazel
#

sorry I was washin my dog

hybrid obsidian
#

I could either bump glam version and potentially break other ppls stuff. Or add temporary features for it.

shut hazel
#

pluggable glam version seems like best option to me

#

Kinda like how mlua does the runtimes

hybrid obsidian
#

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

shut hazel
#

Although actually

shut hazel
#

You and rapier3d actually use same glam

hybrid obsidian
#

well i know there is popular rapier integration for bevy so they likely do have at least some way to use 0.30

shut hazel
#

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

hybrid obsidian
#

the tes3 version is "^0.30"

#

but i always forget the rules around 0.x and semver

shut hazel
#

In what sense?

jagged cairn
#

I have had mrs open already which is half the battle.

jagged cairn
#

merge requests

shut hazel
#

I'm tweaking the params a little bit and replacing --write with --dry-run

jagged cairn
#

no guarantees of course like with anything πŸ˜„

shut hazel
#

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 datchim

shut hazel
#

Says a lot of the time spent is just default-initializing LAND records 😭

hybrid obsidian
#

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

shut hazel
#

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

hybrid obsidian
#

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?

shut hazel
#

mostly calling ::default in Vertex/Normals/Heights

#

the rest seems expected

#

I'm running against uhhh

#

Aesthesia Grass Vanilla 2

hybrid obsidian
#

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

shut hazel
#

it cries a bit on the merged TR plugin

#

rest aren't so bad

hybrid obsidian
#

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)

shut hazel
#

meh

hybrid obsidian
#

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

shut hazel
#

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

hybrid obsidian
#

remember that rust does bounds checking on []

shut hazel
#

Does it? I thought array indexing was unsafe

hybrid obsidian
#

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

shut hazel
#

I'm just misremembering something from vfstool_lib then

surreal cairn
shut hazel
#

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

surreal cairn
#

yeah I used a nexus build

#

I'd like to be able to set the path of the output file πŸ™

shut hazel
#

I'm running it on the Azura's Coast beacon now to check

shut hazel
surreal cairn
#

your new build worked like a charm, ty πŸ˜„

shut hazel
#

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 πŸ€”

hybrid obsidian
#

their are entire sea-floor groundcover mods

#

whole purpose is to place grass under water

shut hazel
#

exactly

#

You'd have totally different fauna above or below the water level

#

Depending on the region, maybe

nocturne totem
#

datchim
Just posting this here for posterity -finally got around to trying the latest dev version

shut hazel
#

dat luk gud! πŸ‘Œ

nocturne totem
#

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

shut hazel
#

I think you should generally be able to get away without using them anyway, I've been testing the merged FGM_TR as well

nocturne totem
#

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

surreal cairn
#

yeah road textures seem like the only persistent weirdness

shut hazel
#

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

nocturne totem
#

I mean, if that's implemented - this will be the ultimate ( as in the last ) grass tool we'll ever need

jagged cairn
shut hazel
#

Seems legit.

#

I'm trying some micro-optimizations in the unclip paths before I do that and push 0.2.0

nocturne totem
jagged cairn
#

haha right that mod is pretty fire

shut hazel
#

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

shut hazel
#

Builds ready. Runners still fucked. πŸ™

shut hazel
#

unclip UI /w selectable output

shut hazel
shut hazel
shut hazel
rough sentinel
#

What would it take to make you post the latest greatest version here?

If it’s not already on Nexus.

shut hazel
#

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

shut hazel
shut hazel
shut hazel
#

last patch before 0.2.0.

nocturne totem
#

Oooooooooh

#

Nice

shut hazel
#

OpenMW texture sampling fortunately wasn't as complicated as I thought it would be

placid atlas
#

how many updates lol

shut hazel
#

I'm done now, actually.

#

That was the last one.

placid atlas
#

you can rest

shut hazel
#

no I'm only halfway done I slept through the deadline

placid atlas
#

so, the unclip feature is it safe to use?

shut hazel
#

I still got shit to post man

#

oh yeah.

placid atlas
#

nice

shut hazel
# shut hazel same!

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)

placid atlas
#

ok nice

shut hazel
#

I would just wait for nexus release in like 30min or w/e

shut hazel
#

🌿 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 plane
  • road-delete: remove grass on configured road texture paths
  • improved static-move / static-delete
  • safer writes with backups
  • --dry-run when 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.

Kick grass, not your modlist. 🌱
GitHub
NexusMods

#

I'm tired of fucking with this thing now I wanna make UI mods

#

the menus, they vex me

spare cipher
#

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?

shut hazel
#

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

spare cipher
#

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?

shut hazel
#

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

spare cipher
#

I see, thank you! :3

shut hazel
#

Np!

spare cipher
#

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

shut hazel
#

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

spare cipher
#

The some of the stuff that got converted came from groundcovers mods though

shut hazel
#

Show me, please, then

spare cipher
#

Just a sec, gov

shut hazel
#

This is probably a logging error or something else confusing

spare cipher
#

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

shut hazel
#

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=

spare cipher
#

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

shut hazel
#

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

spare cipher
#

Doing that might have broken something on my side, so there is karma πŸ’€

shut hazel
#

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

spare cipher
#

For some reason REM_AL still has all the groundcover privileges

spare cipher
# shut hazel might screw up load time I guess

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

shut hazel
#

It's interesting you ask me about this particular thing

spare cipher
#

Oh?

shut hazel
#

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

spare cipher
#

β€’<β€’ 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

shut hazel
#

I've never known BC7 to be a performance optimization in the first place tbh

spare cipher
#

Anyways, older versions of VRAMr do BC3 if I remember correctly

#

So this explains the performance boost

#

Or I might be wrong

shut hazel
#

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

spare cipher
#

Nah, stuff looks too silly in Morrowind

#

Just use Normals myself

shut hazel
#

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

shut hazel
# spare cipher Fuck me...

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

spare cipher
#

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

shut hazel
#

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

spare cipher
#

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

shut hazel
#

oh right it's a Windows app

spare cipher
#

Oh

Shit

#

Actually, probably has a linux fork

#

Idk

shut hazel
#

is okie we set it on fire

spare cipher
#

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.

shut hazel
#

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

spare cipher
#

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

shut hazel
#

well it's what it says it is

#

I do notice the texture got shrank tho

spare cipher
#

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

spare cipher
#

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?

shut hazel
#

Well, it's just kind of a strange way to do it

#

you could merge them together a little more cleanly with this

spare cipher
#

I mean v: idk I kinda like the whole master groundcover idea, it sounds cooler

jagged cairn
#

What's the point of merging groundcover for openmw anyway? Imo it's a waste of time.

spare cipher
#

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:

jagged cairn
#

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.

spare cipher
#

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.

jagged cairn
#

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.

spare cipher
#

I mean

Groundcover tool

Groundcover feature for a groundcover tool β€’-β€’

#

It's not like I am asking for pizza in a Burger King

nocturne totem
#

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

shut hazel
#

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

spare cipher
#

Damn β€’-β€’

surreal cairn
#

Terrible out of scope ideas:

  • move non-grass meshes like trees
  • make sure doors are in doorframes
shut hazel
#

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

spare cipher
#

Ghost Tree

#

You can see it

But you can't touch it

You woodn't want to birch in it's bad vine

green tapir
#

Quick heads up: Tomb of the Snow Prince adds additional trees and rocks that the default list of exclusions doesn't cover, resulting in obvious grass-less circles around every tree and rock.

#

I'm working up additional exclusions for this now.