Skip to content

Commit 1ed606a

Browse files
committed
continue on 1.0.0-rc.1 draft
1 parent 94d4331 commit 1ed606a

File tree

2 files changed

+229
-21
lines changed

2 files changed

+229
-21
lines changed

drafts/2025-02-04-fyrox-game-engine-1.0.0-rc.1.md

Lines changed: 229 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

32213
The next major goal for the project is to release Fyrox 1.0, which is planned for December 2025.
33214

34-
## Support
215+
# Support
35216

36217
If you want to support the development of the project, click [this link](https://fyrox.rs/sponsor.html). Also, you can help by
37218
fixing one of the ["good first issues" ](https://github.com/FyroxEngine/Fyrox/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22),
38219
adding 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

42223
The 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

drafts/2d_grid.png

142 KB
Loading

0 commit comments

Comments
 (0)