Virtual3D 发布 V1.0.710 版本更新
Virtual3D - Update V1.0.710 Released
Virtual3D 发布 V1.0.710 版本更新,带来渲染、光线追踪与编辑器多项改动及漏洞修复。自 V1.0.365 起新增 Meshlets 与 Nanite 网格绘制、GPU BVH 剔除及 FSR3 帧图,并修复了启动崩溃与实例网格丢失等问题。
本次Virtual3D发布V1.0.710更新,带来Nanite式网格与光线追踪改进,独立开发者可据此评估引擎功能变化。
Virtual3D
Buy Now:https://starsigndev.itch.io/virtual3d
========
Changes since V1.0.365
12 October 2026 through 21 October 2026
Features come first. Bug fixes follow.
FEATURES
========
Meshlets and Nanite
===================
Static meshes can draw as meshoptimizer 1.3 clusters through a mesh shader. Settings, under Meshlets, enables the path, turns Nanite on, and sets the triangle threshold. With Nanite on, distant clusters stay on a coarser cut. The viewport overlay shows original triangles and the Nanite triangle count, and wireframe draws the selected cluster edges. Occlusion culling and the meshlet settings save with the scene and reset on New Scene.
Run With New Scene
==================
On the Hub, the 3D Scene Editor row can Run With New Scene. That opens a blank scene and leaves the previous scene for a normal Run.
FrameDefer
==========
Game code can schedule a lambda once, or every frame, at Before Update, After Graph Update, before and after the UI update and present, before and after render, and After Present.
UV sphere builders
==================
Mesh.CreateUvSphere and CreateUvSphereTargetFaces build a UV sphere, including one aimed at a target face count. PrefabGen.CreateSphereTargetFaces uses the same builders.
GPU instance grids
==================
A static mesh can expand one entity into an XZ grid of GPU instances with GpuInstanceGridCount and Spacing. The grid stays a single scene entity, so a large field does not multiply the entity cap.
Cheaper GPU particles
=====================
Emitters keep a snapshot, textures resolve on the game thread, and new particles upload in one pass. Emitters that do not need simulation are skipped. Play-mode effect nodes are pooled, and billboards discard early.
Hide meshes without a structure rebuild
=======================================
Turning a mesh off and back on re-arms its entity without marking the whole scene structure dirty. SetSubtreeMeshComponentsEnabled does this for a node and its children, so pooled props do not clear the ECS.
Occlusion culling toggle
========================
Settings, under Culling, has Occlusion Culling (Hi-Z). It gates the BVH and instance-cull Hi-Z tests. The choice saves with the scene.
Soft shadow umbra floor
=======================
Settings, under Lighting, has Soft Shadow Umbra Floor. It is off by default, so umbras are fully black. Turn it on when a contact shadow should keep a little ambient in the darkest part.
Tighter GPU memory
==================
Cluster lights, the mesh atlas, particle buffers, low IBL, and the Latin font atlas grow and shrink instead of staying at their peak. Replacing a scene drops texture and model caches, ray-tracing texture slots, and shadow maps. Wrapped UI text is cached, and a full garbage collection runs on scene load.
Static meshes block Use and hover
=================================
Interaction aim includes static triangle meshes, so a crate or a wall hides items behind it. Activate and Deactivate Interaction toggle the node's Interaction flag in the inspector.
Slider range edit
=================
Right-click any float or int slider, or use the row menu, to edit its minimum and maximum. When the range crosses zero, the fill is drawn from the center.
Two-row toolbar
===============
Play, Pause, Stop, and the play display sit centered on the top row. Editing tools sit on the second row. The Camera Mode dropdown is removed. The grip still docks the bar to the top, left, right, or bottom.
Directional clipmap shadows
===========================
Directional lights use clipmap virtual shadow maps: a shared page pool, GPU page allocation, and cached static pages. Shadow Quality sets the near-window density from Retro through Ultra. Smooth and Soft Shadows Quality (High, Mid, Low) run a rotated Vogel filter that can sample neighboring pages. Camera motion redraws the pages that scrolled in, and a dynamic caster rebuilds the pages it covers. Shadow Bias is editable on the light.
GPU BVH frustum cull
====================
Instance Cull Mode is Cpu No Cull, Instance Cull, or Gpu Bvh Cull. Gpu Bvh Cull is the default. The scene BVH and instance bounds feed a hierarchical compute cull, and draws use an indirect count. Static meshes stay in a device-local tree, and moving transforms refit. Same-mesh leaves merge into multi-instance draws, then a material sort runs. The FPS plate shows how many instances were culled and how many were kept.
Ray-tracing trace scale
=======================
RT Trace Scale, from 0.25 to 1.0, replaces the half-resolution toggles. 1.0 matches the raster or FSR size for full ray tracing and for ray-traced water. The control is on Render, under Ray Tracing and under Performance.
Ray-traced water hybrid reflections
===================================
Ray-traced water marches a screen-space reflection in the raster image first. Trace rays run only for a low-confidence or off-screen hit. Open sky uses the raster color or the environment. Render Settings has the toggle, and a half-resolution trace upsamples in the water shader.
Editor navigation keeps ray-tracing quality
===========================================
WASD, pan, and orbit keep reflections, temporal resolve, ray-tracing anti-aliasing, and ray-traced water. The old navigation quality cut is off.
FSR3 frame graph
================
FSR3 is an upscale-only pass with states Off, Resizing, Ready, and Dispatching. Off does not wait on FSR and frees the upscale images. Choosing FSR3 while the render scale is 100% drops to Quality, about 67%, and a 100% scale skips the dispatch. Switching upscaling to None restores 100%. History resets when FSR becomes ready, and turning it off during a resize cancels cleanly. Motion vectors use the previous-minus-current direction and do not bake a jitter cancel into the vector.
Hub Run and direct Settings
===========================
A hovered workspace row has a Run button. Opening Settings lands on the category you picked, without a second click on the header.
Ray-tracing shader execution reordering
=======================================
Full ray tracing can reorder hits with VK_EXT_ray_tracing_invocation_reorder. Render Settings has the toggle. The editor console keeps a larger buffer and restates whether reordering is on after a ray-tracing hold.
Faster full ray-tracing builds
==============================
Static bottom-level builds compact after they finish. Dense merges can split into spatial chunks, and tracing starts on the chunks that are ready. A top-level frustum cull and a distance cull drop far chunks. If full ray tracing fails, the view shows an error image and a banner instead of silently falling back to raster. Ray-tracing logs go to the Console Output panel.
Directional shadow smoothness
=============================
Directional shadows have a Smooth toggle and Soft Shadows Quality (High, Mid, Low), a Vogel disk rotated per pixel. Shadow Quality from Ultra to Retro sets how dense the near clipmap window is, so Ultra and High are less blocky.
Merge Selected Nodes
====================
Alike static meshes combine into one node. The editor writes merged/mergedNNN.lfm and a .node in the project, and the scene reloads those cooked paths.
Console Copy
============
The editor console Copy button pastes the full filtered log to the clipboard.
Cached point and spot shadows
=============================
Movement Type picks a static or dynamic point-shadow cube, and only a changed face is redrawn. A static light keeps an unmoving cube and redraws a face when a mover in that face changes. Spot and directional cascades frustum-cull casters with the same bounds tree. An idle frame checks one pose counter instead of every caster.
Two shadow lights in ray tracing
================================
Each frame, ray-traced shadows use the sun and the closest local light. Other lights can still add light. The toggle is in the ray-tracing settings.
Delete a Scene Graph layer
==========================
Right-click a layer and Delete removes the layer. Its nodes stay and return to the ungrouped list. A new scene starts with no layers, and a layer is kept only when that scene's nodes use it.
Modern Light and Modern Dark
============================
The editor ships Modern Light and Modern Dark: flat chrome, ghost icon buttons, and no zebra rows. Older saved themes migrate by light or dark. Game GUI themes are unchanged. Dock tabs are pills with a sliding accent, fields and menus are rounded, and submenus no longer draw a chevron.
Editor Hub layout
=================
The Hub is a nav rail, a searchable workspace list, and a detail pane with Open and Pin. Project actions sit with search.
One Settings window
===================
Tools, then Settings, is one window. The left side is Render, Global, each post process, Engine, Editor, Project, Scene, and GUI, with category headers and sub-categories. The properties editor fills the right.
Dockable main toolbar
=====================
The grip docks the main toolbar to the top, left, right, or bottom. Left and right become a vertical strip, and a collapsed menu opens from its icon. While the bar is dragged it floats, and a highlight shows the edge it will dock to.
Properties editor layout
========================
Labels sit on the left, only as wide as the names, and values fill the rest. Toggles sit on the left of the value column. The favourite star has its own column and shows when the row is pinned or hovered. Search matches category and component names. Drag a number label, or an X Y Z W chip, to scrub: Shift is fine, Ctrl is coarse, and the drag is one undo step. Category headers fold. Alt-click or the header menu folds them all, and Esc clears search. Lists stay closed until opened and show a count.
Scene View overlay and FPS plate
================================
The FPS and VRAM plate sits in the bottom-left of the viewport. The View menu and the eye overlay can hide it, and that choice is saved. The plate also shows cull counts. The top-left tool strip can be dragged. Right-mouse look presents the current frame, wraps the cursor, and shows view FPS.
Bottom tab strip
================
Content, Console, and the other bottom tabs sit in a strip. Click peeks a rising drawer. Double-click pins that tab, and double-click again unpins it. Ctrl+Space, or the Content chip on the status bar, opens the content drawer over the viewport. Esc and a click away dismiss a peek. The default dock stacks the Scene Graph above Properties on the right, and the viewport is one wide pane on the left.
GUI Designer layout
===================
The content browser peeks from the bottom strip. UI Controls and the tree sit under UI Properties. The thumbnail slider scales the icon and keeps the name under it. A full-bleed snap applies to root controls only, so a child inset keeps its size.
Material editor layout
======================
The preview sits to the left of the graph. Properties and variables stay on the far right. Content peeks from the bottom strip. Layouts saved before this split are ignored.
Editor interaction polish
=========================
A changed value shows a dot, and a category shows a count. The command palette keeps recents, groups, and shortcuts. The toolbar overflows into More. Properties can lock and shows a parent breadcrumb. The Scene Graph shows actions on hover. The content browser has type chips, a thumbnail size, and Quick Look. A drag shows a pointer readout.
Sound preview in the Content Browser
====================================
Hover a .wav or .mp3 for 1.5 seconds and a play button appears. Playback stops when the pointer leaves that tile.
Model cache recooks when the source is newer
============================================
A cooked .lfm rebuilds automatically when its FBX or OBJ is newer than the cache.
Particle streams in edit mode
=============================
Constant particle streams keep spawning in the scene editor, so they can be placed before Play. The View menu can hide the billboard icons. The Particle FX editor has Translate and Rotate step snaps, and the gizmos move the preview stream.
BUG FIXES
=========
Meshlet holes, missing meshes, and boot crashes
===============================================
Nanite shares one bounds sphere between a cluster and the cluster that replaces it, so moving the camera does not open a hole. Simplify builds real coarser levels. A mesh-shader draw splits past 65535 workgroups, so a whole grid appears, not only the far rows. With Nanite off, every leaf cluster draws at any distance. Cone tests and back-face culling no longer hide the outside of a mesh. The mesh shader waits until positions are written, recording stays on the C# path while any meshlet draw is active, and descriptor updates touch only the current frame. Editor boot no longer fails shader validation, and moving the camera no longer crashes the resolve.
Instance grid update cost
=========================
A GPU instance grid caches its entities instead of sorting them every frame. Transform updates keep the grid offsets, and the matrix invert runs once per base mesh rather than once per slot.
Directional clipmap trails, hitches, and leaks
==============================================
Camera scroll remaps pages that are already resident, so walking with sun shadows on no longer rebuilds the whole map. Scroll no longer leaves black slabs, stair trails, or blocky silhouettes. A static pose does not rebuild every static page, and a dynamic move dirties only the pages it overlaps. Mouse-wheel dolly commits the editor camera, so the clipmap does not sample a stale pose. Wall-seam leaks, pier holes, and flicker while rotating the light are closed. In play, a moving dynamic caster rebuilds its dirty pages in one frame. Page allocation no longer aborts the frame, and the soft filter samples neighboring pages so Smooth does not seam.
Uncapped frame pacing and sky cost
==================================
Uncapped present uses immediate mode again, so the editor is not locked to the desktop refresh. Present wait stays off while uncapped present is preferred. The FPS readout is smoothed. Looking up spends less on cloud shafts, and looking down skips the atmosphere on pixels that already show geometry.
Stop Play and scene reload stability
====================================
Shift+Esc keeps mesh, acceleration-structure, and texture caches and drops only the top-level structure, with bounded waits, so leaving play on a large scene does not lose the device. Reloading a scene waits for ray-tracing fences and does not compact the atlas on the way in. A moving mesh no longer flickers between the current pose and the previous one. A gizmo drag bypasses the previous-frame occlusion test and resets FSR history.
Particle spawn hitch on the render thread
=========================================
Collecting particle spawns no longer allocates a large temporary buffer on the render thread or reloads textures there. The other particle slot is waited on only while a simulation or a scrub is active.
GPU BVH blank scenes, over-cull, and device loss
================================================
The cull buffer matches the CPU node size, so traversal cannot run away and lose the device. Material sort uses two descriptor sets instead of rewriting one set mid-recording. Cone tests use the correct angle and no longer reject visible leaves. Moving objects refit from cached cones instead of rescanning every vertex. Hi-Z occlusion uses a capped test so thin structures are not punched out. Switching cull mode saves the setting and rebuilds the resolve, without recreating every render target mid-click. Cpu No Cull draws the full pool. The per-frame culling log file is gone. Counts stay on the FPS plate.
Play camera after a cinematic
=============================
When a cinematic finishes, the play camera and mouse come back. Activate Object resolves the FPS controller, and the cinematic game event fires as playback commits.
Trace scale no longer loses the device
======================================
Changing RT Trace Scale no longer creates images in the middle of recording the ray pass. Those images rebuild on resize. The ray-tracing settings sheet measures its rows so the scroll reaches the last controls.
White outlines with FSR off
===========================
Scene anti-aliasing left at 8x was fringing every silhouette, and the visibility resolve was forcing a fine mip on edges. Edges now rely on the barycentric clamp. With FSR off, the white outlines and the frame-rate cliff are gone.
FSR3 enable and disable
=======================
Turning FSR3 on no longer hangs a Release build, samples an image that has not been written, or leaves white outlines from a stuck jitter. Turning it off cancels during a resize, restores the previous half-resolution trace setting, and stops baking an FSR mip bias into texture samplers. Distant edges no longer shimmer from a fake motion vector. A render-scale field applies on Enter or when it loses focus, so a half-typed value does not freeze the editor. Changing upscaling or anti-aliasing no longer turns Bloom and Lens Flare back on.
Fullscreen play frame rate
==========================
Play presents the 3D view after the frame, the same way edit mode does, so a resize can apply while the UI is recording. Fullscreen play no longer sticks near a very low frame rate while the interface stays responsive.
Deleting the last ray-traced node
=================================
Removing the last Raytraced node no longer freezes the 3D view while the UI keeps moving. Raster tonemap and post run again when no full ray-tracing pass was submitted.
Virtual shadow map recording crashes
====================================
Page draws and a second static cull no longer rewrite a descriptor set while its command buffer is still recording. That was crashing the debug build on scene load.
Ray-traced and raster mode switches
===================================
Flipping a node between Raytraced and Rasterizer no longer clears the whole scene or freezes a large merged mesh. Raytraced meshes are shaded by rays, and raster meshes stay deferred. A mixed scene keeps the nearer raster surface. A pending acceleration structure shows a banner instead of a silent raster image. Half-resolution traces use their own descriptors, so the view does not blank after the upscale. Dense merged cities stay one structure. A far distance cull no longer presents an empty hybrid image over a lit raster scene.
Merged meshes reload
====================
Merged nodes reload from merged/*.lfm. An extensionless path was missing the cooked sidecar, so the mesh did not come back with the scene.
Editor camera frame rate
========================
Looking and flying no longer re-upload every instance, wait on the other frame slot, or sleep the main loop to 120 Hz. The frame rate while moving stays near the idle rate.
Light visibility and point-shadow cubes
=======================================
Scene Graph visibility again decides which lights contribute. Point-shadow cubes refill when play starts, the view resizes, or a cinematic ends, and a zero-depth cube is ignored so the light stays visible. The light's own Ultra to Retro setting sizes its shadow map. Project shadow quality is only the ceiling.
Editor mouse look
=================
Right-mouse look pins the cursor and uses the travel away from that pin, so the warp back is not a second turn and the screen edge does not stop the orbit. Deltas come from the OS cursor position, including middle-mouse pan. The hold does not drop ray-tracing quality, and it presents the current pose instead of stepping the turn.
Vis Scan keeps layers
=====================
Vis Scan keeps the real layers, lists only the nodes inside the view frustum, and omits a layer that has none.
Held viewmodels stay out of the pick
====================================
Omit From Scene Pick drops a node and its children from mesh and physics rays. The play hover outline skips the player, so a held weapon is not drawn as a selection.
Scene View keeps recording
==========================
The Scene View records 3D every frame. The idle skip could stall mouse look while keyboard flight stayed at full rate.
Editor chrome fixes
===================
The first click outside a toolbar dropdown closes it. The taskbar and window icon are the editor mark. A pinned bottom tab sits above the strip, and the second click of a double-click pins instead of closing the drawer. Closing every bottom tab leaves the strip. The peek drawer stops above the status bar. Opening Settings no longer hides the window or turns post-process tiers on. An FPS controller keeps one camera head across save and load. The pin star has its own gutter, so the label does not take the click. GUI Designer docks saved before the bottom content peek are ignored.
Model cache identity
====================
Mesh dedupe requires the full vertex and index data, so two similar meshes no longer collapse into an empty node on reload. Empty texture paths stay empty. A project-wide albedo name scan no longer invents maps.
Mesh pick and Space solo
========================
Mesh pick refreshes the world matrix and can fall back to the CPU bounds tree, so simple primitives can be selected. Space no longer solos a panel while a text field has focus.
Change Map and New Scene
========================
The Change Map event loads the scene. New Scene clears the start event, HUD, load UI, and folders, so they do not carry into the blank scene.
Particle FX hide, save, and gizmos
==================================
Hiding or deactivating a parent retires its GPU particles, including child emitters. Ribbon history stays small enough that a resize does not run out of memory. Duplicate and paste keep the effect path. Save updates the document cache. The preview runs at the display rate. Gizmos draw in the preview and the stream follows the handle. Root effect nodes can be selected and moved. Orbit pick no longer rebuilds the pick structure on every mouse sample.
TextButton theme fill
=====================
Show Body and the label follow the theme, including hover and press. A custom Normal Color still paints its own plate.
Interaction aim hits static bodies
==================================
Aim uses physics again. Static interactables are included, and cube or convex shapes assist the hit. Set Physics Type on anything the player should use.
来源:itch.io Devlogs · starsigndev.itch.io