Overview

This page answers a cluster of questions students ask when a 3D scene looks “different from every angle”: why highlights slide across a surface as the camera moves, whether camera settings change the lighting, and how to give shiny surfaces believable reflections. The short answer is that in a physically based (PBR) material, the shine is meant to depend on where the viewer is. The tools for controlling it are the material’s Smoothness and Metallic values, Reflection Probes, and the environment reflection source in the Lighting window. The camera’s projection settings are not lighting controls.

It sits beside unity-lighting-for-3d-scenes (the first-scene lighting workflow) and unity-light-probes-and-adaptive-probe-volumes (indirect light for moving objects).

Why specular depends on the camera

A PBR surface reflects light in two broad ways:

  • Diffuse light scatters in all directions, so it looks the same from wherever you view it.
  • Specular light is mirror-like reflection. You see a highlight only where the angle between the light, the surface and your eye lines up, so the highlight moves when your eye (the camera) moves.

URP’s shader code makes this concrete. The direct specular term is built from a half vector between the light direction and the view direction (halfDir = normalize(lightDir + viewDir)), and its strength depends on how closely the surface normal lines up with that half vector (Unity Technologies, Universal RP ShaderLibrary BRDF.hlsl, Graphics repository, 6000.2 branch). Reflections from the environment are sampled along reflect(-viewDir, normal), the mirror direction of the eye ray, and a Fresnel term based on the angle between the normal and the view direction makes surfaces more reflective at grazing angles (Unity Technologies, Universal RP ShaderLibrary GlobalIllumination.hlsl, Graphics repository, 6000.2 branch). The diffuse part of indirect lighting (lightmaps and probes) does not use the view direction at all.

So if a highlight slides across a floor as a cinematic camera dollies past, the renderer is working correctly. A real polished floor does the same.

What camera settings do and do not change

  • Field of view and focal length (for example Cinemachine’s lens settings, or a Physical Camera’s focal length) change framing: which parts of the scene are on screen and how wide the spread of eye rays is. They do not change the BRDF, the material values or the light. A wide lens shows more of a surface at once, so you may see more variation in highlights across the frame, but each pixel is still shaded with the same maths.
  • Camera position and distance change the view direction for every pixel, so highlights and reflections move. This is the intended view-dependence.
  • Projection type is the one camera setting that changes the view vector itself. In URP, a perspective camera uses the direction from each pixel to the camera position, while an orthographic camera uses the camera’s forward direction for every pixel (Unity Technologies, Universal RP ShaderLibrary ShaderVariablesFunctions.hlsl, GetWorldSpaceNormalizeViewDir, Graphics repository, 6000.2 branch). Switching to orthographic is a framing and style decision, not a lighting fix.

In short, there is no camera or global lighting setting that makes lighting “react to the camera” more than it already does. Diffuse and baked lighting are deliberately view-independent; specular and reflections are deliberately view-dependent.

Setup

Material values first

On a URP Lit material, Smoothness “affects the clarity of reflections”: 0 gives a wide, rough highlight and 1 gives a small, sharp highlight like glass. Metallic runs from 0 for non-metals such as plastic or wood to 1 for metals such as silver (Unity Technologies, Unity Manual: Lit Shader Material Inspector window reference for URP; see also source-unity-urp-lit-shader). URP also blurs environment reflections by sampling a lower-detail mip level of the reflection cubemap as roughness increases (Unity Technologies, Universal RP ShaderLibrary GlobalIllumination.hlsl).

If highlights look harsh or “pop” as the camera moves, lower Smoothness or vary it with a texture before changing lights. Under Advanced Options, URP Lit also has Specular Highlights (shine from Directional, Point and Spot lights) and Environment Reflections (reflections sampled from the nearest Reflection Probe or the Lighting window’s environment). Turning either off makes the shader cheaper but removes that contribution (Unity Technologies, Unity Manual: Lit Shader Material Inspector window reference for URP).

Environment reflections from the skybox

With no Reflection Probes in a scene, shiny objects reflect the environment set in Window > Rendering > Lighting > Environment. Under Environment Reflections, Source is Skybox by default, or Custom to use a cubemap; Intensity Multiplier controls how visible the reflection source is in reflective objects, and Bounces sets how many inter-reflections Reflection Probes evaluate (Unity Technologies, Unity Manual: Lighting window reference). Every new scene also contains a hidden default reflection probe holding the default skybox, which is replaced by a baked one when you select Generate Lighting (Unity Technologies, Unity Manual: Introduction to Reflection Probes). If you change the skybox, regenerate lighting so reflections match it.

Adding a Reflection Probe

  1. GameObject > Light > Reflection Probe.
  2. Size its box (the zone of effect) to the room or area it represents.
  3. Choose the Type (see below) and mark the static scenery it should capture as Reflection Probe Static.
  4. Generate lighting, or bake the probe from its Inspector.
  5. In the URP Asset, under Lighting > Reflection Probes, enable Probe Blending and Box Projection if you need them.

Usage

What a Reflection Probe is

A Reflection Probe is “rather like a camera” that captures a spherical view of its surroundings and stores it as a cubemap. A reflective material samples that cubemap to shade its surface. A probe has a box-shaped zone of effect; objects inside the zone use its cubemap, and Unity recommends placing probes “at every point where the appearance of a reflective object would change noticeably” (Unity Technologies, Unity Manual: Introduction to Reflection Probes).

Probe types

TypeWhen it is capturedReflects moving objects?CostUse for
Bakedin the Editorno; only objects marked Reflection Probe Staticlowmost rooms and static environments
Realtimeat runtime, on awake, every frame or from a scriptyeshigha mirror-like surface where moving objects must appear, changing time of day
Customin the Editor, or you assign your own cubemapno; positions are frozen at bake timelowhand-made or artistic reflection cubemaps

The manual describes baked probes as “frozen”, with “a much lower processing overhead than Realtime Probes”, and notes that real-time probes can be refreshed from a script and time-sliced over several frames because refreshing a probe “takes considerable processing time” (Unity Technologies, Unity Manual: Types of Reflection Probe).

A real-time probe that only needs to update occasionally, for example after a door opens, can be refreshed on demand:

using UnityEngine;
using UnityEngine.Rendering;
 
// Re-renders a Realtime Reflection Probe only when asked, instead of every frame.
[RequireComponent(typeof(ReflectionProbe))]
public class ReflectionProbeRefresher : MonoBehaviour
{
    ReflectionProbe probe;
    int renderId = -1;
 
    void Awake()
    {
        probe = GetComponent<ReflectionProbe>();
        probe.mode = ReflectionProbeMode.Realtime;
        probe.refreshMode = ReflectionProbeRefreshMode.ViaScripting;
        probe.timeSlicingMode = ReflectionProbeTimeSlicingMode.IndividualFaces; // spread over frames
    }
 
    public void Refresh()
    {
        // Ignore the request if the previous capture is still in progress.
        if (renderId != -1 && !probe.IsFinishedRendering(renderId)) return;
        renderId = probe.RenderProbe();
    }
}

Box projection

By default a probe’s cubemap is treated as infinitely far away, so reflections do not shift as an object moves around a room. Box Projection treats the cubemap as lying on the probe’s box, so reflections of nearby walls shift correctly with position; for interiors, set the box to match the room’s dimensions (Unity Technologies, Unity Manual: Reflection Probe box projection). In URP, Box Projection is enabled in the URP Asset, where it creates “reflections on objects based on their position within the probe’s box” (Unity Technologies, Unity Manual: Universal Render Pipeline Asset reference).

Blending and which probe wins

In URP, each probe affects only the pixels of an object that are inside its box, and URP evaluates probes per pixel. At most two probes affect an object: the two with the highest Importance, then the smaller box, then the larger covered area. Blend Distance fades a probe’s contribution from 0% at the box face to 100% at that distance inward. Where probe weights add up to less than one, the remainder comes from the environment reflection (usually the skybox), and pixels outside every probe use the skybox (Unity Technologies, Unity Manual: Reflection Probe volumes in URP). Reflection Probes work in every URP rendering path. The difference is how they are assigned: the Forward and Deferred paths pick probes per object on the CPU, from the object’s bounding box, while Forward+ and Deferred+ can look them up on the GPU. This matters only for objects drawn with indirect draw calls (for example by the GPU Resident Drawer), where the GPU lacks the per-object probe data, so those objects get Reflection Probes only in Forward+ or Deferred+ (Unity Technologies, Unity Manual: Reflection Probes in URP, Unity 6.3).

Making specular consistent for a cinematic rig

For a camera that moves through a scene (for example a Cinemachine dolly), treat consistency as a scene and material problem:

  1. Keep the view-dependence. Moving highlights read as “shiny”; removing them makes surfaces look painted.
  2. Tune Smoothness and Metallic so highlights are broad enough not to flicker on and off.
  3. Place baked Reflection Probes per room or zone, enable Box Projection for interiors, and give overlapping probes a sensible Blend Distance so reflections do not snap as the camera passes a probe boundary.
  4. Set the environment reflection source and intensity in the Lighting window so outdoor reflections match the sky.
  5. Only then adjust lights. A lower-intensity, larger light or a different key-light angle softens highlights more predictably than camera settings.

Gotchas

SymptomLikely causeFix
Highlights move as the camera movesnormal PBR view-dependencekeep it; lower Smoothness if it is distracting
Shiny objects reflect a sky inside a roomno Reflection Probe, so the skybox is usedadd a baked probe sized to the room
Reflections do not line up with nearby wallscubemap treated as infinitely distantenable Box Projection in the URP Asset and on the probe
Reflections snap when the camera or object crosses a boundaryprobes not blendedenable Probe Blending and set Blend Distance
A moving character does not appear in a mirrorbaked probes only capture Reflection Probe Static objectsuse a Realtime probe, sparingly
Reflections still show the old skyboxdefault or baked probe is staleGenerate Lighting again
Expecting screen-space reflectionsURP has no built-in Screen Space Reflectionsuse probes; see the render pipeline feature comparison

URP lists Screen Space Reflections and Screen Space Global Illumination as unsupported, while Reflection Probe blending and box projection are supported (Unity Technologies, Unity Manual: Render pipeline feature comparison).