Biblically accurate software engineer. Was engine director at King. I do a lot of rendering and optimization. This account is all hobby/roblox/unity stuff.
Simulated water in Roblox, now with correct lighting! This is a bit of an abuse of the skinned mesh system and the glass material, but honestly it runs pretty well for a small puddle like this.
#roblox
#robloxdev
OK last water gif, I promise! It's been optimized it a bunch and the normal calculations are fixed now. I don't have any project ideas in mind for this though! Still, stunning engineering by the roblox devs - I never expected dynamic bones to be so performant.
My massive article on Roblox Optimization is out! How massive? It has chapters!
It comes with an uncopylocked game called Cardboard Box Simulator, which has been optimized to run at 60fps on low spec phones at full quality. It also contains a whole bag full of neat tricks and
OK, I got super distracted lol. So this is 150 other player cars with proper server side collision, running at less than 40KB/s. What could you make with 150 players all driving cars?
#robloxdev
Tip 25: With some code, you can make particles "Always On Top" by abusing their ZOffset property and a call to WorldToViewportPoint.
See here:
#robloxdev
My new scene management tools for roblox also includes a heatmap tool. This helps you diagnose where the heavy areas in your scene are - optimise these first etc etc. It can be configured to show you an estimated triangle density, part density, or drawcall density!
#RobloxDev
Experimenting with fully dynamic water in Roblox (Springs for simulation, bones for rendering). Unfortunately it doesn't look like the roblox skinned mesh rendering updates its normals correctly?? Right now the shading doesn't change at all :(
#roblox
#robloxdev
I feel like I have a reputation to maintain at this point, so here's my massive EditableMeshes flex - a new decal system that I think is going to revolutionize your roblox builds. Wait til you see this sucker in action...
#robloxdev
Heads up! Do your Roblox servers leak memory? If you're using :LoadCharacter() you need to be calling player.Character:Destroy() manually, or you *will* leak memory on both client and server. I've seen many top games with this exact bug in the past few weeks.
#roblox
#robloxdev
A small slice of my Roblox 2023 side projects, in gif form! 🧵
1) Roblox added support for scaling models so I grabbed a unity asset pack full of dinosaurs to test it out... (January)
#robloxdev
A roblox tip! You can make elevators and other kinematics with anchored parts by just correctly setting the velocity each frame. The blue one is coded to set a velocity each heartbeat.
#robloxdev
Roblox is the most criminally underrated platform by game developers that I’ve ever seen. Watching the “real game industry” be dismissive towards it is almost comical. The ‘low quality’ of games on it is because they’re being made by literal children. The tech itself is nuts!
The new demo map for Roblox Vis Tools has finally gone up! This is my direct answer to the original Modern City not showing off my SDK very well, and has been brewing for a while now :)
This maps pretty carefully budgeted so it runs great on mobile, and boasts huge view
Fun little experiment tonight - 90's zelda style sunflares!
Figured out how to do ~screenspace particles, too.
The code is uncopylocked here:
#robloxdev
Tip 24: You can create a single permanent "quad" particle for things like glows around lights with the help of some code. To do this, set Enabled to false on the emitter, and then on renderStepped call :Clear() and :Emit(1) to recreate the particle every frame.
#robloxdev
To celebrate the release of the roblox "model scale" property, here are too many dinosaurs. How many is too many? Probably this many.
#robloxdev
#roblox
Presenting: Software Occlusion Culling for Roblox in a real scene! Red boxes are manually placed "blockers" - Blue boxes are buildings that can't be seen and so are not drawn. Costs 2-3ms, saves millions of tris. Conservative fill routines made this tricky.
#robloxdev
Multi-stage LOD for a building using the roblox vis tools. 18k tris -> 5k tris -> few hundred tris. Great job
@xRicey_
! You can spot the LOD1->LOD2 transition pretty easily, but the LOD0->LOD1 is spot on, imho. Roblox's lighting changes are way more noticable.
#RobloxDev
Tomorrow my Community Guest Article for Roblox will go live - here's a little preview!
"Real World Building and Scripting Optimization for Roblox"
It ships with my uncopylocked demo game "Cardboard Box Simulator", and takes you through a bunch of building and scripting
I set out to make a plugin that could "make" mario-esque levels and I think it's about done! It fills your simple parts in with "good" geometry, and does holes, merging, rotation, colors, and now fences. Maybe I should just sell this on its own?
#roblox
#robloxdev
A visualization of how my experimental cheat-proof player controller works in Roblox. The orange marker is where the server has last validated your input, the yellow markers are re-simulated frames, green are locally predicted frames, and blue is the final result!
#robloxdev
It's still in early access but I adore the hecking heck out of this game. It's just so classy and does so many things so so right. I hope Roblox promotes the pants off this when it releases - this is frankly Nintendo quality stuff and I don't say that lightly.
#roblox
Grinding away on the Pro Decals UI. It's just about ready but of course I can't release this until it leaves the studio beta. Hey
@Roblox
, how's that new fiat plugin storefront coming?
#robloxdev
Here's a simple trick now that we have editable meshes! Raycast down from each vertex position on your water mesh, and lerp between two vertex colors based on distance. Instant shallows!
#robloxdev
Well, pretty happy with how this has turned out. Completely custom collision detection and physics. Variable jump height. No weird glitchy roblox physics.
#robloxdev
Inspired by the amazing Find Everything, I wrote some code to rotate your player to stand on slopes, as well as lean into the corners when you're turning. It's a super juicy and fun effect for not much effort!
#robloxdev
Magic Roblox Numbers:
A part costs about 0.9KB of memory
Parts replicate at about 10,000 a second - use this to predict join times
A 1024x1024 SurfaceAppearance is about 2MB on mobile
If you go over 1200MB client ram you're likely to get ejected even from 2gb phones.
#robloxdev
Software rendering EditableMeshes to EditableImages. It runs okay, but this is really meant for run-almost-never specialized shading of images for things like imposters.
#robloxdev
Have you ever wanted to have dangly extra physics bits like tails or bunny ears or keychains on your character in Roblox? There's a small trick to it, but it's easy once you know how! They also replicate to other players properly...🧵
#robloxdev
So! Here's a little "Cheat sheet" I put together that helps me think about how to place UI in my roblox projects.
Might be helpful to others!
#robloxdev
#roblox
#ui
I'm an older engine guy who's worked on some of the biggest games in the world. I could still be in that world, but Roblox has let me reboot my career as a (well paid!) indy game dev. I am literally living my dreams right now because of this platform!
#RobloxDev
Presenting: Roblox's city test map, optimised! It uses a combination of software occlusion culling and distance culling to massively chop the triangle count down. It has cool debug visualization keys too!
#roblox
#robloxdev
This is a sly one so watch close! The distant trees are being swapped for 2D baked billboard sprites, but the tree details match the rotation properly! I saw this recently in a clever zelda BoTW post, so I have recreated it for roblox. Big forests soon?
#robloxdev
It's really fun sticking decals all over everything - but I bet you didn't expect it to have crazy good performance, too! I'm looking for some artists to get early access and collaborate on some decals so hit me up...
#robloxdev
#robloxprodecals
Canvasgroups can be used to put gradients across multiple elements, making them look "combined". I do that here to make the goopy strokes, as well as the smooth even glow behind everything.
#robloxdev
Wake up, new roblox templates dropped!
Kudos to whomever at roblox put these together, they're both excellent. Idiomatic code, sensible levels of security, cool art assets.
Good jorb!
#roblox
#robloxdev
Here's a video of real time occlusion culling in roblox! I had to write some *very strange* polygon fill routines to make this work. The resolution doesn't even need to be very high for this to be pretty useful, even a 40x20 grid works great.
#robloxdev
Here we go! My Roblox Vis Tool SDK is now available for purchase over at:
This is my first time I've ever sold software commercially - let's see how it goes...
#roblox
#robloxdev
I ran some of the free roblox tree assets through my imposter generator. The transition between quad and model isn't perfect, but it's not terrible either. The lighting is fully dynamic. I'll be commercially offering this sometime soon so keep an eye out!
#robloxdev
#roblox
Well, this is completely over-engineered lol. The cows now have a flow map so they can wander around during the day, and then understand how to take a nice path "towards home" at any point. I wanted to make roblox flow maps NPCs for a while, so this was worth it!
#robloxdev
I made an update to the Roblox Vis Tools SDK to correctly support moving objects, including other player characters! The other player is still "there" but they're not costing anything to draw anymore at range. The fade out is optional...
#robloxdev
There are no tree meshes in this screenshot - they're all just quads/imposters. Getting them to light correctly was some effort! I'll be releasing the tooling around this as part of my upcoming SDK release, so stay tuned!
#roblox
#robloxdev
Soon: A fully recursive region and portal visibility system for roblox. A lot of effort has gone into making this easy for artists to set up and debug, including optional automatic portal generation. Can't wait to show it off!
#robloxdev
Roblox advanced tip update: A fix went out so parenting anything under a camera on the server now 100% stops it replicating to players, while still simulating and colliding correctly on the server. Allows for custom replication of things like Npcs, car rigs, etc. Huge!
#robloxdev
I'm building tooling to allow you to generate any mesh you want inside roblox studio, similar to what's allowed in Unity. Automatically generated vertex normals, vertex colors, tangents and UVs are now working :) You'll be able to do a lot more than just terrain...
#robloxdev
How rude! Now the NPCs shove each other out of the way! On the code side I'm proud of how elegant this turned out to be - the server paths don't have to care if anyone is in the way, and the shoving effect is entirely local. Sort of a boids/A* hybrid approach.
#robloxdev
I'm trying out using Color Gradients to describe random color probabilities for cars. Such a cool idea - I can't remember where I saw it first, but if it was you, thankyou!
#RobloxDev
An alternate heatmap, this one is for drawcalls. There's a cafe inside that building that has a lot of unique materials on plates and cups. I'm really not sure how useful this tool would be for most devs - how much should I be charging for this?
#robloxdev
And here is a whole forest full of them!
This never goes over about 200k tris for the trees even though there's a few million source triangles. Good LODs are important!
#robloxdev
The amazing are sponsoring development of my open source roblox anticheat humanoid replacement. This is insanely generous of them - what a gift to the community! I can't wait to build some cheater free roblox games...
#robloxdev
I”m giving my talk on Roblox optimization at 10:45 today at RDC. It’s very entry level and pretty quick, but if that’s your jam I’ll see you there! I’m doing extended q+a afterwards and it’s also your last chance to get my series 2 chicken pin
#rdc2024
Ever wish you could just CFrame objects around on the server and have it work smoothly AND with full physics? Well, TADA! :) This module makes scripting interactable objects like elevators, moving platforms and doors a breeze. Happy holidays!
#robloxdev
Debug visualization of chickynoid's terrain collision detection convex hulls. It's extracting and creating this data in realtime from just the voxel occupancy field, and it's getting pretty speedy now!
#robloxdev
Three floppa friends in a ball. If they were not friends before they probably are now! Bunch of things going on here but the main takeaway is this isn't faked - the physics are running for real here and they really are flopping around in there.
#RobloxDev
Preview of the new and improved city map demo for the Roblox Vis Tools sdk.
The previous one, built on the Roblox city template, wasn't a good representation of what proper scene management can get you.
With this scene, all of the buildings, cars, streetlamps, trees, and props
Tip 20: Player.PlayerGui is a magic folder. Anything parented to it on the server will only replicate to that player. This is how player UI works, but you can also custom replicate anything to just one player. Once it turns up on the client, reparent it to the scene!
#robloxdev
It's embarrassing hearing supposedly seasoned game devs looking Roblox and going "These are bad games but kids play them anyway". Just admit you don't know your craft as well as you think you do, and stop gatekeeping.
Dear Roblox, I have been good this year. For Christmas please let me use ViewportFrames and CanvasGuis as textures. I could make forests with 1000's of trees using imposters, or runtime texture atlasing, or animated materials. Please do not send coal.
#robloxdev
I was at a dev meet the other night, talking about the stigma around Roblox and how shitty some devs are about it. But a veteran dev made a cracker of a point "Well Unity as a platform isn't exactly doing great in terms of press, but we're not going around shaming unity devs..."
Work on the "stupid cat game" continues. The cats now walk and stand up using somewhat accurate physics. Seeing it's just meant to be a dumb ragdoll game this is more than Good Enough™
#robloxdev
Still working away on the roblox global illumination plugin. This is "voxel lighting" with no roblox ambient light set, just the global illumination and a tiny bit of sunshine. Updates in realtime!
#robloxdev
Nobody stops at crossing?! The new Vis tools showcase is coming along nicely. Having LODS for the cars means I can have a lot of them and still stay well within mobile rendering budgets.
#robloxdev
Tip 13: Decals are performance hogs; not only do they cause all geometry they are applied to to render twice(!!), they also cost a whole drawcall each. Use them very sparingly, consider using meshparts with surfaceappearances for the “fast path”
#robloxdev
I’ll be giving a talk at RDC about how I approach using the Roblox tools to analyze and optimize builds. One thing I was thinking of was doing a shorter talk and then doing some live audience profiling of real games. Does this sound interesting?
Tip 34: Advanced networking tip - Roblox uses 100ms of buffer for interpolating client positions (sent at 20hz, fwiw). You probably don't need to know this, but if you're making a lag compensation system for a shooter, this is your magic offset number.
#robloxdev