@@ -17,27 +17,208 @@ meta:
1717 content : https://fyrox.rs/assets/1.0.0-rc.1/particle_system.gif
1818---
1919
20- I'm happy to announce that Fyrox 1.0.0-rc.1 was released! Fyrox is a modern game engine written in Rust, it helps you to create 2D and 3D games with
21- low effort using native editor; it is like Unity, but in Rust.
20+ I'm happy to announce that Fyrox 1.0.0-rc.1 was released! Fyrox is a modern game engine written in Rust, it
21+ helps you to create 2D and 3D games with low effort using native editor; it is like Unity, but in Rust.
2222
23- This is an intermediate release intended for beta testing before releasing stable 1.0. The testing includes the engine, the editor, the docs and
24- the book. If you find a bug, confusing or incomplete documentation please file an issue or propose a solution by creating a pull request.
23+ This is an intermediate release intended for beta testing before releasing the stable 1.0. The testing includes
24+ the engine, the editor, the docs and the book. If you find a bug, confusing or incomplete documentation please
25+ file an issue or propose a solution by creating a pull request.
2526
26- The list of changes in this release is huge, there's a ton of fixes and new functionality.
27+ The list of changes in this release is huge, it is mostly focused on bugfixes and quality-of-life improvements,
28+ but there's a new functionality as well.
2729
30+ # Type Safety
2831
32+ For a long time Fyrox supported only "untyped" handles (such as ` Handle<Node> ` or ` Handle<UiNode> ` ), this
33+ approach was bug-prone because it effectively erased all the useful type information. This release adds
34+ strongly typed handles for all the scene and UI entities. It is now possible to store ` camera: Handle<Camera> `
35+ in a script and access the camera by it using a simple ` graph[camera].projection_matrix() ` . There's no need
36+ to do a manual type casting. Typed handle improved the editor side as well - the handle selector will show
37+ only the objects of the right type.
2938
30- ## What's Next?
39+ # Resource Management
40+
41+ Resource system is now UUID-based and resource references are now stored as a simple UUID, instead of paths
42+ as it was before. This allows to rename the resource source files without a need to scan the entire project
43+ for path-based links and fix them.
44+
45+ Such transition comes with a price - every resource now must have a ` .metadata ` file beside it that stores
46+ its UUID.
47+
48+ This refactoring also added a concept of a resource registry. In short - it is a map ` UUID -> Path ` that
49+ holds information about all the resources in the project. Resource registry tracks the file system changes
50+ and automatically updates itself.
51+
52+ # Asset Format
53+
54+ Fyrox now uses text-based format for its native assets. This adds an ability to merge changes from collaborative
55+ work. Text format is then converted to binary form for production builds (can be disabled), which improves
56+ loading times.
57+
58+ # Rendering
59+
60+ Physically-based rendering pipeline is now fully complete and supports image-based lighting (IBL), environment
61+ mapping, reflection probes.
62+
63+ Ability to select environment light source for scenes
64+ Use ambient occlusion from material info in ambient lighting shader
65+
66+ ## Render target for cameras (TODO)
67+
68+ It is now possible to specify render targets for cameras.
69+
70+ ## Particle System (TODO)
71+
72+ - Configurable fadeout margin for particle systems
73+
74+ ## Skybox (TODO)
75+
76+ Skybox was moved from camera to scene
77+
78+ ## Improved Debugging
79+
80+ Fyrox now tries to assign meaningful names for GPU objects to simplify debugging via various graphics
81+ debuggers. This option is off by default, but it can be enabled pretty easily:
82+
83+ ``` rust
84+ fn main () {
85+ let executor = Executor :: from_params (
86+ EventLoop :: new (). ok (),
87+ GraphicsContextParams {
88+ // This option forces the engine to use meaningful names for
89+ // GPU objects (textures, buffers, shaders, etc.)
90+ named_objects : true ,
91+ window_attributes : WindowAttributes :: default (),
92+ vsync : true ,
93+ msaa_sample_count : None ,
94+ graphics_server_constructor : Default :: default (),
95+ },
96+ );
97+ // ...
98+ }
99+ ```
100+
101+ Accurate GPU profiling is a hard task, because GPUs work independently of CPUs and any attempt to measure how
102+ much time is spent on GPU from the CPU side will only measure how much time was spent to prepare and issue
103+ commands for a GPU. That being said, profiling requires specialized tools for target GPUs. Use
104+ [ NVIDIA Nsight] ( https://developer.nvidia.com/nsight-systems ) or
105+ [ AMD Radeon GPU Profiler] ( https://gpuopen.com/rgp/ ) , depending on the GPU you're using.
106+ [ RenderDoc] ( https://renderdoc.org/ ) also has _ some_ ability to measure GPU times, but its precision is not
107+ very high.
108+
109+ Ability to fetch memory usage by the graphics server
110+ Track vertex/fragment shader line location
111+
112+ ## OpenGL Isolation
113+
114+ Fyrox used OpenGL from the very beginning (2019), because it was the easiest way to get crossplatform
115+ graphics on a wide variety of platforms (remember, wgpu didn't even exist at that time). While it still
116+ works ok, it is quite messy and has lots of bugs. This release isolated OpenGL in a separate crate and
117+ exposed public API for a graphics server that will be used in the future releases to transition to
118+ modern GAPIs.
119+
120+ # Scene (TODO)
121+
122+ Ability to flip sprite/rectangle nodes
123+
124+ # Input (TODO)
125+
126+ Simplified interaction with keyboard and mouse.
127+ Simplified way of getting input state
128+
129+ # Physics (TODO)
130+
131+ - Joint motors
132+
133+ # User Interface (TODO)
134+
135+ ## Performance (TODO)
136+
137+ This release contains a lot of performance improvements for the user interface system. Overall
138+ performance increase is about 50%.
139+
140+ ## Text Runs (TODO)
141+
142+
143+ - Added runs to FormattedText
144+
145+ ## Widget Materials (TODO)
146+
147+ - Ability to specify custom shaders for widgets
148+
149+ ## Docking (TODO)
150+
151+ Introducing multi-window docking tiles
152+ Movable scene tabs
153+
154+ # Editor (TODO)
155+
156+
157+
158+ Async loading for game and ui scenes in the editor
159+
160+
161+ Ability to reset editor layout
162+ Movable scene tabs
163+ - Ability to copy/paste values in the editor setting's inspector
164+ - Ability to copy/paste values in inspector
165+ - ` Copy Value ` + ` Paste Value ` options in context menu of ` Inspector `
166+
167+ ## Asset browser (TODO)
168+
169+ Asset browser got lots of improvements in this release.
170+
171+ Show selected path in the main window of the asset browser
172+ Placeholder icon for resources without preview generator
173+ Added placeholder icon for asset items whose preview is being generated
174+ Ability to inspect and edit supported assets in inspector
175+ Ability to move a folder with resource in the resource manager
176+ Highlight asset item when it accepts drop
177+
178+ Asset preview tooltips
179+ Added confirmation dialog for asset deletion
180+ Ability to rename assets in the asset browser
181+ Asset rename dialog improvements
182+
183+ Asset selector
184+
185+ ## Settings (TODO)
186+
187+ - Added a setting to modify editor camera's mouse sensitivity
188+
189+ ## 2D Grid
190+
191+ ![ 2d grid] ( 2d_grid.png )
192+
193+ The editor now shows grid in 2D mode. The grid's cell size can be configured in the editor settings.
194+
195+ # Reflection
196+
197+ Reflection system was improved as well. The most significant feature is an ability to clone an object through
198+ ` &dyn Reflect ` . This ability is used in the editor to copy/paste values in the inspector. Since not all objects
199+ that implement ` Reflect ` trait are cloneable, it is possible to mark such a type via ` #[reflect(non_cloneable)] `
200+ attribute.
201+
202+ Field metadata fetching was also changed, instead of six separate methods there are only two now:
203+ ` Reflect::fields_ref ` + ` Reflect::fields_mut ` . These methods returns an array of references to fields and
204+ their metadata.
205+
206+ # Documentation
207+
208+ This release contains significant improvements in the API documentation and the book. The book
209+ now covers around 80% of the engine. This number will be 100% with the stable release.
210+
211+ # What's Next?
31212
32213The next major goal for the project is to release Fyrox 1.0, which is planned for December 2025.
33214
34- ## Support
215+ # Support
35216
36217If you want to support the development of the project, click [ this link] ( https://fyrox.rs/sponsor.html ) . Also, you can help by
37218fixing one of the [ "good first issues" ] ( https://github.com/FyroxEngine/Fyrox/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22 ) ,
38219adding a desired feature to the engine, or making a contribution to the [ book] ( https://github.com/fyrox-book )
39220
40- ## Full List of Changes
221+ # Full List of Changes
41222
42223The list is split into four sections for ease of reading and finding particular information.
43224
@@ -169,6 +350,13 @@ The list is split into four sections for ease of reading and finding particular
169350- Fixed incorrect ambient lighting calculation
170351- Reduced memory usage when generating asset previews
171352- Clamp anisotropy in ` [1.0; 16.0] ` range to prevent video driver errors
353+ - Fixed ` uuid_provider ` macro
354+ - Correcting InheritableVariable::visit and physics integration parameters dt
355+ - Fixed selection button being clipped on material property editor
356+ - Fixed gimbal lock in GLTF animations
357+ - Prevent crash on empty uniform blocks
358+ - Update the material editor when hot-reloading a shader
359+ - Fixed crash on material hot-reloading when a property was removed
172360
173361## Added
174362
@@ -233,7 +421,7 @@ The list is split into four sections for ease of reading and finding particular
233421- Allow user to change editor icon and customize window title
234422- Tooltip for material resources in the material editor
235423- Ability to fetch memory usage by the graphics server
236- - Ability to disable asset convertion when exporting a project
424+ - Ability to disable asset conversion when exporting a project
237425- Convert ui scenes to binary format when exporting a project
238426- Print warning messages in the log when setting terrain height map
239427- Resource registry ` ResourceManager::register ` + ` ResourceManager::uuid_to_path ` methods
@@ -308,9 +496,28 @@ The list is split into four sections for ease of reading and finding particular
308496- Ability to re-bind styled properties of widgets in the editor
309497- Joint motors
310498- Show graphics server memory usage in the editor's rendering statistics
499+ - Simplified interaction with keyboard and mouse.
500+ - Added flake.nix for generated projects
501+ - Simplified way of getting input state
502+ - Ability to flip sprite/rectangle nodes
503+ - Show id of materials/surfaces in the editor
504+ - Added TypeUuidProvider impl for VectorN types
505+ - Property editors for Run + RunSet
506+ - Property editor for ` char ` + editors for mask char in formatted text
507+ - Named constants for mouse buttons + helper methods for mouse input
508+ - Ability to set runs via respective message
509+ - Added srgba8/srgb8 texture formats
510+ - Added pure color texture
511+ - Added non-euler-angles-based rotation track
311512
312513## Changed
313514
515+ - Preventing deadlocks by replacing ` lock ` with ` safe_lock `
516+ - Automatically destroy dead senders in resource event broadcasters
517+ - Renamed pool method typed_ref to try_get
518+ - Configurable render mode for ui
519+ - UI rendering api improvements
520+ - do not alter already loaded resource state when reloading it
314521- Use scene skybox if there's no specific environment map
315522- Do not prevent building without the opened scene
316523- Remove dependency on status code 101 (which is cargo specific, while built-tool has tool-agnostic design)
@@ -324,7 +531,7 @@ The list is split into four sections for ease of reading and finding particular
324531- Increased window size and inspector name column width in settings
325532- Smart selection of corner arc subdivision when drawing borders
326533- Recalculate clip bounds only for changed widgets
327- - Allow engine user control default editor settings
534+ - Allow the engine user to control the default editor settings
328535- Use ` MaterialResource ` in widgets instead of ` UntypedResource `
329536- Refactored ui renderer to use materials
330537- Documented keyboard focus
@@ -409,17 +616,18 @@ The list is split into four sections for ease of reading and finding particular
409616- Removed redundant empty impls of InteractionMode trait
410617- Share fbx materials as much as possible
411618- Store a style handle in the widget
619+ - Pass ui handle in ` Plugin::on_ui_message `
412620
413621## Removed
414622
415- - removed resource duplicates
416- - removed invalid assertions
417- - removed redundant ` ResourceLoaderAsAny ` trait
418- - removed wasm-unsupported ` set_border_color ` of gpu texture
419- - removed ` get_image+read_pixels ` methods from gpu texture
420- - removed impls for ` field/field_mut `
421- - removed redundant codegen for field/field_mut methods
422- - removed ` Relfect::fields/fields_mut ` methods
423- - removed ` owner_type_id ` field from ` FieldInfo `
424- - removed redundant ` type_name ` field from ` FieldInfo `
425- - removed ` Downcast ` trait, replaced with ` define_as_any_trait ` macro
623+ - Removed resource duplicates
624+ - Removed invalid assertions
625+ - Removed redundant ` ResourceLoaderAsAny ` trait
626+ - Removed wasm-unsupported ` set_border_color ` of gpu texture
627+ - Removed ` get_image+read_pixels ` methods from gpu texture
628+ - Removed impls for ` field/field_mut `
629+ - Removed redundant codegen for field/field_mut methods
630+ - Removed ` Relfect::fields/fields_mut ` methods
631+ - Removed ` owner_type_id ` field from ` FieldInfo `
632+ - Removed redundant ` type_name ` field from ` FieldInfo `
633+ - Removed ` Downcast ` trait, replaced with ` define_as_any_trait ` macro
0 commit comments