Kiwi Grass Docs
View product

Rendering and quality

Quality profiles

Configure geometry tiers and High, Medium, Low, and Off runtime levels.

Kiwi Grass 26.8.0Unity 6000.0+URP

TerrainGrassQualityProfile stores render-resource and visual quality policy: rendered camera count, buffered frames, shadows, rendering layer mask, scene view rendering, render distances, LOD and ultra-far density scales, independent regular and ultra-far transition widths, fade settings, far-blade projected width limits, procedural motion vectors and their maximum LOD tier, terrain/shadow visibility splitting, semantic field harmonization, macro presentation, additional lights, depth normals, and grass shadow distance.

Quality profiles do not store materials, terrain, TerrainLayer selection, seed, chunk size, runtime repaint timing, stomp texture resources, or camera layer mask. Those remain renderer-local in this pass.

Every renderer also has a runtime Quality Level. High preserves the authored quality profile or embedded look; with Current Look / Quick Setup it uses the recovered 100% / 55% / 25% / 12% survivor presentation at 30 / 60 / 105 m with 4 cameras and 3 buffered frames. Its 8x settled far-width ceiling bounds reciprocal coverage where sparse LOD2 and LOD3 tufts would otherwise reveal terrain holes. LOD2 uses a 1.35 overlap while LOD3 retains the lower 1.15 overdraw limit. The connected LOD2 proxy improves continuity without adding authored density, triangles, buffers, or render passes. Medium applies a 75% survivor multiplier, limits LOD distances to 22 / 45 / 80 m, and uses at most 3 cameras with 2 buffered frames. Low applies a 50% survivor multiplier, limits LOD distances to 14 / 30 / 55 m, and uses at most 2 cameras with 2 buffered frames. Off has no active draw slots and skips stomp updates, culling, command construction, uploads, and drawing.

Quality changes never regenerate, reload, compact, or reallocate the packed 24-byte runtime blade allocation. High, Medium, and Low address the same blade buffer and only change survivor, distance, and logical draw-slot budgets. Draw buffers grow to a retained high-water capacity and do not shrink when quality drops. A 37,327,891-blade allocation is about 0.83 GiB; keeping separate blade buffers for all three active quality levels would need roughly 2.50 GiB for identical source blades.

Normal Off retains the packed blades and supporting resources for immediate reactivation. Release Resources While Off is a separate opt-in policy with a configurable delay. When enabled, it releases the runtime allocation only after the renderer has remained Off for the delay; reactivation then reloads a valid persistent bake or requests regeneration. Use it only when reclaiming memory is worth the later reactivation cost.

Settled LOD3 chunks (LodMask == 8) use a persistent count, prefix, and fill batching pipeline. Visible blade counts are grouped into eight subdivisions per power-of-two range, up to 16 chunks share one indirect command, and padded lanes are rejected before reading the blade buffer. LOD0-LOD2 and every transition chunk retain the original one-command-per-chunk-and-tier path. This can reduce a 1,024-chunk distant field to about 64-100 LOD3 commands, reducing command and descriptor upload overhead while retaining the same valid LOD3 instances and triangle workload in the existing single multi-draw submission.

Bundled quality presets include Mobile Low, Mobile High, Desktop High, and Cinematic.

Desktop High uses a 512-maximum semantic field at 0.75 strength over 80-145 m, with 24 m macro noise, 0.16 meadow-normal strength, 0.12 macro-height strength, and 0.16 far gust sheen. The semantic field path starts with LOD2, so LOD1 carries no field varying, vertex texture sample, or fragment decode. Cinematic uses a 1024 maximum, 0.85 over 75-150 m, and strengths 0.40, 0.20, and 0.35. Embedded Current Look starts at its 60 m LOD2 entry. Mobile High and Mobile Low cap the dormant field at 128 and resolve every field and macro strength to zero, so their Forward variants skip the field sample and macro-noise branches.

Desktop High, Cinematic, and embedded Current Look use GPU Occlusion Automatic. Automatic runs only for the main non-stereo base Game camera on supported non-mobile compute hardware, requires asynchronous readback and R32_SFloat load/store support, and applies results only after stable chunk/blade profitability. Open or unprofitable views back off to a sparse probe, camera/projection/viewport changes clear history immediately, and unsupported or unavailable paths use the normal renderer with no grass suppression. Medium, Low, Off, Mobile High, and Mobile Low resolve Automatic to Off. Explicit Off remains available, while explicit Hi-Z is retained for controlled Development Player and custom-profile validation.

Conservative terrain occlusion may now preserve a terrain-hidden chunk as a shadow-only command inside the configured shadow distance. Those commands use zero main instances, occupy the existing shadow prefix, and never enter settled LOD3 batching. Terrain Occlusion Splits Shadows is enabled in every bundled preset; disabling it restores the previous rule that active blade shadows disable terrain-horizon occlusion.

Cinematic keeps planar terrain coverage to 320 m, reaches the camera-facing far tuft at 75 m, settles at 25% LOD2 density by 120 m, then transitions to the five-triangle LOD3 tuft at 12% ultra-far density. Near, mid, and far geometry transitions use 6 m while the more aggressive ultra-far topology and density change blends over 24 m; the field uses a stable 280-320 m geometric fade. Far instances use a 1.75-pixel projected blade-width floor with reciprocal density compensation and bounded coverage overlap. LOD3 uses a 2.25x cluster silhouette and preserves a bounded 6-pixel projected height capped at 3x authored height, so mountain overlooks retain overlapping grass-shaped clumps instead of sparse dots. Random per-blade tint converges between 5%-30% of LOD0, while root occlusion and sheen stabilize through 60% and ribbon normals settle from a 94% to 100% surface blend. Root-to-tip color remains authored through half of LOD0 and retains 47.5% contrast beyond LOD0; LOD3 retains 25% color contrast and removes subpixel root occlusion so its geometry and received terrain shadows provide stable distant texture. Received shadows use a 28%-45% distance-aware foliage floor, and terrain surface normals remain stable across eye height. This removes display-scale chatter, near-black patches, and horizontal lighting inversion without flattening the field's vertical blade structure. The normal LOD2 topology connects its existing three triangles into a continuous proxy with five referenced vertices; LOD3 retains the separated nine-vertex/five-triangle tuft. Development Players can pass -kiwigrass-silhouette-refinement=off only for controlled comparison.

The first three LOD distances own four geometry tiers and continue to shape presentation density. LOD3 reduces each surviving blade to a compact irregular three-tip tuft and owns separate Ultra Far Density Scale, Ultra Far Density Falloff Start, Ultra Far Density Floor, and Ultra Far Transition Width controls. Standard setup, Desktop High, and Cinematic transition from 25% LOD2 density to 12% ultra-far density, keep a 2% horizon floor, and use a coverage-aware fourth-root falloff after their configured far start. Standard, Desktop High, and Cinematic use a 24 m ultra-far band, Mobile High uses 16 m, and Mobile Low uses 10 m. Ordered ownership and 1.75-pixel bounded width compensation share that independent wider band. Current Look, Desktop High, and Cinematic cap settled reciprocal coverage at 8x. Cinematic enables full procedural motion vectors, depth normals, and per-blade shadow casting. The other presets use camera-only motion and skip the optional depth-normal and shadow-caster passes; Mobile High and Desktop High still receive terrain, character, and structure shadows in forward lighting. Enable the heavier passes only when the project visibly benefits from deforming-grass velocity, grass-authored depth normals, or individual blade shadows. Visible terrain area grows with the square of distance, so profile representative cameras on a terrain at least 640 m across before shipping a large open world. Mobile tiers retain shorter coverage and lower proxy caps.

Dither Fade keeps the legacy whole-blade stochastic fade for deliberately cheaper custom or mobile tiers. Desktop High, Cinematic, and standard setup disable it. The common geometric path collapses each complete blade toward its root and clips only at the fade endpoint, keeping forward, depth, depth-normal, shadow, and motion-vector silhouettes consistent.

Still stuck?

Bring the renderer status with you.

Include the Kiwi Grass version, Unity and URP versions, operating system, graphics API, renderer status, Player log, and a minimal reproduction.

Email supportJoin Discord

Kiwi Grass 26.8.0

Search documentation