This is great! But, is there a possibility for other GUI objects, like TextLabels for example in the future?
With the way Roblox handles SurfaceGuis it’s pretty much impossible from what I know.
I notice that you don’t have a tool for adjusting these, which means you’re live-updating them in the workspace when bake is false. It doesn’t look like you’re using CollectionService to track which parts should be subject to processing, so since this doesn’t break when you reopen the place, you must be parsing the entirety of workspace. You might want to consider using CollectionService instead.
If I understood your comment properly you meant that I’m constantly looping through the workspace? What I’m doing is looping through the user’s selections whenever the selection changes and checking wether or not what they have selected is valid for deformation.
I think Roblox should implement this as a tool for Roblox developers!
deep breath
YESSSSSSSSSSSSSSSSSSSSSSSSSSSSS
(sorry about that)
I’ve been looking for something like this for extremely long because I have no idea how to texture so with this I can finally do it easier!
Considering skinned meshes still have a pretty substantial impact at scale even for meshes that aren’t updating/doing anything, it’s probably not great
Unfortunately this is why I have decided against playing with it for things like trees and grass
One step closer to making projectors like the movie theaters, this is going to be amazing to use, amazing job!
NOW THIS IS AWESOME!
I always wanted something like this! Thank you so much for creating this!
Yeah you can only get what you can get. I’ll probably try making a system to switch between a plain plane and a plane with an armature when they’re out of view to hopefully improve the performance of these.
YOOOO THIS IS SO F COOL MAN
Thank for creating this is going to be one of my favourite plugin in Roblox!
Wow! This is really cool! Thank you for making this amazing plugin! This will help me a lot in buildings
I didn’t even imagine that this would be possible let alone even consider using skinned meshes for something like this, incredible work!
This is absolute gold. I’m definitely going to use this on my terrain heavy games.
Thanks a lot!
Good job, really helpful plugin.
For those interested, I made a very simple script to improve the performance of the decals. Here’s how it looks in-game:
And here is the file for that. It’s a local script so you have to insert it inside a player.
DecalRenderingHandler.rbxm (4.2 KB)
And here is the code if you want to have a look at it here.
local RunService = game:GetService("RunService")
local LastTick = tick()
local RenderDistance = 150
local Unloaded = Instance.new("Folder")
Unloaded.Name = "Unloaded"
Unloaded.Parent = game:GetService("ReplicatedStorage")
local PlanePreset = script.LowFidelityPlane
local Planes = {}
function CheckForValidation(Plane)
if
Plane:IsA("MeshPart") and
Plane:GetAttribute("Valid") ~= true and
Plane:GetAttribute("Bake") ~= nil and
Plane:GetAttribute("Offset") ~= nil and
Plane:GetAttribute("RayRange") ~= nil then
Plane:SetAttribute("Valid",true)
local PlaneTable = {
Plane = Plane,
Parent = Plane.Parent,
LowFidelityModel = PlanePreset:Clone()
}
PlaneTable.LowFidelityModel.Name = Plane.Name
PlaneTable.LowFidelityModel.Transparency = Plane.Transparency
PlaneTable.LowFidelityModel.Parent = Unloaded
PlaneTable.LowFidelityModel.CFrame = Plane.CFrame
PlaneTable.LowFidelityModel.Size = Plane.Size
PlaneTable.LowFidelityModel.Color = Plane.Color
PlaneTable.LowFidelityModel.Material = Plane.Material
PlaneTable.LowFidelityModel.Reflectance = Plane.Reflectance
for _,v in pairs(Plane:GetChildren()) do
if v:IsA("SurfaceAppearance") or v:IsA("Texture") or v:IsA("Decal") then
v:Clone().Parent = PlaneTable.LowFidelityModel
end
end
table.insert(Planes,PlaneTable)
end
end
for _,Plane in pairs(workspace:GetDescendants()) do
CheckForValidation(Plane)
end
workspace.DescendantAdded:Connect(function(Descendant)
CheckForValidation(Descendant)
end)
RunService.Heartbeat:Connect(function()
if tick()-LastTick >= 1 then
LastTick = tick()
for _,PlaneTable in pairs(Planes) do
local Distance = (workspace.CurrentCamera.CFrame.Position-PlaneTable.Plane.Position).Magnitude
if Distance > RenderDistance then
PlaneTable.Plane.Parent = Unloaded
PlaneTable.LowFidelityModel.Parent = PlaneTable.Parent
else
PlaneTable.Plane.Parent = PlaneTable.Parent
PlaneTable.LowFidelityModel.Parent = Unloaded
end
end
end
end)
I put this together fairly quickly so it probably has some flaws here and there. But for the most part it should help you gain better performance on larger scale levels. Feel free to modify the code as you see fit.
This is revolutionary! I’ll be getting to using this plugin right away. Thank you very much
This is fantastic! Exactly the solution I was looking for. Totally forgot you can exploit MeshDeformation.
Stop. I can’t take this anymore. This is just too great. I don’t care if it’s laggy or not, it’s still crazy cool.