Valheim
Install with App

Details

Latest version
1.0.0
Last Updated
First Uploaded
Downloads
39
Likes
1
Size
201KB
Dependants
ADDatHost Valheim hosting
€1

Immersive Camera Enhanced

Immersive Camera Enhanced reduces third-person camera jolts caused by trees, bushes, and other natural vegetation between the Viking and the camera. When the path contains only vegetation, the camera recovers its selected distance and the blocking elements are hidden during rendering only.

Features

  • Removes vegetation interference with camera collision without removing the game's collider.
  • Keeps tree cutting, gathering, combat, and interactions intact.
  • Hides only the vegetation texture that blocks the camera, preserving shadow casting and restoring the material as soon as the path is clear.
  • Uses one physical, world-space cylinder profile from the character center through the camera and beyond it. The apex near the character center closes to zero width; the radius reaches the configured screen percentage at the camera and grows again toward a rear tip. Vegetation is hidden only when its collider or visual geometry touches this cylinder.
  • Grass, ground leaves, and small bushes remain visible and are excluded from the tree occlusion pass to avoid unnecessary per-frame work.
  • Optional CullHousePillars hides player-built support pillars and stone arches that enter the cylinder, with a separate camera-collision toggle for those pieces. V1 never hides walls, foundations, floors, ceilings, or roofs.
  • Optional camera-collision bypasses let the camera pass through vegetation, support pillars, stone arches, wall sconces, torches, light fixtures, tables, and the active hammer placement preview. Wooden walls, structural surfaces, terrain, mountain rocks, boulders, and ores remain solid.
  • Separate day, night, and fog/cave brightness controls adjust Valheim's environment lighting and shader ambient color without changing world simulation. Signed values can darken the scene or apply stronger HDR brightness above 100%.
  • Optional client-only vanilla first-person mode enters when the scroll reaches the minimum zoom and returns to third person when the scroll increases the distance. It keeps Valheim's own camera, model visibility, FOV, collision, and animations as the base while the local first-person improvements below are enabled by default.
  • Optional first-person camera sway rotates the view without moving the camera position, with a moderate pitch and roll response tuned to remain comfortable.
  • Optional first-person camera animations smoothly lower the view by 30% of the character height while crouching.
  • Optional first-person FOV adjustment is applied locally while vanilla first person is active.
  • First-person camera yaw turns the local character with the view.
  • Hold-to-zoom magnifies the image toward the crosshair in both first and third person. The scroll wheel changes magnification while the key is held; releasing it restores the normal FOV. The wheel does not change camera distance during zoom. Zoom is disabled with the building hammer.
  • Optional Alt free look lets the camera look around independently while the configured key is held, preserving the character's movement heading even while WASD and other keys are pressed. The camera pivots around itself without translating the player and returns smoothly to the view captured when Alt was pressed.
  • Optional Advanced Camera measures clear space between ground and ceiling at the camera's target position. Looking up or down rotates the view while keeping the camera at a safe height; structural walls and other solids still stop its path.
  • Configurable lists of vegetation names and protected objects.
  • Runs locally on the client; it does not change the world, save, or server physics.

Feature demonstrations

Short demonstrations of the main camera features:

Pillar pass-through and camera smoothing

Pillar pass-through and smooth camera

Tree culling and Leaves Only while moving toward the camera

Tree culling and Leaves Only

Configurable camera distance

Camera distance

Hold-to-zoom

Camera zoom

Vanilla first person

First-person camera

Requirements

  • BepInExPack Valheim.
  • Valheim updated to the version supported by the installed BepInEx pack.

r2modman or another mod manager is optional. Install this mod only on the client that wants the visual adjustment; other players do not need it.

Installation

Using r2modman

  1. Open your Valheim profile in r2modman.
  2. On the Online tab, search for ImmersiveCameraEnhanced and click Download.
  3. Open Installed and confirm that the mod is enabled.
  4. Start the game with Start modded.

Manual installation

  1. In Steam, right-click Valheim and choose PropertiesInstalled FilesBrowse.
  2. Extract the package into Valheim/BepInEx/plugins/ImmersiveCameraEnhanced/.
  3. Start the game once so the configuration file is created.

The generated file is located at:

Valheim/BepInEx/config/com.kimbauer.valheim.cameracull.cfg

Configuration

Options appear in BepInEx Configuration Manager, when it is installed, or can be edited directly in the .cfg file.

Configuration Manager groups the controls by feature. Camera Cull toggles and numeric adjustments are separate collapsible groups: 00 - Camera Cull and 00 - Camera Cull / Adjustments. The other main groups are 10 - Camera Collision, 20 - Camera Improvements, 20 - Camera Improvements / Adjustments, 30 - Visual, and 40 - Detection. 90 - Performance is near the end and 99 - Debug is last. The file sections remain backward-compatible with earlier releases. Display names are shown in English, while the configuration keys stay stable for existing profiles. Brightness and camera-distance preferences are client-only; they are applied locally even when the server exposes its own camera settings. All visible numeric entries use bounded sliders; the old numeric migration keys remain hidden from the interface.

Camera occlusion

  • EnableMod: global master switch. When false, all visual culling and camera-collision filtering are inactive and any temporary renderer state is restored.
  • EnableCameraCull: V1 cylinder visual culling toggle. When false, the cylinder query is disabled while the camera-collision toggles remain available as long as EnableMod is enabled.
  • CylinderCameraWidthPercent: width of the end near the camera as a percentage of the visible screen width. The default 25 corresponds to 25% of the screen. The value is converted to metres using the current FOV and live character-to-camera distance; the volume starts at the real lens position so it also covers trees immediately between the camera and the character. The character-side end closes to zero width.
  • Trees whose owning root is on the far side of the character are ignored even when their broad leaf bounds graze the cylinder; this keeps foliage in front of the character visible.
  • ConeCharacterDistance (shown as Cylinder Character Distance): distance from the character center to the cylinder apex in metres (default 0.5). The apex is placed on the camera-facing side of the center, so the cylinder points at the character center instead of using the head bone.
  • CullHousePillars: includes player-built support pillars and stone arches that touch the cylinder. It is enabled by default. IgnoreHousePillarCollision separately controls whether the camera can pass through those supports.
  • LeavesOnly: hides the recognised leaf renderers for a complete large tree while keeping its trunk and branches visible. When a tree exposes leaf and trunk material submeshes in one renderer, the mod temporarily removes only the leaf submeshes. Grass and small bushes are excluded from visual culling. It is disabled by default. MovementLeavesOnly temporarily uses this same leaf-only mode while the character walks toward the camera. It requires consecutive movement samples and rejects abrupt position corrections, avoiding scene scans and dedicated-server query spikes. Tree trunks, branches, support pillars, and stone arches are restored while this temporary mode is active. MovementLeavesOnlyActivationDelay controls how long the character must keep walking toward the camera before the temporary leaf-only view begins (default 0.5 seconds). Moving away or stopping before the delay expires cancels activation.
  • ThirdPersonCameraDistance: local maximum character camera distance in metres (default 6, range 1 to 35). It overrides the server value for this client only while preserving vanilla camera rotation and steering.
  • BoatCameraDistance: local maximum camera distance while controlling a boat in metres (default 6, range 1 to 35). It is selected only while the local player is attached to a ship and never limits the on-foot camera.

Camera improvements

  • EnableFirstPersonCamera: enables the vanilla first-person view when the scroll reaches the minimum zoom through an explicit scroll input. Camera collision alone cannot activate it. Scrolling away from that boundary returns to third person through Valheim's normal camera logic. It is enabled by default and applied only on the local client. V1 occlusion is disabled while this view is active.
  • EnableFirstPersonCameraSway: rotates the first-person view with a lightweight movement sway while leaving the camera position unchanged. Enabled by default.
  • EnableFirstPersonCameraAnimations: enables local first-person camera animation. While the character is crouching, the camera smoothly lowers by 30% of the character height. Enabled by default.
  • FirstPersonCameraFov: local first-person field of view in degrees (default 65, range 30 to 120). It is applied only while vanilla first person is active and updates while the Configuration Manager is open.
  • Turning the first-person camera also turns the local character. Roll direction follows the current movement direction while first person is active.
  • EnableCameraZoom: enables the temporary hold-to-zoom feature (enabled by default).
  • CameraZoomKey: key held for zooming, defaulting to Mouse4 (Mouse3 in Unity's key names).
  • CameraZoomDefaultMagnification: initial optical zoom factor (default ).
  • CameraZoomMagnificationStep: zoom factor added per scroll notch (default 0.5×).
  • CameraZoomMaxMagnification: maximum optical zoom factor (default 20×, configurable up to 40×). Zoom works in first and third person, leaves camera distance unchanged, reduces mouse sensitivity progressively with a smooth input response, and is disabled with the building hammer.
  • CameraZoomSmoothSpeed: speed of the smooth optical zoom transition (default 14).
  • CameraZoomMouseSensitivityFactor: multiplier for zoomed mouse sensitivity (default 0.20, where lower values slow the view further). The factor is applied to the magnification curve and is consumed from the normal gameplay mouse-input path.
  • CameraDistanceSmoothSpeed: speed of the smooth normal third-person distance transition after scrolling (default 12).
  • EnableFirstPersonFreeLook: enables Alt free look without changing the character's movement direction. Enabled by default.
  • FirstPersonFreeLookKey: key held for free look, defaulting to Left Alt. Horizontal look is limited to 120 degrees to either side of the character's forward direction; vertical look is limited to 90 degrees up or down. Other movement keys can be held at the same time.
  • EnableAdvancedCamera: checks for a player-built ceiling above the current camera every configured interval. While a ceiling is present, the camera uses a temporary maximum distance of 3 metres and keeps its height inside the building. The temporary mode ends when the ceiling is gone or the building hammer is equipped. Enabled by default.
  • AdvancedCameraCeilingCheckInterval: interval in seconds between ceiling checks (default 2).
  • EnableAdvancedCameraHeightClearance: lets the camera move vertically inside the available room while keeping the configured clearance. When the limit is reached, the view keeps rotating instead of shortening the camera distance (enabled by default).
  • AdvancedCameraClearance: maximum vertical travel is constrained to keep the camera at least this many metres from the floor and ceiling (default 6, minimum 3). This is a height limit, not a collision distance; structural surfaces still use the normal camera collision rules. Props already ignored by the camera collision filter, including tables, chests, workbenches, portals, beds, torches, and other lights, are excluded from this height calculation.
  • BackCylinderLength: additional cylinder length beyond the camera in metres. The single cylinder starts near the character center and ends this far past the camera (default 10).
  • ConeGrowthExponent (shown as Cylinder Growth Exponent): non-linear radius curve. 1 is linear; values above 1 keep the cylinder narrow during the first metres and expand it rapidly near the camera and rear tip (default 2.4).
  • CylinderSlicesPerMeter: number of stable profile cuts per metre. This creates the configurable stepped “zip” profile without making the culling query more frequent.
  • CylinderExponentInfluencePercent: how strongly the growth exponent changes each profile cut. 0 is linear; 100 applies the full exponent.
  • CylinderCheckInterval: slider for the interval between the expensive cylinder contact checks, in seconds. The cylinder transform still follows the camera every frame; only renderer overlap sampling is throttled. The default is 0.60 seconds.
  • CylinderRestoreDelay: slider controlling how long an object must remain outside the cylinder before its renderer is restored. The default is 0.60 seconds; 0 restores immediately.
  • CylinderVerticalFlattenPercent: slider that removes the upper portion of the cylinder cross-section after the growth exponent is applied. The migrated default is 30, which avoids hiding objects above the view path.
  • CylinderFlattenBottom: when enabled, applies the same vertical flattening limit to the lower side of the cylinder. It is disabled by default, preserving the original upper-only behavior.
  • CylinderHorizontalFlattenPercent: slider that narrows the horizontal width of the grown cylinder. 0 keeps the full width; higher values make the cylinder narrower.
  • ConeRearRadiusMultiplier (shown as Cylinder Rear Radius Multiplier): radius at the rear tip relative to the camera radius (default 1.75).
  • PreserveVegetationShadows: uses ShadowsOnly, removing the texture while keeping shadows.
  • IgnoreVegetationCollision: removes recognized trees, leaves, and other vegetation from Valheim's camera collision ray. It does not disable their gameplay colliders. Enabled by default.
  • IgnoreHousePillarCollision: allows the camera to pass through player-built support pillars and stone arches. Enabled by default. It does not affect wooden walls, foundations, floors, ceilings, roofs, terrain, mountain rocks, boulders, or ores.
  • IgnoreHouseLightCollision: allows the camera to pass through wall sconces, every torch variant, lanterns, braziers, candles, fireplaces, similar light fixtures, and player-built tables. Enabled by default. The configuration key remains unchanged for compatibility.
  • The currently selected hammer placement preview never blocks the camera. It is identified from the local player's actual placement ghost, so the same piece becomes solid or follows its configured prop category after construction.
  • IgnoreEntityCollision: allows the camera to pass through players, animals, enemies, fish, and other entity colliders. Enabled by default.
  • KeepFoundationFloorRoofCollision: keeps foundations, floors, ceilings, and roofs solid. On an underside hit, the camera stops before the surface by twice the material thickness for non-wood materials and five times the thickness for wood. Enabled by default.
  • EnableBrightnessAdjustment: enables the local render-only brightness feature.
  • DayBrightnessPercent (shown as Day Brightness): signed daylight adjustment from -100 to 300; the default is 0.
  • NightBrightnessPercent (shown as Night Brightness): signed adjustment at night and in always-dark environments, from -100 to 300; the migrated default is 25.
  • FogCaveBrightnessPercent (shown as Fog & Cave Brightness): signed adjustment in dense fog, mist, caves, crypts, mines, and dungeons, from -100 to 300; the migrated default is 25. Brightness is applied locally on each client after Valheim writes the final environment lighting, fog, and ambient shader color. Negative values darken, 0 preserves vanilla brightness, and values above 100 increase HDR exposure beyond the original range. Server-side environment settings do not override these client values.

Cylinder contact checks run on the configurable throttled cadence while its transform follows the camera every frame. V1 only classifies colliders returned by the local camera volume; it does not scan every renderer loaded in the scene. Collider and hierarchy results are cached between queries, and exit hysteresis prevents foliage from flickering on transient physics misses. Young trees and saplings use a ground-anchored upright detection volume with a fixed height of six metres and three times their original horizontal radius, capped to a normal-tree-sized local probe. A collider hit resolves the complete young-tree root, so normal culling hides the same visual group already recognised by Leaves Only. This does not change gameplay physics or create a global tree scan. When VerboseLogging is enabled, Immersive Camera Enhanced emits one aggregate V1 status line every 15 seconds and reports at most 32 previously unknown camera-path colliders per scene, so diagnostics do not flood the Unity console. Per-renderer hide/restore messages are intentionally not written from the culling hot path. Each status line includes CPU percentage, process thread count, frame time, stopwatch ticks, GC collection counts, last and peak V1 query time in milliseconds, managed and Unity allocated memory in MiB, and the process working set sampled at that point. Collider-to-renderer and tree-hierarchy lookups are cached between discovery scans to avoid repeated allocations in the hot path. Nameplate, health-bar, and world-text renderers are excluded from the cylinder query. The temporary LeavesOnly mode reuses each renderer's derived leaf-stripped mesh instead of cloning and destroying it every time movement changes direction. Only actual state transitions request a new throttled cylinder query; cached meshes and shadow proxies are released when the scene is reset.

Detection

CollisionLayerMask defines the physics layers queried by the cylinder; -1 includes all layers. VegetationNameTokens and ProtectedNameTokens are comma-separated lists. Rocks, stones, ores, and flint fragments are protected automatically and are never included in culling. The mod uses the actual collider shape and, when available, mesh vertices to avoid hiding a tree whose broad renderer bounds only graze the volume. When a tree collider belongs to a prefab root with separate trunk and leaf meshes, V1 uses the real collider as confirmation that the tree entered the cylinder. LeavesOnly then selects all recognised leaf renderers belonging to that same tree. It uses the object name and its parents in the hierarchy, tags, and tree components (including trunks in child objects) to classify renderers and colliders. Add a modified prefab name to the vegetation list if it is not recognized; add it to the protected list if it must never be hidden.

Safety and compatibility

Immersive Camera Enhanced does not destroy GameObjects, disable colliders, or alter saved state. For vegetation it uses ShadowCastingMode.ShadowsOnly while the texture is hidden and restores the original mode when the object returns to view, when the scene changes, or when the mod is disabled. The global EnableMod switch restores all temporary state.

Mods that completely replace the camera may compete with this correction. If behavior is unexpected, first disable Camera occlusion/EnableCameraCull and test visual culling separately from the independent collision toggles.

Diagnostics

Enable ShowOcclusionCylinder to draw the physical cylinder in translucent green (20% by default), with its zero-width character-side apex, camera-width section, and wider rear section, during calibration. Adjust CylinderOpacity in the Debug section if the outline needs to be more or less visible. The drawing is optional and does not reveal the map. It shows one curved cylinder only. Disable the option after calibration. The overlay remains visible while the pause or Configuration Manager menu is open, so its position can be checked without losing the last gameplay volume. Enable VerboseLogging only during a test; routine scene scan counts are intentionally not written because synchronous console output can stall the render thread. Set the option back to false after diagnosing.

Credits

Project by Xinelada Lendária. Requires BepInExPack Valheim.

DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro