, 137 tweets, 10 min read Read on Twitter
When I have some time I will record a "how to optimize a game model" tutorial series. Because JESUS FUCKING VERTEX COUNT PEOPLES!!!
"But modern engines can dra..."
"YOU ARE WHY DLC TAKES HOURS TO DOWNLOAD YOU FUCKSTICK!!"
Optimising means you have more of everything play with.
Why have jagged polygonny tires on a jeep mesh when you have like a bajillion internal faces players won't ever see?
Why have blocky shoulders but have polys in concave areas that a normal map would fake anyway?
Why model individual teeth when you never swallow the goddamn game camera?
Don't autogenerate collision meshes on import by default. Most scenery doesn't even need a collision mesh.
Smoothing groups split your mesh- upping your actual vert count. Unless it's on a UV seam. May as well add in a little bevel instead
Bevelled edges give better normal baking, look better in VR. Auto LOD really well.
DONT look at POLY count. Look at UVs total- this is your true measure. Budget in Uvs.
Tumble often. If you can't draw line of sight to an edge, it may need collapsing
Constantly tap the subdivide preview to see if verts are sitting ontop of each other.
Stitch smoothed edges together in UV space. Split apart edges with smoothing groups (hard edges) in the UV and give them som bleed space
The less uv shells you have, the better. A little distortion in tucked away places never hurt anyone
If a vert doesn't 1)help silhouette 2)help texture seam 3)help deformation then blast them.
Convex areas need verts. Concave areas can rely on normal maps (unless in VR)
Have as few materials on your mesh as possible. Each one ups draw calls and is essentially adding more polys and uvs under the hood.
The backs of cylindrical things like rope and chains doesn't have to have the same polycount as front. Collapse edges if you can't see em.
On a bend like a pipe elbow, the outer side can have more tris than the inner bend.
Collapse edges on 1 degree of freedom joints near pivots like on either side of the human elbow, finger and knee. They do noooothing.
Model the bulk of hair into the head mesh, layer cards for the hair stands over that. No bald scalps under wigs if you can.
YOU DONT NEED THE BACKS OF EYEBALLS
Always make mouths in loops from lips back to labial arch- DONT collapse them into triangles at sides of mouth. Stay loopy
Collapse the back of your mouths into a single point and tug it down the throat. Make the texture here 0,0,0 so it multiplies to 0.
Make a fist. Keep thumb in place and open your fingers. Where your thumb is is the optimum place to model for most games
It can grip a weapon, form a fist, point and ragdoll from here with little deformation.
Welding little, ring and middle finger into a mitton and all havinh 1 bone is plenty for most gun toting enemies.
If you only blink, weld the eyes into the face and bake normals instead. They light better and do not antialias
If your character is third person, put the polys on the backs and silhouette.
1)You can offset UV shells in the shader using vertex colors to mask an added constant. This means you can reuse textures on...
2)things like pouches and packs, but have the dirt and damage different on each one.
A 512 RGB mask map and a 256 tiling texture is cheaper than upsizing a map to 2k to get fine details like fabric
Don't use an alpha channel in unreal. It costs the same as the RG and B combined. Make a packed RGB mask map instead for 2 free channels
You can hide parts of a mesh with vertex colors to isolate them on a clipped shader for quick variant generation in construction scripts.
Do you really need your characters two feet to be different?
Learn what a draw call is. Try to use as few as possible to render your thing. This keeps things flying through the GPU
Trunk, branch, twigs... these can be instances of the same object used in a fractal way
Same with roots. Same with rocks
Most of your polys can go on the upper body and face- few notice anything else. Most important? Eyes.
Get the face looking good, then main features that draw attention. Then round things. Then shit that is usually in motion
If you convince a player things close up have lots of polys, they assume everything does.
Learn to build shaders yourself so your modelling can make use of them
Especially learn vertex colours for masking and lerping, feeding maps into uv inputs, fading parralax based on object distance
You can sink mesh into floor as you walk away from it using object distance and have it become normal mapped info
You can lessen parralax occlusion by distance then pop to a cheaper material on the next lod just after
clipping masks are on/off. So you can in theory pack many of them in a single channel. Substance user channels in fill layers helps here.
Hiccups when you stream levels in? Maybe optimize your assets, asshat.
Do you really need that central vertex in the middle of a cylinder cap? Really? Really?
Use unreal master materials and instance them liberally. Build a few good unity shaders and reuse them everywhere.
Make a model with cylinders of 6, 8,12, 18, 22 polys and load it in. Scale. Look at which polycount looks like a smooth curve to guage
This will teach you what polycounts to use
A smoothed 3, 4 or 5 sided extrusion looks like round rope/pipes if normal mapped correctly. But not in VR. Boo.
1) Optimising meshes is also for your high res capture meshes... for faster bakes, less crashes and archiving disk size
2)turn off 'save undos" in Zbrush to keep file size down.
3) dump reference textures out of Mari before archiving.
4) decimation master is GOLD. Run it on your highres before a bake.
5) run simplygon in the LOD settings in Unreal at aboit 90% if you cant see a difference your modelling still sucks. Get gud
Geo sticking into geo still needs texture space. Dont stick things in too deep. Hack them off.
Try using object position to blend masks into vertex offset to make reused scenery appear more random as you place it around your scenery.
KNOW. YOUR. BOTTLENECK.
Planar mapping is expensive (espexially triplanar) but used sparingly it can solve lots of problems. Object position is cheaper.
What problems? Floor tiling textures from rotated modules. Putting moss and snow on upper surfaces of props than can be rotated
Reducing per bone weights can make characters cheaper. More than 3 and you are probably pushing it
Remember you can attach a hard surface like a helmet to a joint rather than as a skinned mesh.
If it ain't bendy, keep it hard people
Mirroring UVs across a middle of a character is a terrible idea. The sides and arms and stuff work well though.
The human eye is tuned for repetition. Break up tiling maps by blending less tiled and weirdly rotated maps and getting lerpy.
Vertex offset can be used for breathing, wind, sagging scenery, making creature variants.
Vertex colors and UVs are vertex data and can talk to each other in glorious warpy, masky ways.
Sometimes it is cheaper to have more verts in your scenery so you can vertex paint variations instead of storing and calling on huge maps
Both eyes can use the same bone to blink on simple models.
Oh hey, this is my patreon btw. Just sayin'.

:) x

patreon.com/darkling
That little "compress without alpha" button in your unreal texture import? Use it.
LODs are your friends. Remember you can LOD to fewer bones, shadows, shader complexity and even billboards.
Screenshot complex geo in engine and make emissive textures out of it for distant geo.
Gibs and rock chunks are usually the same kinda mesh shapes. Just meaty maps. Reuse.
Super mario used the same data for clouds and bushes just recoloured. You can do stuff like that. I believe in you.
stop modelling the inside of pipes for fuck sake.
Know what deferred and forward rendering is. Choose the most appropriate for your project to save your framerate and antialiasing.
Store emissive bits as float1 and pack them! Then multiply by rgb value and then a constant to kick it up to bloomin' HDR
Now you can isolate three different light colors in one map and tune them all in engine. Even more if you clamp ranges to act as masks.
Multiply emissive mask channel by vertex color and then a constant to get bloom color you can paint.
Age in the shaders
Big assed loading screen? Can you clip your images to fit a poly instead of loading in one big fuck off image? Shaders can be used here too
Multiply a fine tiled noise by your clipping mask to make finely stippled and chioped edges to your clipped foliage
Paint fine details like wrinkles and pores in painted height channels in substance or quixel not in zbrush. Save on massive subdivision
Brush geo is expensive. Use to block game in then switch out for static meshes.
Backface wall geo, then use simple polys to encase parts to stop light leaking.
Set them to 2 sided shadows so you can still see through
Turn on 'show collision' in level so it annoys you. Go on a culling rampage.
Instance wall and fence repeats in blueprints without collision. Stretch a single box collider to encompass all in construction script.
Use mesh collision only if you are a)an asshole b)really know what you are doing
Setting things to static should be a habit.
'Cast shadow from lowest LOD' loves you long time.
Delete your maya history before saving your file to reduce storage size. Run 'clean up' to strip out unwired nodes before archiving.
Use "collapse to" in the max stack to cut out any unneeded data under your skin modifier
Collapse dense meshes to editable meshes not editable polys- save and examine file size difference. Send me cash.
Collapse photoshop file layers down to a minimum.
All your enemies basically the same from the belt down? Hmmm. What would be a smart way to save data? Hmmmm.
You can pack muzzle flash, smoke and sparks into the same map. Yep.
Panners and rotators can be passed a constant (such as object world position) and zero time to use them to shift layers of textures
Clamps can isolate a mask from something like a mix of sinewaves layered together. Try feeding into Uv slot
Make a backdrop with chunks of cards rather than huuuuuuge textures.
Skydomes only need to go to the horizon and a bit lower. Ball skys are not so good
Use vertex colours to add falloffs to your skydome, paint in clouds and colours.
If your UVS dont overlap, you can reuse them as your shadow map channel- thus you have a uv channel free to store more cool data
What kind of data? Direction of wood grain, water and lava flow direction, dissolve effect gradient. World height for melting.
Remember, UVs are so called because UVW is next to XYZ. RGB, XYZ and UVW are all interchangeable float information.
A uv map is just a gradient from 0 to 1 red (horizontal), and 0 to 1 green (vertical)
Tile textures on a single sheet. Round position to an int and divide by tiles on sheet. Pump into uv. Boom! Instant variations.
One material, one mesh, a few maps and a seemingly infinite combo of looks can be generated with smart shaders
Reuse geo like bolt heads, planks, stones, rocks into prefabs/blueprints like groups. Use construction scripts to randomize parts.
Unreal: Use unused x and y rotation of actor to cycle through random meshes, but align a child scene world pos to place actual geo
This means rolling on Z rotates object, but rolling on y and x handle cycles through variants and materials.
Weld webbing, bracelets and straps onto main body mesh. This will lod better.
Dont use a full terrain if you are in a limited place like a valley. Just model the goddam floor in modular chunks.
You can make a terrain painting shader with vertex color blending and world space uvs to get same effect but not be on a grid
Always. Build. To. The. Grid.
Make a slightly bent thing like a wall. Use scale to exaggerate the distortion. Put pivot in a good spot to cancel this effect out.
You can use ambient occlusion pass like a mask in a shader to automatically put dirt into the corners of your room and around geo.
Scifi gun handles can all be the same in your universe, right?
Amazing how the engines on good and evil space ships come from the same factory, but are painted and glow different colors. Right?
Amazing how the lava rocks just look like less displaced versions of the ice rocks.
Helecopter blades, spikes, and quills can be a instanced static meshes.
Are your particles on the GPU? Well... Are they? Punk.
That stuff looks complicated. Let's put it in a seperate level and unload that shit quicker than taco bell.
One eyeball and shader to rule them all.
Oh, you can dilate eyes using multipliers on a round gradient map in your UVs.
Both sides of a rusty sword cannot be seen at the same time.
Delete flesh under clothing.
"DLC" may actually just be a bunch of different values passed into already downloaded assets creating new looks.

Cheaty but fast.
Random generation blows. Instead think random selection of variant or hiding of artist placed assets in prefab.
Example? Place plants and shrooms in cracks of stone pillar. Script randomly picks any 3 to 6 of these to show per instance.
Use this to randomly remove the odd plank, grit, brick, deaden a candle, break a window, board a window up.
Scripting is the artist's friend. Don't let coders rule your workflow. Know how to automate art tasks.
If you can't ever see it or its effect on something , it doesn't need to be in memory.
A few polys here, a draw call there, a collision or shadow removed, one fewer texture?

EVERYTHING COUNTS IN LARGE AMOUNTS
You have been a wonderful audience. Good night you crazy game devs. Sleep efficiently.
X
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Delaney (spoo)King
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member and get exclusive features!

Premium member ($3.00/month or $30.00/year)

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!