SkinnedGrass - Performant interactive foliage

Man i love creations like these. Its helps so much for people like me who want to maek cool games. Thank you for your contribution!

3 Likes

The fabled worst 5 dollar grass of roblox

9 Likes

that’s just the way I have the runner script set up, in your own scripts ideally you’d track character respawns and add the new positions to the collision table (I’ll change the runner script right now tho)

updated the model, should be fixed

How did you put the grass on the terrain? Did you place the grass individually or did you make a module to make the grass align with the terrain?

just ran a command that raycasts down and places bones, something like this

local skinnedMesh = nil -- your mesh
for _,d in skinnedMesh:GetDescendants() do
	if not d:IsA("Bone") then continue end
	local rotCFrame = d.WorldCFrame - d.WorldCFrame.Position
	local rayOrigin = d.WorldCFrame.Position + Vector3.new(0, 100, 0)
	local rayDirection = Vector3.new(0, -200, 0) -- Cast downward
	local result = workspace:Raycast(rayOrigin, rayDirection)
	if result then
		d.WorldCFrame = CFrame.new(result.Position) * rotCFrame
	end
end
4 Likes

Please add the ability to add a “shockwave” of some sorts so that explosions or blasts will make the nearby SkinnedGrass meshes to be influenced by them! :smiley:

5 Likes

you can already do this with the script

1 Like

Aw man, if i only knew this earlier…
I also tried to make my own grass, but i used bulkmoveto. But now that i know that, i will be able to do some crazy things with it.
Like for example my Particles Module. It would be way faster.

Also, can you show us a video of your interactive foliage but at a larger scale? I am really curious of the performance.

1 Like

you can fix this pretty easy by just changing the runner script to run on every time the player character is added or respawns

1 Like

how could i load/unload specific grass tiles from the module?

this is for a chunk loading grass system i was gonna use

1 Like

When will roblox add grass interaction!!!

Or water interaction physics!!!

Come on man, like this resource is good and all I love it but… Its just not usable for games.

I hate how unmodern roblox is…

Oh also, you could probably modify the octree to increase performance and use .presimulation to be more accurate to how the engine grass works…

4 Likes

this is very usable for games, as I am using it for mine and it works perfectly fine. Its easily modifiable as well. This guy made it very well for others to use

2 Likes

Well yes it’s usable, but at a very high performance cost.

Especially with the regular amount of terrain:area you need to cover. That will be way too costly.

I’m just saying, it’s not performant but it works for sure

1 Like

its not that crazy of a performance problem, its optimized pretty good for what it does. It having bad performance depends on the scripter. The tool itself performs very well. Ive been testing and modifying all day today. The tool is very good.

1 Like

Little question though.
How are draw calls?

Not entirely sure how Roblox internally handles skinned meshes but I recall that animated meshes for instance likely cannot be instanced due to how graphics rendering works which would result in a lot of draw calls.

What’s the status on this?

In the provided example I see a patch / lawn of grass but I’d like to see this in action on a huge mountain for instance, or a dense forest.

1 Like

PLEASE yes this is such a good idea @xander_z22

1 Like

What are you talking about?

At 180fps. With over 5 percent usage for 1600 skinned meshes. This tanks performance by a good 10fps for just that.

Mind you that’s out of box. If you modify it and make it larger or add more. It will only get worse.

Also, my specs are a i5 13600k and a 7800xt.

So low end devices will suffer even worse!

It’s well optimized for what it is. But it isn’t performant.

1 Like

on a side note, could we get your scene rbxl place? it looks really ncie

2 Likes

just wanted to make a more performant alternative to similar modules on the forum, in most cases it’s not suitable for grass at a large scale

1 Like