← LEDGERLANDSFIELD GUIDE / 01
CHECKED 13 SEP 2026
Blender · Roblox Studio · MCP

Build a world
that feels real.

A practical primer on photorealistic Roblox. From the first mesh to a convincing, playable café.

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.

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

  1. Model the silhouette from a reference: top, legs, and supports.
  2. Add restrained bevels where light should catch an edge.
  3. Check the table next to a scale reference.
  4. Unwrap; orient wood grain along the appropriate direction on each piece.
  5. Use material variation to distinguish the top from the legs.
  6. 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:

  1. Give the export mesh a UV map.
  2. Create a destination image and make its Image Texture node the active bake target.
  3. Bake the required pass. For albedo, use Diffuse with Color enabled and direct/indirect lighting disabled.
  4. Bake normals or roughness separately as needed.
  5. 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

  1. Preserve the editable .blend; create an export copy with the required modifiers evaluated and geometry converted to meshes.
  2. Check normals, UVs, material assignments, and the final triangle count. Use a consistent triangulation for baking and export.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. Anchor static scenery. Build simple collision shapes around tables, walls, and floors; walk through doors and around furniture.
  8. 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:

  1. Choose the light direction. Make the primary reference view readable with simple gray materials.
  2. Balance the room. Keep shadowed corners legible without flattening every surface with excessive ambient light.
  3. Introduce local lights. Place them where the fixtures physically are.
  4. Apply materials. Judge plaster, wood, and metal under the same lighting.
  5. 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:

  1. Blockout: finish the route, proportions, and three camera views.
  2. Pipeline: import one textured table at the correct scale and confirm collision.
  3. Materials: establish the three main surfaces and reuse a small furniture set.
  4. Lighting and interaction: match the reference direction; make the lamp and note work.
  5. 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.