PUBLIC BETAFounding studios lock in 30% off. Forever.See plans
Blog · Masterclass · 2h 55m

Building a complete ArcViz interior in Blender 4.4.

A full breakdown of the iMeshh 3-hour masterclass — geometry, displacement, materials, texture painting, assets, render settings and post — section by section, with a screenshot at every key step.

By Kristian·Founder, iMeshh··17 min skim · 3h watch

Tap any screenshot timestamp below to jump straight to that moment in the video.

1. Introduction

What this masterclass covers

It’s been a year and a half since the last ArcViz video. Almost 300,000 views later, this is the next one. The reason for the wait is simple: a video like this takes a lot of time, and a lot has changed in Blender since the previous masterclass. Blender 4.1, 4.2, 4.3 and now 4.4 have all introduced new techniques and features worth talking about.

Your host for the next three hours.

This is a three-hour build: three hours of free tutorial covering everything from tracing a floor plan through to compositing the final render. If you’re starting in ArcViz, or even just curious, this is a good place to give it a shot. The full scene will be uploaded to iMeshh too, alongside nine other complete scenes already in the library.

The completed scene: bed, archway, swimming pool, outdoor pagoda, all built across the next three hours.

Some basic Blender knowledge is assumed. There’s a free 10-module beginner course on the iMeshh channel if you need it. Otherwise, just follow along and see where you get to. Questions go in the YouTube comments or the iMeshh Discord.

One small tip: get a tape measure

Before anything else: get a tape measure. When you’re placing items in a scene, it’s easy to doubt whether something feels the right size, and a physical tape measure to compare against real-world furniture is genuinely useful.

2. Building the room from a floor plan

Trace the architect’s floor plan, extrude the walls, deal with normals, then add floor, ceiling, an outside step and a swimming pool cutout. All the basic shell before anything fancy.

Tracing the floor plan

You’ll usually receive a floor plan from an architect as curves. You canconvert them to a mesh and extrude, but it’s better to trace your own version. Architects working in something like AutoCAD will try to snap edges to the right corner, but small misalignments creep in. If you extrude those faces directly, you end up with gaps in the walls.

The starting floor plan, with subtle misalignments at corners.

Before tracing, go to Edit → Preferences → Add-ons and enable both Extra Objects and Loop Tools. Loop Tools comes in later for the archway.

Extra Objects and Loop Tools enabled in Preferences.

With Extra Objects on, click anywhere in the viewport, hit Shift+A → Mesh → Single Vert → Add Single Vert. You’re dropped straight into edit mode in vertex select. Press Shift+Tab to enable snapping, set the snap target to Vertex, then drag your vertex to a corner of the floor plan to start.

From there it’s just E + X or E + Y to extrude along axes, always one or the other. Locking to an axis is what keeps the trace clean, because some segments in the source may not be perfectly straight.

Trace edge by edge, always locking to X or Y so the line stays straight.

Extruding the walls and recalculating normals

Once the outline is closed and separated from the outside area (Ctrl+L to select linked, then P to separate), extrude up: E, Z, 3.05(roughly room height). If you have back-face culling on, you might be able to see straight through the wall; that’s normals pointing the wrong way for an interior view.

Walls extruded with E + Z + 3.05.

Select all (A), then Shift+N to recalculate normals. If they end up facing the wrong way (red on the inside with the Face Orientation overlay on), use Alt+N → Flip to invert them.

Face Orientation overlay confirming normals face inward, which is what we need for an interior.

Floor, step and ceiling

Hold Alt+click on the bottom edge loop, then Shift+D → Enter → P to duplicate and separate the floor. Press F to fill it. For the step (the outline already has the vertices for it), select the relevant edge, press J to join, select the face, then E, Z, 0.15for a 15 cm rise.

Alt+click the bottom loop, duplicate, separate, then F to fill the floor face.
Viewport focal length at 30mm so you can actually see inside.

Outside walls and the swimming pool

For the pool: select the rim edge, E + 0.1 to extrude out by 10cm, I + 0.1 to inset, then E + Z + -0.65to drop the bottom 65 cm. The outside walls run at one metre high; same process: select the outside edge, duplicate, separate, then A → E → Z → 1.

Pool rim extruded out 10cm, inset 10cm, then dropped 65cm down.

The door frame at the top of the opening is built by adding a Ctrl+R loop cut and G → Z → 2.7. For the arch opening, drop a vertex down to 2.385 m, then bridge faces to clean up the geometry around the new opening.

Door frame at 2.7m, archway lower at 2.385m, with bridge faces closing the gaps.

3. Crafting the archway for displacement

The scene is displacement-heavy, and displacement works best on quads. So the archway is built from scratch using a circle + Grid Fill + a Mirror modifier, with every face four-sided and roughly square.

Why quads matter for displacement

For a simple ArcViz scene with white walls, you can get away with rough geometry, bevel, and shade auto smooth. Even with an ngon archway, the render will look fine. But the moment you bring in displacement, ngons start to fall apart.

An ngon (face with more than 4 sides) on a placeholder arch. Fine for flat walls, bad for displacement.

Displacement works best with quads: four-sided faces, ideally roughly square. They don’t have to be perfectly uniform, but the moment a face has 9 or 10 vertices and you start displacing it, you get shading errors. So the plan is to turn the arch into clean quads before adding any displacement modifiers.

Quads: four sides per face, roughly the same size. Displacement renders cleanly on this.

Building the archway with a circle, Grid Fill, and mirror modifier

Snap the 3D cursor to the centre of the arch opening (Shift+S → Cursor to Selected), back out to Object Mode, then Shift+A → Mesh → Circle. The arch opening is 1.66 m wide, so scale the circle to match. Rotate it 90° on Y so it’s vertical, then Ctrl+A → Rotation to apply the rotation.

Circle added at 1.66m wide, rotated 90° on Y, rotation applied with Ctrl+A.

In edit mode press E then S to extrude and scale outward until the resulting faces are roughly square. Then select all the faces and press F3 → Grid Fill to fill the inside with quads.

F3 → Grid Fill turns the inside of the ring into uniform quads.

Delete the bottom half of the faces (we’ll mirror), then add a Mirror modifier on the Y axis. Now you only have to build one side.

Mirror modifier on Y. Half the work.

From there it’s a sequence of edge selections and axis-locked extrudes: select the top four faces, E + Z; select the side, E + Y; and so on, working out to cover the full wall area. The quads stay quads. With Loop Tools enabled you can Edge → Loop Tools → Relax on the curved edges to smooth them visually without breaking the topology.

Extrude along axes to cover the wall area. Edges going under the floor or above the ceiling don't matter; they prevent gaps.

Bevel, subdivision, and creases on hard edges

With the geometry done, smooth it out: add a Bevel modifier at width 0.007 with a couple of extra segments, then Ctrl+1 to add a Subdivision Surface on top.

Bevel 0.007 with a few segments, then Ctrl+1 for subdivision.

Subdivision will round the outside edge into a hump unless you crease it. Back in edit mode, select the outer edge (Alt+click twice picks the whole loop), then Shift+E + 1 to crease the entire edge to maximum.

Shift+E + 1 to crease the outer edge, keeping it sharp under subdivision.

Finally, right-click → Shade Auto Smooth, then in the same menu enable Shading → Harden Normals. The arch should now look like a clean rounded form, all quads, ready for displacement later.

Final archway: bevel, subdivision, creased outer edge, hardened normals.

4. Wall geometry, camera and initial lighting

Before touching materials, get a rough camera angle and basic lighting in place. The reason: if you tweak materials before lighting, you’ll just have to re-tweak them once the lighting changes.

Separating the walls and copying modifiers

Each wall surface becomes its own object so it can be displaced independently. Select the wall faces, P → Selection to separate, then add a few Ctrl+R loop cuts so the subdivision has something to work with.

Wall faces separated with P → Selection.

Each new wall gets the same setup: bevel modifier 0.007, shade auto smooth, harden normals. Rather than re-doing each one, click the source wall, shift-click the target wall, then Ctrl+L → Copy Modifiers.

Ctrl+L → Copy Modifiers copies the bevel + harden-normals setup to every other wall.

The outer edges of each wall also get a max crease (Shift+E + 1), and edges are extended slightly past the corners. Displacement can push geometry in or out, and overlapping edges prevent any visible seams in the final render. The inside view doesn’t care that the outside is a bit messy.

Camera at 35mm with walk navigation

Shift+A → Camera, then Ctrl+0 on the numpad to look through it. To fly the camera around, go to View → Navigation → Walk Navigation(or assign a shortcut to it; it’s worth one).

Walk Navigation lets you fly the camera with WASD; Tab toggles gravity.

For this scene the camera works well at 35mm, wide enough to take in the room without the fish-eye effect of going too wide. The camera sits back behind the wall (clipping into it), and the Clip Startdistance is raised so it doesn’t cut off the foreground.

35mm with a raised Clip Start. The camera sits inside the wall, looking in.

World shader: sky texture vs overcast HDRI

In Shader Editor → World, the simplest approach is a Sky Texture plugged into a Background node. It gives you a lot of control: rotate the sun, change strength, watch the scene shift from midday to sunset live in render preview.

Sky Texture → Background in the World shader.

For this scene I went with an overcast HDRIinstead. Overcast lighting is flat and even, nature’s softbox. Look at almost any Corona Render interior on Behance and you’ll see the same effect: very soft, almost no direct sunlight, a familiar feel. The HDRI is the starting point; a sun light gets added on top later.

Overcast lighting in archviz: soft, flat, no harsh shadows. Like a giant softbox.
Overcast Soil from Poly Haven: bright and even, no buildings or trees breaking the horizon.

Installing the iMeshh Asset Manager

This scene uses the iMeshh add-on heavily for assets and HDRIs. To install it: go to Edit → Preferences → Extensions → Add Remote Repository, enter the iMeshh repo URL, click Check for updates, then install the add-on. Once installed, point it at a folder on your computer where you keep HDRIs, then they show up in the iMeshh sidebar with adjustable parameters.

iMeshh repo added in Extensions, ready to install the add-on.

Sun lamp at 5000K and the edge-light inset

Add a sun light with Shift+A → Light → Sun. Rotate to taste, increase the angle from the default 0° to around 5° so shadow edges are soft, and set strength to roughly 5 to start. Click Use Nodes on the colour, switch to Blackbody, and set the temperature to 5000K for a slightly warm daylight feel.

Sun light: angle 5°, strength 5, blackbody 5000K.

Before moving on, add a recessed channel around the top of the inside walls. That’s where the hidden edge lighting goes later. Select the top edge loop on the inside, I + 0.1 to inset 10 cm, then E → Z → -0.1to push it down 10 cm. That creates a slot.

Inset 10cm, extrude down 10cm. The slot where hidden ceiling lights will sit.

5. Floor and wall materials, with variable roughness

Painted concrete from Poly Haven for the floor; the same material on the walls and ceiling. The interesting part is the variable roughness node group, a Christopher 3D technique that makes the floor feel much more realistic at glancing angles.

Painted concrete floor from Poly Haven

On polyhaven.com/textures search for painted concrete. The one I use here is 4 m wide. For a surface taking up this much screen space, bigger is better.

Painted concrete texture on Poly Haven. 4m wide is enormous and ideal for a floor.

Poly Haven ships textures with a ready-wired .blend file. Instead of building the shader yourself: File → Append, navigate to the texture’s folder, double-click the .blend, choose the 4K (or 2K, usually plenty) material and append it. Apply it to the floor, unwrap (Tab → A → U → Unwrap), and you’re done.

Append the .blend so the shader comes pre-wired. No manual node setup needed.

Hue, saturation, and why pure white is dangerous

Out of the box the floor is too dark, so a Hue/Saturation node before the base colour brightens it. But push that brightness too far and you create a problem: bright textures start to behave like light sources in the path tracer.

Hue/Saturation value of 4 to push brightness up, but be careful.

Quick demo: drop a cube in the scene, give it a pure white texture, then run that white through a Hue/Saturation with value 4. Add another cube next to it and the boosted white actually illuminates the second cube. Even at value 1 with a perfectly white texture you can get this in some scenes. So when your texture has flecks of white in it (concrete with paint chips, for example), boosting saturation can inadvertently turn those flecks into mini emitters.

Boosted white textures can behave like light sources, so keep value sane.

The fix in this scene: bring brightness up just enough, then drop saturation to 0.85 to take the colour edge off.

Smart UV unwrap on the walls

The walls take the same material as the floor (Ctrl+L → Link Materials). Because this is a random concrete texture, you don’t need the UVs to be perfectly connected. A Smart UV Project (Tab → A → U → Smart UV Project) is fast and good enough; the texture is busy enough that the seams disappear.

Smart UV Project. Fast and undetectable on a busy texture.

Variable roughness: a Christopher 3D node trick

When you look at a surface from a glancing angle, it appears more reflective than head-on. People often assumed that updating Blender’s Principled BSDF (around 4.0) added this behaviour automatically, but it didn’t. The update was actually about energy conservation on specularity.

Christopher 3D (YouTube) demonstrated a small node group that plugs into the Principled BSDF’s roughness input to give you proper variable roughness. The blend file from the original masterclass ships the node group, but if you’re building it yourself it’s basically a Layer Weight node modulating the existing roughness texture via a Multiply.

Drop the Variable Roughness node group on the roughness input.

In practice: as the camera angle gets more glancing, more of the surface starts to behave like a polished surface. The closer the surface is to the viewer, the darker (and more reflective) it appears in the node trick’s mapping. Look at any rough surface in real life from close to the surface and you’ll notice it’s glossier than you expect. That’s what this is simulating.

With the node connected, glancing reflections become much more pronounced and more realistic.

Color ramp + math node to taste

The painted concrete roughness is quite flat out of the box. Add a Color Ramp node in front of the roughness input and pull the white/black stops closer together. That cranks the contrast: the dark spots get glossier, the light spots stay rough, giving the floor visible variation under reflection.

Color ramp tightening the roughness contrast. Light bits stay rough, dark bits become glossy.

If the result is now too glossy overall, add a Math (Add) node after the ramp with a small value like 0.1 to lift all roughness back up a touch.

Math (Add) 0.1 to take the glossiness back down to something natural.

6. Stone wall displacement

The feature wall is real geometric displacement, not just a normal map. That means: experimental render feature set, adaptive subdivision, and a careful setup of displacement-vs-bump on the material.

iMeshh stone material

In the iMeshh sidebar, go to Materials → Stone and apply Stone Split Rock at 4K. Remove the normal map for this one. I rely on the displacement map alone, since the normal map would otherwise double up the detail.

Stone Split Rock 4K applied to the feature wall.

Set the base colour to a warm beige to match the rest of the scene. The hex code used is shown on screen.

A warm beige base colour ties the stone in with the rest of the palette.

Experimental feature set + adaptive subdivision

Real displacement needs Cycles’ Experimental feature set. In Render Properties, set Feature Setto Experimental. (It’s been experimental for years; possibly always will be.)

Cycles Feature Set → Experimental unlocks adaptive subdivision.

On the wall, add a Subdivision Surface modifier set to Simple as the top modifier and tick Adaptive Subdivision. Note: this only works if the subdivision modifier is at the top of the stack. If a Smooth-by-Angle modifier is up there, push it down.

Subdivision Simple at the top of the stack, with Adaptive Subdivision ticked.

Displacement vs displacement-and-bump

In the material’s Settings → Surface → Displacement, switch from Bump Only to either Displacement Only or Displacement and Bump. With Displacement Only, the geometry actually moves and bricks poke out as real shapes. The downside is it’s purely geometric, so very fine detail relies on having enough subdivisions to resolve.

Displacement pushing the bricks out as real geometry.

Displacement and Bump is the practical sweet spot: large shapes come out as actual geometry, and the fine grain stays as a bump map. Less subdivision needed, faster render.

Watch the corners. Displacement can create artifacts where two displaced walls meet. The fix here is to bump up the bevel on the wall’s bevel modifier from 0.15 to 0.2 so the rounded corner gives the displacement geometry more room to behave.

Bevel 0.20 on the corner smooths a displacement artifact that was poking out.

Diffuse roughness, independent from surface roughness

The Principled BSDF has a separate parameter called Diffuse Roughnessthat’s distinct from the surface roughness you’re used to. It’s most useful on genuinely rough materials: plaster, concrete, fabric, chalk. Setting it to 1 changes how light scatters off a rough surface in a way that, visually, looks more correct.

Two identical rough materials: left default diffuse roughness, right set to 1. The right reflects more light back toward the camera.
Diffuse roughness 1 on the plaster wall.

Worth noting: a lot of pre-existing assets (including many iMeshh ones) were built before this parameter existed, so they’ll have diffuse roughness at 0 by default. If they look slightly off, that’s often why.

7. Texture painting + plaster-over-stone mask

One of the most underrated tools in Blender. You hand-paint a mask onto an object, use it as the factor of a Mix Shader between two materials, and end up with a plaster wall that looks like it was applied over a stone wall, including a believable raised lip where the plaster sits on top.

Why this technique matters

Being able to paint exactly where you want, on an object, is an incredible skill. It lets you blend any two materials anywhere: moss on the ground in one corner, dirt on a wall in another, plaster over an archway. For this scene the story is: this used to be a stone room, and parts have been plastered over cleanly. The plaster covers the archway and adjacent stone fades to bare rock further out.

Setting up the paint mask

First, isolate just the part of the wall that needs the plaster mix. Mark a seam around the doorway with Edge → Mark Seam, then Ctrl+L to select linked within the seam, and P to separate it. Re-crease the new edges (Shift+E + 1) wherever they need to stay sharp.

Marking seams and separating the doorway so it doesn't pick up the plaster mix.

In the Shader Editor, add a new Image Texture node, click New, name it paint_plaster_maskand create it. You don’t need to plug it into anything yet; it just needs to exist on the material so Texture Paint can use it.

New blank image. This is the canvas you'll paint on.

Painting with a brush texture, random angle, and screen blend

Switch to Texture Paint workspace. Set brush colour to white, paint a few strokes on the object. They appear immediately on the mask image.

First strokes. Instant feedback in the render preview.

A flat brush gives you a flat-looking edge. For a natural plaster boundary, load a displacement texture as the brush texture. Get one from Poly Haven (Rock Face 3displacement PNG is what’s used here), then in the brush’s Texture panel open the displacement PNG.

Rock Face 3 displacement PNG loaded as the brush texture.

Two more brush settings make the difference: set Texture Mapping → Mapping → Random so every stroke uses a random rotation, and set Brush → Stroke → Blend to Screen so repeated strokes brighten rather than blocking out.

Random rotation + Screen blend → natural-looking plaster mask edge.

Mix shader with the mask as the factor

Add a Mix Shader. Plug the plaster material into the first input, the stone material into the second. The mask image goes into the Fac. Wherever the mask is black, you get input 1; wherever white, input 2.

Mix Shader with mask → Fac. Black = first input, white = second.

To make the transition crisper, run the mask through a Color Ramp first and pull the white and black stops closer together. That sharpens the boundary into a defined edge.

Color ramp tightening the mask edge into a sharp plaster boundary.

Mixing the displacement maps so plaster sits on top of stone

Mixing two shaders only mixes the surface; the displacement maps still need their own mix. Add a Mix Color node, switch its data type to Vector, plug each material’s displacement into the two inputs, and use the same color-ramped mask as the factor. Output goes to the Material Output’s Displacement socket.

Mix Color (Vector) blending the two displacement maps using the same mask.

The trick to making the plaster look on top ofthe stone: shift the stone displacement’s Mid-level down. The stone surface drops slightly, and the plaster appears raised over it. A believable applied-over-the-top effect.

Drop the stone's Mid-level and the plaster appears to sit on top, with a real lip.

UV grid for texture scale consistency

With several objects sharing a material, you want their UVs at the same scale so the texture sits consistently across all of them. Easiest check: add a temporary Image Texture with a new UV Grid generated image. Enable the Node Wrangleradd-on if you haven’t already (Preferences → Add-ons), then with the image node selected, Ctrl+T adds Texture Coordinate and Mapping nodes for it, and Ctrl+Shift+click on the image previews it as the active output.

UV grid + Node Wrangler preview. Shows you the actual scale on every object.

In edit mode, scale UVs on whichever objects look wrong until the grid squares match in size across all of them. Delete the UV grid node when you’re done.

Scale UVs in edit mode until the squares match. Texture scale is now consistent.

8. Organising the scene and edge lighting

A quick pass to name objects and group them into collections, then add hidden area lights and an emission strip in the ceiling inset for that soft uplight glow.

Naming objects and organising into collections

Rename objects as you go: walls, floor, archway, brick, outside_floor, pool, outside_wall. Select related objects and press M to move them into a new collection (walls, lighting, cameras). Right-click a collection to set a colour label so the outliner is scannable at a glance.

Walls grouped and colour-labelled. Cleaning up the file always pays back.

Area light tucked into the ceiling inset

Shift+A → Light → Area, then scale and position it so it sits inside the slot you cut earlier. Click Use Nodes on the colour, set to Blackbody, temperature 3800K. Most lamps in this scene use the same temperature for colour coherence.

Area light sized to fit the slot, blackbody 3800K. Warm and consistent.

Duplicate the area light into each section of the inset. Tune brightness per-light so they all read at about the same intensity from the camera.

Emission material to glow through an edge gap

For the gap above the archway, select the inside edge faces, add a new material called emission, change the BSDF to Emission, set the colour to Blackbody 3800K, strength 2.

Inside edge faces selected for an emission material.
Emission strength 2. A hidden glow through the gap.

If the gap shows a visible joint, scale the inside faces of the archway up slightly (Alt+S) until the edge disappears behind the wall and it just reads as light, not as geometry.

9. Outside materials and pool with caustics

Brick walls outside, tile around the pool, and the green-edge glass pool water with absorption and proper caustics on the floor.

Brick wall UV unwrap with seams

Brick textures only look right when bricks run straight. A default unwrap will warp the bricks around corners. Fix it by marking seams at every corner, then unwrap with U → Unwrap (Angle Based). In the UV editor, rotate the unwrap 90° if needed so the bricks read horizontally.

Seams at corners. Bricks stay straight on each wall face.
Bricks running horizontally along the outside wall.

Pool surround tile material

For the area around the pool, an iMeshh tile material at 2K is plenty. This section won’t fill the frame. Unwrap, scale UVs so the tile size feels right, and align so the tile edge runs along the pool rim.

iMeshh tile material around the pool, 2K is enough.

Pool water: glass with absorption volume

Duplicate the top of the pool geometry, separate it as a new object. That’s your water surface. Use the iMeshh Green Edge Glass preset. The key thing it does is add real absorption: light passing through water gets coloured progressively the further it has to travel.

Green-edge glass preset on the pool water surface.

Add steps inside the pool to demonstrate the effect: the shallow top step reads lighter, each deeper step more saturated. That depth-coloured falloff is what makes pool water look like pool water rather than uniform tinted glass.

Pool steps demonstrating absorption. Shallow lighter, deep darker.
Glass BSDF + Principled Volume (turquoise). That's the whole shader.

Caustics with cast/receive flags + displacement

Real caustics need three flags. On the sun light: Object Properties → Shading → Cast Shadow Caustics. On the pool floor: Receive Caustics. On the water glass: Cast Shadow Caustics.

Shadow Caustics on the sun, Receive Caustics on the pool floor.

To get the rippling pattern you also need actual surface displacement on the water; bump alone won’t produce caustics. Add a Subdivision modifier with adaptive subdivision, set the material’s displacement to Simple, and feed a noise texture into the height input. With scale around 10, strength around 0.03, you start to see beautiful caustic patterns dance on the pool floor.

Subdivision + simple displacement using noise. Gives caustics a real surface to ripple from.
First caustics on the pool floor.

10. Adding assets: window, bed, bath, curtain

You don’t model every chair from scratch, and neither should you. The big architectural and furniture pieces come from iMeshh, sized roughly into place, with a few tweaks per object.

Why archviz uses asset libraries

The analogy: you never ask a photographer to build their own furniture for an interior shoot. They hire it. ArcViz artists are essentially photographers, and an asset library is the rental warehouse. Building a high-detail woven chair from scratch takes days. Buying access to one and getting on with composing the shot is the work.

Sliding door window with the updated low-noise glass shader

From iMeshh → Architectural → Doors, append the sliding door. Scale into the opening, edit the top/side bars in edit mode so they fit the proportions of the gap, give the frame a near-black material (never pure black in real life; something like #0c0c0c).

Sliding door appended and scaled to fit.

For the glass: there’s an updated interior glass shader that’s noticeably cleaner than the original. The structure is: Light Path’s Is Shadow Ray goes into one input of a Math (Maximum) node, Is Reflection Ray into the other; the output drives the Fac of a Mix Shader between a Principled BSDF (white, roughness 0.02, transmission 1) and a Transparent BSDF; mix into Material Output.

Updated interior glass. Light Path to Math (Maximum) to Mix Shader between Principled and Transparent.
Same scene, two glass shaders. The updated one is visibly cleaner with less render noise.

Metal step edge and a shelf/desk

A neat reuse: the existing nosing geometry on one part of the floor can become a metal step edge elsewhere. In edit mode select the relevant geometry, Shift+D → Enter → P to duplicate and separate, then move it to the step edge for a subtle metallic lip.

Reuse and reposition: a metal nosing on the step from existing geometry.

The shelf/desk is custom-built: snap cursor to the corner, drop a single vertex, trace the desk outline with E + Y / E + X, fill with F, then extrude down for the depth.

Desk traced as edges, filled with F, extruded down 0.75m.

Bed from iMeshh + Gladstone Beige wood

Beds in iMeshh come from Marvelous Designer simulations, so the fabric is accurate. Append a bed asset, rotate into place, delete the supplied frame (I make a custom one here). Fabric assets scale forgivingly; it’s hard to tell you’ve resized them.

Bed appended; original frame deleted so a custom inset-cube frame can take its place.

Build a quick frame from a cube. Scale it to wrap the bed, leave a small visible black gap underneath rather than letting it touch the floor (touching feels off, a small shadow gap feels natural), and inset the top with I so the bed sinks slightly into the frame.

Frame inset; wood Hue/Saturation dropped to 0.85 to take the colour edge off.

For the wood material itself, the choice is iMeshh’s Gladstone Beigeat 1K (you really can’t tell at viewing distance). Apply, unwrap with Smart UV Project, and scale the texture so the grain lines feel right.

Gladstone Beige wood on the bed surround.

Bedside table and a rug with Alt+D linked duplicate

Bedside table: a cube, scaled into place, with an inset pushed back to suggest a push-cabinet handle. Same wood as the bed frame.

Bedside table. Cube with an inset that reads as a push-cabinet edge.
Alt+D shares the mesh data. No extra VRAM hit.

Wicker chair and bath

Append a wicker chair, snap it to the rug, rotate roughly into position. Link materials (Ctrl+L) so it shares the desk wood, keeping the palette tight.

Wicker chair on the rug, sharing wood with the desk.

Bath: append the model, rotate 90°, position. For the outer surface, give it a clean glossy white shader. Add a Math (Multiply) node on the roughness with a low value to make it more reflective than the default.

Freestanding bath with a glossy white outer surface.

Curtain shader: subsurface vs translucent

Append a curtain, scale and position into the window opening. Use proportional editing to gently pull parts of the curtain away from the bath where they clip.

Curtain pulled gently inward where it would clip the bath.

The default iMeshh curtain shader uses a Translucent BSDF, which is fine for 2D-sheet fabric. For a curtain with real thickness (Solidify modifier added) a subsurface approach feels softer and more realistic.

Solidify thickness (very small, 0.001 to 0.003) so subsurface scattering has something to work with.

On a Principled BSDF: Sheen Weight 1, Roughness 1, base colour cleared, then turn up Subsurface(Weight or Scale; the spoken “1.1” is most likely the Subsurface Scale at 1.1 with Weight at 1, since Weight only goes to 1).

Old translucent (left) vs new subsurface (right). The right feels softer and more believable.

11. Pendant lights with IES profiles

Pendant bulb + IES profile

Append a pendant light. The bulb is a fake shader designed to glow without acting as an emitter. The actual illumination comes from a Point light placed inside the shade, driven by an IES texture.

Pendant light asset appended above the bed.

IES profiles are real photometric data for actual fixtures. They tell the renderer how the light falls off in 3D space. Download free ones from the IES Library website.

IES Library. Thousands of free photometric profiles.

On the point light: Use Nodes, then add an IES texturenode, plug it into the light’s strength input, open the downloaded IES file. The light now projects with realistic falloff (usually a downward cone with subtle edge variation that bare point lights can’t produce).

IES texture into the point light's strength → realistic falloff cone.

3800K consistency across the scene

Every interior lamp in this scene uses Blackbody 3800K. That single decision is what makes the room feel coherent. Warm, but not yellow. The sun is a touch warmer at 5000K for daylight contrast. Pick a colour temperature standard early and stick to it across every light you add.

Negative fill: a black backdrop for contrast

A trick borrowed from photography: place a pure-black, fully rough, zero-specular plane behind the camera. It absorbs any light that would otherwise bounce back into the scene, deepening contrast subtly. Set the plane’s viewport display to Boundsso it doesn’t clutter the editor.

Negative fill plane. Pure black, 100% rough, no specular.

12. Decorations and the outdoor area

Decorative sets + MacBook prop

iMeshh’s Decor Setscategory drops a complete set of styled props in one append. Place the set on the bedside table, scale and rotate as needed; objects within a set scale forgivingly since most viewers can’t spot small size discrepancies.

A complete decor set placed in one append.

Add a MacBook prop on the desk. The screen comes with an emissive image by default, but for this composition it’s too bright and distracting. Swap the emission off and replace the image with a dark colour so the screen reads as off.

Screen emission killed, image swapped for dark. Laptop reads as closed or off.

Bouquet and vase styling

Empty corner near the bed? Drop a bouquet asset. iMeshh’s bouquet category is one of the heavier recent releases, with high detail per asset and big visual impact. A single vase on a shelf reads as “styled but minimal” without crowding the scene.

Bouquet filling the empty bedside corner.

Mirror with dust + radiator

iMeshh’s mirror has subtle dust specks baked in, which adds realism without manual work. Place above the bath, scale up.

Mirror with baked-in dust specks (subtle in bright light but visible up close).

Add a radiator nearby. If the curtain clips through it, edit-mode + proportional editing pulls the curtain away locally.

Radiator placed; proportional editing keeps the curtain clear.

Pagoda, day beds, and a magazine

For the outside area: append a pagoda. Because it’s mostly squares and fabric, you can scale it non-uniformly without it looking obviously stretched. Match it to the back wall.

Pagoda scaled to attach to the back wall. Boxy/fabric geometry tolerates non-uniform scaling.

Drop a day bed underneath. Magazine prop on top: rotate, scale, then use proportional editing in edit mode to drape one corner over the edge so it looks like it’s actually been put down there.

Day bed under the pagoda.
Magazine deformed with proportional editing to hang off the edge naturally.

13. Ceiling spotlights and light linking

Building the downlight rim

Append the iMeshh downlight model (call it a spotlight if you prefer). Duplicate three in a row. Around each one build a small rim object that the ceiling will cut into: a cube, scaled to fit, with the scale applied (Ctrl+A), insetted (I), extruded up slightly (E).

Three downlights placed in a row over the bed area.

Add a Bevel modifier (width 0.0005), shade auto smooth, harden normals. Smart UV unwrap. Assign a glossy white material, same as the rest of the bright cabinet finishes.

Rim with bevel 0.0005 + harden normals.

Boolean ceiling cuts

The rim object is hollow, so it won’t boolean a hole on its own. Duplicate it (Shift+D), in edit mode delete the inside faces, then select the outer rim edges and press F to cap it into a closed solid. That’s your Boolean cutter.

Closed solid duplicate. This is the Boolean cutter.

On the ceiling object, add a Boolean modifier → Difference, select the cutter object. Set the cutter’s viewport display to Boundsand disable all its ray visibility options (Object Properties → Visibility → Ray Visibility) so it doesn’t render. The ceiling now has holes exactly where the downlights sit.

Ceiling holes at each downlight.

Light linking: cosmetic glow without real illumination

For the bulbs inside the downlights, the goal is a visible glow but nocontribution to the room’s actual illumination; the IES pendants are already doing that work. Move the bulbs into a spotlight collection. On each bulb’s light, go to Object Properties → Shading → Light Linking, set Light Linking to that spotlight collection. Now the bulb only affects objects in its own collection.

Light Linking. Bulb only lights its own collection.

Result: switch the bulbs on and off and the room’s overall lighting doesn’t change at all, but the downlights themselves visibly glow. Not 100% physically accurate, but it looks better than either alternative (no glow, or doubled illumination).

Bulbs glow, room illumination stays put.

14. Background plate, plants, and depth of field

AI back plate from ChatGPT

The view through the glass needs something behind it. A rough AI-generated landscape image works fine; most of it gets overexposed by the bright sky anyway. ChatGPT will produce a vague Mediterranean hillside in seconds.

An AI-generated landscape behind the window. Good enough; nobody will scrutinise the hills.

Drop the image into the scene as a plane (Shift+A → Image → Mesh Plane), position it some distance behind the glass. The shader is the image into an Emission node (so it glows with no light contribution), then in Object Properties → Visibility → Ray Visibility enable only Camera and Transmission(so it shows through glass but doesn’t cast light into the scene). Crank the emission strength so it’s slightly overexposed, around 10.

Visibility limited to Camera + Transmission. Visible through the glass, invisible to lighting.

Tree + hue/saturation match

Append an iMeshh tree, position so it’s visible just outside the window. The default leaf colour is often more saturated than the scene’s warm beige palette, drawing the eye away from the interior. On the leaf material, add a Hue/Saturation node before the diffuse colour: hue around 0.48, saturation slightly down, brightness slightly up.

Tree appended outside the window.
After hue 0.48 + desaturate + brighten. The tree melts into the scene's palette.

Quick bush scatter

For ground cover outside, append five or six different shrubs, drop them roughly into a row. Then select all of them, F3 → Randomize Transform: 360° random rotation, an even-scale tweak so they vary in height. Instant convincing planting strip.

Five or six shrubs dropped roughly into place.
Randomize Transform: 360° rotation + scale wobble. Done in seconds.

Gobo for soft window shadow

The white curtain looks flat without anything cast onto it. Use a gobo (a black/white mask plane that casts a textured shadow). iMeshh ships gobos under Effects. Append, isolate the relevant geometry, place outside the window so it casts a tree-like shadow on the curtain.

iMeshh gobo plane. An animated black/white texture for soft shadows.
Soft shadow cast on the curtain. Adds character to what would otherwise be a flat plane.

Foreground plant + depth of field at f/5.6

A foreground plant just inside the camera’s clip start adds depth without being legible. Then on the camera: enable Depth of Field, set the focus to the bed, aperture f/5.6. 5.6 is a common photography aperture so the result reads as familiar to the eye.

Foreground plant. Visible but not the subject. Adds depth.
DOF focus on the bed at f/5.6. Keeps most of the room sharp, gently blurs the foreground and background.

15. Render settings

GPU, samples, denoiser

Render with GPU compute. Samples: 512 to start, adjust based on the test render. Enable the denoiser with default settings.

512 samples + denoising.

Max bounces

Light Paths → Max Bounces controls how many times light reflects/refracts before terminating. 0 = only direct lighting, no GI. 1 = a single bounce. 12-16 is usually fine; the difference between 16 and 32 is small for render time but eliminates risk of missing light, so 32 is the safe brute-force choice.

1 bounce vs 32 bounces. Particularly visible through overlapping glass.

Transparent Bounces is a separate setting and matters more in scenes with stacked transparent geometry, like grass blades in a pan past a lawn. For an interior shot, the default is usually fine.

Clamping indirect/direct: the still vs animation trade-off

Cycles’ Clamping caps individual sample values. The default for indirect light is 10. Clamping reduces fireflies but also crushes legitimate highlights. For a still image, keep clamping at 0 and rely on the denoiser to clean up fireflies. For an animation, you usually need clamping because the denoiser can’t maintain temporal consistency around extreme samples.

Clamping 0 for stills. Keep the highlights.

Dicing rate, Simplify, texture limits

Adaptive subdivision’s Dicing Rate is in pixels. Smaller number = more polygons. Render dicing rate 4 gives enough geometry for the displacement to read, with the bump map filling in fine detail.

Dicing rate 4. Fine enough for displacement, light enough to render.

Simplify caps the resolution of all textures at render time. Setting Texture Limit to 2K (sometimes even 1K or 512) keeps VRAM under control without visible quality loss for textures far from the camera. Disable Simplify only if a particular texture is right up against the lens and you can see the resolution drop.

Simplify → Texture Limit 2K. VRAM saved, visually identical.

Pixel filter width 1.1 for sharper edges

Film → Pixel Filter → Width defaults to 1.5. Dropping it to 1.1 gives sharper edges. Go much lower and you risk aliasing on high-contrast borders. 1.1 hits the sweet spot.

Film Pixel Filter Width 1.1. Crisper edges, no aliasing.

16. Compositing and view transform

The trick here: render with the Raw view transform, then convert to AGX in the compositor. That keeps all the highlight data available for the compositor to push, rather than locking it in at the camera.

Why render with Raw view transform

Switch the View Transform from AGX to Raw. The viewport will look terrible, flat and ugly. That’s expected; Raw has the most data preserved.

Render Raw, then Convert Color Space (Linear Rec.709 → AGX Base sRGB) in the compositor.

In the compositor, add a Convert Color Space node: from Linear Rec.709 to AGX Base sRGB. That restores the AGX look, same as before visually.

But now, an RGB Curves node added after the convert can push colours past pure white. With AGX applied at the camera, the value is clamped; with AGX applied in the compositor, you can override that ceiling and recover bright highlights.

With AGX in the compositor, RGB Curves can push past pure white. Recover blown highlights.

View layer passes you need

In View Layers → Passes, enable: Mist, Denoise Data, Glossy Indirect, Crypto Matte (Material + Object), Ambient Occlusion. AO distance in render settings: 0.1 (10 cm).

Render passes enabled. These are what the compositor needs to work with.

Denoise + glare (star + bloom)

Two Glare nodes stacked: first one set to the star/streak pattern for that classic photographic flare on bright spots, second one a soft bloom. Together they give highlights, particularly through the windows and on glossy surfaces, a much more photographic feel.

Star glare + bloom glare. Always add glare; it makes highlights feel like a camera saw them.

Glossy indirect as a soft-light overlay

Take the Glossy Indirect pass through a Denoise node, then convert it to the right colour space. Mix it into the main image as Soft Light. Used subtly, it adds extra punch to reflective surfaces without looking artificial.

Glossy indirect over the image with Soft Light blend. Subtle reflection enhancement.

AO pass as a multiply overlay

AO pass multiplied over the image darkens crevices. Use sparingly; too much reads as fake. Sometimes a tiny bit just helps edges in shadow read more clearly.

AO multiply. Use lightly, just to lift edge separation in shadow.

Crypto Matte for selective brightening

Crypto Matte lets you generate a perfect mask for any object in the scene. Add a Cryptomatte node, click the + to pick an object (the bed, in this case), and the matte output is a black/white mask of just that object.

Crypto Matte for just the bed.

Use that matte as the factor of a Mix node, with the image going through an Exposure +0.25 on one side and untouched on the other. Result: the bed is brighter, the rest of the scene unchanged.

Bed brightened in isolation. The bed felt slightly too dark; one node fixes it.

Final sharpen

A small Filter (Sharpen) node at the end of the chain. Adds final crispness.

Sharpen at the end. Done.

Clamping side-by-side: still vs animation

Side-by-side proof: unclamped, pre-denoise, the scene is full of fireflies. Same render post-denoise is clean enough to publish as a still; no one would know how noisy the source was.

Unclamped, pre-denoise. Extreme firefly noise.
Same render after denoise. Publication-quality.

For animations, clamping is usually the right call because the denoiser can’t maintain consistency frame to frame around extreme samples; different frames invent the missing detail differently and you get visible flicker. For a still, no clamping + denoise wins almost every time.

17. CPU path guiding for true caustics

The hidden Cycles feature that produces real, beautiful caustics including through volumetric water, at the cost of being CPU-only.

Filter Glossy 0 + GPU first attempt

In Light Paths → Caustics, the Filter Glossysetting blurs caustics to make them cheaper to render. With it at 0, the GPU starts hinting at caustics on the pool floor but can’t resolve them properly; they show up as noisy streaks rather than crisp ripples.

Filter Glossy 0 on GPU. Caustics start to appear but won't resolve cleanly.

CPU + Path Guiding

Switch the render device to CPU. Enable Path Guidingin render settings (CPU-only; it’s greyed out on GPU). Let it run.

Path Guiding enabled. CPU-only.

The result: real, beautiful caustics dancing across the pool floor, through the volumetric water this time. The bug that prevents GPU caustics through volumes doesn’t apply here. You don’t need any of the cast/receive caustic flags; it just works out of the box.

Real caustics through the volumetric pool water. CPU + Path Guiding makes this possible.

Trade-off: CPU rendering is slow. If you have a fast CPU and a still image that you want to look its absolute best, this is the trick. For animations it’s usually impractical.

Outro

If you made it this far, congratulations on completing the masterclass. Hopefully it gave you some tips and tricks to take into your own work. If you want to follow along with every asset, the full library is on iMeshh; if not, the techniques above all work with Poly Haven and free assets too.

Tools, assets and credits

Everything mentioned in this build, with links. Where the original masterclass uses an iMeshh-specific asset, a free Poly Haven alternative is noted alongside.

Software

  • Blender 4.4 . The entire build is in Blender; nothing else needed.
  • ChatGPT . Used to generate the AI back plate behind the window.

Asset libraries

  • iMeshh : 2,500+ assets, materials, HDRIs, and the Blender Asset Manager add-on used throughout. The full finished scene from this masterclass is on iMeshh alongside nine other complete scenes.
  • Poly Haven Textures : free CC0 textures. Used here for the painted concrete floor and the Rock Face 3 displacement PNG loaded as a brush texture.
  • Poly Haven HDRIs : the “Overcast Soil” HDRI used for soft, even interior lighting.
  • IES Library : thousands of free IES photometric profiles. One of them drives each pendant point light.

Specific iMeshh assets used

  • Stone Split Rock (4K): feature wall displacement texture.
  • Painted Concrete (Poly Haven): floor, walls, ceiling.
  • Green Edge Glass preset: pool water shader.
  • Interior Glass / Glass Thin: updated low-noise window glass shader.
  • Gladstone Beige wood: bed frame, bedside table, chair, coffee table.
  • Pool surround tile material: outdoor floor around the pool.
  • Sliding door asset: bedroom-to-pool window.
  • Bed (Marvelous Designer source), woven chair, freestanding bath, curtain, rug, mirror with dust specks, radiator.
  • Pendant light, downlight, decor sets: bedside styling, ceiling spotlights.
  • Pagoda, day beds, magazine, bouquet, vase, tree, outdoor shrubs: exterior styling.
  • Gobo from iMeshh Effects: soft tree-shadow on the white curtain.

Credits and further reading

  • Christopher 3D: the variable roughness node-group trick used on the floor and walls is based on his explanation of how the Principled BSDF actually handles glancing-angle reflection. Highly worth subscribing to his YouTube channel for deep-dive Blender shading content.
  • iMeshh YouTube channel: there’s a free 10-module beginner Blender course on the channel if you need to brush up before tackling the masterclass.
Sign inStart 21-day trial