Since update 0.40, Vulkan and Direct3D 12 spend much less time preparing a busy scene. The picture stays the same, and materials, textures, and mods keep the same workflow. What changes is how expensive a large level is.
Direct3D 11 still does that work the older way. A map that feels fine on Vulkan or Direct3D 12 can get heavy there once it has a lot of props or a lot of materials.
Previously, every material meant more setup before the object could be drawn. A mesh split into paint, glass, rubber, and dirt paid for that on every copy in the scene.
Bindless rendering puts the loaded textures and material settings in one shared list on the graphics card. An object only points at the entry it needs. Adding another material, or another object that uses one you already have, costs much less. Use a separate material where the surface actually changes.
Solid materials group together. A new color, texture, or roughness can stay in that group. Glass, foliage cards, and other transparent materials form their own group, so keep transparency for surfaces that need it.
Previously, each static object was sent to the graphics card on its own, even when it was a small sign or a rock.
Multi-draw sends many of those objects together, even when each one has its own mesh and its own material. Signs, clutter, rocks, and other repeated dressings are the content this is built for. A level can be dressed more densely without the old per-object cost.
Cars, trailers, and other vehicles get the cheaper material setup. Each vehicle is still drawn on its own.
Previously, the CPU walked the props and forest to decide what was on screen, including for every shadow.
On Vulkan and Direct3D 12 the graphics card does that pass for placed shapes, forest items, and distant imposters. It runs for the camera and again for each shadow. Objects outside the view, past their last detail level, or too small on screen are skipped. Shadows drop small casters sooner than the color image, and the farthest shadow keeps the large shapes.
A dense forest or a city block of small props no longer has to be checked one by one on the CPU. The scene looks the same. It just stays cheaper as the object count grows.
The same pass picks the detail level. It still uses the levels stored on the shape: a large object, or one scaled up in the level, keeps its detailed mesh farther away, and the Mesh Detail setting still moves those distances. The switch to a distant billboard fades. Shadows stay on one detail level during that fade, so a tree casts a single shadow while it blends.
The benefit shows up when the shape actually has lower detail to switch to. A prop that only contains the full mesh is still drawn in full until it disappears. A simpler mesh, and a billboard as the last detail, is what distant copies should show. See LOD and detail levels for placed shapes, and LOD and billboards for forest.
On a forest item, shadowNullDetailSize is a pixel size for the shadow only. Once the item would be smaller than that, its shadow is dropped and the item can still be drawn. 0 keeps the normal shadow cutoff.
| Renderer | What you get |
|---|---|
| Vulkan | The full set on every supported GPU that can draw many objects in one go. |
| Direct3D 12 | The full set on any GPU that meets the system requirements . |
| Direct3D 11 | The older per-object path. Large scenes cost more CPU time. |
If a Direct3D 12 GPU is too old, or multi-draw is unavailable, the scene still looks the same and the CPU does the extra work. In beamng.log, bindless enabled and GPU-driven multi-draw enabled are the Direct3D 12 lines to look for. On Vulkan, look for Bindless rendering: enabled.
Author materials the way you already do. Definitions stay in .materials.json, textures still go through the Texture Cooker
, and meshes still point at materials by name.
Was this article helpful?