> [!abstract] Summary > **Beginner-friendly modeling-cleanup tutorial by Leo Hanrion**. Walks through Leo's full workflow: per-shot modeling, UV unfold, basic cleaning (non-manifold, n-gons, normals), renaming/organisation (per-material workflow), UV layout (texel density), final cleaning and Prism export — so the next departments (texturing, lookdev) don't have to clean up after you. > [!info] Author & contact > **Leo Hanrion** — open to questions, suggestions and additions. Reach out on Discord: `leohanrion`. --- # My Workflow 1. **Modeling** 2. **UV Unfold** (Leo does it while modeling to be faster) 3. **Check for basic cleaning** (non-manifold, n-gons…) 4. **Rename and organise** everything 5. **UV layout** 6. **Final cleaning and export** Each step is detailed below. --- # 1. Optimise Your Modeling Keep in mind: the main goal is the **best result at the camera**, with a **polycount as low as possible**. If you want to add an asset to your **personal asset gallery** for reuse, you can model it as detailed as you want — but plan for an **additional optimisation step** when you use it in a shot. ### Example - For this building, there was only this shot with this framing: - ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXft8bYFAQ_krhdiU4wY0wdkj3Jgm5ElIJy60nD4P34NlDncLs0lF-X4RnuRq50R_d67h-WOgLyaM75SXT53O-XNFaBez6lyhRrFnouY4GTUuN4jK3rnwWgEttQYyEjj2nlXm4URBg?key=jsWs7AuehGHni0wqx2pUzQ) - Leo modelled it and did the UVs taking the framing into account, so the modelling looks like this: - ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXcBig1VwYRpccbXYx-u2wUs3LkTB3yKK92OW-3WZL2Ww-OKxSp8konNI8VUQt97quTzGkqx1wNod8nkUo-X-Qm4FMcH-ymhFZMbSuPx01h_tfWtwLVBqZ1J9KyWhAssGyufEGKB?key=jsWs7AuehGHni0wqx2pUzQ) - As you can see, it is **really shot-focused** — a lot of detail without blowing up the polycount. This particular asset is still heavy (**1.9M polys**) but it's a clear example of the "shot-focused" mindset. > [!tip] Subdivision vs unsmoothed > Usually, model assets considering they will be **subdivided at render time** (beveled edges) — but for this one, **unsmoothed** was better to keep maximum detail without ending up with a 10M-poly asset. --- # 2. UV Unfold Just a few things about **UV unfolding** (layout comes later — that should really be at the very end) that can save time for the next departments. If you don't unfold your UVs correctly — for example, a **Camera-Based mapping** on a complex object because it seems easier, and you leave it because it *looks* alright in Maya: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXcdObQPCn23ePE0Lt2fc_Tr46rkdnvlLehRqxsRqxT1K4AmHsLd96LX1xpYCKk75IvhIqSDXvLOc-QBaIlktWWywmZdMlc5JDzpnWwQ9QcJIP7lQ7jvEcl-0JQ8Rj-axLKO9suSsA?key=jsWs7AuehGHni0wqx2pUzQ) …then expect **baking artefacts** like these on mesh maps. Here, ambient occlusion was baked — fine if the object is small on screen, but not otherwise. ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXfA7bkjyORDJQW0JyIEcvYe41eW3avn2oskTOlAlqEmlMvvQ1gRWsOd0USTuiVg-RobTJ2M0bNybWglpQUvAL9RzIAPUZoG9kfKoDJH7pa7UD-nHlXaDkbalgGah26zr_oxqpwB?key=jsWs7AuehGHni0wqx2pUzQ) Artefacts appear for **every overlapping UV**. Camera-Based mapping creates UV shells that contain overlapping faces, so even with a good layout you'll see this. Textures follow the same artefacts. --- # 3. Clean Basics Leo always does **3 basic cleaning passes**: 1. **Freeze Transform** every geometry (select everything in the viewport). 2. **Delete All by Type → History.** - Tip: add a **double-click command** on the Delete History icon (call it `DeleteAllHistory`) so you can clear history with one double-click. - ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXd5cEdcPOHFQ5xchtXkuWiefgHYstsNuXCh1Ly_JueNWarZdA6MpJa1texbT4ETOsvxM8dKAZpxubFcE9hiB2EivxdYOitbDTBPFwRKt3tO3WrEYMbb7HuAyZBJpVo0YoWGvG_EPg?key=jsWs7AuehGHni0wqx2pUzQ) 3. **Center every pivot to World Origin.** - Use a custom command — `xform -ws -piv 0 0 0` — bound as a double-click on the Center Pivot icon. - ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdHGfhD5Er7lFyBY_wAkFnb2q8lYq-ooQ4jjgCE8RzlmfEqfB4u3rj_bRlCWauW0SH5ZnLm-EIwK6LClsxbqklIqIdRc9PCIn7sJyu1ePqyppO8EtI9jjLoLhPVTEtLTPWCC42V?key=jsWs7AuehGHni0wqx2pUzQ) - Works like a Match Pivots, but **locked to World Origin** — Leo likes a Match Pivot custom icon with this as a double-click command. ### Non-Manifold and N-gons - When you finish modelling, it is **mandatory** to check for **non-manifold geometry** and **n-gons** (faces with more than 4 sides). Triangles are fine if the object doesn't deform, but avoid them: they add polys and are hard to unfold. - Use **Mesh → Cleanup □ → Select matching polygons**, then pick "Faces with more than 4 sides" or "Non-manifold geometry" to isolate them. - To clean non-manifold geometry: adjust manually, or use the technique below. - **Final goal:** mesh cleanup in "select" mode with **faces > 4 sides + non-manifold geometry** checked → **nothing selected** (use the Poly Count in HUD). > [!info] Non-manifold UVs > Same idea but for UVs. Aim for clean UVs to avoid bake artefacts — not mandatory but strongly recommended. #### What is non-manifold geometry? > Non-manifold geometry is *"a 3D shape that cannot be unfolded into a 2D surface with all its normals pointing the same direction."* Commonly created by **an edge shared by 2+ faces** — extruding a corner, merging vertices on a complex shape, etc. Example — geometry is non-manifold because there is **an edge connected to 3 faces**: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXfNUoiFEfoNdSxD_HZrd6-WfxpdqZR8D5sYHurMDOod6CEAY0yTHhPxZFxzAvLt9UZedV8HCce8fvcbsGhaRH9Kqc-NWZWHBIA1eS3a0i4Y9Wm6I_A2clkEEG-DusDKJ6iqIjpTMA?key=jsWs7AuehGHni0wqx2pUzQ) Maya's Mesh Cleanup selects the 2 vertices of the problematic edge. > [!warning] Cleanup randomness > The cleanup option can be a little random in what it selects — faces around, vertices, etc. You can either fix manually, or use **Cleanup → matching polygons → Apply**. This separates the geometry into several meshes so the shared edges are no longer connected (visually unchanged). Then **Shift + Right-Click → Separate** to see what's going on and delete the unwanted parts. ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXeuIxngkOcq-eVZVpqevcUt8eAjaKe83O0Vz9zDsaKcsp2hRZ3cpgoVDClrsM37V5l9FhPQMmkuUG5EDENOZeMO7B-K_NyXb9LPh_IxSSRo6CWmqICc9JarFHQlfAyg7-31-ovP?key=jsWs7AuehGHni0wqx2pUzQ) Very useful for accidental **0-length extrudes**: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdDVTggb0VE2TIstbsOvAPkytTl4cUfAFKMXjAMDDemC12MIVXmU03H0_nDtfXZgqI4VKiM8ZF6CTTWuP10aq_Qvww7lBBKLw2osRBmpMxDEegUk93e-NnGS4pnWTKMyKERin5MWw?key=jsWs7AuehGHni0wqx2pUzQ) > [!tip] Further reading > Plenty of good videos on **non-manifold geometry cleaning** are available online if you struggle with it. ### Normals Orientation Face normals can be flipped without showing in the Maya viewport. **But** when you export to Alembic, all faces get set to their normal orientation — so flipped normals become **black faces**. To check in Maya: - `Mesh Display → Unlock Normals` - `Mesh Display → Set to Face` Faces are now displayed with their actual normal orientation (like an Alembic export), so issues become visible: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdl1e4pXkXm4bM1gwGr-noB-KgYgKVTSdg2aWe2vl_DRqIHq-TtxY0Gp6ArAzVWJTCrfBma3OxlW0jd1bydLvrWag-vYgqo-kTw5_O2Fq5NEgZDlxf3iiUgohcpwUAkKJD2waqCSA?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXd1jAsIQwk9apeer-4h_pVdeVP9bF8Mzmp4HzwTFKDweb2CGFS2CcCnsQ_EFTHbytr6IVw49vFMgCMFkkiIU_v5QQo7QX8bSX5Bh4u5z1yqQVD6LPXTFadqO7Wg-pnjG731Jmkd2A?key=jsWs7AuehGHni0wqx2pUzQ) To fix: select the inverted faces and `Mesh Display → Reverse`. --- # 4. Rename & Organise For this part, do whatever you want — as long as it is **clean and understandable for everyone**. Below are Leo's tips for the **Per-Material workflow**. ### Per-Material Workflow Top outliner: `assetName` (mandatory) + version number (optional). Group objects **per material** — in this case 3 materials: `walls`, `roofTiles`, `wood`: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXf-qZjtoBlrSS0fUXdnBVeWB75SkNR5W-HGVqtVKO1mi2ROQLUE3fJjMgFZZCnZZwgW3O9VhidYVpAD_VsfQOcB4CnoGeNZeTcF2NSqHOeQEGyvVRlG3I7MDNqGOm2e9vcXfMFB4A?key=jsWs7AuehGHni0wqx2pUzQ) At this stage, what matters: - Geometry under each group is **not combined**. - Each group has the **material name** in it. - Additional sub-groups are fine but not mandatory. > [!info] Why no combine? > In **USD / Solaris**, material groups let us apply materials easily, while still selecting individual geometry independently (since meshes aren't combined). In the example, sub-groups separate each building: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdDbDrkULfr_-ge_w2b3Uhh5vFaMVY5sxC5SO8IBmmEtlae3Kl7f1_kF-DhYt99kq8wZNTCQ0mavKxdCs2-L-9SnAwAX8acSQG_gpWgSa76IZdZ7tgemlLAi_9yDSnolZ4ynjX0ZA?key=jsWs7AuehGHni0wqx2pUzQ) Leo also creates **Display Layers per material group** with assigned colours — enabling wireframe gives a clear view of which geometry will end up in which material. Optional but neat: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXfF0gdhtkEKfSz1NZsxlUaM1x0a7o3afuprdLQkiJYYfc6UE0EvCmsYv7j0krRYlyDYAfQfm6fzRAnlCuQkA405G2i7nLdAtcvEoeffQAX1ow18IQvV2yQnB-bEQYzziClLdPQcGg?key=jsWs7AuehGHni0wqx2pUzQ) ### Renaming Top outliner: at least `assetName` (mandatory). For mesh names, use Maya's **rename tool** — top-right of Maya, click the square → Rename. (If you don't see the square, show it via "Show/Hide the select field" — the vertical line next to it.) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXe2wr7UE3hEsMg5UK_81Xpw34Aq7LbcpeDfnA_ooVgpKDg37DOR2UsToknlTgxb0CtKILY6FL--ntVWG2a1k1AEQ5R9wdhgyQV-XcM6dsByi7W7wAf-adH0j36f5lAK9dUUINZuvQ?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXeuj2J4Go2qFCsw4EsbuCsLQCsQuNYl9FFfiMDxptA4ZoK_mtrGE2cXYUCyrkI5m22qqmp97kdVt_ufyNa4WTwiVDa4Oyk5zvsiMIS_Hjcg50VhplpP75CCtexrX0Cr_D8-eQpeAw?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdo0WqHzvKpYFYpkdo-EmVInjmxci2HBEOLTLOxEqanU3B2eAtGIWG_Jk-GxXpBbzo8_5H1P2L0f3D218zNzS8j6WJEz6gLUQo6-NwmrD3j5zwCFayHcKDUsM7RcjVNt_WLoa9_lg?key=jsWs7AuehGHni0wqx2pUzQ) Select all meshes to rename, then type the new name. Leo's naming pattern: **parent name + `_XXX`** — three digits is a good balance (if you exceed 999, you probably need another group or some mesh combining). In the example, parent name is `bridge_wood`. > [!tip] Numbering trick > To start the numbering at `001`: type `000`, press Enter, delete the text back to `000`, press Enter again — done. Same trick works with `01` or `0001`. ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXcQrZFyP6RsllPdlvUy-dWrbmH0PizRmeC5HnGUjK9r8IzkA9DTfXQ1DRmLjxhciKb64ljFYXTjW_qc8VsePs24ICbO_r9o7PMAnCah5OK-GkVzWluaHcLyTgSCs7Lc1xODWmCt?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdE6ZR6YOnQIgv7FCckfPHhs9r8r7heu_iTacp0q67DpJ-b4SIxu5mpCVBrgMRL1uF9l5ZMXHSqk0k3lls8PsQG12sdkb3uMVLq8tNToyPfxNOrKK6YL3BCYiwtqwJiXoNKEK_Cyw?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXf9iOl4ZikQux90I3AqzOQYONSvH0W4Q_e59d4gKD3GU89LIQFiZq0rIHjk1abnN2O4fqU9kMaqNABXwspuMsNRlvtCRg9V13miYE2G9kO-8qtEOkTuQyKK6Q6DYP5gi5j5s56XBg?key=jsWs7AuehGHni0wqx2pUzQ) --- # 5. UV Layout For Leo, UV layout is the **final step** of an asset — if you missed something earlier, you'll have to redo this part, and it's not the funniest. ### Check Your UVs It is **critical** that every mesh has UVs, that they are not broken, and that they are **correctly oriented** (texel density and layout come next). Workflow: 1. First, layout with Maya's **default Layout option** (uniform texel density, non-overlapping). 2. Then check **every single mesh** with a **UV checker texture** to confirm everything is fine. - UV checker reference: [UV Checker Map by Valle](https://upload.wikimedia.org/wikipedia/commons/f/fd/UV_checker_Map_byValle.jpg) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXfnYvOCYL8TknW8-uUbVEyy6Pw69pE9szWzAYeCqBZhldC_GeH97TViBJzB8hhxBMNl34T6v8msSY1L3JwnlTXKJxnUHSsej4RsL872k_qkJ09eAANtQLfV65WwWlJnMM-T04qi9A?key=jsWs7AuehGHni0wqx2pUzQ) In the example: two meshes have no UVs and one UV shell is oriented the wrong way (arrows facing downward) → these will cause problems during texturing. If any of these are wrong and you move on to layout, you'll likely have to **redo your layout** because something will change. ### Which Texel Density? Watch this very good tutorial to choose the right texel density for your shot: - [YouTube — Texel density explained](https://www.youtube.com/watch?v=iL2iXizf9xM) Or read Thomas's note: [[../../../OUT OF PUBLISH/3D DICTIONNARY/Words/Texel Density|Texel Density (dictionary entry)]]. > [!warning] One asset = one shot > If you have several shots, choose the **closest one**. If you have an establishing wide + a tight close-up, **do two separate assets** — don't make one asset with 100+ UDIMs (it has happened on a current short film). ### Layout Part (finally!) With per-material workflow, Leo splits UDIMs **horizontally per material** — so you can work on only `walls`, only `wood`, etc. Final layout for the example: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXedz5q30wsSh76Pid1_yI6CkXvXrAJCkjRlxlnXH8gjljUMfSZT8oMg4bXddN_JbCtms17l2u-wwcIQx3wc5EIyMCKxF2X0xh18cqah3fBM-jvmOOjSqUlzy81P_6JputJP5j-eWA?key=jsWs7AuehGHni0wqx2pUzQ) Once you know your texel density, apply it to every UV patch (if not already done). Layout strategy: - **Biggest pieces by hand.** - **Smallest pieces with Maya's Layout option.** In the example, red pieces were placed manually, the rest via Maya's Layout tool: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXfj-8g1GQChpILi93M2J--pw-EA_T-927fJpFQxWYqzrKc9rzhdpUHm9YO75QyQ9h76oJiiMfXf3LYdmWOptJM7PuHTyp12qQfCjSY2GjFyIkNvWn0iJAcPy_ED764SNzBNJ53BGA?key=jsWs7AuehGHni0wqx2pUzQ) The Layout tool is useful because you can **target specific UDIMs**: ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXcLN-LNAkPIu6hwemEVEhkkqJ0zQQxBRzLYaz3rxQZrm81CWA_0VamWeoozAwx3mM_XQg2atLSmGFp3EcOgH1yB5GrEi3OijV_FPLUpu7TYjTSlLzPOdOCnZ_fLr5kG4Bv0CYwk?key=jsWs7AuehGHni0wqx2pUzQ) > [!tip] Camera-aware texel density > Texel density on small pieces can be lower if they're barely visible on camera. **Don't waste time** trying to keep everything at exactly the same density — keep the highest texel density for the **visible** objects, save UDIMs on the rest. > > Example values: **2.0** texel density for big pieces (4K map), down to **1.3** for small ones. Check with the UV checker again — if it looks alright and you saved UDIMs, perfect. --- # 6. Final Cleaning & Export Run through every step above one more time. Leo always does a small **re-cleaning + re-checking pass** (freeze transform, delete all history, center pivot, normals, naming) to make sure nothing was modified along the way. > [!note] Back-and-forth is normal > You'll often switch between the texturing software and Maya because something needs fixing. **It will happen and it's OK.** The goal is to minimise these round-trips, but exporting a big asset with everything perfect on the first try is rare — it depends on many things. ### Export Once your asset is perfect, select the **top outliner group** (typically `assetName_whateveryouwant`) and export it via the **Prism tab**. ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXeBw85aYj5d7FTIzvHnACXEZNMqM0G1otno-yp8kbJDCRA54CmNi1_kdIjEAOr50qhYvupq0EkWAMy2gRNnMaJvyNX2RMvcf7ZeuvZ1u3fdFX_d0gukZIGCuAr-hmti2y0ZnDw-?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXdVBdr7rq6RNdYgvVIS-OiBZJCBsFwAkFbZARoGjyF6Gd8RE8wmmOCuftX9RRksNGwgfO5kaCO-jWJAb7ZVrUHfLkBn-UdLoCrhYtmVHXW2HG-LKw7xWpMlvE0kBs-FyejblEEW?key=jsWs7AuehGHni0wqx2pUzQ) ![](https://lh7-qw.googleusercontent.com/docsz/AD_4nXfa7cZKSjsY7mvRaR2bYKvm_CI8h1H9MTeyfHuTuX6V62citm7BZh78fffQtt_BfbzlFX6XAqzkZzDal6j9qQFnlZhkpOo3znXnA8DOPPFlKeDypwFsAs9CQD3HO6T5jK2DRwWsZQ?key=jsWs7AuehGHni0wqx2pUzQ) If the Prism project is set up correctly you'll get the basic export tab. Choose: - **Local** — uploading directly to global is slow + local is prioritised this year. - **.abc** — the pipeline format. Make sure your object is in the **Objects** list and selected (otherwise pick it in the Outliner and click **Add selected**). > [!info] Prism + UVs > **Prism Export automatically exports UVs** — unlike a classic Alembic export, where you need to check the option manually. Then hit **Export** and you're good! --- # 🔗 Related - [[../OPTIMISATION MOC|OPTIMISATION MOC]] - [[../../../KNOWLEDGE/MAYA/MAYA MOC|MAYA MOC]] — modeling DCC reference. - [[../../../KNOWLEDGE/MARI/Notes/MARI Optimization|MARI Optimization]] — downstream texturing performance. - [[../../PRISM/PRISM MOC Protocol|PRISM MOC]] — publish workflow used at the end. - [[../../FOUNDATION/PROTOCOL Naming Convention|PROTOCOL Naming Convention]] — naming rules referenced in this guide. - [[../../../OUT OF PUBLISH/3D DICTIONNARY/Words/Texel Density|Texel Density (dictionary)]] — Thomas's reference note.