Start with Blender + Roblox Studio + a small library of good PBR materials. Add Roblox’s built-in MCP server to automate scene assembly and testing. Add Blender MCP when repetitive modeling and asset preparation become a bottleneck.
The first milestone should be one convincing, playable room. Photorealism comes from consistent scale, believable materials, intentional lighting, and careful composition. AI can accelerate production, but you still need to judge the scene from the player’s camera.
1. What each tool does
| Tool | Job | When to use it |
|---|---|---|
| Roblox Studio | Assemble the environment, configure lighting, implement interactions, playtest | From the beginning; this is where the final image must work |
| Blender | Model and clean meshes, unwrap UVs, bake textures, export assets | For distinctive props and architectural details |
| Roblox Studio MCP | Let an AI client inspect and modify an open Studio place | Repeated placement, Luau, scene audits, screenshots, testing |
| Blender MCP | Let an AI client operate Blender through an add-on | Repeated geometry, naming, material setup, export preparation |
| PBR asset libraries | Supply consistent real-world surface detail | Before attempting to paint every material yourself |
| Substance 3D Painter | Paint masks, wear, and textures directly on models | Optional, when custom texturing becomes substantial |
| Git; later Rojo | Preserve scripts, configurations, and reproducible changes | Add Rojo when filesystem-based scripting becomes useful |
Roblox documents its Studio MCP integration. Blender MCP is a third-party project. Painter specializes in 3D texturing; Rojo connects a filesystem workflow to Roblox development.
For this first project, defer paid texturing software and 3D-generation subscriptions. A few well-chosen assets will teach you more about the pipeline than a large asset collection.
AI client ↔ Blender MCP · AI client ↔ Roblox MCP
Player testing informs the next pass.
MCP is the control connection. The asset handoff still needs exported files, import/upload, and valid Roblox asset references. Connecting both applications does not automatically transfer a Blender scene into a playable experience.
2. Choose a scene you can finish
Recommended first project: a small café after rain, with a short sidewalk, one interior room, a table, a chair, a counter, and a working light switch.
Use the following as a proposed brief:
- One walkable room and a short exterior approach.
- Fixed late-afternoon lighting.
- First-person exploration initially; inspect multiplayer avatars later.
- Three composed views: entrance, counter, window-side table.
- Three main surfaces: plaster, wood, and painted metal.
- One interaction: enter, turn on the counter lamp, examine a note.
- A desktop target first, followed by a real phone test before expanding.
Gather roughly ten reference photos: overall space, lighting, furniture proportions, and close-up materials. Pick one primary reference for each camera view. Contradictory references make it easy to combine individually attractive assets into an implausible room.
Build a gray blockout in Studio using ordinary Parts. Place a player spawn and walk through it. Check doorway clearance, table height, ceiling height, and the route to the interaction before making detailed assets.
Completion test: a player can enter, understand the space, interact, and leave; the three views remain convincing during movement. A polished screenshot alone does not meet the brief.
3. Connect the AI tools
Roblox Studio MCP
In an updated Studio installation, open Assistant → … → Manage MCP Servers, then enable Studio as MCP server. Use the displayed quick-connect option for your client and check the green connection indicator.
For a client using an mcpServers JSON configuration, the documented macOS entry is:
{
"mcpServers": {
"Roblox_Studio": {
"command": "/Applications/RobloxStudio.app/Contents/MacOS/StudioMCP"
}
}
}
Merge the entry into existing configuration. Restart the client. Adjust the executable path if Studio is installed elsewhere.
Current tools include hierarchy inspection, Luau execution, script editing, asset generation/insertion, screenshots, and playtesting. Have the client discover its available tools and identify the intended Studio instance before editing; tool availability can vary with the installed build. Official setup and tool reference.
Connection check prompt:
Identify the open Studio place for this café project. Read its Workspace hierarchy and current lighting settings. Report what exists before changing anything.
Blender MCP
The community Blender MCP README supplies the installation workflow. Install Blender first, then:
brew install uv
uvx --python 3.11 blender-mcp install-addon
Enable Interface: MCP for Blender in Blender’s Edit → Preferences → Add-ons. In the 3D viewport, press N, open the MCP tab, and start its server.
Add this entry to your client’s existing mcpServers object:
"blender": {
"command": "/opt/homebrew/bin/uvx",
"args": ["--python", "3.11", "blender-mcp"]
}
Check which uvx; substitute that path if different. Use one client connection initially. If the add-on is missing, follow the README’s manual addon.py installation. Save the .blend before large edits; the integration can execute Python inside Blender.
Connection check prompt:
Read the Blender scene and report object names and dimensions. Create a separate collection named CaféPrototype containing one cube named ScaleTest. Leave other collections untouched.
Keep both applications open during this workflow. These are setup instructions; this primer does not install or configure either integration.
4. Learn the small part of Blender you actually need
You can get started without learning character rigging, fluid simulation, or cinematic rendering.
| Concept | Meaning | First exercise |
|---|---|---|
| Object Mode / Edit Mode | Move an object versus change its geometry | Resize a table, then edit its legs |
| Transform | Position, rotation, scale | Give the tabletop explicit dimensions |
| Bevel | A small rounded or angled edge | Add a narrow edge highlight to the tabletop |
| UV map | The layout connecting a flat image to the mesh | Unwrap a box and apply a checker pattern |
| Material | Surface shading and its texture inputs | Make painted wood and exposed metal distinct |
| Bake | Convert generated surface detail into image files | Bake one procedural surface for export |
| Pivot/origin | The point used to position or rotate an object | Put a door’s origin at its hinge |
Useful default shortcuts: G moves, R rotates, S scales, Tab changes mode, and F3 searches commands. Use the viewport navigation gizmo if you lack a three-button mouse or numpad.
For static props, set dimensions, then apply Rotation & Scale through Object → Apply before final UV and export work. Preserve the pivot you need. Applying transforms changes the underlying object data while preserving its visible placement. Blender transform reference.
For UVs, mark seams on less-visible edges, select faces, and use the UV unwrap command. Inspect the result with a checker texture: squares should remain roughly square and similarly sized. Pack islands with padding. Think of this as cutting and flattening the object’s skin. Blender UV operators.
Make one useful asset: a café table
- Model the silhouette from a reference: top, legs, and supports.
- Add restrained bevels where light should catch an edge.
- Check the table next to a scale reference.
- Unwrap; orient wood grain along the appropriate direction on each piece.
- Use material variation to distinguish the top from the legs.
- Export and judge it inside the room before adding screws or scratches.
Suggested Blender prompt:
Make a café table in CaféPrototype, 0.75 m tall with a 0.70 m square top. Use separate named meshes for the wood top and metal base. Add small bevels and clean shading. Aim below 3,000 triangles total. UV unwrap for reusable textures. Save the editable source and prepare an export copy. Report dimensions, triangle counts, and material slots.
That triangle target is a project recommendation, not an engine requirement. Ask for one asset at a time until the agent consistently produces usable results.
5. Build materials that survive export
PBR means physically based rendering: several maps describe how a surface responds to light.
| Map | What it describes | Typical mistake |
|---|---|---|
| Base color / albedo | Surface color | Including strong directional shadows in the image |
| Roughness | How broad or sharp reflections appear | Giving every surface a polished finish |
| Metalness | Metallic versus nonmetallic surface regions | Treating paint, rust, or wood as bare metal |
| Normal | Fine shading detail without changing silhouette | Using the wrong normal convention |
| Emissive mask | Regions intended to glow | Expecting glow alone to light the room |
Roblox currently documents all five map types. Use OpenGL tangent-space normals. A normal map can suggest shallow grain or pores, but a projecting brick edge still needs geometry. Roblox PBR guide.
For the first project, download compatible material sets from Poly Haven or ambientCG, which publish CC0 assets. Keep the asset page, creator, download date, and license alongside the source files. For other libraries or generated assets, check the specific asset’s terms before incorporating it.
Wire the Blender material
Use a Principled BSDF material. Connect the color image to Base Color, roughness to Roughness, and metalness to Metallic. Connect the normal image through a Normal Map node into the shader’s Normal input. Roblox documents this arrangement for import. Texture connection guide.
Treat base color as color data and normal/roughness/metalness as non-color data. In particular, Blender requires the normal texture’s Non-Color setting for correct tangent-space interpretation. Blender normal-map reference.
Bake procedural materials
If your material depends on Blender noise nodes or a complex shader graph, prepare image maps for the supported Roblox inputs. Do not expect those nodes to become a Roblox shader.
In Blender’s Cycles renderer:
- Give the export mesh a UV map.
- Create a destination image and make its Image Texture node the active bake target.
- Bake the required pass. For albedo, use Diffuse with Color enabled and direct/indirect lighting disabled.
- Bake normals or roughness separately as needed.
- Save the images to disk; keep padding around UV islands to avoid seams.
For a high-detail sculpt, bake its normals onto the simpler export mesh using Selected to Active, with an appropriate cage or ray distance. Blender baking manual.
Choose the Roblox material route
- SurfaceAppearance: a particular mesh with a UV layout, such as the table or a chipped counter.
- MaterialVariant: reusable tiled surfaces, such as plaster, flooring, or concrete. Create it in Material Manager, choose the appropriate base material, assign maps, and set Studs Per Tile.
The base material also influences physical behavior. Terrain uses material overrides rather than the same per-part variant assignment. Roblox materials guide.
6. Export one asset, prove the pipeline, then batch
Geometry and texture constraints
Roblox’s current general specification lists 20,000 triangles per individual mesh, with separate rules for avatar assets. It also calls for volume and watertight geometry. Treat this as an import ceiling, not a quality target. General mesh specifications.
General textures currently support up to 4096 × 4096, with device-dependent texture quality. A mesh uses one material; combine surface regions into an atlas or separate them into sensible mesh objects. Do not apply avatar Marketplace limits indiscriminately to environment assets. Texture specifications.
Suggested starting budgets for this café:
| Asset | Triangles | Texture starting point |
|---|---|---|
| Small background prop | 100–1,000 | 256–512 px |
| Chair or ordinary table | 1,000–4,000 | 512–1,024 px |
| Close-up focal prop | 3,000–10,000 | 1,024–2,048 px |
| Flat architectural module | As few as its silhouette needs | Shared tileable material |
These are working assumptions. Screen coverage, asset repetition, and target hardware determine whether they are appropriate.
Export and import checklist
- Preserve the editable
.blend; create an export copy with the required modifiers evaluated and geometry converted to meshes. - Check normals, UVs, material assignments, and the final triangle count. Use a consistent triangulation for baking and export.
- Export selected asset objects as FBX. Roblox’s Blender guidance specifies Path Mode: Copy, embedded textures, and Apply Scalings: FBX Unit Scale. Disable Bake Animation for static props; disable Add Leaf Bones when exporting armatures. Export settings.
- In Studio, use File → Import, inspect the preview and validation messages, and select the intended creator/account. FBX and glTF support PBR import; OBJ is a simpler geometry route. Importer documentation.
- Import a calibration object first. Check the actual Studio dimensions and orientation next to the player. Record the working unit conversion and import settings rather than guessing a universal Blender-to-studs multiplier.
- Check the imported material in your scene. If texture assignments are missing, import the images and assign their asset references to a SurfaceAppearance in Studio.
- Anchor static scenery. Build simple collision shapes around tables, walls, and floors; walk through doors and around furniture.
- Save a place checkpoint, then reuse that verified asset throughout the scene.
Configure SurfaceAppearance map assignments during authoring. Several map properties have plugin security restrictions; a normal runtime Script is not a universal way to rewrite them. SurfaceAppearance API.
If an uploaded texture is missing in a published test, check the asset’s processing/moderation status and access for the experience as well as the material wiring.
7. Light the scene inside Roblox
Set LightingStyle = Realistic in Studio. For this compact scene, begin with PrioritizeLightingQuality = true, which favors nearby lighting/shading quality as graphics quality falls. Enable GlobalShadows. Adjust ClockTime and GeographicLatitude to establish the sun direction, then tune exposure. These are the current documented controls; older tutorials often refer to the deprecated Technology property. Global lighting, Lighting API.
Use this order:
- Choose the light direction. Make the primary reference view readable with simple gray materials.
- Balance the room. Keep shadowed corners legible without flattening every surface with excessive ambient light.
- Introduce local lights. Place them where the fixtures physically are.
- Apply materials. Judge plaster, wood, and metal under the same lighting.
- Add atmosphere and grading. Use these after the structure works.
PointLight emits in all directions, SpotLight provides a cone, and SurfaceLight emits from a part’s face. For the café, use a directional light for the counter lamp and a restrained surface light where a luminous panel needs to illuminate its surroundings. Light sources.
Roblox provides Atmosphere for haze and atmospheric depth, and post-processing effects for bloom, color correction, and depth of field. Start with subtle adjustments. Keep strong depth of field for deliberate close-up or photo views so movement and interaction remain readable. Atmosphere, post-processing.
For the wet sidewalk, try localized roughness variation and small puddle shapes. Judge them from walking height. Covering everything with a glossy material usually obscures the distinction between stone, paint, and water.
Rendering expectation: validate every essential effect in Roblox early. Do not base the brief on reproducing a Cycles render, an HDRI lighting setup, intricate glass refraction, or a perfect mirror without first demonstrating that effect in the target client. Material response can differ between the authoring tool and Studio. PBR workflow guidance.
8. Give the AI bounded production tasks
Keep a short scene_brief.md containing the reference views, scale convention, asset names, performance targets, and current decisions. Give each task a destination, constraints, and a visible completion condition.
Studio blockout prompt
In the café place, build a gray blockout under Workspace.CafePrototype. Include a room, sidewalk, doorway, counter, and placeholders for four tables. Use our recorded scale convention. Provide a spawn with a clear route to the counter. Keep all structural geometry anchored. Start a playtest and check doorway and furniture clearance, then report problems.
Asset assembly prompt
Use the verified table and chair templates already imported into this place. Arrange four seating groups inside CafePrototype. Reuse their mesh and texture references. Keep the entrance route clear. Give each group a stable name and capture the entrance and counter views.
Lighting iteration prompt
Capture the three reference views using the same camera positions and graphics quality. Compare them with the supplied photos. Identify the three largest visible mismatches in light direction, exposure, and material response. Make one lighting change, capture again, and explain what improved or regressed.
Performance audit prompt
Inspect CafePrototype for repeated assets using different IDs, unnecessary collision complexity, dense transparent layers, and overlapping shadow-casting lights. List candidates by likely impact. Distinguish measured bottlenecks from guesses. Make the smallest justified change and compare the same camera route afterward.
Interaction prompt
Add a counter-lamp interaction with a visible prompt. Validate interaction distance and state on the server. Keep camera-only effects local. Test with two players so one player's view does not control the other's camera. Report errors and confirm what state is shared.
Have the agent read current tool schemas rather than guessing tool names. If an import or upload step is unavailable through MCP, use Studio’s importer and continue from the returned asset references.
For AI-generated 3D props, inspect silhouette, underside, UVs, triangle count, and lighting baked into color. Use generated material candidates on a sample wall before applying them to the room. The most useful output may be a starting asset requiring cleanup.
9. Keep it playable
Choose an explicit test target: for example, 60 fps on your development desktop and 30 fps on a named phone. Those correspond to approximately 16.7 ms and 33.3 ms per frame. They are project targets, not platform guarantees.
Roblox recommends reusing identical mesh/texture asset IDs, reducing unnecessary shadow work, limiting transparent overdraw, and using simpler collision geometry. Import a reusable asset once and duplicate it in Studio. Start mesh RenderFidelity at Automatic. Use Render Stats and MicroProfiler to identify the actual bottleneck before cutting detail. Performance guidance.
For a larger world, configure Workspace.StreamingEnabled in Studio. Streaming loads and unloads world content around players, and client scripts must tolerate objects being absent. Check the actual setting; new places normally enable it. Streaming does not remove the cost of an overloaded room already around the player. Instance streaming.
Suggested test record:
| Record | Why |
|---|---|
| Device, resolution, graphics quality, place version | Makes comparisons meaningful |
| Same 60-second camera route | Includes traversal and changing sightlines |
| Typical frame time and worst visible stalls | Reveals problems hidden by average fps |
| Join time and texture settling | Tests the player's first impression |
| Memory trend after repeated room visits | Helps spot accumulation |
| Two-player interaction test | Checks shared state and camera independence |
Use a real phone for performance conclusions. A simulated phone viewport helps evaluate layout, but does not reproduce that phone’s GPU or thermal behavior.
10. Troubleshoot by symptom
| Symptom | First checks |
|---|---|
| Beautiful in Blender, flat in Studio | Exported image maps, light direction, roughness, and environment lighting |
| Mesh appears white | Image paths, importer warnings, uploaded map references |
| Wood or plaster looks metallic | Metalness map and slot assignment |
| Dents look raised | OpenGL normal convention and normal texture color space |
| Texture stretches | UV layout, applied scale, and tiling scale |
| Black triangles or disappearing faces | Face normals, mesh thickness, and geometry errors |
| Light leaks around walls | Wall thickness, gaps, light placement, and client quality |
| Player cannot cross a doorway | Collision shapes, including invisible blockers |
| Scene slows when looking toward windows | Layered transparency, nearby lights, and scene density |
| MCP works in one app only | Correct client configuration, running add-on/server, executable path, restart |
Change one likely cause at a time and compare the same view. Randomly increasing brightness, texture resolution, and polygon count makes the result harder to diagnose.
11. Organize the project and finish a first pass
Suggested layout:
rblx_photorealism/
PRIMER.md
scene_brief.md
references/ # photos, source links, composition notes
blender/ # editable .blend sources
exports/ # FBX and baked texture images
roblox/ # saved place checkpoints
src/ # Luau and optional Rojo project
captures/ # repeatable before/after views
asset_manifest.csv # source, license, local path, Roblox IDs
performance.md # device and camera-route measurements
Git works well for scripts and text; use an appropriate large-file strategy for .blend, images, and place files. If you adopt Rojo, define which scripts it owns so direct Studio/MCP edits do not get overwritten by the next sync.
Work in five sessions, letting each completion condition determine when to move on:
- Blockout: finish the route, proportions, and three camera views.
- Pipeline: import one textured table at the correct scale and confirm collision.
- Materials: establish the three main surfaces and reuse a small furniture set.
- Lighting and interaction: match the reference direction; make the lamp and note work.
- Validation: walk the route on desktop and phone, fix stalls and visual errors, and save a playable checkpoint plus comparison captures.
At that point, you have a repeatable way to produce a Roblox environment. Expand by adding another room or a short outdoor section while preserving the same material standards, asset handoff, and test route.