Smooth Shade Object

As a Roblox developer, it is currently impossible to have smooth shaded terrain or models without using meshes.

Wedge terrain for instance, is a popular smooth terrain alternative on roblox.
However, a lot of people don’t like the flat shaded look to it.

I’m not sure what would be required to make something like this, but if we had the option to add a “Smooth Shader” instance and have it smooth shade all its descendants, I think it would give developers a bit more freedom in how their worlds look.

Thanks!

16 Likes

In addition to Tyridge’s request, I just wanted to provide a visual of the difference between Soft shading and Hard shading.

Right is smooth, left is hard. As far as I know, Roblox parts only display with Hard shading. If anyone has any use cases for Soft shading, I’d love to hear them.

4 Likes
1 Like

It would be pretty sweet to have a toon shader too, like in Breath of The Wild!

2 Likes

Correct me if I’m wrong but this feature would be close to useless in its requested implementation.

Smooth shading uses geometry data of a single object to calculate how the shading should be interpolated on/between different faces. For this interpolation to work geometry needs to be connected; if two faces are connected by sharing the same edge(s) only then can smooth shading interpolation be applied to those faces because the algorithm knows that those faces are connected (they share the same edge(s)!). If you make a cube in a program like Blender or Maya and apply some kind of edge splitter to the object, you will notice that smooth shading suddenly doesn’t work anymore. This is because the faces have been split apart by duplicating and dividing the edges among the faces they were connected to. Your mesh will still look connected, but in reality your mesh will have faces with overlapping edges instead of ‘shared’ edges.

The same behavior would be introduced in Roblox games if the requested feature were to be implemented. You would put a WedgePart right next to a Part, but their edges will still look seperate with no smooth shading (interpolation) between their faces. This is because - you guessed it - the instances don’t have shared edges. They only have overlapping edges. Because of that, the smooth shading algorithm won’t be able to figure out that smooth shading has to be applied.

“But now what if there were to be like an object which groups objects and then does some math to figure out which edges are overlapping before applying smooth shading to all objects?”
That would basically be the exact same as CSG/Unions, since CSG does support smooth shading - although you cannot set the angle for which smooth shading should be applied.

If you were to request this directly to an engineer, you would probably be asked a question among the lines of “but why don’t you just use a MeshPart then?” I can only think of a few reasons why this feature would be prefered over creating MeshParts:

  1. A developer doesn’t know how to use a modelling program like Blender or Maya
  2. A developer wants perfectly accurate collision for his/her meshes

The answer to the first point would be to just learn how to use one of those programs. As for the second point, you would probably be better of suggesting a ‘perfect’ or ‘accurate’ CollisionFidelity option while giving great points as to why you’d want it.

12 Likes

Perfect mesh collision is already possible and unions are great but I’m talking about things that are dynamic. There are several more reasons why this could be useful than those 2. The biggest one is that a lot of people have complained about ugly seams in between animated meshes like in custom characters. If there was an easy fix for this a lot of people could benefit from that.

1 Like

thats not blender is it

Regarding smoothing, it’s exactly as @Zomebody said. The smooth effect happens when multiple vertices shares the same normal (sharing a position does not imply sharing a normal) . This results in the lighting smoothly interpolating across the seam. While this is technically possible to implement for separate parts, there would need to be apis to allow developers to modify the normals of the mesh data at runtime which I don’t see happening anytime soon.

4 Likes