Unique Techniques For Advanced Builders

Hello all of you savvy builders! Through my time on Roblox, I have come across a plethora of unique building methods that are not commonly seen across the platform. After creating quite a large mental list of techniques, I decided to make this post and return the favor to the community I grew up on. In return, I only ask that you share the awesome and advanced tricks you have up your sleeve for creating your amazing experiences!


General Building:

Shadows for Invisible Masked Parts

In the images below, the shadow is coming from a partially transparent sphere that is masked by a glass rectangle with 0.999 transparency. You can create all sorts of neat effects by using glass to hide parts that would otherwise be visible. One thing to know about this trick is that it is just that – a trick. Glass is not intended to cause partially transparent parts to become invisible. This is something that could change at any time, since it is technically a rendering bug. Additionally, glass will still reflect light at certain angles (at least in future lighting) regardless of the transparency (unless it is 1). Click here for a free model example.

Shadows for Truly Invisible Parts

The shadow in this next example really is coming from a character in the room! As pointed out by @Trymentinc in this DevForum post, it is possible make a truly invisible BasePart cast a shadow if the ForceField material is used with -inf transparency. Click here for a free model example.


Image from In Darkness

Custom Materials from Premade Materials

Although this one is a bit outdated with the introduction of custom materials, one of the older techniques I learned was how to create custom materials using Roblox’s premade materials. Having a partially transparent part overlap another with the same CFrame prevents Z-fighting between the two. This technique can be used to create materials such as detailed grass, rusted diamond plate, reflective mud, and many others! For developers that lack access to otherwise desired materials, this can be used as a potential fix with even more possibilities when combined with custom uploaded materials. For example, if you wanted all of your materials to look mossy, you could use this technique to do that without uploading a new variant of each. It’s important to note that overlapping parts like this is more performance costly than having additional materials. Click here for a free model example.

Here’s my favorite example, which would be great to use as caustic light rays underwater. It utilizes cracked lava and sand to achieve its look.

Changing MeshPart Color

To build from the idea of custom materials, we can use the same technique to alter the color of MeshParts. As you may be aware with the Mesh object, you can change the color via the VertexColor in properties. Unfortunately, this does not currently exist for MeshParts without the use of PBR. By duplicating a MeshPart with the same CFrame, adjusting transparency, removing the texture, and changing color to a desired appearance, you are able to match the color of a MeshPart with a scene you are working in.

Here’s an example of this technique in use to make a darker version of this mushroom.
image

Glass for Distortion and Magnification

One of the many cool tricks that can be achieved with glass is magnification and distortion. When using a rounded glass object with transparency, everything viewed inside of the glass will appear warped to some degree. This can of course be used for things like a magnifying glass, telescope, and glasses. Click here for a free model example.

Beams for Dust

One of the most important things for a believable environment are subtle dynamic details. An example of this is demonstrated above. Can you see it? There is a beam in front of the cave entrance to create a scarcely noticeable dust effect. In game, the dust slowly moves from left to right to mimic light shafts entering a dusty cave. This beam asset can be obtained via the popular waterfall plugin, and then edited for an appearance more similar to dust and voila!


Image from Scenic Canyon

Decal & Texture Reflectance

Sometimes you place a decal or texture somewhere, but it doesn’t quite look right due to it having or lacking a certain degree of reflectance. This is due to the material of the BasePart it’s parented to even if it’s transparent. Below is an example of a carpet decal with a painfully bright reflectance. This issue is due to the BasePart’s material being set to glass, which has the highest reflectance. This can be entirely removed by changing its material to neon, which has absolutely no reflectance. As a result this can be used to add or remove reflectance to any decal or texture!


Other

Neon to Track Lights

One of my favorite things I discovered was that neon is entirely unreactive to light levels when transparency is applied. As a result, this makes neon perfect for marking where all of your lights are in dark environments. In this example, you can see that I have a completely black environment, but the neon part is unaffected by this darkness and therefore easily seen.

image

Using Over Three Decimal Places

If you’ve ever entered a long decimal into a typical property, you’ve likely noticed that it gets shortened to only three decimals places, but this is purely visual. Roblox accepts values that are smaller than three decimal places in length. If you’re ever trying to scale something very precisely, you can type in the exact measurement you want, and it will scale it accordingly; however, some may have minute inaccuracies. For example, I entered 10.0000001, but it was actually 10.000000953674316 when printed.

Performing Math Operation in Properties

As an addon to the above, you may also want to get a specific measurement that you would otherwise need to calculate. Luckily, Roblox allows you to perform these operations in certain property lines. For example, you can type 1, 1, 0.123456789 / 3 into the size property of a BasePart, and it will automatically calculate the answer for you.

Using Floating-Point Errors

Floating-point errors typically occur when a number is too large for a computer to accurately process / store. As a result, extremely large numbers combined with rendering can caused some very interesting and unexpected results. This can be seen by adding ColorCorrection in Lighting, and entering an exceptionally large number in the contrast property. The more large numbers you use in rendering, the more it compounds, and the weirder things get. Below is an example of just how weird Roblox lighting can get under these circumstances!

Particles Locked to Camera

Sometimes I see developers places particles all over their game, which is quite costly. Instead of doing this, I recommend having a single particle block updated to be at the position of the camera on RenderStepped. This creates the illusion of particles everywhere (including depth depending on the size of the block), while reducing the performance costs. An example of would be floating dust in an abandoned factory.

Black Lights

Up until semi-recently, it was impossible to have lights that were black, but that’s finally possible with future lighting. By simply changing the color of a light source to be negative, it makes a black version. Unfortunately, there is no smooth transition, so you’re stuck with either fully black or not at all.

Glass VFX

My favorite technique to play with is utilizing glass as VFX. As can be seen in the image below, I have a glass variant of Mr. Krabs in order to get some wild results. This is due to setting the glass’ transparency to any value over 1 while parenting a highlight object to it (can be disabled). As a result, the glass is still rendered in this weird way, which has vast design implications.

That’s all I have to offer for now, but if you know of any other advanced techniques, please leave a comment to spread the knowledge!

35 Likes

That’s quite an interesting kind of resource, a database/dictionary of techniques!
Imma join the spirit of sharing with some hacks of my own:

  • Make absolutely ALL parts that make up your models have the properties “CanCollide”, “CanQuery” (hidden untill CanCollide is off), and “CanTouch” turned off. ALL 3 of the properties. Then wrap the visible parts with a much smaller ammount of fully transparent block parts with ONLY “CanCollide” property turned on, for collisions. That makes models so much more lighter!;

  • Transparent parts let the player’s camera go through them, even if CanCollide is on. If you want to avoid the camera going through a model you have to make it opaque… or, you can use a fully opaque, slighty bigger - to avoid z-fight - part with the Force Field material :slight_smile: ;

  • You can make lines or chords by creating 2 transparent parts with an attachment each - or 2 attachments on a part - add a Rope Constraint with the attachments, and make the constraint visible. You cannot make textured chords this way, only completely smooth, but the constraint can serve as a guide for you to build the chord with cylinders;

  • Chords can also be made with curved Beams. Though Beams lose their curves when graphics settings are low, so “the visible constraint method” is better;

  • We can fake Ambient Occlusion, especially on blocks, by using a vignette image on a Decal

  • When making a wheeled vehicle, make the wheels AND the ground have high friction by setting the custom physical properties. Your car suddenly have grip for days and steering is responsive :slight_smile: Likewise, a drifty car should have around 0.02 friction wheels, it is enough to slip the tires but still get propulsion;

  • Roblox’ engine is quite optimized to work with billions of parts and unions. But games can still lag a lot with millions of parts around the player, and even worse, it can take a solid minute for models made out of unions to load, even in light games. (Biggest example: Showcases). To solve this, export all your complex/union-heavy models and, in an external modelling program like Blender, transform them into single meshes. Turns out the engine handles meshes very well. and even if it has to make many calls (1 per any mesh part) to render meshes, the trillions of parts and thousands of union operations you had can become just a few hundreds of meshes. And meshes are even loaded earlier than unions when loading a game;

  • Likewise, pertaining transforming taxing models into meshes, if your model has many colors and different materials, organize the model into smaller sub-models, grouping parts by materials and colors. Then export each sub-model, one at a time, to be made into a mesh by itself and uploaded as different meshes. Then you can piece together your model as a much lighter collection of meshes, while preserving the diversity of materials and colors.

  • Also, you can make models - as meshes - directly in 3D modeling external programs (like Blender). Roblox’ vanilla/solid modelling tools are clunky, and so, slow. But 3d modelling programs are built for that, have fast/intuitive interfaces, being faster the more shortcuts you know. You can make models out of blocks, wedges, balls, corner wedges, cylinders and trusses, and even imitate Roblox’ solid modeling, keeping the “Roblox look” for the models, while saving lots of time. I still recommend making models out of parts if they are simple tho.

4 Likes

DUDE, the technique where you can render shadows is incredible
image

You know what this means, We can make a script to have first person shadows without seeing your character model as long as it has no humanoids

3 Likes

this most of all. can be used for so many different creative purposes. haven’t found any significant effects with them yet but i’m exploring!

2 Likes

If you’re at all curious, I made a number of effects that can be found here.

3 Likes

Sorry for the bump, but this fascinates me.

I have heard of using floating points for cel shading before, but never this. I have tried to remake this (specifically the wavy render effect) but I have been unable to replicate it.

Also unable to replicate this… I fiddled with both the highlight and mesh transparency.

Also great job with the magnifying glass, I could not have asked for a better end result.

1 Like

Hi, NoComment!

I should have clarified but the wiggliness of that image comes from placing Terrain water on the character’s camera on RenderStepped and not the due to float inaccuracies. The coloration, however, does. Here’s a code block that you can use in a LocalScript to achieve the effect!

game:GetService("RunService").RenderStepped:Connect(function()
	workspace.Terrain:Clear()
	workspace.Terrain:FillBall(workspace.CurrentCamera.CFrame.Position, 4, Enum.Material.Water)
end)

As for the warped glass effect, you can get that by running this code in command bar.

local part = Instance.new("Part", workspace)
part.Material = Enum.Material.Glass
part.Transparency = 10
part.Size = Vector3.one * 4
part.Anchored = true
part.Shape = Enum.PartType.Ball
part.Position = workspace.CurrentCamera.CFrame.Position + workspace.CurrentCamera.CFrame.LookVector * 5
Instance.new("Highlight", part).Enabled = false

I’m glad you like the magnifying glass! I can’t take credit for its creation, though, as that belongs to @980246. If you haven’t already, you can get a copy of it here.

Hope all that helps! :slightly_smiling_face:

1 Like


now i can have transparent shadows lol, these are some really cool techniques

2 Likes