[{"data":1,"prerenderedAt":358},["ShallowReactive",2],{"studio-blog-post-blender-geometry-nodes-modular-props":3,"studio-blog-more-blender-geometry-nodes-modular-props":339},{"id":4,"title":5,"body":6,"category":327,"date":328,"description":329,"draft":330,"extension":331,"image":332,"meta":333,"navigation":334,"path":335,"seo":336,"stem":337,"__hash__":338},"blog\u002Fblog\u002Fblender-geometry-nodes-modular-props.md","Modular Game Props with Blender Geometry Nodes",{"type":7,"value":8,"toc":313},"minimark",[9,18,21,26,29,57,64,68,71,89,92,106,109,113,120,145,148,151,155,158,184,195,202,206,209,220,223,227,230,233,254,257,261,264,267,271,274,285,292,296,299,303,310],[10,11,12,13,17],"p",{},"Game art teams still ship a surprising amount of modular props the old way: duplicate a mesh, apply a mirror, boolean a cutout, realize the instance, and hope nobody asks for a thinner bevel two days before lock. Geometry Nodes will not replace judgment or art direction, but it ",[14,15,16],"em",{},"does"," let you keep the variation knobs alive until the moment you actually need a baked asset for the engine.",[10,19,20],{},"This article walks through one concrete workflow: a small wall-and-panel kit where thickness, bolt count, wear slots, and corner treatments stay procedural until export. The goal is not a tutorial dump of every socket—it is a production-minded pattern you can steal for crates, pipes, vents, and sci-fi cladding.",[22,23,25],"h2",{"id":24},"why-modular-props-break-without-a-node-graph","Why modular props break without a node graph",[10,27,28],{},"Most kitbash libraries die from three habits:",[30,31,32,40,51],"ol",{},[33,34,35,39],"li",{},[36,37,38],"strong",{},"Destructive edits land too early."," Artists apply modifiers to \"see the real mesh,\" then lose the ability to retarget the same base to a taller corridor or a thinner floor plate.",[33,41,42,45,46,50],{},[36,43,44],{},"Variation is copy-paste."," Ten wall segments become ten separate ",[47,48,49],"code",{},".blend"," objects with slight bevel differences. Bugfixes do not propagate.",[33,52,53,56],{},[36,54,55],{},"Engine constraints arrive late."," Nanite, LODs, lightmap UVs, or a hard triangle budget show up after the art is \"done,\" so the fix is a panicked rework instead of a parameter change.",[10,58,59,60,63],{},"Geometry Nodes push those decisions into named inputs. You still export a normal mesh. You just decide ",[14,61,62],{},"when"," the mesh becomes dumb.",[22,65,67],{"id":66},"scope-the-kit-before-you-open-the-node-editor","Scope the kit before you open the node editor",[10,69,70],{},"Pick a single kit that has clear rules. For this walkthrough, assume a corridor cladding set:",[72,73,74,77,80,83,86],"ul",{},[33,75,76],{},"Base panel size: 2m × 3m (adjustable)",[33,78,79],{},"Frame thickness and inset depth as inputs",[33,81,82],{},"Optional bolt rows along the long edges",[33,84,85],{},"Optional grated cutouts with controllable density",[33,87,88],{},"A \"wear\" boolean that adds shallow edge chips via a controlled scatter",[10,90,91],{},"Write the constraints on a sticky note before nodes:",[72,93,94,97,100,103],{},[33,95,96],{},"Must export as a single mesh per variant (no live node dependency in-engine)",[33,98,99],{},"Must support UDIM-friendly UV packing after realize",[33,101,102],{},"Triangle budget target: under 8k for hero panels, under 2k for background LODs",[33,104,105],{},"Materials: one trim sheet + one detail atlas, not unique textures per panel",[10,107,108],{},"Those constraints keep the graph honest. Geometry Nodes can generate infinite noise; shipping needs finite, readable variation.",[22,110,112],{"id":111},"build-the-base-as-a-controllable-cage","Build the base as a controllable cage",[10,114,115,116,119],{},"Start with a plane or a thin cube that represents the ",[14,117,118],{},"outer"," panel bounds. Expose:",[72,121,122,128,133,139],{},[33,123,124,127],{},[36,125,126],{},"Width \u002F Height"," (meters)",[33,129,130],{},[36,131,132],{},"Thickness",[33,134,135,138],{},[36,136,137],{},"Bevel width"," (for a later Bevel or custom profile)",[33,140,141,144],{},[36,142,143],{},"Inset amount"," for the inner plate",[10,146,147],{},"Use a Frame and rename every Group Input. Future-you will thank present-you when the graph has forty nodes. Prefer meters and degrees in the UI labels so designers can tweak without reading the tree.",[10,149,150],{},"A useful pattern: keep the outer frame as one mesh island and the inner plate as another until the very end. That makes material assignment and UV seams predictable—outer trim vs center fill.",[22,152,154],{"id":153},"variation-without-forking-the-file","Variation without forking the file",[10,156,157],{},"Instead of duplicating the object ten times, drive variation from a small set of integer and float inputs:",[72,159,160,166,172,178],{},[33,161,162,165],{},[36,163,164],{},"Bolt density"," (0–1 or discrete count)",[33,167,168,171],{},[36,169,170],{},"Grate mode"," (none \u002F sparse \u002F dense)",[33,173,174,177],{},[36,175,176],{},"Corner style"," (chamfer \u002F fillet \u002F hard)",[33,179,180,183],{},[36,181,182],{},"Seed"," for any scatter-based wear",[10,185,186,187,190,191,194],{},"Store presets as Geometry Node ",[14,188,189],{},"modifier"," presets or as a simple JSON\u002FCSV of parameter packs that a script applies before batch export. The important part is that the ",[14,192,193],{},"source of truth"," remains one node group.",[10,196,197,198,201],{},"When a producer asks for \"three darker, thicker panels for the reactor room,\" you change thickness and seed, export three FBX\u002FGLB files, and move on. You do not fork the blend into ",[47,199,200],{},"wall_reactor_v3_FINAL2",".",[22,203,205],{"id":204},"cutouts-and-bolts-that-stay-editable","Cutouts and bolts that stay editable",[10,207,208],{},"For grated vents, avoid booleaning high-poly cylinders into the panel mid-graph if you can help it. Prefer:",[30,210,211,214,217],{},[33,212,213],{},"Instance a low-poly grate module along a grid.",[33,215,216],{},"Realize instances only when the silhouette is approved.",[33,218,219],{},"Use Mesh Boolean (or a carefully modeled inset) at the end if the engine needs true holes for lighting.",[10,221,222],{},"Bolts are classic instance fodder: a tiny hex mesh instanced on edge points sampled by length. Cap the count. A \"hero\" panel can afford denser hardware; a distant LOD should drop bolts entirely via the same input set to zero.",[22,224,226],{"id":225},"keep-uvs-and-materials-in-the-conversation","Keep UVs and materials in the conversation",[10,228,229],{},"Procedural mesh generation loves to ignore UVs. For game props, that is fatal.",[10,231,232],{},"Practical rules that work on real kits:",[72,234,235,242,245,248],{},[33,236,237,238,241],{},"Generate the base panel with clean, manually unwrapable topology ",[14,239,240],{},"before"," heavy scattering.",[33,243,244],{},"Apply world-aligned or box projection only for blockouts—not for shipping UVs.",[33,246,247],{},"After Realize Instances, run a dedicated UV step (or a known good unwrap operator via script) and pack to your trim sheet.",[33,249,250,251,253],{},"Assign materials by attribute or selection ",[14,252,240],{}," export so the FBX does not arrive as one mystery material.",[10,255,256],{},"If your pipeline already uses Blender's UV packing add-ons or a DCC exporter script, call that after the node group is applied and converted to a mesh. Geometry Nodes are the modeling brain; the export script is still the shipping gate.",[22,258,260],{"id":259},"lod-and-engine-handoff","LOD and engine handoff",[10,262,263],{},"Treat LODs as parameter packs, not separate art projects. LOD0 keeps full bevels, bolts, and dense grates (≤8k tris). LOD1 softens bevels and thins hardware (≤3k). LOD2 is a flat silhouette with bolts off (≤800). Bake those packs into export; artists review LOD0 while automation emits the rest overnight.",[10,265,266],{},"For Unreal or Unity, export static meshes with a consistent pivot (bottom-front-left or center—pick one and never change it mid-project). Name files by kit + params hash or preset name so reimports overwrite cleanly.",[22,268,270],{"id":269},"what-not-to-put-in-the-graph","What not to put in the graph",[10,272,273],{},"Geometry Nodes are a poor place for:",[72,275,276,279,282],{},[33,277,278],{},"Final painted vertex colors meant for unique storytelling beats",[33,280,281],{},"One-off hero sculpts that will never reuse parameters",[33,283,284],{},"Full material authoring (keep shaders in the engine or a dedicated lookdev scene)",[10,286,287,288,291],{},"If a prop is truly unique, model it uniquely. Procedural kits shine when the world needs ",[14,289,290],{},"many similar things"," with controlled differences.",[22,293,295],{"id":294},"a-one-week-adoption-plan","A one-week adoption plan",[10,297,298],{},"Rebuild one wall panel as a node group with five inputs, add bolt\u002Fgrate modes with a triangle budget, then wire apply → realize → UV pack → FBX. Ship three presets into a level slice and rename any input that confuses non-technical reviewers. The win is simple: thickness changes update every preset without mesh archaeology.",[22,300,302],{"id":301},"closing","Closing",[10,304,305,306,309],{},"Modular props are a systems problem disguised as art. Blender Geometry Nodes will not invent good design, but they keep your kit ",[14,307,308],{},"alive"," until export—exactly when most pipelines accidentally kill it. Start with one boring panel, expose the knobs that producers actually ask about, and refuse to apply the modifier until the shipping checklist says so.",[10,311,312],{},"That discipline is less glamorous than a node tree screenshot, and it is what makes the kit reusable six months later when the art director wants \"the same walls, but 12% taller.\"",{"title":314,"searchDepth":315,"depth":315,"links":316},"",2,[317,318,319,320,321,322,323,324,325,326],{"id":24,"depth":315,"text":25},{"id":66,"depth":315,"text":67},{"id":111,"depth":315,"text":112},{"id":153,"depth":315,"text":154},{"id":204,"depth":315,"text":205},{"id":225,"depth":315,"text":226},{"id":259,"depth":315,"text":260},{"id":269,"depth":315,"text":270},{"id":294,"depth":315,"text":295},{"id":301,"depth":315,"text":302},"blender","2026-09-12","A practical pipeline for building reusable kitbash props in Blender using Geometry Nodes—without baking yourself into a destructive mesh every time you tweak a panel.",false,"md","\u002Fblog\u002Fblender-geometry-nodes-modular-props.webp",{},true,"\u002Fblog\u002Fblender-geometry-nodes-modular-props",{"title":5,"description":329},"blog\u002Fblender-geometry-nodes-modular-props","DygPQI9S963zm5UmiSB-Nx4H8iguy-nczlGTlYtyv08",[340,346,352],{"path":341,"title":342,"description":343,"date":328,"category":344,"image":345},"\u002Fblog\u002Fgta-vi-zelda-aaa-calendar-collision","When Zelda Shares the Sky With GTA VI","How Nintendo's Switch 2 era and a Zelda-weighted calendar can compress, delay, or reframe the marketing runway around Grand Theft Auto VI, without a single star rating.","releases",null,{"path":347,"title":348,"description":349,"date":328,"category":350,"image":351},"\u002Fblog\u002Fretopo-game-ready-characters","Retopology for Game-Ready Characters","How retopology turns a sculpt into a mesh that animates, bakes, and ships: edge flow, density, UVs, and a bake that holds up in-engine.","retopology","\u002Fblog\u002Fretopo-game-ready-characters.webp",{"path":353,"title":354,"description":355,"date":328,"category":356,"image":357},"\u002Fblog\u002Funity-addressables-live-content-packs","Shipping Live Content Packs with Unity Addressables","A concrete Addressables setup for indie teams that need to ship seasonal props, balance tables, and locale packs without rebuilding the whole client every Tuesday.","unity","\u002Fblog\u002Funity-addressables-live-content-packs.webp",1789255532039]