diff --git a/addons/godotopenxrvendors/.bin/android/debug/godotopenxrkhronos-debug.aar b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrkhronos-debug.aar new file mode 100644 index 0000000..d3ebbb4 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrkhronos-debug.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/debug/godotopenxrlynx-debug.aar b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrlynx-debug.aar new file mode 100644 index 0000000..f432aa2 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrlynx-debug.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/debug/godotopenxrmeta-debug.aar b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrmeta-debug.aar new file mode 100644 index 0000000..e28037b Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrmeta-debug.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/debug/godotopenxrpico-debug.aar b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrpico-debug.aar new file mode 100644 index 0000000..cc5e294 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/debug/godotopenxrpico-debug.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/release/godotopenxrkhronos-release.aar b/addons/godotopenxrvendors/.bin/android/release/godotopenxrkhronos-release.aar new file mode 100644 index 0000000..16c1242 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/release/godotopenxrkhronos-release.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/release/godotopenxrlynx-release.aar b/addons/godotopenxrvendors/.bin/android/release/godotopenxrlynx-release.aar new file mode 100644 index 0000000..e98daf6 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/release/godotopenxrlynx-release.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/release/godotopenxrmeta-release.aar b/addons/godotopenxrvendors/.bin/android/release/godotopenxrmeta-release.aar new file mode 100644 index 0000000..3cb5a1e Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/release/godotopenxrmeta-release.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/release/godotopenxrpico-release.aar b/addons/godotopenxrvendors/.bin/android/release/godotopenxrpico-release.aar new file mode 100644 index 0000000..8157a6b Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/release/godotopenxrpico-release.aar differ diff --git a/addons/godotopenxrvendors/.bin/android/template_debug/arm64/libgodotopenxrvendors.so b/addons/godotopenxrvendors/.bin/android/template_debug/arm64/libgodotopenxrvendors.so new file mode 100644 index 0000000..5faad70 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/template_debug/arm64/libgodotopenxrvendors.so differ diff --git a/addons/godotopenxrvendors/.bin/android/template_release/arm64/libgodotopenxrvendors.so b/addons/godotopenxrvendors/.bin/android/template_release/arm64/libgodotopenxrvendors.so new file mode 100644 index 0000000..704d383 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/android/template_release/arm64/libgodotopenxrvendors.so differ diff --git a/addons/godotopenxrvendors/.bin/linux/template_debug/x86_64/libgodotopenxrvendors.so b/addons/godotopenxrvendors/.bin/linux/template_debug/x86_64/libgodotopenxrvendors.so new file mode 100644 index 0000000..98b3176 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/linux/template_debug/x86_64/libgodotopenxrvendors.so differ diff --git a/addons/godotopenxrvendors/.bin/linux/template_release/x86_64/libgodotopenxrvendors.so b/addons/godotopenxrvendors/.bin/linux/template_release/x86_64/libgodotopenxrvendors.so new file mode 100644 index 0000000..f95286e Binary files /dev/null and b/addons/godotopenxrvendors/.bin/linux/template_release/x86_64/libgodotopenxrvendors.so differ diff --git a/addons/godotopenxrvendors/.bin/macos/template_debug/libgodotopenxrvendors.macos.framework/libgodotopenxrvendors.macos b/addons/godotopenxrvendors/.bin/macos/template_debug/libgodotopenxrvendors.macos.framework/libgodotopenxrvendors.macos new file mode 100644 index 0000000..736996d Binary files /dev/null and b/addons/godotopenxrvendors/.bin/macos/template_debug/libgodotopenxrvendors.macos.framework/libgodotopenxrvendors.macos differ diff --git a/addons/godotopenxrvendors/.bin/macos/template_release/libgodotopenxrvendors.macos.framework/libgodotopenxrvendors.macos b/addons/godotopenxrvendors/.bin/macos/template_release/libgodotopenxrvendors.macos.framework/libgodotopenxrvendors.macos new file mode 100644 index 0000000..824ca51 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/macos/template_release/libgodotopenxrvendors.macos.framework/libgodotopenxrvendors.macos differ diff --git a/addons/godotopenxrvendors/.bin/windows/template_debug/x86_64/libgodotopenxrvendors.dll b/addons/godotopenxrvendors/.bin/windows/template_debug/x86_64/libgodotopenxrvendors.dll new file mode 100644 index 0000000..fe482c6 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/windows/template_debug/x86_64/libgodotopenxrvendors.dll differ diff --git a/addons/godotopenxrvendors/.bin/windows/template_release/x86_64/libgodotopenxrvendors.dll b/addons/godotopenxrvendors/.bin/windows/template_release/x86_64/libgodotopenxrvendors.dll new file mode 100644 index 0000000..6309669 Binary files /dev/null and b/addons/godotopenxrvendors/.bin/windows/template_release/x86_64/libgodotopenxrvendors.dll differ diff --git a/addons/godotopenxrvendors/.gitignore b/addons/godotopenxrvendors/.gitignore new file mode 100644 index 0000000..e269e91 --- /dev/null +++ b/addons/godotopenxrvendors/.gitignore @@ -0,0 +1,2 @@ +# Ignore copies of the binaries Godot makes at startup +.bin/windows/*/*/~*.dll diff --git a/addons/godotopenxrvendors/GodotOpenXRVendors_CHANGES.md b/addons/godotopenxrvendors/GodotOpenXRVendors_CHANGES.md new file mode 100644 index 0000000..5e9d812 --- /dev/null +++ b/addons/godotopenxrvendors/GodotOpenXRVendors_CHANGES.md @@ -0,0 +1,60 @@ +# Change history for the Godot OpenXR loaders asset + +## 3.0.1 +- Fixed hand tracking issue + +## 3.0.0 +- Merge GDExtension into a single implementation +- Upgrade Android, Gradle, Godot and Kotlin dependencies +- Add XR_FB_face_tracking support +- Update to OpenXR 1.0.34 headers +- Add XR_FB_render_model extension wrapper and OpenXRFBRenderModel node +- Add XR_FB_passthrough extension wrapper +- Add XR_FB_hand_tracking_mesh extension wrapper and OpenXRFbHandTrackingMesh node +- Add XR_FB_hand_tracking_aim support +- Update Meta OpenXR mobile SDK to version 62 +- Add a developer-facing API for interacting with scene anchors +- Add support for developer-created spatial anchors via XR_FB_spatial_entity +- Add XR_FB_hand_tracking_capsules extension wrapper +- Add OpenXRFbPassthroughGeometry node +- Add OpenXRMetaPassthroughColorLut +- Add feature flags to Khronos loader for HTC +- Add XR_HTC_passthrough extension wrapper +- Add manifest entries to Pico and switch Pico to using the Khronos Loader +- Add Meta Passthrough tutorial doc + +## 2.0.3 +- Migrate the export scripts from gdscript to C++ via gdextension +- Manually request eye tracking permission if it's included in the app manifest +- Change how singletons are accessed +- Fix the plugin version for the export plugins +- Add OpenXR extension wrappers for fb_scene, fb_spatial_entity, fb_spatial_entity_query, fb_spatial_entity_container + +## 2.0.0 +- Update to the new Godot 4.2 Android plugin packaging format +- Update the plugin to Godot v2 Android plugin +- Update to the Godot 4.2 Android library +- Add warning when multiple loaders are selected +- Add configs for the OpenXR Eye gaze interaction extension +- Add the ability to customize supported Meta devices +- Add support for Quest 3 devices +- Update the directory structure for the v2 plugin +- Update Meta OpenXR mobile SDK to version 57 +- Update the java version to 17 +- Rename the plugin to 'Godot OpenXR Vendors' +- Add godot-cpp dependency +- Add OpenXR 1.0.30 headers +- Add support for the Meta scene capture API (Donated by [Migeran](https://migeran.com)) + +## 1.1.0 +- Update Meta OpenXR loader to version 54 +- Update PICO OpenXR loader to version 2.2.0 +- Bump dependencies versions to match the latest Godot 4.x stable version (v4.0.3) + +## 1.0.0 +- First version +- Added support for Meta Quest loader +- Added support for Pico loader +- Added support for Khronos loader (Magic Leap 2, HTC, etc.) +- Added support for Lynx loader +- Add logic to automatically publish the Godot OpenXR loaders libraries to mavencentral on release diff --git a/addons/godotopenxrvendors/khronos/LICENSE b/addons/godotopenxrvendors/khronos/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/addons/godotopenxrvendors/khronos/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/addons/godotopenxrvendors/meta/LICENSE.txt b/addons/godotopenxrvendors/meta/LICENSE.txt new file mode 100644 index 0000000..6516fa3 --- /dev/null +++ b/addons/godotopenxrvendors/meta/LICENSE.txt @@ -0,0 +1,3 @@ +Copyright © Facebook Technologies, LLC and its affiliates. All rights reserved. + +Your use of this SDK or tool is subject to the Oculus SDK License Agreement, available at https://developer.oculus.com/licenses/oculussdk/ \ No newline at end of file diff --git a/addons/godotopenxrvendors/pico/LICENSE b/addons/godotopenxrvendors/pico/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/addons/godotopenxrvendors/pico/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/addons/godotopenxrvendors/plugin.gdextension b/addons/godotopenxrvendors/plugin.gdextension new file mode 100644 index 0000000..c215b51 --- /dev/null +++ b/addons/godotopenxrvendors/plugin.gdextension @@ -0,0 +1,18 @@ +[configuration] + +entry_symbol = "plugin_library_init" +compatibility_minimum = "4.3" +android_aar_plugin = true + +[libraries] + +android.debug.arm64 = "res://addons/godotopenxrvendors/.bin/android/template_debug/arm64/libgodotopenxrvendors.so" +android.release.arm64 = "res://addons/godotopenxrvendors/.bin/android/template_release/arm64/libgodotopenxrvendors.so" +android.debug.x86_64 = "res://addons/godotopenxrvendors/.bin/android/template_debug/x86_64/libgodotopenxrvendors.so" +android.release.x86_64 = "res://addons/godotopenxrvendors/.bin/android/template_release/x86_64/libgodotopenxrvendors.so" +macos.debug = "res://addons/godotopenxrvendors/.bin/macos/template_debug/libgodotopenxrvendors.macos.framework" +macos.release = "res://addons/godotopenxrvendors/.bin/macos/template_release/libgodotopenxrvendors.macos.framework" +windows.debug.x86_64 = "res://addons/godotopenxrvendors/.bin/windows/template_debug/x86_64/libgodotopenxrvendors.dll" +windows.release.x86_64 = "res://addons/godotopenxrvendors/.bin/windows/template_release/x86_64/libgodotopenxrvendors.dll" +linux.debug.x86_64 = "res://addons/godotopenxrvendors/.bin/linux/template_debug/x86_64/libgodotopenxrvendors.so" +linux.release.x86_64 = "res://addons/godotopenxrvendors/.bin/linux/template_release/x86_64/libgodotopenxrvendors.so" diff --git a/assets/models/kenney.nl/Textures/colormap.png.import b/assets/models/kenney.nl/Textures/colormap.png.import index 6f2982c..ef65f7a 100644 --- a/assets/models/kenney.nl/Textures/colormap.png.import +++ b/assets/models/kenney.nl/Textures/colormap.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://gs4r6ybeb02j" path.s3tc="res://.godot/imported/colormap.png-4c5fbca8c57b71f446d305ac75a47fe1.s3tc.ctex" +path.etc2="res://.godot/imported/colormap.png-4c5fbca8c57b71f446d305ac75a47fe1.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/models/kenney.nl/Textures/colormap.png" -dest_files=["res://.godot/imported/colormap.png-4c5fbca8c57b71f446d305ac75a47fe1.s3tc.ctex"] +dest_files=["res://.godot/imported/colormap.png-4c5fbca8c57b71f446d305ac75a47fe1.s3tc.ctex", "res://.godot/imported/colormap.png-4c5fbca8c57b71f446d305ac75a47fe1.etc2.ctex"] [params] diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..ab44e21 --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,234 @@ +[preset.0] + +name="Android" +platform="Android" +runnable=true +advanced_options=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=true +gradle_build/gradle_build_directory="" +gradle_build/android_source_template="" +gradle_build/compress_native_libraries=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=false +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +version/code=1 +version/name="" +package/unique_name="com.example.$genname" +package/name="" +package/signed=true +package/app_category=2 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +package/show_in_android_tv=false +package/show_in_app_library=true +package/show_as_launcher_app=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=1 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/post_notifications=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false +xr_features/enable_khronos_plugin=false +khronos_xr_features/vendors=0 +khronos_xr_features/htc/hand_tracking=0 +khronos_xr_features/htc/tracker=0 +khronos_xr_features/htc/eye_tracking=0 +khronos_xr_features/htc/lip_expression=0 +xr_features/enable_lynx_plugin=false +xr_features/enable_meta_plugin=true +meta_xr_features/eye_tracking=0 +meta_xr_features/face_tracking=0 +meta_xr_features/body_tracking=0 +meta_xr_features/hand_tracking=0 +meta_xr_features/hand_tracking_frequency=0 +meta_xr_features/passthrough=2 +meta_xr_features/render_model=0 +meta_xr_features/use_anchor_api=false +meta_xr_features/use_scene_api=false +meta_xr_features/use_overlay_keyboard=false +meta_xr_features/use_experimental_features=false +meta_xr_features/boundary_mode=0 +meta_xr_features/quest_1_support=false +meta_xr_features/quest_2_support=true +meta_xr_features/quest_3_support=true +meta_xr_features/quest_pro_support=true +xr_features/enable_pico_plugin=false +pico_xr_features/eye_tracking=0 +pico_xr_features/face_tracking=0 diff --git a/icon.svg.import b/icon.svg.import index e4222b3..4757b9a 100644 --- a/icon.svg.import +++ b/icon.svg.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cmlsy0imwepqs" path.s3tc="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex" +path.etc2="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://icon.svg" -dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex"] +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex", "res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.etc2.ctex"] [params] diff --git a/main.tscn b/main.tscn index cd0b6ae..00245c6 100644 --- a/main.tscn +++ b/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://xiyknqrsrmws"] +[gd_scene load_steps=23 format=3 uid="uid://xiyknqrsrmws"] [ext_resource type="PackedScene" uid="uid://dcv8xw0aeturp" path="res://entities/viewer/viewer.tscn" id="1_ann0f"] [ext_resource type="PackedScene" uid="uid://bn6vxev7totc8" path="res://entities/plinth/plinth.tscn" id="3_hl5po"] @@ -11,6 +11,12 @@ [ext_resource type="PackedScene" uid="uid://csh1kbx37l5el" path="res://shaders/007_reflections/reflections.tscn" id="9_vxv4a"] [ext_resource type="PackedScene" uid="uid://bjoxcmy6sy8lb" path="res://shaders/008_normals/normals.tscn" id="10_cqg4s"] [ext_resource type="PackedScene" uid="uid://c0c1k04qmog56" path="res://shaders/000_playground/playground.tscn" id="11_u0jti"] +[ext_resource type="FontFile" uid="uid://d268g1dy6fv6t" path="res://assets/fonts/FrederickatheGreat-Regular.ttf" id="12_mj3dk"] +[ext_resource type="PackedScene" uid="uid://bcsb32y37da3f" path="res://shaders/009_fresnel/fresnel.tscn" id="12_mx7ux"] +[ext_resource type="PackedScene" uid="uid://drgqrnj1otb25" path="res://shaders/010_outline/outline.tscn" id="13_3375a"] +[ext_resource type="Script" path="res://openxr.gd" id="15_a8hdi"] +[ext_resource type="PackedScene" uid="uid://cjcfr8tqdhbro" path="res://shaders/011_circle/circle.tscn" id="15_dijaw"] +[ext_resource type="PackedScene" uid="uid://2o8nbxn0x7of" path="res://shaders/012_polygon/polygon.tscn" id="16_j3uxc"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_37bgm"] sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) @@ -22,6 +28,7 @@ sky_material = SubResource("ProceduralSkyMaterial_37bgm") [sub_resource type="Environment" id="Environment_gem6o"] background_mode = 2 sky = SubResource("Sky_osijm") +ambient_light_color = Color(1, 1, 1, 1) tonemap_mode = 2 glow_enabled = true @@ -33,6 +40,7 @@ size = Vector2(100, 20) [node name="Main" type="Node3D"] [node name="WorldEnvironment" type="WorldEnvironment" parent="."] +unique_name_in_owner = true environment = SubResource("Environment_gem6o") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] @@ -51,6 +59,7 @@ shape = SubResource("WorldBoundaryShape3D_l71tc") metadata/_edit_lock_ = true [node name="Viewer" parent="." instance=ExtResource("1_ann0f")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.6964, 0, 2.84986) [node name="Examples" type="Node3D" parent="."] @@ -141,3 +150,102 @@ title = "Normals" [node name="Normals" parent="Examples/008Normals" instance=ExtResource("10_cqg4s")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) + +[node name="EffectsLabel" type="Node3D" parent="Examples"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17, 1, 0) + +[node name="EffectsLabel3D" type="Label3D" parent="Examples/EffectsLabel"] +pixel_size = 0.003 +billboard = 1 +modulate = Color(0.54902, 0.6, 0.74902, 1) +outline_modulate = Color(0.152941, 0.176471, 0.25098, 1) +text = "EFFECTS" +font = ExtResource("12_mj3dk") +font_size = 128 + +[node name="EffectsArrowLabel3D" type="Label3D" parent="Examples/EffectsLabel"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.4, 0) +pixel_size = 0.003 +modulate = Color(0.54902, 0.6, 0.74902, 1) +outline_modulate = Color(0.152941, 0.176471, 0.25098, 1) +text = "--->" +font = ExtResource("12_mj3dk") +font_size = 128 + +[node name="ShapesLabel" type="Node3D" parent="Examples"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17, 1, -4) + +[node name="ShapesLabel3D" type="Label3D" parent="Examples/ShapesLabel"] +pixel_size = 0.003 +billboard = 1 +modulate = Color(0.54902, 0.6, 0.74902, 1) +outline_modulate = Color(0.152941, 0.176471, 0.25098, 1) +text = "SHAPES" +font = ExtResource("12_mj3dk") +font_size = 128 + +[node name="ShapesArrowLabel3D" type="Label3D" parent="Examples/ShapesLabel"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.4, 0) +pixel_size = 0.003 +modulate = Color(0.54902, 0.6, 0.74902, 1) +outline_modulate = Color(0.152941, 0.176471, 0.25098, 1) +text = "--->" +font = ExtResource("12_mj3dk") +font_size = 128 + +[node name="009Fresnel" type="Node3D" parent="Examples"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 0) + +[node name="Plinth" parent="Examples/009Fresnel" instance=ExtResource("3_hl5po")] +title = "Fresnel" + +[node name="Fresnel" parent="Examples/009Fresnel" instance=ExtResource("12_mx7ux")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) + +[node name="010Outline" type="Node3D" parent="Examples"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, 0) + +[node name="Plinth" parent="Examples/010Outline" instance=ExtResource("3_hl5po")] +prefix = "010" +title = "Outline" + +[node name="Outline" parent="Examples/010Outline" instance=ExtResource("13_3375a")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) + +[node name="011Circle" type="Node3D" parent="Examples"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -4) + +[node name="Plinth" parent="Examples/011Circle" instance=ExtResource("3_hl5po")] +prefix = "011" +title = "Circle" + +[node name="Circle" parent="Examples/011Circle" instance=ExtResource("15_dijaw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) + +[node name="012Polygon" type="Node3D" parent="Examples"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -4) + +[node name="Plinth" parent="Examples/012Polygon" instance=ExtResource("3_hl5po")] +prefix = "012" +title = "Polygon" + +[node name="Polygon" parent="Examples/012Polygon" instance=ExtResource("16_j3uxc")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) + +[node name="013Rectangles" type="Node3D" parent="Examples"] + +[node name="Plinth" parent="Examples/013Rectangles" instance=ExtResource("3_hl5po")] + +[node name="OpenXR" type="Node" parent="."] +unique_name_in_owner = true +script = ExtResource("15_a8hdi") + +[node name="XROrigin3D" type="XROrigin3D" parent="."] + +[node name="XRCamera3D" type="XRCamera3D" parent="XROrigin3D"] + +[node name="LeftHand" type="XRController3D" parent="XROrigin3D"] +tracker = &"left_hand" + +[node name="RightHand" type="XRController3D" parent="XROrigin3D"] +tracker = &"right_hand" diff --git a/openxr.gd b/openxr.gd new file mode 100644 index 0000000..d4f733a --- /dev/null +++ b/openxr.gd @@ -0,0 +1,110 @@ +extends Node + +signal focus_lost +signal focus_gained +signal pose_recentered + +@export var maximum_refresh_rate: int = 90 + +@onready var viewport: Viewport = get_viewport() +@onready var environment: Environment = %WorldEnvironment.environment +@onready var openxr_handler: Node = %OpenXR +var openxr_interface: XRInterface +var xr_is_focussed: bool = false + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + openxr_interface = XRServer.find_interface("OpenXR") + + if openxr_interface and openxr_interface.is_initialized(): + initialize_openxr() + + +func initialize_openxr() -> void: + # Enable XR on our viewport + get_viewport().use_xr = true + + # Make sure v-sync is off, v-sync is handled by OpenXR + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) + + # Enable V"res://main.tscn"RS + if RenderingServer.get_rendering_device(): + viewport.vrs_mode = Viewport.VRS_XR + elif int(ProjectSettings.get_setting("xr/openxr/foveation_level")) == 0: + push_warning("OpenXR: Recommend setting Foveation level to High in Project Settings") + + # Enable Passthrough + environment.background_mode = Environment.BG_COLOR + environment.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR + environment.ambient_light_color = Color(0.5, 0.5, 0.5) + + # Connect the OpenXR events + openxr_interface.session_begun.connect(_on_openxr_session_begun) + openxr_interface.session_visible.connect(_on_openxr_visible_state) + openxr_interface.session_focussed.connect(_on_openxr_focussed_state) + openxr_interface.session_stopping.connect(_on_openxr_stopping) + openxr_interface.pose_recentered.connect(_on_openxr_pose_recentered) + + +func _on_openxr_session_begun() -> void: + # Get the reported refresh rate + var current_refresh_rate: float = openxr_interface.get_display_refresh_rate() + #if current_refresh_rate > 0: + # print("OpenXR: Refresh rate reported as ", str(current_refresh_rate)) + #else: + # print("OpenXR: No refresh rate given by XR runtime") + + # See if we have a better refresh rate available + var new_rate: float = current_refresh_rate + var available_rates: Array = openxr_interface.get_available_display_refresh_rates() + if available_rates.size() == 0: + print("OpenXR: Target does not support refresh rate extension") + elif available_rates.size() == 1: + # Only one available, so use it + new_rate = available_rates[0] + else: + for rate: float in available_rates: + if rate > new_rate and rate <= maximum_refresh_rate: + new_rate = rate + + # Did we find a better rate? + if current_refresh_rate != new_rate: + print("OpenXR: Setting refresh rate to ", str(new_rate)) + openxr_interface.set_display_refresh_rate(new_rate) + current_refresh_rate = new_rate + + # Match the physics rate + Engine.physics_ticks_per_second = int(current_refresh_rate) + + +func _on_openxr_visible_state() -> void: + # We always pass this state at startup, + # but the second time we get this it means our player took the headset off + if xr_is_focussed: + xr_is_focussed = false + + # Pause our game + get_tree().paused = true + + focus_lost.emit() + + +func _on_openxr_focussed_state() -> void: + xr_is_focussed = true + + # unpause our game + get_tree().paused = false + + focus_gained.emit() + + +func _on_openxr_stopping() -> void: + # on_openxr_stopping.emit() + # Our session is being stopped. + print("OpenXR: Stopping session") + + +func _on_openxr_pose_recentered() -> void: + # User recentered view, we have to react to this by recentering the view + # This is game implementation dependent + pose_recentered.emit() diff --git a/openxr_action_map.tres b/openxr_action_map.tres new file mode 100644 index 0000000..4c78463 --- /dev/null +++ b/openxr_action_map.tres @@ -0,0 +1,929 @@ +[gd_resource type="OpenXRActionMap" load_steps=221 format=3 uid="uid://s3gi5u7rt4nd"] + +[sub_resource type="OpenXRAction" id="OpenXRAction_i0tao"] +resource_name = "trigger" +localized_name = "Trigger" +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_q5tus"] +resource_name = "trigger_click" +localized_name = "Trigger click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_bb8eo"] +resource_name = "trigger_touch" +localized_name = "Trigger touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_4w0qq"] +resource_name = "grip" +localized_name = "Grip" +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_jhcbk"] +resource_name = "grip_click" +localized_name = "Grip click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_86tc3"] +resource_name = "grip_force" +localized_name = "Grip force" +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_luebt"] +resource_name = "primary" +localized_name = "Primary joystick/thumbstick/trackpad" +action_type = 2 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_pjpfv"] +resource_name = "primary_click" +localized_name = "Primary joystick/thumbstick/trackpad click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_t2613"] +resource_name = "primary_touch" +localized_name = "Primary joystick/thumbstick/trackpad touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_r73ja"] +resource_name = "secondary" +localized_name = "Secondary joystick/thumbstick/trackpad" +action_type = 2 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_n00b4"] +resource_name = "secondary_click" +localized_name = "Secondary joystick/thumbstick/trackpad click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_nixn4"] +resource_name = "secondary_touch" +localized_name = "Secondary joystick/thumbstick/trackpad touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_ua5rg"] +resource_name = "menu_button" +localized_name = "Menu button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_or367"] +resource_name = "select_button" +localized_name = "Select button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_0jiyx"] +resource_name = "ax_button" +localized_name = "A/X button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_2t4rh"] +resource_name = "ax_touch" +localized_name = "A/X touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_8pusg"] +resource_name = "by_button" +localized_name = "B/Y button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_yc5u7"] +resource_name = "by_touch" +localized_name = "B/Y touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_qx1hv"] +resource_name = "default_pose" +localized_name = "Default pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right", "/user/vive_tracker_htcx/role/left_foot", "/user/vive_tracker_htcx/role/right_foot", "/user/vive_tracker_htcx/role/left_shoulder", "/user/vive_tracker_htcx/role/right_shoulder", "/user/vive_tracker_htcx/role/left_elbow", "/user/vive_tracker_htcx/role/right_elbow", "/user/vive_tracker_htcx/role/left_knee", "/user/vive_tracker_htcx/role/right_knee", "/user/vive_tracker_htcx/role/waist", "/user/vive_tracker_htcx/role/chest", "/user/vive_tracker_htcx/role/camera", "/user/vive_tracker_htcx/role/keyboard", "/user/eyes_ext") + +[sub_resource type="OpenXRAction" id="OpenXRAction_7same"] +resource_name = "aim_pose" +localized_name = "Aim pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_lkqqb"] +resource_name = "grip_pose" +localized_name = "Grip pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_n5keh"] +resource_name = "palm_pose" +localized_name = "Palm pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_mc0o8"] +resource_name = "haptic" +localized_name = "Haptic" +action_type = 4 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right", "/user/vive_tracker_htcx/role/left_foot", "/user/vive_tracker_htcx/role/right_foot", "/user/vive_tracker_htcx/role/left_shoulder", "/user/vive_tracker_htcx/role/right_shoulder", "/user/vive_tracker_htcx/role/left_elbow", "/user/vive_tracker_htcx/role/right_elbow", "/user/vive_tracker_htcx/role/left_knee", "/user/vive_tracker_htcx/role/right_knee", "/user/vive_tracker_htcx/role/waist", "/user/vive_tracker_htcx/role/chest", "/user/vive_tracker_htcx/role/camera", "/user/vive_tracker_htcx/role/keyboard") + +[sub_resource type="OpenXRActionSet" id="OpenXRActionSet_uxxdd"] +resource_name = "godot" +localized_name = "Godot action set" +actions = [SubResource("OpenXRAction_i0tao"), SubResource("OpenXRAction_q5tus"), SubResource("OpenXRAction_bb8eo"), SubResource("OpenXRAction_4w0qq"), SubResource("OpenXRAction_jhcbk"), SubResource("OpenXRAction_86tc3"), SubResource("OpenXRAction_luebt"), SubResource("OpenXRAction_pjpfv"), SubResource("OpenXRAction_t2613"), SubResource("OpenXRAction_r73ja"), SubResource("OpenXRAction_n00b4"), SubResource("OpenXRAction_nixn4"), SubResource("OpenXRAction_ua5rg"), SubResource("OpenXRAction_or367"), SubResource("OpenXRAction_0jiyx"), SubResource("OpenXRAction_2t4rh"), SubResource("OpenXRAction_8pusg"), SubResource("OpenXRAction_yc5u7"), SubResource("OpenXRAction_qx1hv"), SubResource("OpenXRAction_7same"), SubResource("OpenXRAction_lkqqb"), SubResource("OpenXRAction_n5keh"), SubResource("OpenXRAction_mc0o8")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tyfnj"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8bwka"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5pfsl"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_26epo"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qw142"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fwx2x"] +action = SubResource("OpenXRAction_or367") +paths = PackedStringArray("/user/hand/left/input/select/click", "/user/hand/right/input/select/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_28e6s"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_rfi68"] +interaction_profile_path = "/interaction_profiles/khr/simple_controller" +bindings = [SubResource("OpenXRIPBinding_tyfnj"), SubResource("OpenXRIPBinding_8bwka"), SubResource("OpenXRIPBinding_5pfsl"), SubResource("OpenXRIPBinding_26epo"), SubResource("OpenXRIPBinding_qw142"), SubResource("OpenXRIPBinding_fwx2x"), SubResource("OpenXRIPBinding_28e6s")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4xxu1"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fy7g0"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_68smk"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gsel2"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jyoxb"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n8gp5"] +action = SubResource("OpenXRAction_or367") +paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mcw5b"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_w1c6m"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4gya4"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_if0fi"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hqdka"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tjqme"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_immiq"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_shogv"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_il5w5"] +interaction_profile_path = "/interaction_profiles/htc/vive_controller" +bindings = [SubResource("OpenXRIPBinding_4xxu1"), SubResource("OpenXRIPBinding_fy7g0"), SubResource("OpenXRIPBinding_68smk"), SubResource("OpenXRIPBinding_gsel2"), SubResource("OpenXRIPBinding_jyoxb"), SubResource("OpenXRIPBinding_n8gp5"), SubResource("OpenXRIPBinding_mcw5b"), SubResource("OpenXRIPBinding_w1c6m"), SubResource("OpenXRIPBinding_4gya4"), SubResource("OpenXRIPBinding_if0fi"), SubResource("OpenXRIPBinding_hqdka"), SubResource("OpenXRIPBinding_tjqme"), SubResource("OpenXRIPBinding_immiq"), SubResource("OpenXRIPBinding_shogv")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i0eyu"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fjw43"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wrqud"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r0owp"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_q04fa"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_j8ttv"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qt3lv"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_absiy"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jmlkw"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3ld08"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lkgjo"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_en38p"] +action = SubResource("OpenXRAction_r73ja") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bp03q"] +action = SubResource("OpenXRAction_n00b4") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_j6vjx"] +action = SubResource("OpenXRAction_nixn4") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gairu"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_6p3lq"] +interaction_profile_path = "/interaction_profiles/microsoft/motion_controller" +bindings = [SubResource("OpenXRIPBinding_i0eyu"), SubResource("OpenXRIPBinding_fjw43"), SubResource("OpenXRIPBinding_wrqud"), SubResource("OpenXRIPBinding_r0owp"), SubResource("OpenXRIPBinding_q04fa"), SubResource("OpenXRIPBinding_j8ttv"), SubResource("OpenXRIPBinding_qt3lv"), SubResource("OpenXRIPBinding_absiy"), SubResource("OpenXRIPBinding_jmlkw"), SubResource("OpenXRIPBinding_3ld08"), SubResource("OpenXRIPBinding_lkgjo"), SubResource("OpenXRIPBinding_en38p"), SubResource("OpenXRIPBinding_bp03q"), SubResource("OpenXRIPBinding_j6vjx"), SubResource("OpenXRIPBinding_gairu")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7bf0a"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_s2p5s"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ynh3u"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qw2w8"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_blnwr"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_w8c03"] +action = SubResource("OpenXRAction_0jiyx") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n4aov"] +action = SubResource("OpenXRAction_2t4rh") +paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xm34u"] +action = SubResource("OpenXRAction_8pusg") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_diu45"] +action = SubResource("OpenXRAction_yc5u7") +paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oa2cq"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1cpmo"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_t7ta3"] +action = SubResource("OpenXRAction_bb8eo") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_td3dv"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5b50e"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kfld8"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_imwkd"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qoduc"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8ql1k"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_i82ln"] +interaction_profile_path = "/interaction_profiles/oculus/touch_controller" +bindings = [SubResource("OpenXRIPBinding_7bf0a"), SubResource("OpenXRIPBinding_s2p5s"), SubResource("OpenXRIPBinding_ynh3u"), SubResource("OpenXRIPBinding_qw2w8"), SubResource("OpenXRIPBinding_blnwr"), SubResource("OpenXRIPBinding_w8c03"), SubResource("OpenXRIPBinding_n4aov"), SubResource("OpenXRIPBinding_xm34u"), SubResource("OpenXRIPBinding_diu45"), SubResource("OpenXRIPBinding_oa2cq"), SubResource("OpenXRIPBinding_1cpmo"), SubResource("OpenXRIPBinding_t7ta3"), SubResource("OpenXRIPBinding_td3dv"), SubResource("OpenXRIPBinding_5b50e"), SubResource("OpenXRIPBinding_kfld8"), SubResource("OpenXRIPBinding_imwkd"), SubResource("OpenXRIPBinding_qoduc"), SubResource("OpenXRIPBinding_8ql1k")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hfjej"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qn47o"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uoapl"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7y63a"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8nwam"] +action = SubResource("OpenXRAction_or367") +paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6rbx6"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nnf3f"] +action = SubResource("OpenXRAction_0jiyx") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dug3u"] +action = SubResource("OpenXRAction_2t4rh") +paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b3rff"] +action = SubResource("OpenXRAction_8pusg") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dacu4"] +action = SubResource("OpenXRAction_yc5u7") +paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vjyvp"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p3wrd"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0d8ja"] +action = SubResource("OpenXRAction_bb8eo") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wy4f7"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3t8wk"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mnlrr"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yedol"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vb0j1"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c7utt"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_y0a3y"] +interaction_profile_path = "/interaction_profiles/bytedance/pico4_controller" +bindings = [SubResource("OpenXRIPBinding_hfjej"), SubResource("OpenXRIPBinding_qn47o"), SubResource("OpenXRIPBinding_uoapl"), SubResource("OpenXRIPBinding_7y63a"), SubResource("OpenXRIPBinding_8nwam"), SubResource("OpenXRIPBinding_6rbx6"), SubResource("OpenXRIPBinding_nnf3f"), SubResource("OpenXRIPBinding_dug3u"), SubResource("OpenXRIPBinding_b3rff"), SubResource("OpenXRIPBinding_dacu4"), SubResource("OpenXRIPBinding_vjyvp"), SubResource("OpenXRIPBinding_p3wrd"), SubResource("OpenXRIPBinding_0d8ja"), SubResource("OpenXRIPBinding_wy4f7"), SubResource("OpenXRIPBinding_3t8wk"), SubResource("OpenXRIPBinding_mnlrr"), SubResource("OpenXRIPBinding_yedol"), SubResource("OpenXRIPBinding_vb0j1"), SubResource("OpenXRIPBinding_c7utt")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ool2u"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_glj5i"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n5gop"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yuyqc"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xp538"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ka2m5"] +action = SubResource("OpenXRAction_0jiyx") +paths = PackedStringArray("/user/hand/left/input/a/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e2f7t"] +action = SubResource("OpenXRAction_2t4rh") +paths = PackedStringArray("/user/hand/left/input/a/touch", "/user/hand/right/input/a/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ravfs"] +action = SubResource("OpenXRAction_8pusg") +paths = PackedStringArray("/user/hand/left/input/b/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_s4vf3"] +action = SubResource("OpenXRAction_yc5u7") +paths = PackedStringArray("/user/hand/left/input/b/touch", "/user/hand/right/input/b/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_25tvb"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ulbje"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7x0u2"] +action = SubResource("OpenXRAction_bb8eo") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_syysk"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_aa6do"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bw0o8"] +action = SubResource("OpenXRAction_86tc3") +paths = PackedStringArray("/user/hand/left/input/squeeze/force", "/user/hand/right/input/squeeze/force") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vk3u6"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_24mug"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vh6t4"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c6inv"] +action = SubResource("OpenXRAction_r73ja") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7uc4x"] +action = SubResource("OpenXRAction_n00b4") +paths = PackedStringArray("/user/hand/left/input/trackpad/force", "/user/hand/right/input/trackpad/force") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_luqke"] +action = SubResource("OpenXRAction_nixn4") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_67o1r"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_4y5h7"] +interaction_profile_path = "/interaction_profiles/valve/index_controller" +bindings = [SubResource("OpenXRIPBinding_ool2u"), SubResource("OpenXRIPBinding_glj5i"), SubResource("OpenXRIPBinding_n5gop"), SubResource("OpenXRIPBinding_yuyqc"), SubResource("OpenXRIPBinding_xp538"), SubResource("OpenXRIPBinding_ka2m5"), SubResource("OpenXRIPBinding_e2f7t"), SubResource("OpenXRIPBinding_ravfs"), SubResource("OpenXRIPBinding_s4vf3"), SubResource("OpenXRIPBinding_25tvb"), SubResource("OpenXRIPBinding_ulbje"), SubResource("OpenXRIPBinding_7x0u2"), SubResource("OpenXRIPBinding_syysk"), SubResource("OpenXRIPBinding_aa6do"), SubResource("OpenXRIPBinding_bw0o8"), SubResource("OpenXRIPBinding_vk3u6"), SubResource("OpenXRIPBinding_24mug"), SubResource("OpenXRIPBinding_vh6t4"), SubResource("OpenXRIPBinding_c6inv"), SubResource("OpenXRIPBinding_7uc4x"), SubResource("OpenXRIPBinding_luqke"), SubResource("OpenXRIPBinding_67o1r")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wjbun"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6k55r"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eome7"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1tejj"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dh7ia"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mx8wc"] +action = SubResource("OpenXRAction_0jiyx") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sp84m"] +action = SubResource("OpenXRAction_8pusg") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p4vrs"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_npjtm"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f0kq3"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vtqoc"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mjg0k"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xksq2"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cdalf"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_03t55"] +interaction_profile_path = "/interaction_profiles/hp/mixed_reality_controller" +bindings = [SubResource("OpenXRIPBinding_wjbun"), SubResource("OpenXRIPBinding_6k55r"), SubResource("OpenXRIPBinding_eome7"), SubResource("OpenXRIPBinding_1tejj"), SubResource("OpenXRIPBinding_dh7ia"), SubResource("OpenXRIPBinding_mx8wc"), SubResource("OpenXRIPBinding_sp84m"), SubResource("OpenXRIPBinding_p4vrs"), SubResource("OpenXRIPBinding_npjtm"), SubResource("OpenXRIPBinding_f0kq3"), SubResource("OpenXRIPBinding_vtqoc"), SubResource("OpenXRIPBinding_mjg0k"), SubResource("OpenXRIPBinding_xksq2"), SubResource("OpenXRIPBinding_cdalf")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jlfos"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_em7ep"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ku0j8"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ag8mu"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p0gy0"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ql3mi"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_q3xv4"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jdj0s"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_q3let"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_thkc1"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d1ako"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dnume"] +action = SubResource("OpenXRAction_r73ja") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_k87d1"] +action = SubResource("OpenXRAction_n00b4") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y7tuj"] +action = SubResource("OpenXRAction_nixn4") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vjncs"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_ki0lc"] +interaction_profile_path = "/interaction_profiles/samsung/odyssey_controller" +bindings = [SubResource("OpenXRIPBinding_jlfos"), SubResource("OpenXRIPBinding_em7ep"), SubResource("OpenXRIPBinding_ku0j8"), SubResource("OpenXRIPBinding_ag8mu"), SubResource("OpenXRIPBinding_p0gy0"), SubResource("OpenXRIPBinding_ql3mi"), SubResource("OpenXRIPBinding_q3xv4"), SubResource("OpenXRIPBinding_jdj0s"), SubResource("OpenXRIPBinding_q3let"), SubResource("OpenXRIPBinding_thkc1"), SubResource("OpenXRIPBinding_d1ako"), SubResource("OpenXRIPBinding_dnume"), SubResource("OpenXRIPBinding_k87d1"), SubResource("OpenXRIPBinding_y7tuj"), SubResource("OpenXRIPBinding_vjncs")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1y6wi"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kikge"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pxvdf"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b6x3b"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ebeiy"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2fkll"] +action = SubResource("OpenXRAction_or367") +paths = PackedStringArray("/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y0cxd"] +action = SubResource("OpenXRAction_0jiyx") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_icqdw"] +action = SubResource("OpenXRAction_8pusg") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oyhuq"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lifrm"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nqpwj"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gi648"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qciua"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_navyc"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7ohag"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uv28u"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_psuww"] +interaction_profile_path = "/interaction_profiles/htc/vive_cosmos_controller" +bindings = [SubResource("OpenXRIPBinding_1y6wi"), SubResource("OpenXRIPBinding_kikge"), SubResource("OpenXRIPBinding_pxvdf"), SubResource("OpenXRIPBinding_b6x3b"), SubResource("OpenXRIPBinding_ebeiy"), SubResource("OpenXRIPBinding_2fkll"), SubResource("OpenXRIPBinding_y0cxd"), SubResource("OpenXRIPBinding_icqdw"), SubResource("OpenXRIPBinding_oyhuq"), SubResource("OpenXRIPBinding_lifrm"), SubResource("OpenXRIPBinding_nqpwj"), SubResource("OpenXRIPBinding_gi648"), SubResource("OpenXRIPBinding_qciua"), SubResource("OpenXRIPBinding_navyc"), SubResource("OpenXRIPBinding_7ohag"), SubResource("OpenXRIPBinding_uv28u")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0x584"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1biab"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qs5dc"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rc2s2"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_48ur6"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jamon"] +action = SubResource("OpenXRAction_or367") +paths = PackedStringArray("/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pofsn"] +action = SubResource("OpenXRAction_0jiyx") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eexl8"] +action = SubResource("OpenXRAction_8pusg") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0yyyu"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nbqvp"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7uc1n"] +action = SubResource("OpenXRAction_bb8eo") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u0agd"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_27htv"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ky08y"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1lagx"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1mlag"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r5fr3"] +action = SubResource("OpenXRAction_nixn4") +paths = PackedStringArray("/user/hand/left/input/thumbrest/touch", "/user/hand/right/input/thumbrest/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v0yqc"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_xqbwi"] +interaction_profile_path = "/interaction_profiles/htc/vive_focus3_controller" +bindings = [SubResource("OpenXRIPBinding_0x584"), SubResource("OpenXRIPBinding_1biab"), SubResource("OpenXRIPBinding_qs5dc"), SubResource("OpenXRIPBinding_rc2s2"), SubResource("OpenXRIPBinding_48ur6"), SubResource("OpenXRIPBinding_jamon"), SubResource("OpenXRIPBinding_pofsn"), SubResource("OpenXRIPBinding_eexl8"), SubResource("OpenXRIPBinding_0yyyu"), SubResource("OpenXRIPBinding_nbqvp"), SubResource("OpenXRIPBinding_7uc1n"), SubResource("OpenXRIPBinding_u0agd"), SubResource("OpenXRIPBinding_27htv"), SubResource("OpenXRIPBinding_ky08y"), SubResource("OpenXRIPBinding_1lagx"), SubResource("OpenXRIPBinding_1mlag"), SubResource("OpenXRIPBinding_r5fr3"), SubResource("OpenXRIPBinding_v0yqc")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ja7rc"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fynro"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hqhp2"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_haf1l"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lis3q"] +action = SubResource("OpenXRAction_ua5rg") +paths = PackedStringArray("/user/hand/left/input/home/click", "/user/hand/right/input/home/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_84yqi"] +action = SubResource("OpenXRAction_i0tao") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mcd6e"] +action = SubResource("OpenXRAction_q5tus") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vsaah"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_612sy"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m07j1"] +action = SubResource("OpenXRAction_t2613") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4ie20"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_2ir24"] +interaction_profile_path = "/interaction_profiles/huawei/controller" +bindings = [SubResource("OpenXRIPBinding_ja7rc"), SubResource("OpenXRIPBinding_fynro"), SubResource("OpenXRIPBinding_hqhp2"), SubResource("OpenXRIPBinding_haf1l"), SubResource("OpenXRIPBinding_lis3q"), SubResource("OpenXRIPBinding_84yqi"), SubResource("OpenXRIPBinding_mcd6e"), SubResource("OpenXRIPBinding_vsaah"), SubResource("OpenXRIPBinding_612sy"), SubResource("OpenXRIPBinding_m07j1"), SubResource("OpenXRIPBinding_4ie20")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_w0h7s"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/vive_tracker_htcx/role/left_foot/input/grip/pose", "/user/vive_tracker_htcx/role/right_foot/input/grip/pose", "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose", "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose", "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose", "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose", "/user/vive_tracker_htcx/role/left_knee/input/grip/pose", "/user/vive_tracker_htcx/role/right_knee/input/grip/pose", "/user/vive_tracker_htcx/role/waist/input/grip/pose", "/user/vive_tracker_htcx/role/chest/input/grip/pose", "/user/vive_tracker_htcx/role/camera/input/grip/pose", "/user/vive_tracker_htcx/role/keyboard/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xeegu"] +action = SubResource("OpenXRAction_mc0o8") +paths = PackedStringArray("/user/vive_tracker_htcx/role/left_foot/output/haptic", "/user/vive_tracker_htcx/role/right_foot/output/haptic", "/user/vive_tracker_htcx/role/left_shoulder/output/haptic", "/user/vive_tracker_htcx/role/right_shoulder/output/haptic", "/user/vive_tracker_htcx/role/left_elbow/output/haptic", "/user/vive_tracker_htcx/role/right_elbow/output/haptic", "/user/vive_tracker_htcx/role/left_knee/output/haptic", "/user/vive_tracker_htcx/role/right_knee/output/haptic", "/user/vive_tracker_htcx/role/waist/output/haptic", "/user/vive_tracker_htcx/role/chest/output/haptic", "/user/vive_tracker_htcx/role/camera/output/haptic", "/user/vive_tracker_htcx/role/keyboard/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_o233f"] +interaction_profile_path = "/interaction_profiles/htc/vive_tracker_htcx" +bindings = [SubResource("OpenXRIPBinding_w0h7s"), SubResource("OpenXRIPBinding_xeegu")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n5m6j"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/eyes_ext/input/gaze_ext/pose") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_plk4u"] +interaction_profile_path = "/interaction_profiles/ext/eye_gaze_interaction" +bindings = [SubResource("OpenXRIPBinding_n5m6j")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ea1i6"] +action = SubResource("OpenXRAction_qx1hv") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pi8x7"] +action = SubResource("OpenXRAction_7same") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rh7qu"] +action = SubResource("OpenXRAction_lkqqb") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p5r1n"] +action = SubResource("OpenXRAction_n5keh") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sregh"] +action = SubResource("OpenXRAction_luebt") +paths = PackedStringArray("/user/hand/left/input/pinch_ext/value", "/user/hand/right/input/pinch_ext/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mjdpr"] +action = SubResource("OpenXRAction_pjpfv") +paths = PackedStringArray("/user/hand/left/input/pinch_ext/ready_ext", "/user/hand/right/input/pinch_ext/ready_ext") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_27o3d"] +action = SubResource("OpenXRAction_r73ja") +paths = PackedStringArray("/user/hand/left/input/aim_activate_ext/value", "/user/hand/right/input/aim_activate_ext/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fa1de"] +action = SubResource("OpenXRAction_n00b4") +paths = PackedStringArray("/user/hand/left/input/aim_activate_ext/ready_ext", "/user/hand/right/input/aim_activate_ext/ready_ext") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b6heq"] +action = SubResource("OpenXRAction_4w0qq") +paths = PackedStringArray("/user/hand/left/input/grasp_ext/value", "/user/hand/right/input/grasp_ext/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2ltu7"] +action = SubResource("OpenXRAction_jhcbk") +paths = PackedStringArray("/user/hand/left/input/grasp_ext/ready_ext", "/user/hand/right/input/grasp_ext/ready_ext") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_fef3i"] +interaction_profile_path = "/interaction_profiles/ext/hand_interaction_ext" +bindings = [SubResource("OpenXRIPBinding_ea1i6"), SubResource("OpenXRIPBinding_pi8x7"), SubResource("OpenXRIPBinding_rh7qu"), SubResource("OpenXRIPBinding_p5r1n"), SubResource("OpenXRIPBinding_sregh"), SubResource("OpenXRIPBinding_mjdpr"), SubResource("OpenXRIPBinding_27o3d"), SubResource("OpenXRIPBinding_fa1de"), SubResource("OpenXRIPBinding_b6heq"), SubResource("OpenXRIPBinding_2ltu7")] + +[resource] +action_sets = [SubResource("OpenXRActionSet_uxxdd")] +interaction_profiles = [SubResource("OpenXRInteractionProfile_rfi68"), SubResource("OpenXRInteractionProfile_il5w5"), SubResource("OpenXRInteractionProfile_6p3lq"), SubResource("OpenXRInteractionProfile_i82ln"), SubResource("OpenXRInteractionProfile_y0a3y"), SubResource("OpenXRInteractionProfile_4y5h7"), SubResource("OpenXRInteractionProfile_03t55"), SubResource("OpenXRInteractionProfile_ki0lc"), SubResource("OpenXRInteractionProfile_psuww"), SubResource("OpenXRInteractionProfile_xqbwi"), SubResource("OpenXRInteractionProfile_2ir24"), SubResource("OpenXRInteractionProfile_o233f"), SubResource("OpenXRInteractionProfile_plk4u"), SubResource("OpenXRInteractionProfile_fef3i")] diff --git a/project.godot b/project.godot index 2776091..a8458c9 100644 --- a/project.godot +++ b/project.godot @@ -37,3 +37,7 @@ back={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) ] } + +[rendering] + +textures/vram_compression/import_etc2_astc=true diff --git a/shaders/000_playground/playground.gd b/shaders/000_playground/playground.gd index a9fc30a..cd2cd20 100644 --- a/shaders/000_playground/playground.gd +++ b/shaders/000_playground/playground.gd @@ -8,9 +8,6 @@ extends Node3D @onready var shader_material = $MeshInstance3D.mesh.material -func _ready() -> void: - print(shader_material) - # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass diff --git a/shaders/000_playground/playground.gdshader b/shaders/000_playground/playground.gdshader index a39c058..d6804d7 100644 --- a/shaders/000_playground/playground.gdshader +++ b/shaders/000_playground/playground.gdshader @@ -1,13 +1,10 @@ shader_type spatial; - -uniform float my_variable = 0.0; +render_mode cull_disabled; void vertex() { - VERTEX.y += my_variable; - // Called for every vertex the material is visible on. + } void fragment() { - ALBEDO = NORMAL; - // Called for every pixel the material is visible on. + } \ No newline at end of file diff --git a/shaders/000_playground/playground.tscn b/shaders/000_playground/playground.tscn index 6b7916e..e757f40 100644 --- a/shaders/000_playground/playground.tscn +++ b/shaders/000_playground/playground.tscn @@ -3,16 +3,15 @@ [ext_resource type="Shader" path="res://shaders/000_playground/playground.gdshader" id="1_0fhw0"] [ext_resource type="Script" path="res://shaders/000_playground/playground.gd" id="1_08keh"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_h8cto"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fofry"] render_priority = 0 shader = ExtResource("1_0fhw0") -shader_parameter/my_variable = 1.0 -[sub_resource type="SphereMesh" id="SphereMesh_6preo"] -material = SubResource("ShaderMaterial_h8cto") +[sub_resource type="SphereMesh" id="SphereMesh_v7gb1"] +material = SubResource("ShaderMaterial_fofry") [node name="Playground" type="Node3D"] script = ExtResource("1_08keh") [node name="MeshInstance3D" type="MeshInstance3D" parent="."] -mesh = SubResource("SphereMesh_6preo") +mesh = SubResource("SphereMesh_v7gb1") diff --git a/shaders/009_fresnel/fresnel.gdshader b/shaders/009_fresnel/fresnel.gdshader new file mode 100644 index 0000000..05930d5 --- /dev/null +++ b/shaders/009_fresnel/fresnel.gdshader @@ -0,0 +1,22 @@ +shader_type spatial; + +uniform vec3 base_color : source_color = vec3(0.173, 0.731, 0.541); +uniform vec3 fresnel_color : source_color = vec3(0.887, 0, 1.0); +uniform float fresnel_strength = 2.0; +uniform float fresnel_amount = 1.0; + +float fresnel(vec3 normal, vec3 view) { + return pow((1.0 - clamp(dot(normal, view), 0.0, 1.0)), fresnel_amount); +} + +void vertex() { + //VERTEX.y += 0.5 + sin(VERTEX.x * 10.0 + TIME * 20.0) * 0.3; +} + +void fragment() { + float fresnel_value = fresnel(NORMAL, VIEW) * fresnel_strength; + vec3 fresnel = fresnel_value * fresnel_color; + + ALBEDO = base_color + fresnel; + ROUGHNESS = 0.05; +} \ No newline at end of file diff --git a/shaders/009_fresnel/fresnel.tscn b/shaders/009_fresnel/fresnel.tscn new file mode 100644 index 0000000..e983836 --- /dev/null +++ b/shaders/009_fresnel/fresnel.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=3 uid="uid://bcsb32y37da3f"] + +[ext_resource type="Shader" path="res://shaders/009_fresnel/fresnel.gdshader" id="1_dvfmg"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4a8f"] +render_priority = 0 +shader = ExtResource("1_dvfmg") +shader_parameter/base_color = Color(0.173, 0.731, 0.541, 1) +shader_parameter/fresnel_color = Color(0.887, 0, 1, 1) +shader_parameter/fresnel_strength = 3.0 +shader_parameter/fresnel_amount = 3.6 + +[sub_resource type="SphereMesh" id="SphereMesh_pr1ms"] +material = SubResource("ShaderMaterial_t4a8f") + +[node name="Fresnel" type="Node3D"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("SphereMesh_pr1ms") diff --git a/shaders/010_outline/outline.gdshader b/shaders/010_outline/outline.gdshader new file mode 100644 index 0000000..dd66690 --- /dev/null +++ b/shaders/010_outline/outline.gdshader @@ -0,0 +1,14 @@ +shader_type spatial; + +void vertex() { + // Called for every vertex the material is visible on. +} + +void fragment() { + // Called for every pixel the material is visible on. +} + +//void light() { + // Called for every pixel for every light affecting the material. + // Uncomment to replace the default light processing function with this one. +//} diff --git a/shaders/010_outline/outline.tscn b/shaders/010_outline/outline.tscn new file mode 100644 index 0000000..312de85 --- /dev/null +++ b/shaders/010_outline/outline.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=3 uid="uid://drgqrnj1otb25"] + +[ext_resource type="Shader" path="res://shaders/010_outline/outline.gdshader" id="1_34hnr"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_vbj21"] +render_priority = 0 +shader = ExtResource("1_34hnr") + +[sub_resource type="SphereMesh" id="SphereMesh_wnbfj"] +material = SubResource("ShaderMaterial_vbj21") + +[node name="Outline" type="Node3D"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("SphereMesh_wnbfj") diff --git a/shaders/011_circle/circle.gdshader b/shaders/011_circle/circle.gdshader new file mode 100644 index 0000000..5776136 --- /dev/null +++ b/shaders/011_circle/circle.gdshader @@ -0,0 +1,17 @@ +shader_type spatial; +render_mode cull_disabled; + +/* + We define the center position of our circle and then ask each pixel how far from that + center position it is. This will give the pixel a value between 0 – 1. + We can then ask the pixel if its value is lower or higher than a predefined value. + If it is higher we will set the pixel to white + and if it is lower we will set it to black. +*/ +float circle(vec2 position, float radius, float feather) { + return smoothstep(radius, radius + feather, length(position - vec2(0.5))); +} + +void fragment() { + ALBEDO.rgb = vec3( circle(UV, 0.3, 0.0) ); +} \ No newline at end of file diff --git a/shaders/011_circle/circle.tscn b/shaders/011_circle/circle.tscn new file mode 100644 index 0000000..0190e8e --- /dev/null +++ b/shaders/011_circle/circle.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=3 uid="uid://cjcfr8tqdhbro"] + +[ext_resource type="Shader" path="res://shaders/011_circle/circle.gdshader" id="1_omahb"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_iu8hm"] +render_priority = 0 +shader = ExtResource("1_omahb") + +[sub_resource type="QuadMesh" id="QuadMesh_md0p6"] +material = SubResource("ShaderMaterial_iu8hm") + +[node name="Circle" type="Node3D"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("QuadMesh_md0p6") diff --git a/shaders/012_polygon/polygon.gdshader b/shaders/012_polygon/polygon.gdshader new file mode 100644 index 0000000..9666bd8 --- /dev/null +++ b/shaders/012_polygon/polygon.gdshader @@ -0,0 +1,30 @@ +shader_type spatial; +render_mode cull_disabled; + +vec4 polygon(vec2 uv, float width, int sides) +{ + // UV goes from [0 , 1], we multiply by two ( [0, 2] ) and subtract one [ -1, 1] + // So the range is centered + uv = uv * 2.0 - 1.0; + + // Get the angle from the point to the center, starting with 0 at the middle left side + float angle = atan(uv.x, uv.y); + + float radius = TAU / float(sides); + + float dist = cos(floor(0.5 + angle / radius) * radius - angle) * length(uv); + + float poly = step(width, dist); + + return vec4(vec3(poly), 1.0); +} + +void fragment() { + // Multiply [0, 1] range of sine to [0, 7] + float side_value = 7.0 * sin(TIME); + + // shift the value to half = [3, 10] + side_value = side_value + 3.0; + + ALBEDO = vec3(polygon(UV, 0.3, clamp(int(side_value), 3, 9)).rgb); +} \ No newline at end of file diff --git a/shaders/012_polygon/polygon.tscn b/shaders/012_polygon/polygon.tscn new file mode 100644 index 0000000..75fe7c6 --- /dev/null +++ b/shaders/012_polygon/polygon.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=3 uid="uid://2o8nbxn0x7of"] + +[ext_resource type="Shader" path="res://shaders/012_polygon/polygon.gdshader" id="1_cwvsg"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_4pm8x"] +render_priority = 0 +shader = ExtResource("1_cwvsg") + +[sub_resource type="QuadMesh" id="QuadMesh_87u1q"] +material = SubResource("ShaderMaterial_4pm8x") + +[node name="Polygon" type="Node3D"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("QuadMesh_87u1q")