Commit graph

28000 commits

Author SHA1 Message Date
Gordon MacPherson 8197a611fa Rewrite FBX Importer to convert directly to Godot scene format
Co-authored-by: Gordon MacPherson <gordon@gordonite.tech>
Co-authored-by: Andrea Catania <info@andreacatania.com>
Co-authored-by: K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com>

This is a complete rewrite of the importer. It will give more deterministic behaviour and has been sponsored by IMVU inc, over 1 year has gone into the development of this importer to remove the burden of the FBX SDK.
This was my project for 1 entire year and I really enjoyed the opportunity to add to Godot.

Along the road of implementing fixes we implemented fbx pivots, animations and inheritance type handling, which in most cases works properly.
We have implemented animation and mesh skinning too this should work out of the box, if there are issues let us know.
It's designed so that you can expand this with ease, and fix bugs easily too.
It can import from Autodesk Maya and import into Godot, with pivots.
There are bits we could polish but for now this is good enough.

Additional fixes made before upstreaming:
- fixed memory leaks
- ensure consistent ordering on mac linux and windows for fbx tree. (very important for material import to be deterministic)
- disabled incorrect warnings for fbx_material
- added compatibility code for /RootNode/ so compat is not broken
- Optimise FBX - directly import triangles
- remove debug messages
- add messages for mesh id, mesh re-import is sometimes slow and we need to know what mesh is being worked on
- Document no longer uses unordered maps
- Removed some usages of &GetRequiredToken replaced with safe *GetRequiredToken() function
- Added parser debugging
- Added ERR_FAIL_CONDS for unsupported mesh formats (we can add these later super easy to do now)
- Add memory debugging for the Tokens and the TokenParser to make it safe
- Add memory initialisation to mesh.cpp surface_tool.h and mesh.h
- Initialise boolean flags properly
- Refactored to correct naming for the fbx_mesh_data.h so you know what data you are working on
- Disabled corruption caused by the FIXME:
- Fixed document reading indexes and index_to_direct vs indexes mode
- Fixed UV1 and UV2 coordinates
- Fixed importer failing to import version 7700 files
- Replaced memory handling in the FBX Document with pointers, before it was dereferencing invalid memory.
- Fixed typed properties
- Improved Document API
- Fixed bug with ProcessDOMConnection() not working with the bool flag set to true.
- Fixed FBX skinning not deforming for more than one single mesh
- Fixed FBX skeleton mapping and skin mapping not being applied properly (now retrieved from document skin list)
- Fixed set_bone_pose being used in final version()
- Fixed material properties exceeding 1.0.
- FBX Document parser revamped to use safe memory practices, and with graceful error messages.
- ScopePtr, TokenPtr and various internal types have been fleshed out to use proper typedefs across the codebase.
- Fixed memory leaks caused by token cleanup failing (now explicit cleanup step, no shared_ptr, etc)
- Fixed bug with PropertyTable not reading all properties and not cleaning up properly.
- Fixed smoothing groups not working
- Fixed normal duplications
- Fixed duplication check for pre-existing coordinates.
- Fixed performance of vertex lookup in large meshes being slow, using lookup table separate to the data for indexing, this reduces import time from 10 minutes of bistro down to 30 seconds.
- Fixed includes requiring absolute path in headers and cpp files using CPPPath.

Bugs/Features wish list:
- locator bones
- quat anim key interpolation (most fbx maya files have euler rotations from blender and maya, nobody uses this)
- some rigs skins scale up when SSC enabled inconsistently per bone
- some skins can disappear entirely
- material mapping needs expanded, but this will be done for 4.0 as it requires rewrite.

Workarounds for issues found until we patch them:
- mesh -> clear skin can resolve most of the bugs above.
- locators can be worked around by removing them before exporting your rig.
- some material properties wont always import, this is okay to override in the material properties.

**If you are having issues or need support fear not!**
Please provide minimal rigs which can reproduce issues as we can't spend a lot of time investigating each rig. We need a small example which breaks and we can then sort the problem. In some cases this is not possible so its okay to privately send models to us via IRC or a ticket and we can provide an email address, we won't reveal or disclose privately sent rig files to any companies, or to companies I work for, they will not be shared, only tested and bugs will be drawn up from the conclusions. Also include identifying information about what you did and how it didn't work. Please file each file separately in a bug report, unless the problem is the same.
This was sponsored by IMVU, and a special thanks to everyone who supported this project.

Signed-off-by: Gordon MacPherson <gordon@gordonite.tech>
2020-10-30 15:59:19 +00:00
Rémi Verschelde 078c632592
Merge pull request #43091 from bruvzg/ios_ver_check_no_except
[3.2] Do not raise exception if iOS SDK is not installed.
2020-10-26 14:28:41 +01:00
bruvzg b338ba1b27
[3.2] Do not raise exception if iOS SDK is not installed. 2020-10-26 14:15:44 +02:00
Rémi Verschelde 4ece7c287f
Merge pull request #43060 from clayjohn/3.2-FXAA-bug
[3.2]Remove extra exposure multiply in FXAA
2020-10-25 00:35:21 +02:00
clayjohn 505d469e50 Remove extra exposure multiply in FXAA 2020-10-24 13:11:27 -07:00
Rémi Verschelde a03af876d1
Merge pull request #43034 from akien-mga/3.2-ci-android
CI: Refactor Android workflow, use pre-installed SDK and NDK
2020-10-23 14:37:50 +02:00
Rémi Verschelde da9ef8993d
Merge pull request #43019 from mateosss/3.2
[3.2] Quickfix for misleading editor message when redeclaring variables
2020-10-23 14:30:02 +02:00
Rémi Verschelde 2d821cab2b
CI: Refactor Android workflow, use pre-installed SDK and NDK
No need to waste time downloading all this when it's readily available :)
Also use the official action to setup Java 8.

Also build both architectures (armv7 and arm64v8) and generate the APK,
so we can upload it.

Remove now unused and outdated `misc/ci/android-tools-linux.sh`.

(cherry picked from commit 5f19e1d571)
2020-10-23 13:27:44 +02:00
Mateo de Mayo edb79e584a Fix misleading editor message when redeclaring variables 2020-10-22 18:32:34 -03:00
Rémi Verschelde db422017a3
Merge pull request #42990 from lawnjelly/legacy_poly_fix
Reverting changes to legacy polys and generic prims
2020-10-22 16:23:52 +02:00
Rémi Verschelde 8db6ee27c0
Merge pull request #43002 from akien-mga/3.2-ci-sync
CI: Sync configuration with master branch
2020-10-22 15:34:50 +02:00
Rémi Verschelde 3ebd5a2301
CI: Sync configuration with master branch
- Factors out common arguments in SCONSFLAGS
- Upload artifacts
- Disable debug symbols for release templates
2020-10-22 14:04:37 +02:00
lawnjelly debda7f411 Reverting changes to legacy polys and generic prims
Due to my less than eagle-like view over these functions I had assumed they were passing in a single buffer input for the changes to make buffer uploading more efficient. They aren't, which is less than ideal.

So these particular changes should be reverted. When I have some more time I'll see whether the API for these calls can be changed, because as is the multiple glSubBufferData calls could be causing stalls on some hardware.
2020-10-22 10:01:25 +01:00
Rémi Verschelde 438e4f1e1a
Merge pull request #42981 from lyuma/command_queue_fix_3.2
[3.2] Backport Command queue fix
2020-10-22 09:55:49 +02:00
Lyuma f994666bbe core/command_queue_mt: Fix crash/hang when buffer fills up
This patch fixes two related issues. One is the race condition in issue #42107..
The other is a crash which happens when the reader is lapped near the end of the buffer.

Backport of 48e8da4 to 3.2
2020-10-21 16:39:54 -07:00
Lyuma 074a098df6 core/command_queue_mt: Customizable size
Partial backport of 9f654b4 to 3.2
2020-10-21 16:39:52 -07:00
Rémi Verschelde 2e073ecbea
Merge pull request #42927 from lawnjelly/octree_default
Change render octree balance default
2020-10-21 10:19:34 +02:00
Rémi Verschelde 56a0981ad6
Merge pull request #42955 from bruvzg/ios_sdk_osxcross
[3.2] Disable iOS SDK version check on osxcross.
2020-10-21 08:13:08 +02:00
bruvzg df6ea27ab3
[3.2] Disable iOS SDK version check on osxcross.
Currently, osxcross `xcrun` supports only macOS SDKs.
2020-10-21 07:56:05 +03:00
Rémi Verschelde 150f9ce807
Merge pull request #42009 from Calinou/theme-node-type-3.2
Rename the `type` parameter to `node_type` in Theme and Control (3.2)
2020-10-20 15:58:41 +02:00
Rémi Verschelde ec10141fd2
Merge pull request #42006 from Calinou/add-fxaa-3.2
Add fast approximate antialiasing (FXAA) to Viewport
2020-10-20 15:48:45 +02:00
Rémi Verschelde 3b4005026d
Merge pull request #42593 from bruvzg/ios_sdk_ver_check
[3.2] Add iOS SDK version check.
2020-10-20 15:12:59 +02:00
Rémi Verschelde 0237d42809
Merge pull request #42547 from neikeq/3.2-rework-csharp-build-panel
[3.2] C#: Re-work solution build output panel
2020-10-20 15:12:30 +02:00
Rémi Verschelde 0181819339
Merge pull request #42773 from bruvzg/macos_inertia_32
[macOS, 3.2] Suppress momentum scrolling after key press.
2020-10-20 15:11:02 +02:00
Rémi Verschelde e78fbd94e5
Merge pull request #42852 from naithar/fix/in-app-store
[3.2] [iOS] InAppStore fixes
2020-10-20 15:09:41 +02:00
Rémi Verschelde da4f778410
Merge pull request #42936 from timothyqiu/error-return
3.2: Fixes crash after using enums in export variables
2020-10-20 15:07:29 +02:00
Hugo Locurcio af45c97652
Add fast approximate antialiasing (FXAA) to Viewport
This backports FXAA from the `master` branch.

Co-authored-by: Clay John <claynjohn@gmail.com>
2020-10-20 14:54:52 +02:00
Rémi Verschelde eefb417614
Merge pull request #42935 from akien-mga/3.2-ci-server
CI: Add Linux headless/server builds
2020-10-20 14:52:31 +02:00
Rémi Verschelde 759f3ca4cf
CI: Add Linux headless/server builds
Adapted from linux_builds.yml.
2020-10-20 13:47:53 +02:00
Rémi Verschelde 9de391e9a7
Merge pull request #42932 from lawnjelly/rast_dummy_sync
Resync RasterizerDummy to Rasterizer
2020-10-20 13:47:18 +02:00
Rémi Verschelde 04fb41a0f3
Merge pull request #42531 from BastiaanOlij/add_get_native_handle
Add get native handle
2020-10-20 13:27:07 +02:00
lawnjelly a63d8aa634 Resync RasterizerDummy to Rasterizer 2020-10-20 11:59:13 +01:00
Haoyu Qiu 82900e54ea Fixes crash after using enums in export variables 2020-10-20 18:41:41 +08:00
Bastiaan Olij 1ea7358405 Add get_native_handle to OS 2020-10-20 20:23:37 +11:00
lawnjelly 10cdfda894 Change render octree balance default
Another bug in the octree has been discovered which can cause flickering in rare circumstances : #42895

For safety until this is fixed properly this PR reverts the default state of the octree to match the old behaviour, which doesn't appear exhibit the bug (or at least not as readily).
2020-10-20 08:49:52 +01:00
Rémi Verschelde f442dc062a
Merge pull request #42056 from Yetizone/negative_lights_behavior
tonemap.glsl: Ensure color parameter of tonemap_reinhard() is positive
2020-10-19 22:40:24 +02:00
Rémi Verschelde a239894827
Merge pull request #42902 from akien-mga/3.2-cherrypicks
Cherry-picks for the 3.2 branch (future 3.2.4) - 5th batch
2020-10-19 22:14:05 +02:00
Juan Linietsky 388ebfb498
Merge pull request #41629 from JFonS/disable_baked_lights
Disable lights for objects with baked lighting
2020-10-19 14:12:50 -03:00
Rémi Verschelde 311bdbc16c
doc: Sync classref with current source 2020-10-19 17:13:30 +02:00
Rémi Verschelde 4028414e0e
Revert "Made toplevel a property for Node3D and CanvasItem"
This reverts commit a726d011d5.
2020-10-19 16:58:56 +02:00
Rémi Verschelde 4287af5148
doc: Make docs.godotengine.org links point to 3.2 branch 2020-10-19 16:10:01 +02:00
Aaron Franke 069ed4ec63
Link to demos from within the class reference
(cherry picked from commit 439be614f4)
2020-10-19 16:10:01 +02:00
Gabriel Van Eyck 5b9c16a324
Keep 'Editor Description' metadata when changing a Node's type
Also copy edit group/lock when replacing a Node3D

(cherry picked from commit a22275c8a2)
2020-10-19 16:10:01 +02:00
Aaron Franke 730d42d8a4
Add GetStringFromUTF8 and GetStringFromASCII
(cherry picked from commit 029de52001)
2020-10-19 16:10:01 +02:00
Tomasz Chabora d9bd61508b
Document that setting node name will remove @s
(cherry picked from commit 02ce2f4bb9)
2020-10-19 16:10:01 +02:00
Hugo Locurcio 8c6a5b06a2
Clarify that MultiMesh.set_instance_color() multiplies vertex colors
This closes https://github.com/godotengine/godot-docs/issues/4273.

(cherry picked from commit 6975bd106a)
2020-10-19 16:10:01 +02:00
Pedro J. Estébanez aea87e9353
Fix application of window in FFT
(cherry picked from commit 257ba4a7fb)
2020-10-19 16:10:00 +02:00
Hugo Locurcio 8d445f3f9f
Link the Random number generation tutorial in the class reference
(cherry picked from commit 802c1e4df1)
2020-10-19 16:10:00 +02:00
Fabio Alessandrelli 7a0710f91a
EditorNode now copies all drag and dropped files.
The editor used to only copy drag-dropped files in the File System pane
if the given file was a valid resource, or had a specific file format
(ttf, otf).
With this PR, all drag and dropped files are copied instead, no matter
their extension.

(cherry picked from commit 410b324740)
2020-10-19 16:10:00 +02:00
Haoyu Qiu 9119560d4d
Fixes HTTPClient::poll crash after connection is self-assigned
(cherry picked from commit 8226cee8d8)
2020-10-19 16:10:00 +02:00