MeshPart Transparent Textures Shouldn't Render Anything

Bug:
Currently when you have a transparent texture applied to a MeshPart, neon renders in the transparent spots.

Expected behavior:
It should render nothing where the texture is transparent. This is an insanely common technique used in the 3D industry to add detail to low-poly models.

Example Use Case!
Here is a feather (part of a much larger bird I have). The feather is 10 tris, with a nice texture applied on top to make it look really nice. This works in all modern game engines and 3D applications, however on ROBLOX this does not work. In order to make that feather I would need the geometry to match the texture, which would be dozens of triangles (and extra work for the artist)

No-texture (left), Textured(middle), Texture+Wireframe(right)

11 Likes

I’m half for this. I want to have transparent backgrounds but not transparent parts (aka the transparent pixels on the texture show the part behind it. That way I can easily overlay a texture on a mesh while keeping the background color/material of the part).

The best solution would be some sort of toggle for what both of us want.

Since we want to change part/texture transparency independently, how about this solution:

The transparency property decides how transparent the part color / part texture is. At 1 transparency, only the texture you set would show (as OP wants it).
How would you change the transparency of the texture? Add a new property, TextureTransparency to control it.

Basically, independent properties for control over independent textures. Makes sense, right?
This way, the mesh texture is more like a layer on top of the mesh, kind of like if you would use for example Decal objects.

2 Likes

We’ve talked about this before on other threads. I guess this is a good place to discuss this.

I like this idea. Part transparency doesn’t effect mesh/texture transparency or something.

This is not a bug. This is a missing feature.

https://docs.unity3d.com/Manual/shader-TransCutDiffuse.html

Objects like this can be rendered with blending - which you can get in ROBLOX by setting transparency to 0.01 - which implies sacrificing correct render order, or with alpha cutout (aka alpha test aka alpha kill) - which you can’t get in ROBLOX right now - which implies working render order BUT will not result in a smooth transition - essentially it’s a binary alpha (I’m omitting some features like alpha-to-coverage that require MSAA to work).

Additionally, enabling alpha cutout has a non-trivial performance cost on mobile platforms. We - intentionally! - do not change the render mode of specific objects based on the contents of the texture, so this would require an additional property for the MeshPart to explicitly enable this mode for meshes that need it.

Does this mean you can do it?

Yeah I wasn’t sure, I felt like it was a bug because currently it renders neon (of an undetermined color).

As you mention, setting the transparency to 0.01 isn’t ideal due to render order.
I think a property would be awesome. I don’t think anybody is picky on the specific implementation of this, just as long as we can do it. It’s a pain to explain to an artist that they can’t use techniques like this!

That is a bug :slight_smile:

1 Like