3D Layered Clothing is Now Available!

I see too many uses and possibilities. I don’t understand why some people think that “people will use it just to troll in cafes”. cafes or restaurants are not even the 1% of the Roblox games or that roblox needs to be a “blocky game”. We had enough time to land the idea of getting more human and customizable characters since the anthro feature. And it’s so cool and a little hard to work on your own inner cage, custom bones, etc.

I think that maybe someone should port every R6 animation to R15 (it would look like the cartoonish animation pack). And that would solve the R6 compatibility for now (idk)

I’m currently making my own clothes.
I love this feature


https://gyazo.com/1bd3ba50fefc6eb3a653949c001bf6c6

Just have some problems fitting the outer cage with the edges of my shirt

This is my code to test my clothes

local lcUtils = require(workspace:WaitForChild("LayeredClothingUtilsScript"))
local part = script.Parent



local WrapLayer = nil
for _, v in pairs (script.Parent:GetDescendants()) do
	if v:IsA("WrapLayer") then
		WrapLayer = v
	end
end

local Handle= WrapLayer.Parent


local clon =Handle:Clone()
for _, v in pairs (clon:GetChildren()) do
	if not (v:IsA("Attachment") or v:IsA("WrapLayer") or v:IsA("SurfaceAppearance")  ) then
		v:Destroy()
	end
	if v:IsA("Attachment") then
		v.Name ..= "Attachment"
	end
end 
local accesorio = Instance.new("Accessory")
clon.Parent = accesorio
clon.Name = "Handle"
clon.Anchored = false
accesorio.Name = Handle.Name 


local function onPartTouched(otherPart)
	local character = otherPart.Parent
	local humanoid = character:FindFirstChildWhichIsA("Humanoid")
	
	local no_tiene = character:FindFirstChild(accesorio.Name) == nil
	if not bIsColliding then
		if humanoid and otherPart == character.PrimaryPart then
			if no_tiene then
				local clon_Accesorio = accesorio:Clone()
				humanoid:AddAccessory(clon_Accesorio)
				
				
				bIsColliding = true
			end--si no tiene
			
			
		end
	end
end

local function onPartTouchEnded(otherPart)
	local character = otherPart.Parent
	local humanoid = character:FindFirstChildWhichIsA("Humanoid")

	if humanoid and otherPart == character.PrimaryPart then
		bIsColliding = false
	end
end

part.TouchEnded:Connect(onPartTouchEnded)
part.Touched:Connect(onPartTouched)
18 Likes

Only 4 days slow to find this! I’m getting faster!

OK, I have many, many questions:

  1. I see a lot of talk about R6 and R15. How about S1 and S15 and, in my case S-something else? Do clothes have to be weighted to the armature in order to be compatible with skinned mesh avatars? If so, what is the benefit of layered clothing? If this update provides wrap technology that does not need to be skinned in blender… (see #2)
  2. This post: R15 avatar with skinned clothing. 3D Layered Clothing is Now Available! - #114 by SillyMeTimbers Does this depreciate the value of the “still no real tutorial” S15 when all you need is a jacket to hide arm seams?
  3. Is this the “tool update” that skinned meshes have been waiting for? Will it be possible to attach a tool to a skinned mesh without all the coding and skinning mess we go through now? (there is strong coincidental evidence this is true, see #4)
  4. I see the flicker glitch with skinned meshes is gone again. Was that part of this update? Is the fix here to stay? Thanks BTW!
  5. I suppose some of the prior answers may answer this: Is this update generic enough that a non humanoid could have layered clothing? (example: a saddle that works on both a horse and a giraffe)
1 Like

I can already tell people will find weird little bugs with this… Other than that it’s cool.

I’m not good at modeling clothes. So I made some code to help my friend to help her test her clothes and here is an example

local module = {}
--[[



local a = require(game.ServerStorage.Importar)
a.cosas()



]]


local Attachements_nombres = {
	"FaceCenter",
	"FaceFront", 
	"Hat",
	"Hair",
	"LeftGrip",
	"LeftShoulder",
	"LeftCollar",
	"RightGrip",
	"RightShoulder",
	"RightCollar",
	"Neck",
	"BodyBack",
	"BodyFront",
	"WaistFront",
	"WaistCenter",
	"WaistBack",
	"LeftFoot",
	"RightFoot"

}


local Genera_Accesorio= function(Handle, WrapLayer, Attachment, generar_cosa)
	Handle = Handle:Clone()
	WrapLayer = WrapLayer:Clone()
	Attachment = Attachment:Clone()
	
	
	
	
	local Accesorio = Instance.new("Accessory")
	Accesorio.Name = WrapLayer.Name
	
	Handle.Name = "Handle"
	Handle.Anchored = true
	Handle.Parent = Accesorio
	
	Attachment.Parent = Handle
	
	
	local Motor6D = Handle:FindFirstChildOfClass("Motor6D")
	if Motor6D then
		Motor6D:Destroy()
	end
	Handle.Position = Handle.Position + Vector3.new(0, Handle.Size.Y + Handle.Size.Y/2, 0 )
	
	
	Accesorio.Parent = game.Workspace
	
	local TouchTransmitter = Handle:FindFirstChildOfClass("TouchTransmitter")
	if TouchTransmitter then
		TouchTransmitter:Destroy()
	end
	
	if generar_cosa then
		local clon = game.ServerStorage.CustomClothing:Clone()
		clon.Name = "Collider_".. WrapLayer.Name
		
		local Remplazar = clon:WaitForChild("Remplazar")
		
		local pos_original = Handle.Position
		Handle.Name = WrapLayer.Name
		Handle.CFrame = Remplazar.CFrame
		Handle.Parent = clon
		Accesorio:Destroy()
		Remplazar:Destroy()
		
		
		local clon_thumbnail = game.ServerStorage.Thumbnail:Clone()
		clon_thumbnail.Parent = Handle
		
	--	local surfaceApparence = game.ServerStorage.SurfaceAppearance:Clone()
	--	surfaceApparence.Parent = Handle
		
		local clon_Hover = game.ServerStorage.HoverScript:Clone()
		clon_Hover.Parent = Handle
		clon_Hover.Disabled = false
		
		local ApplyCustom = clon:WaitForChild("ApplyCustom")
		
		
		
		local model_mover = Instance.new("Model")
		clon.Parent = model_mover
		model_mover.Parent = game.Workspace
		model_mover.PrimaryPart = clon
		model_mover:MoveTo(pos_original)
		clon.Parent = game.Workspace
		model_mover:Destroy()
		print(clon.Parent.Parent)
		
		
		ApplyCustom.Disabled = false
		
	end
	game.ChangeHistoryService:SetWaypoint ( "Insertado Layered clothing: ".. WrapLayer.Name )
	
	
	return Accesorio
end


module.cosas = function(generar_cosa)
	
	
	local selection = game.Selection:Get()
	
	
	local encontro_minimo_uno = false
	
	local objetos_generados = {}
	
	for _, v in pairs (selection) do
		if v:IsA("Model") then
			local InitialPoses = v:FindFirstChild("IntiailPoses")
			local RootPart  = v:FindFirstChild("RootPart")
			local AnimationController = v:FindFirstChild("AnimationController")
			local WrapLayer
			local Motor6D
			local Attachment 
			---revisa cosas básicas
			for _, cosa in pairs (v:GetDescendants()) do
				if cosa:IsA("WrapLayer") then
					WrapLayer = cosa
				elseif cosa:IsA("Motor6D") then
					Motor6D = cosa
				end
			end
			
			if RootPart~=nil then
				Attachment = RootPart:FindFirstChildOfClass("Attachment")
				if table.find(Attachements_nombres, Attachment.Name) ~=nil then
					
				else
					Attachment = nil --lo cancela
					warn("No coincide el nombre del attachement")
				end
			end
			
			if WrapLayer and Motor6D and Attachment then
				encontro_minimo_uno = true
				
				local handle = WrapLayer.Parent
				
				local accesorio_creado = Genera_Accesorio(handle, WrapLayer, Attachment, generar_cosa)
				table.insert(objetos_generados, accesorio_creado)
				
				
			else
				print("no es un objeto valido")
			end---es valido o no
			
		end--ifs
		
	end
	
	if not encontro_minimo_uno then
		warn("No haz seleccionado ningún objeto valido")
	else
		game.TestService:Message("Generó objeto/s")
		
		game.Selection:Set(objetos_generados)
	end
	
	
	
	
end


return module

11 Likes

but I dont want the 2D style to go ;*(

3 Likes

Here, let’s do this.

You stop taking my words out of context and melding them into your own version. I never said people can’t use R6, I said people shouldn’t use R6 and expect things to magically work, they’re outdated tech.

Get with the system & evolve, or be left behind because you want legacy features.

Sorry, but this is how the real world works.

4 Likes

Some r6 games are still fun It’s just about the opinion either you use rthro r15 or r6

5 Likes

Again, you completely missed my point.

My post wasn’t defending R6, it was about how it doesn’t matter whether or not a developer uses R6 or R15, as long as the game is well made. Will R6 developers be able to use the new features Roblox is presenting? Of course not. Does that make R6 inferior to R15? Absolutely not. I wasn’t taking your words out of context

This is exactly what you said, now, isn’t it?
This isn’t even something to argue over. R6 and R15 are two completely different types of rigs. There is nothing to compare.
I apologise if I made you think I was taking your words and twisting them.

7 Likes

Obbies and certain games involving obstacles such as Mad City do this to prevent people with short avatars/tall avatars having an advantage/disadvantage.

If you want to try yourself, equip an R15 avatar and make it as tall as possible. Then try to complete the Jewelry store in Jailbreak.

7 Likes

Chees, The creator said they going to release in few weeks, it been five days though.

3 Likes

As it turns out, this is what game settings are for! :slightly_smiling_face:

image

9 Likes

As cool as it would be to have layered clothing for R6 avatars, I believe it’s simply impossible without serious compatibility-breaking implications due to how R6 is built. R6 uses meshes that are not physically simulated, and layered clothing requires that to properly fit the clothes to the avatar’s body shape. Rthro bundles are already mangled enough when used with R6 due to the lack of automatic scaling and I can’t imagine that layered clothing would produce any better results. Roblox has stated several times that R6 is here to stay, but that doesn’t necessarily mean it will be compatible with tech that functions more efficiently with R15.

And contrary to popular belief, R6 is not deprecated. It’s more of a legacy feature at this point.

4 Likes

Does that mean you will have more people in the UGC program? I have experience in Blender, and would also like to participate in making UGC content - I have made some for my experiences, and right now with my team we are working on 3D clothing as well

4 Likes

Can people not in UGC be able to upload layered clothing? If not, When or how will normal people be able to apply to make layered clothing?

Also what does this mean for 2D clothing?

3 Likes

Tried making a basic long sleeve t-shirt with no texture and import it but the accessory won’t fit around the avatar
The accessory follows the animations and movement of the avatar tho. (this is Equipping Without an Asset ID method:

Anyone know why this is happening?

5 Likes

I have some questions
which is the best way to put together all the textures?

Because I make sets like this but the Roblox custom avatar plugin is not detecting them and I have to insert them manually

Is too bad to have error with the number of vertices when i make the outer cage?
image

This is the result i got

11 Likes

The fbx file makes a mess out of the shader material if there is more than 1 image map attached. Roblox does not know what to do with them.

Simply remove everything but the color map, and you will see color at import. Then as you did, rebuild the PBR inside Roblox.

It is not clear from the instructions why they want specific naming conventions on textures. This has not been needed before. Perhaps for the patently inaccurate moderation robot?


This is weird…

6 Likes

Thanks, maybe its an update that will come. But still a little weid that needs to have a name and even the examples doesnt includes the MET, NOR and the _RGH

thank you too much

5 Likes

I filed a bug report regarding layered clothing getting desync’d : Layered clothing gets de-sync'd from avatar rig when in ragdoll state

2 Likes

Even though layered clothing is still a new feature (that may present some bugs), I can already tell this is going to be really useful in the future!

Hope we get more quality content like this soon!

3 Likes