diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c5ed86b91fc..234b595d1a6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,79 +1,69 @@ +# Default site owners +# These owners will be requested for review unless a later match takes precedence. +* @o3de/sig-docs-community-maintainers + # Ownership owners -/.github/CODEOWNERS @o3de/sig-chairs +/.github/CODEOWNERS @o3de/sig-docs-community-maintainers + +# Default owner directories +# These directories have default owners and also exceptions that will be specified in later groups. +/content/docs/ @o3de/sig-docs-community-reviewers +/layouts/ @o3de/sig-docs-community-site-reviewers +/static/images/ @o3de/sig-docs-community-reviewers -# Should not be modified in development -/content/docs/release-notes/* @o3de/sig-chairs -/static/images/release-notes/* @o3de/sig-chairs -/content/blog/* @o3de/sig-chairs -/static/images/blog/* @o3de/sig-chairs -/CONTRIBUTING @o3de/sig-chairs -/README.md @o3de/sig-chairs +# Website content +/assets/ @o3de/sig-docs-community-site-reviewers +/content/search/ @o3de/sig-docs-community-site-reviewers +/static/js/ @o3de/sig-docs-community-site-reviewers +/config.toml @o3de/sig-docs-community-site-reviewers +/Makefile @o3de/sig-docs-community-site-reviewers +/netlify.toml @o3de/sig-docs-community-site-reviewers +/package.json @o3de/sig-docs-community-site-reviewers # Community content -/content/blog/_index.md @o3de/sig-docs-community-reviewers -/content/community/* @o3de/sig-docs-community-reviewers -/content/contribute/* @o3de/sig-docs-community-reviewers -/content/docs/contributing/* @o3de/sig-docs-community-reviewers -/static/images/community/* @o3de/sig-docs-community-reviewers -/static/images/contribute/* @o3de/sig-docs-community-reviewers -/static/images/contributing/* @o3de/sig-docs-community-reviewers -/static/images/shared/* @o3de/sig-docs-community-reviewers -/layouts/blog/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/partials/blog/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/community/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/contribute/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/partials/community/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/partials/contribute/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/content/blog/ @o3de/sig-docs-community-reviewers +/content/community/ @o3de/sig-docs-community-reviewers +/content/contribute/ @o3de/sig-docs-community-reviewers +/layouts/blog/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/community/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/contribute/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/partials/blog/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/partials/community/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/partials/contribute/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers /layouts/partials/blog-display.html @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers /layouts/partials/css.html @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/static/images/blog/ @o3de/sig-docs-community-reviewers +/static/images/community/ @o3de/sig-docs-community-reviewers +/static/images/contribute/ @o3de/sig-docs-community-reviewers +/CONTRIBUTING.md @o3de/sig-docs-community-reviewers +/README.md @o3de/sig-docs-community-reviewers -# Docs content - Owned by SIG-docs-community on development -/content/smoketest.md @o3de/sig-docs-community-reviewers -/static/_redirects @o3de/sig-docs-community-reviewers +# Release content +/content/docs/release-notes/ @o3de/sig-docs-community-maintainers @o3de/sig-release-maintainers +/static/images/release-notes/ @o3de/sig-docs-community-maintainers @o3de/sig-release-maintainers # Docs content -/content/docs/* @o3de/sig-docs-community-reviewers -/content/docs/engine-dev/* @o3de/Reviewers -/static/docs/* @o3de/sig-docs-community-reviewers -/static/images/api-reference/* @o3de/sig-docs-community-reviewers -/static/images/atom-guide/* @o3de/sig-docs-community-reviewers -/static/images/contribute/* @o3de/sig-docs-community-reviewers -/static/images/contributing/* @o3de/sig-docs-community-reviewers -/static/images/learning-guide/* @o3de/sig-docs-community-reviewers -/static/images/shared/* @o3de/sig-docs-community-reviewers -/static/images/tools-ui/* @o3de/sig-docs-community-reviewers -/static/images/user-guide/* @o3de/sig-docs-community-reviewers -/static/images/welcome-guide/* @o3de/sig-docs-community-reviewers -/static/images/icons/* @o3de/sig-docs-community-reviewers -/layouts/shortcodes/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/docs/* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -/layouts/partials/docs* @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/content/smoketest.md @o3de/sig-docs-community-reviewers +/static/docs/ @o3de/sig-docs-community-reviewers +/static/files/ @o3de/sig-docs-community-reviewers +/static/_redirects @o3de/sig-docs-community-reviewers +/layouts/shortcodes/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/docs/ @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers +/layouts/partials/docs @o3de/sig-docs-community-reviewers @o3de/sig-docs-community-site-reviewers -# Web content -/assets/* @o3de/sig-docs-community-site-reviewers -/layouts/* @o3de/sig-docs-community-site-reviewers -/content/search/* @o3de/sig-docs-community-site-reviewers -/static/js/* @o3de/sig-docs-community-site-reviewers -/config.toml @o3de/sig-docs-community-site-reviewers -/Makefile @o3de/sig-docs-community-site-reviewers -/package.json @o3de/sig-docs-community-site-reviewers +# Shared community and docs content +/content/docs/contributing/ @o3de/sig-docs-community-reviewers +/content/docs/contributing/to-code/ @o3de/sig-docs-community-reviewers @o3de/reviewers +/static/images/contributing/ @o3de/sig-docs-community-reviewers # Foundation-owned materials -/content/download/* @o3de/lf +/content/download/ @o3de/lf /content/_index.md @o3de/lf /LICENSE-* @o3de/lf /_index.md @o3de/lf -/netlify.toml @o3de/lf -/static/apple-touch-icon-114x114.png @o3de/lf -/static/apple-touch-icon-120x120.png @o3de/lf -/static/apple-touch-icon-144x144.png @o3de/lf -/static/apple-touch-icon-152x152.png @o3de/lf -/static/apple-touch-icon-180x180.png @o3de/lf -/static/apple-touch-icon-57x57.png @o3de/lf -/static/apple-touch-icon-72x72.png @o3de/lf -/static/apple-touch-icon-76x76.png @o3de/lf -/static/apple-touch-icon.png @o3de/lf +/static/images/events/ @o3de/lf +/static/images/home/ @o3de/lf +/static/img/ @o3de/lf +/static/video/ @o3de/lf +/static/apple-touch-icon*.png @o3de/lf /static/favicon.ico @o3de/lf -/static/img/* @o3de/lf -/static/images/events/* @o3de/lf -/static/images/home/* @o3de/lf \ No newline at end of file diff --git a/config.toml b/config.toml index 646814e6c2c..1ba0749c5c5 100644 --- a/config.toml +++ b/config.toml @@ -23,7 +23,6 @@ unsafe = true [params] font_awesome_version = "5.12.0" -mermaid_version = ["9.2.2", "sha384-W/RuUCsZGwf4MwkS0K4JdFzoA0RgiA6foiYzRo68rW5DNPfq+5Dr0uGKY1zecHEA"] description = "Open 3D Engine (O3DE) is a modular, open source, cross-platform 3D engine built to power anything from AAA games to cinema-quality 3D worlds to high-fidelity simulations. No fees or commercial obligations. Apache 2.0-licensed. Managed by The Linux Foundation." favicon = "favicon.ico" repositoryUrl = "https://github.com/o3de/o3de.org" diff --git a/content/docs/contributing/to-docs/hugo.md b/content/docs/contributing/to-docs/hugo.md index a41d12a2b8e..8f0634e4dec 100644 --- a/content/docs/contributing/to-docs/hugo.md +++ b/content/docs/contributing/to-docs/hugo.md @@ -157,13 +157,13 @@ Within a layout directory, Hugo looks for one of 4 basic types: * `baseof.html`: The "base" template. Do not override this unless you know what you're doing! * `section.html`: The template for `_index.md` files, or section homepages. * `single.html`: The template for files in a directory which are _not_ `_index.md` files – i.e., regular pages. -* `list.html`: The templae for lists of subpages. As this gets a bit confusing with `section.html`, only use this layout for blog sections. +* `list.html`: The template for lists of subpages. As this gets a bit confusing with `section.html`, only use this layout for blog sections. Most of the top level pages in the O3DE site are `section.html` pages with no subpages. -#### Understanding Hugo layout inheirtance +#### Understanding Hugo layout inheritance -As described above, Hugo looks for progressively more specific layouts and applies the most specific one it can find. However, it also does this _within_ layout files by allowing you to overide a section called `main`. +As described above, Hugo looks for progressively more specific layouts and applies the most specific one it can find. However, it also does this _within_ layout files by allowing you to override a section called `main`. For example, let's look at `/layouts/_default/baseof.html`: diff --git a/content/docs/contributing/to-docs/style-guide/_index.md b/content/docs/contributing/to-docs/style-guide/_index.md index c7d84f3cb97..246737605f6 100644 --- a/content/docs/contributing/to-docs/style-guide/_index.md +++ b/content/docs/contributing/to-docs/style-guide/_index.md @@ -24,7 +24,6 @@ What are the ideal traits for O3DE docs? - [Quick Reference](./quick-reference) - A quick reference of common style guide rules. - [Writing Guidelines](./guidance) - Guidance on our documentation style, tone, and how to write in an accessible manner. - [Formatting Guidelines](./format) - Specific rules regarding formatting and typesetting our documentation, such as how to format executable names, file paths, and code blocks. Covers the features available in the variant of Markdown that the O3DE docs site uses. -- [Formatting Tools](./tools) - A list of the tools that can assist with the specialized formatting needs of some O3DE documentation. - [Metadata](./metadata) - Details on the available (and required) Hugo front matter metadata to use in the [YAML](https://yaml.org/) headers of Markdown files. - [Shortcodes](./shortcodes) - The Hugo shortcodes that we use for the O3DE docs. Includes call-out boxes, version numbers, static paths that O3DE uses, and other useful tidbits. - [Submitting Media](./media) - Guidelines for submitting media (images, video, audio, or assets) to the docs. diff --git a/content/docs/contributing/to-docs/style-guide/media.md b/content/docs/contributing/to-docs/style-guide/media.md index 5a17843c0ba..98709591558 100644 --- a/content/docs/contributing/to-docs/style-guide/media.md +++ b/content/docs/contributing/to-docs/style-guide/media.md @@ -58,7 +58,7 @@ Guide-specific images, such as interface screenshots and diagrams, are located i In order to standardize presentation, and to keep the O3DE documentation repository below 1 GB, please adhere to the following guidelines when you create images for documentation: * Text in images should follow our style guidelines without formatting requirements. -* Do not include personal identification information (PII) in your screenshots. PII includes, but it not limited to, names, geographic information, project names, IP addresses, DNS names, and directory paths. We recommend you crop out areas of images that might contain PII and that you create projects specifically for documentation contributions that do not expose PII. Using common image filters to blur or disguise PII is not recommended as they can sometimes be reversed. To remove PII from an image: +* Do not include personal identification information (PII) in your screenshots. PII includes, but is not limited to, names, geographic information, project names, IP addresses, DNS names, and directory paths. We recommend you crop out areas of images that might contain PII and that you create projects specifically for documentation contributions that do not expose PII. Using common image filters to blur or disguise PII is not recommended as they can sometimes be reversed. To remove PII from an image: 1. In any image editor, draw a rectangle selection box around the PII. @@ -128,7 +128,7 @@ Due to limitations on repository size, animated `.gif` images are not accepted i ### Image strips -To demonstrate steps, consider using horizontal two to four panel annotated image strip that demonstrates the start, action, and result of the process. See the example below: +To demonstrate steps, consider using a horizontal two to four panel annotated image strip that demonstrates the start, action, and result of the process. See the example below: {{< image-width "/images/contributing/to-docs/image-strip-example.png" "700" "An image strip example with two panels." >}} diff --git a/content/docs/contributing/to-docs/style-guide/quick-reference.md b/content/docs/contributing/to-docs/style-guide/quick-reference.md index 8a6587eb2da..0848330ea9c 100644 --- a/content/docs/contributing/to-docs/style-guide/quick-reference.md +++ b/content/docs/contributing/to-docs/style-guide/quick-reference.md @@ -6,7 +6,7 @@ weight: 150 toc: true --- -Follow the **Open 3D Engine (O3DE)** Docs Style Guide in your documentation. This ensures that the documentation is consistent and helpful to users. +Follow the O3DE Docs Style Guide in your documentation. This ensures that the documentation is consistent and helpful to users. | **Language** | | | --- | --- | @@ -18,7 +18,7 @@ Follow the **Open 3D Engine (O3DE)** Docs Style Guide in your documentation. Thi | [Acronyms, abbreviations, and Latin phrases](guidance#acronyms-abbreviations-and-latin-phrases) | Write acronyms or abbreviations in their expanded form first, followed by the acronym in parentheses. Don't abbreviate common words or use Latin phrases; use the complete word or a similar one. | | [Idioms, slang, colloquialisms, or jargon](guidance#idioms-slang-colloquialisms-or-jargon) | Don't use them. These words and phrases may be understood by native U.S. English speakers, but are difficult to translate. | | **Formatting** | -| [Hugo](../hugo) and [Markdown](format) | Documentation is written in Markdown (`.md`) files and built by [Hugo](https://gohugo.io/), a static site generator. It's primarily formatted using [Markdown syntax](https://www.markdownguide.org/basic-syntax/), with support for in-line HTML. Additional content formatting includes images, videos, callout boxes, math equations, and diagrams. Callout boxes are implemented through [shortcodes](shortcodes). Math equations can be rendered using [MathJax formatting](tools#math-formulas). Diagrams can be rendered using [Mermaid syntax](tools#diagrams) inside Markdown code blocks. | +| [Hugo](../hugo) and [Markdown](format) | Documentation is written in Markdown (`.md`) files and built by [Hugo](https://gohugo.io/), a static site generator. It's primarily formatted using [Markdown syntax](https://www.markdownguide.org/basic-syntax/), with support for in-line HTML. Additional content formatting includes images, videos, and callout boxes. Callout boxes are implemented through [shortcodes](shortcodes). | | [Metadata](metadata) | Documentation must comply with metadata requirements, including *linktitle*, *title*, and *description*. Use *weight* to override the default alphabetical sort order. | | [Topic headings](format.md#topic-headings) | Section titles must use H2 (`##`) headings. Subsection titles follow as H3 (`###`) and H4 (`####`) headings. Topic headings must use sentence case. The H1(`#`) heading is reserved for the page title which is specified in the topic's metadata. | | [User interface, inputs, and hotkeys](format#user-interface-inputs-and-hotkeys) | Bold all instances. | diff --git a/content/docs/contributing/to-docs/style-guide/tools.md b/content/docs/contributing/to-docs/style-guide/tools.md deleted file mode 100644 index 6cd212be983..00000000000 --- a/content/docs/contributing/to-docs/style-guide/tools.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -linktitle: Formatting Tools -title: Formatting Tools Available in O3DE Documentation -description: A list of the supported tools that can assist with the formatting of O3DE documentation. -weight: 350 ---- - -The **Open 3D Engine (O3DE)** website includes support for the following tools that can assist with the specialized formatting needs of some O3DE documentation. - -## Mathematical formulas in TeX and MathML {#math-formulas} - -You can embed mathematical formulas using TeX and MathML input formats. Refer to the [MathJax documentation](https://docs.mathjax.org/en/latest/index.html) for more information on how to use the MathJax version 3.0 display engine. - -**Example Usage** - -```markdown -$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$ -``` - -**Example Output** - -$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$ - -## Diagrams using Mermaid {#diagrams} - -You can create a variety of diagrams and other visualizations from within Markdown code blocks that will render using the Mermaid diagram tool. Refer to the [Mermaid documentation](https://mermaid-js.github.io/mermaid/) to learn about the various supported diagram types and their usage syntax. - -### Example: Flowchart - -```` -```mermaid -graph TD; - A-->B; - A-->C; - B-->D; - C-->D; -``` -```` - -**Output** - -```mermaid -graph TD; - A-->B; - A-->C; - B-->D; - C-->D; -``` - -### Example: UML Class Diagram - -```` -```mermaid -classDiagram - Animal <|-- Duck - Animal <|-- Fish - Animal <|-- Zebra - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Duck{ - +String beakColor - +swim() - +quack() - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - +bool is_wild - +run() - } -``` -```` - -**Output** - -```mermaid -classDiagram - Animal <|-- Duck - Animal <|-- Fish - Animal <|-- Zebra - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Duck{ - +String beakColor - +swim() - +quack() - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - +bool is_wild - +run() - } -``` diff --git a/content/docs/contributing/to-docs/templates/component-reference-doc.md b/content/docs/contributing/to-docs/templates/component-reference-doc.md index 6a1b42a3496..8dc3a453aec 100644 --- a/content/docs/contributing/to-docs/templates/component-reference-doc.md +++ b/content/docs/contributing/to-docs/templates/component-reference-doc.md @@ -24,7 +24,7 @@ The workflow: 7. [Submit your document to O3DE Documentation.](#submit-your-component-reference-document) -All documentation must adhere to the standards outlined in the O3DE [Style Guide](/docs/contributing/to-docs/style-guide/)and [Terminology](/docs/contributing/to-docs/terminology/). If you need any help, reach out to the Documentation and Community Special Interest Group (#sig-docs-community) on [Discord](https://discord.com/invite/o3de). +All documentation must adhere to the standards outlined in the O3DE [Style Guide](/docs/contributing/to-docs/style-guide/) and [Terminology](/docs/contributing/to-docs/terminology/). If you need any help, reach out to the Documentation and Community Special Interest Group (#sig-docs-community) on [Discord](https://discord.com/invite/o3de). ## Does my document belong in the O3DE Component Reference? @@ -257,7 +257,7 @@ For a component card with a complex set of properties, you may need multiple pro Another option is to separate the property tables into [tabs](/docs/contributing/to-docs/style-guide/format/#tabs) on your document. When content is in tabs, only the active tab displays content, while the rest is hidden. Because of this behavior, tabs are recommended if the sets of properties define configurations for different workflows that the user may or may not choose. **Examples**: -* [Light component](/docs/user-guide/components/reference/atom/light/): Contains several configurations that don't have a 1-1 relationship with the **Light type** property. Some propery groups are available for more than one light type, so they are documented in different property tables. Each property table specifies which light types support those properties. +* [Light component](/docs/user-guide/components/reference/atom/light/): Contains several configurations that don't have a 1-1 relationship with the **Light type** property. Some property groups are available for more than one light type, so they are documented in different property tables. Each property table specifies which light types support those properties. * [PhysX Collider component](/docs/user-guide/components/reference/physx/collider/): Contains several configurations, which depend on the **Shape** property. Each configuration affect what properties are available, so they are documented in different property tables separated into tabs. diff --git a/content/docs/engine-dev/_index.md b/content/docs/engine-dev/_index.md deleted file mode 100644 index 2ed8d5befd2..00000000000 --- a/content/docs/engine-dev/_index.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -linkTitle: Engine Developer Guide -menuTitle: Engine Developer Guide -title: Open 3D Engine (O3DE) Engine Developer Guide -description: | - Learn about the inner workings of O3DE architecture, frameworks, and Gems to perform custom modifications to O3DE and contribute back to source code. -weight: 700 -toc: true -menu_uuid: engine -guide_img: "/images/engine-dev-guide/guide_img.png" -primary: true ---- - -Welcome to the **Open 3D Engine (O3DE) Engine Developer Guide**. This guide is for advanced users who are looking for information about the internal -architecture of O3DE for the purposes of custom engine modifications or contributions back to the O3DE project. For users who are looking for information about how to -_extend_ the engine, see the [Programming for O3DE](/docs/user-guide/programming) documentation. - -## Architecture - -O3DE is a complicated suite of tools and libraries. In this section of the Engine Developer Guide, you'll discover information about O3DE's overall architecture, design principles, and execution flow. - -{{< todo >}} -This section is currently incomplete, with a stub example for application bootstrapping. As documentation is added for developers, this section will expand. -{{< /todo >}} - -| Name | Description | -|-|-| -| [Project bootstrapping](./architecture/bootstrap) | Learn about the execution flow of project launchers and how O3DE loads libraries at project runtime. | - - -## O3DE Frameworks - -The core of O3DE is distributed as a series of _frameworks_, required libraries that establish the necessary elements for bootstrapping and running an O3DE project. Frameworks range from core functionality (`AzCore`) all the way to specialized subsystems, such as the networking stack (`AzNetworking`). For developers who want to directly modify the internals of O3DE or connect custom Gems to these low-level frameworks, this information can help you. - -{{< todo >}} -This section is currently incomplete, with a stub example for AzCore. As documentation is added for developers, this section will expand. -{{< /todo >}} - -| Name | Description | -|-|-| -| [AzCore](./frameworks/azcore) | Learn about the core internals of O3DE such as memory management and the custom RTTI system. | - -## Included Gems - -Functionality that's common to many O3DE projects and are often needed at runtime (such as rendering and scripting) is loaded through _Gems_, external libraries that are linked and loaded as part of an O3DE project. Gems are often specific to a use case or technology, and this section can help you understand how to contribute directly back to included Gems in O3DE or create -your own Gem as an extension that takes advantage of available functionality. - -{{< todo >}} -This section is currently incomplete, with a stub example for the ScriptCanvas Gem. As documentation is added for developers, this section will expand. -{{< /todo >}} - -| Name | Description | -|-|-| -| [Script Canvas](./gems/scriptcanvas) | Learn about the internals of the Script Canvas system, including how Script Canvas handles types and generates bindings from C++ source code. | - -## Included Tools - -O3DE includes a handful of tools to support project development. Examples include **Asset Processor** (`AssetProcessor.exe`) and **Project Manager** (`o3de.exe`). This section of the Engine Developer Guide is for tools like these that are not part of any Gem. In these pages you will find detailed information and diagrams describing their architecture, for the benefit of developers who want to modify them. - -{{< todo >}} -This section is currently incomplete, with a stub example for Project Manager. As documentation is added for developers, this section will expand. -{{< /todo >}} - -| Name | Description | -|-|-| -| [Project Manager](./tools/project-manager) | Learn about the internals of **Project Manager**, including an overview of the major classes and data structures that work together to create the UI and implement the project management and Gem library features of this tool. | diff --git a/content/docs/engine-dev/architecture/_index.md b/content/docs/engine-dev/architecture/_index.md deleted file mode 100644 index 29b9277b5fa..00000000000 --- a/content/docs/engine-dev/architecture/_index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -linkTitle: Architecture -title: Open 3D Engine Architecture -description: Documentation for developers looking to understand the overall architecture and design of Open 3D Engine. -weight: 100 ---- - -**Open 3D Engine (O3DE)** is a complex library suite designed to work with both reusable libraries (_Gems_) and user-created projects powered by the SDK (_projects_). In this section of the developer guide, you'll learn more about the overall architecture and design of O3DE from the bottom up, allowing core engine developers to take better advantage of the engine under the hood, diagnose tricky issues in debugging and loading, and contribute effectively back to O3DE with the core architecture principles in mind. - -## Topics - -{{< todo >}} -This is a stub page intended to serve as an example of guide structure. Information will be filled in and changed as the Engine Developer Guide is published. -{{< /todo >}} - -| Name | Description | -|-|-| -| [Project bootstrapping](./bootstrap) | Learn about the execution flow of project launchers and how O3DE loads libraries at project runtime. | diff --git a/content/docs/engine-dev/architecture/bootstrap/_index.md b/content/docs/engine-dev/architecture/bootstrap/_index.md deleted file mode 100644 index 372b06717c3..00000000000 --- a/content/docs/engine-dev/architecture/bootstrap/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -linkTitle: Project Bootstrapping -title: O3DE Project Launch Execution Flow -description: Learn about the execution flow of Open 3D Engine project launchers and how they load and execute your project's code and Gems. -weight: 100 ---- - -{{< todo >}} -This is a stub article intended to serve as an example of guide structure, and is not necessarily content that will be made available in the near future. -{{< /todo >}} diff --git a/content/docs/engine-dev/frameworks/_index.md b/content/docs/engine-dev/frameworks/_index.md deleted file mode 100644 index 3e9ae95beb1..00000000000 --- a/content/docs/engine-dev/frameworks/_index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -linkTitle: Frameworks -title: Open 3D Engine Framework Documentation -description: Documentation for developers using or contributing to the Frameworks distributed as the core libraries of Open 3D Engine. -weight: 200 ---- - -The **Open 3D Engine (O3DE) Frameworks** are the set of libraries shipped as the core elements of O3DE. Frameworks are the low-level libraries responsible for providing support that Gems and project code can build on top of, allowing users to customize their O3DE projects on top of a common SDK for the platform. - -## Topics - -{{< todo >}} -This is a stub page intended to serve as an example of guide structure. Information will be filled in and changed as the Engine Developer Guide is published. -{{< /todo >}} - -| Name | Description | -|-|-| -| [AzCore](./azcore) | Learn about the core internals of Open 3D Engine such as memory management and the custom RTTI system. | diff --git a/content/docs/engine-dev/frameworks/azcore/_index.md b/content/docs/engine-dev/frameworks/azcore/_index.md deleted file mode 100644 index 079d12b5f94..00000000000 --- a/content/docs/engine-dev/frameworks/azcore/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -linkTitle: AzCore -title: AzCore Framework Documentation -description: Documentation for the AzCore Framework of Open 3D Engine, responsible for low-level tasks like memory management and library loading. -weight: 100 ---- - -{{< todo >}} -This is a stub article intended to serve as an example of guide structure, and is not necessarily content that will be made available in the near future. -{{< /todo >}} diff --git a/content/docs/engine-dev/gems/_index.md b/content/docs/engine-dev/gems/_index.md deleted file mode 100644 index 3f57dafdccd..00000000000 --- a/content/docs/engine-dev/gems/_index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -linkTitle: Gems -title: Open 3D Engine Core Gem Developer Documentation -description: Documentation for developers extending or contributing to the Gems bundled as part of Open 3D Engine. -weight: 300 ---- - -{{< note >}} -This section of the documentation is for developers who wish to modify Gems that are distributed with O3DE. If you're a user looking to create new Gems, refer to the [User Guide - Gem Programming](/docs/user-guide/programming/gems) section. -{{< /note >}} - -In **Open 3D Engine (O3DE)**, **Gems** are packages that can be added to any project for functionality. As part of the standard O3DE distribution, -multiple Gems needed for standard projects - such as the default rendering Gem, Atom - are provided. These Gems are maintained by the O3DE Project, and this -documentation is for those looking to contribute, modify existing Gems to fit their needs, or build sub-Gems that are extensions of an existing core Gem. - -## Topics - -{{< todo >}} -This is a stub page intended to serve as an example of guide structure. Information will be filled in and changed as the Engine Developer Guide is published. -{{< /todo >}} - -| Name | Description | -|-|-| -| [Script Canvas](./scriptcanvas/) | Learn about the internals of the Script Canvas system, including how Script Canvas handles types and generates bindings from C++ source code. | diff --git a/content/docs/engine-dev/gems/scriptcanvas/_index.md b/content/docs/engine-dev/gems/scriptcanvas/_index.md deleted file mode 100644 index b79f34f3e55..00000000000 --- a/content/docs/engine-dev/gems/scriptcanvas/_index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -linkTitle: Script Canvas -title: Script Canvas Gem Developer Documentation -description: Documentation for the Script Canvas ---- - -{{< note >}} -This information is for developers of the Script Canvas Gem, or for those who are working on low-level Gems which require taking advantage of Script Canvas -or the infrastructure it uses. If you're a user working with Script Canvas, please refer to the [Script Canvas User Guide](/docs/user-guide/gems/reference/script/script-canvas). -{{< /note >}} - -{{< todo >}} -This is a stub article intended to serve as an example of guide structure, and is not necessarily content that will be made available in the near future. -{{< /todo >}} diff --git a/content/docs/engine-dev/tools/_index.md b/content/docs/engine-dev/tools/_index.md deleted file mode 100644 index 04ff7069b03..00000000000 --- a/content/docs/engine-dev/tools/_index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -linkTitle: Tools -title: Open 3D Engine Tool Developer Documentation -description: Documentation for developers extending or contributing to the tools bundled as part of Open 3D Engine. -weight: 400 ---- - -**Open 3D Engine (O3DE)** includes many tools that support project development. Examples include **Asset Processor** (`AssetProcessor.exe`) and **Project Manager** (`o3de.exe`). This section of the Engine Developer Guide is for tools like these that are not part of any Gem. In these pages you will find detailed information and diagrams describing their architecture, for the benefit of developers who want to contribute to the O3DE project, or modify the tools to fit their needs. - -## Topics - -{{< todo >}} -This is a stub page intended to serve as an example of guide structure. Information will be filled in and changed as the Engine Developer Guide is published. -{{< /todo >}} - -| Name | Description | -|-|-| -| [Project Manager](./project-manager) | Learn about the internals of **Project Manager**, including an overview of the major classes and data structures that work together to create the UI and implement the project management and Gem library features of this tool. | diff --git a/content/docs/engine-dev/tools/project-manager/_index.md b/content/docs/engine-dev/tools/project-manager/_index.md deleted file mode 100644 index ac1db471055..00000000000 --- a/content/docs/engine-dev/tools/project-manager/_index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -linkTitle: Project Manager -title: Project Manager Developer Documentation -description: Documentation for developers extending or contributing to the Project Manager bundled as part of Open 3D Engine. ---- - -***Project Manager*** is the entry point for many new users to O3DE. It is used to manage project creation and editing, building, downloading, among many other tasks. It also features templates for new projects, allowing you to easily create new objects as you need, without needing the CLI. Gems as well are managed through the Gem Catalog for any project. - -The development source for the Project Manager can be found here: https://github.com/o3de/o3de/tree/development/Code/Tools/ProjectManager - -## Topics - -| Name | Description | -|-|-| -| [Bootup Sequence](./bootup-sequence) | Learn about how the Project Manager starts up. This will include all necessary steps in the sequence and identify some key classes that affect the rest of the Project Manager's architecture.| -| [Source Code Map](./source-code-map) | This contains a high level map of some of the most important code files in Project Manager, including brief descriptions and links to further information for each class.| \ No newline at end of file diff --git a/content/docs/engine-dev/tools/project-manager/bootup-sequence.md b/content/docs/engine-dev/tools/project-manager/bootup-sequence.md deleted file mode 100644 index 355825fe79f..00000000000 --- a/content/docs/engine-dev/tools/project-manager/bootup-sequence.md +++ /dev/null @@ -1,167 +0,0 @@ ---- -linkTitle: Bootup Sequence -title: Bootup Sequence -description: High Level Developer Overview for the Project Manager tool. ---- - -{{< note >}} -This information is for developers of the **Project Manager** tool. If you're a user working with Project Manager, please refer to the [Project Manager User Guide](/docs/user-guide/project-config/project-manager). -{{< /note >}} - - -{{< tip >}} -Click on a node to open the relevant source code for that node. -{{< /tip >}} - -```mermaid - -graph TD - classDef PlainTextNode fill:#0000, stroke:#0000, stroke-width:0px, text:#0000 - classDef LinkTextNode fill:#0000, stroke:#2998c4, stroke-width:2px - classDef TextNode fill:#1111, stroke:#0000, stroke-width:0px, text:#0000 - - subgraph ProjectManager [ ] - direction LR - subgraph node1 [ ] - a1(main.cpp) - b1(Entry point of the Project Manager. Runs QApplication Loop) - end - - subgraph node2 [ ] - a2(Application) - subgraph node2_sub1 [ ] - direction TB - b2(Initializes name, domain, log path, attributes, and starts QApplication with icon) - c2(Sets python bindings) - d2(Gets command line set to project path, registers engine, and sets starting project screen) - e2(Starts ProjectManagerWindow) - f2(Loads ProjectManager.qss stylesheet) - end - - end - - subgraph node3 [ ] - a3(ProjectManagerWindow) - subgraph node3_sub1 [ ] - direction TB - b3(Set as MainWindow) - c3(Creates Screen Controller and constructs all relevant UI screens of Project Manager) - d3(Projects Screen set as first screen) - end - end - - subgraph node4 [ ] - a4(ScreensCtrl) - subgraph node4_sub1 [ ] - direction TB - b4(Handles screen transition and management. Star of the show) - end - end - - subgraph node5 [ ] - a5(ScreenFactory) - subgraph node5_sub1 [ ] - direction TB - b5(Helper class mapping ProjectManagerScreen enums to ScreenWidget child classes) - end - end - end - - a1-->a2-->a3-->a4-->a5---EEE[ ]; - - style EEE fill:#0000, stroke:#0000, stroke-width:0px, text:#0000 - linkStyle 4 stroke:#0000,stroke-width:0px; - - b2---c2---d2---e2---f2 - linkStyle 5 stroke:#0000,stroke-width:0px; - linkStyle 6 stroke:#0000,stroke-width:0px; - linkStyle 7 stroke:#0000,stroke-width:0px; - linkStyle 8 stroke:#0000,stroke-width:0px; - - b3 --- c3 --- d3; - linkStyle 9 stroke:#0000,stroke-width:0px; - linkStyle 10 stroke:#0000,stroke-width:0px; - - class node1 TextNode - click a1 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/main.cpp" _blank - class b1 LinkTextNode - click b1 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/main.cpp#L12" "main.cpp entry point" _blank - - class node2 TextNode - click a2 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.h" _blank - class node2_sub1 PlainTextNode - class b2 LinkTextNode - click b2 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.cpp#L38-L74" _blank - class c2 LinkTextNode - click c2 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.cpp#L76-L118" _blank - class d2 LinkTextNode - click d2 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.cpp#L120-L145" _blank - class e2 LinkTextNode - click e2 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.cpp#L147" _blank - class f2 LinkTextNode - click f2 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.cpp#L276-L289" _blank - - - class node3 TextNode - click a3 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ProjectManagerWindow.h" _blank - class node3_sub1 PlainTextNode - class b3 LinkTextNode - click b3 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ProjectManagerWindow.cpp#L17" _blank - class c3 LinkTextNode - click c3 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ProjectManagerWindow.cpp#L31-L47" _blank - class d3 LinkTextNode - click d3 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ProjectManagerWindow.cpp#L49-L60" _blank - - class node4 TextNode - click a4 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreensCtrl.h" _blank - style a4 fill:#f9f,stroke:#76c4e2,stroke-width:4px - class node4_sub1 PlainTextNode - class b4 PlainTextNode - - class node5 TextNode - click a5 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenFactory.cpp" _blank - class node5_sub1 PlainTextNode - class b5 LinkTextNode - click b5 "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenDefs.h#L16-L33" _blank - - class ProjectManager PlainTextNode - -``` - -## ScreenWidget - -```mermaid -graph LR - classDef PlainTextNode fill:#0000, stroke:#0000, stroke-width:0px, text:#0000 - classDef LinkTextNode fill:#0000, stroke:#2998c4, stroke-width:2px - classDef TextNode fill:#1111, stroke:#0000, stroke-width:0px, text:#0000 - - subgraph _ [ ] - direction LR - subgraph __ [ ] - A(ScreenWidget) - B(Parent class to all non-trivial screens in ProjectManager) - C(Outlines all default transition functions) - D(Outlines all default screen refresh functions) - E(ScreensCtrl is implemented using ScreenWidget, thus transition logic is polymorphic) - end - end - - C---D---B---E; - linkStyle 0 stroke:#0000,stroke-width:0px; - linkStyle 1 stroke:#0000,stroke-width:0px; - linkStyle 2 stroke:#0000,stroke-width:0px; - - style A stroke:#f66,stroke-width:2px,stroke-dasharray: 5 5 - click A "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenWidget.h" _blank - class _ PlainTextNode - class __ TextNode - class B PlainTextNode - class C LinkTextNode - click C "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenWidget.h#L66-L68" _blank - class D LinkTextNode - click D "https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenWidget.h#L60-L63" _blank - class E PlainTextNode - - -``` \ No newline at end of file diff --git a/content/docs/engine-dev/tools/project-manager/source-code-map.md b/content/docs/engine-dev/tools/project-manager/source-code-map.md deleted file mode 100644 index ac44cb30cdb..00000000000 --- a/content/docs/engine-dev/tools/project-manager/source-code-map.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -linkTitle: Source Code Map -title: Source Code Map -description: Summaries of classes and code files in Project Manager ---- - -{{< note >}} -This information is for developers of the **Project Manager** tool. If you're a user working with Project Manager, please refer to the [Project Manager User Guide](/docs/user-guide/project-config/project-manager). -{{< /note >}} - -{{< note >}} -This contains brief summaries of various class's functionality and role. If available, there are additional links in the table of contents, either with expanded information, or github links. All documentation reflects code as of commit [(b79bd3df1f)](https://github.com/o3de/o3de/tree/b79bd3df1fe5d4c2a639d3921a29bd0d95712f6c) -{{< /note >}} - -## Startup and Screen Management - -### Overview - -| Class | Source Code | Description | -| - | - | - | -| main.cpp | [cpp file](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/main.cpp) | Entry point for the Project Manager. Initiates the [Application main loop](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/main.cpp#L28). -| [Application](#application) | [header](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.h) [cpp file](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/Application.cpp) | Houses core startup code and configuration loading for Qt framework, Logging, Python Bindngs and O3DE Engine Registration. Facilitates prior housework to starting up the application main loop, and clean up when tearing down. | -|[ProjectManagerWindow](#projectmanagerwindow) | [header](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ProjectManagerWindow.h) [cpp file](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ProjectManagerWindow.cpp) | Constructs the application's `QMainWindow` and `DownloadController`, and prepares all relevant transition screens for the Project Manager. -|[ScreensCtrl](#screensctrl) | [header](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreensCtrl.h) [cpp file](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp) | Container structure for all Project Manager Screens and GUI Widgets. Also houses primary transition code for facilitating Project Manager's business logic. -|ScreenFactory | [header](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenFactory.h) [cpp file](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenFactory.cpp) | Helper class for `ScreensCtrl` that routes `ProjectManagerScreen` enums to appropriate `ScreenWidget` constructor, invokes that constructor, and returns an instance of a given screen for the Project Manager's business logic. -|ScreenDefs | [header](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenDefs.h) | Contains definitions for `ProjectManagerScreen` enum, which describes all possible types of screens in Project Manager. It also defines a hash function, and a mapping to appropriate string equivalents for each enum.| -|[ScreenWidget](#screenwidget) | [header](https://github.com/o3de/o3de/blob/development/Code/Tools/ProjectManager/Source/ScreenWidget.h) | The parent class to all screens in Project Manager. It contains all necessary stubs for screen management and transition. `ScreensCtrl` is defined in terms of `ScreenWidget`, so that all transition logic is polymorphic.| - -### Application - -Inherits from `AzFramework::Application`. - -The functions of the Application class are exclusively run by `main.cpp`. - -The two primary functions to keep track of are `Init` and `Run`. [`TearDown`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/Application.cpp#L260-L272) is invoked at `Application`'s deconstruction. - - -##### [`Application::Init`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/Application.cpp#L34) -* Sets various `QApplication` and `QCoreApplication` attributes and parameters. -* Registers components for system logging, and invokes [`InitLog`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/Application.cpp#L152). -* Creates new instance of `QApplication`, feeding in command line arguments. -* Sets up PythonBindings. -* Calls [`RegisterEngine`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/Application.cpp#L181) to setup the O3DE engine that Project Manager ships with. -* Gets connection to CommandLine, and parses for screen and projectPath parameters. -* Creates ProjectManagerWindow. - -##### [`Application::Run`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/Application.cpp#L274) -* Sets up Qt GUI stylesheets. -* Sets up Window decoration and MainWindow Geometry. -* Shows the MainWindow. -* Run the QApplication's main loop. - -[Back to Top](#overview) - - - -### ProjectManagerWindow -This inherits all primary functionality from `QMainWindow`. - -All logic unique to the Project Manager occurs at the constructor, which is summarized as follows: -* Fetch Engine Info to set Window Title with correct engine version information. -* Instantiate the `DownloadController`. -* Instantiate the `ScreensCtrl` for screen management. -* Construct a list of relevant `ProjectManagerScreen` enums, and use `ScreensCtrl` to construct each screen widget for Project Manager's GUI. -* Set instance of `ScreensCtrl` as central widget of the window. -* Retrieve passed in arguments for `startScreen` and `projectPath`. - * If `startScreen` is set, first force load the main Projects screen, then transition to the desired screen. If not set, the Projects screen is the default. - * If `projectPath` is set, notify the `ScreensCtrl` instance of the currently highlighted project path. - -[Back to Top](#overview) - - - - -### ScreensCtrl -ScreensCtrl is the central widget which stores all GUI information for Project Manager. It is comprised of these data structures: - -* `m_screenMap` - used to access all available Screens in Project Manager. -* `m_screenStack` - stores all screens in a `QStackedWidget`. -* `m_tabWidget` - The three primary tabs of Project Manager (Project, Gem, and Engine), are stored here. This tab widget, in turn, is stored as the first element of `m_screenStack`. -* `m_screenVisitOrder` - Traversal history through the screens of ProjectManager can be tracked using this. - -All functions are summarized as follows: - -| Function | Description | -| - | - | -| [`ScreensCtrl::ScreensCtrl`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L19) | Sets up primary screen layout. `m_tabWidget` is the first widget pushed to `m_screenStack`.| -| [`ScreensCtrl::BuildScreens`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L39) | For each requested screen, calls `ResetScreen`. Because this is called at the beginning of Application life cycle, this will trigger initialization logic in `ResetScreen`.| -| [`ScreensCtrl::FindScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L47) | Searches for the pointer to the `ScreenWidget` of the requested `ProjectManagerScreen` enum and returns it if found. Otherwise returns a `nullptr`.| -| [`ScreensCtrl::GetCurrentScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L60) | First checks if the current widget in `m_screenStack` is `m_tabWidget`. If so, it returns the current tab of `m_tabWidget`. Otherwise it returns whatever the current widget of `m_screenStack` is.| -| [`ScreensCtrl::ChangeToScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L72) | If able, we transition to the desired screen using `ForceChangeToScreen`.| -| [`ScreensCtrl::ForceChangeToScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L85) | Driver code to change screen GUIs in Project Manager. More info can be found [below](#screensctrlforcechangetoscreenhttpsgithubcomo3deo3deblobce9765f7fca8feed2eefaaea3764805679d7425fcodetoolsprojectmanagersourcescreensctrlcppl85)| -| [`ScreensCtrl::GoToPreviousScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L147) | If `m_screenVisitOrder` is not empty, we call `ForceChangeToScreen` by popping `m_screenVisitOrder`.| -|[`ScreensCtrl::ResetScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L158) | Deletes the old screen, and recreates it. More info can be found [below](#screensctrlresetscreenhttpsgithubcomo3deo3deblobce9765f7fca8feed2eefaaea3764805679d7425fcodetoolsprojectmanagersourcescreensctrlcppl158)| -| [`ScreensCtrl::ResetAllScreens`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L208) | Call `ResetScreen` for every screen.| -| [`ScreensCtrl::DeleteScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L216) | If screen can be found in `m_screenMap`, we proceed to delete the screen either from `m_tabWidget` if it is a tab, or from `m_screenStack` otherwise. Afterwards we erase the entry from `m_screenMap`.| -| [`ScreensCtrl::DeleteAllScreens`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L243) | Call `DeleteScreen` for all screens.| -| [`ScreensCtrl::TabChanged`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L251) | A [Slot function](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.h#L50), which is invoked anytime `m_tabWidget` changes tabs. This just causes the current tab to refresh itself via `NotifyCurrentScreen`.| -| [`ScreensCtrl::GetScreenTabIndex`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L260) | Retrieves the index position of the screen in `m_tabWidget` if it is a tab screen, otherwise returns -1.| - -#### In-Depth Explanations -###### [`ScreensCtrl::ForceChangeToScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L85) -* First we search for the desired screen in `m_screenMap`. -* If we can find it, then if it is already the current screen, we run `NotifyCurrentScreen` to refresh it. -* Otherwise we set the current widget of `m_screenStack` (and `m_tabWidget` if the desired screen is one of the main tabs). - - If we are tracking previous visits, we make sure to update `m_screenVisitOrder` as well. -* Finally we run `NotifyCurrentScreen` and `GoToScreen` to prepare for our arrival. - - - -###### [`ScreensCtrl::ResetScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L158) -* Delete the old screen using `DeleteScreen`. -* Rebuild screen using [`ScreenFactory::BuildScreen`](https://github.com/o3de/o3de/blob/ce9765f7fca8feed2eefaaea3764805679d7425f/Code/Tools/ProjectManager/Source/ScreenFactory.cpp#L27). -* If the screen is supposed to be a Tab. - - Update `m_tabWidget` with screen. - - Update current widget for `m_tabWidget` and `m_screenStack`. - - If we should restore the screen, call `NotifyCurrentScreen`. -* Otherwise add the screen to `m_screenStack` and set the current widget. - - `NotifyCurrentScreen` for newly created screen. -* Update `m_screenMap` with pointer to the new screen. -* Connect slots for transition functions for new screen. - -[Back to Top](#overview) - - -### ScreenWidget -If you were to check the header file, it would only contain stub functions. In this section we will explain the high level purpose of each function, so that it's easier to recognize what the subclasses are doing when they override a given function. - -| Function | Description | -| - | - | -| [`ScreenWidget::GetScreenEnum`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L33) | Each subclass of `ScreenWidget` will use this function to define what type of screen is currently active. | -| [`ScreenWidget::IsReadyForNextScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L37) | Meant to validate if a given [screen is ready for a transition](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L77), or if it must pause for some reason (for example, an uninterruptable task is taking place). Currently it is unused.| -| [`ScreenWidget::IsTab`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L41) | This function declares if a given screen is a tab in the `m_tabWidget` data structure. This is used to process tabs as an edgecase in [`ScreensCtrl::ForceChangeToScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L118) and [`ScreensCtrl::DeleteScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L223). The classes which override this function are [`GemCatalogScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp#L782), [`ProjectsScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp#L431), [`ProjectGemCatalogScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ProjectGemCatalogScreen.cpp#L121), and [`EngineScreenCtrl`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/EngineScreenCtrl.cpp#L68).| -| [`ScreenWidget::GetTabText`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L45) | Gets the corresponding string value of a tab screen, if defined by the subclass.| -| [`ScreenWidget::ContainsScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L50) | There exist some screens in Project Manager, like [`EngineScreenCtrl`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/EngineScreenCtrl.cpp#L75), that contain other smaller screens inside of them. This can be used to check if a given screen exists inside of a parent screen. | -| [`ScreenWidget::GoToScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L54) | Defines a transition function where the subclass decides whether or not to move onto a certain screen. | -| [`ScreenWidget::Init`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L57) | This function occurs shortly after a screen's constructor runs in [`ScreenFactory::BuildScreen`](https://github.com/o3de/o3de/blob/c33daa6fc7f2ce175fca1e8325b9feac0c0d4d4e/Code/Tools/ProjectManager/Source/ScreenFactory.cpp#L78). This is meant to setup any hooks into the system that cannot be done at construction time. Two examples of this can be found in [`CreateAGemScreen`](https://github.com/o3de/o3de/blob/c33daa6fc7f2ce175fca1e8325b9feac0c0d4d4e/Code/Tools/ProjectManager/Source/CreateAGemScreen.cpp#L79-L93) and [`EditAGemScreen`](https://github.com/o3de/o3de/blob/c33daa6fc7f2ce175fca1e8325b9feac0c0d4d4e/Code/Tools/ProjectManager/Source/EditAGemScreen.cpp#L48-L64), the reasoning of which can be found [here](https://github.com/o3de/o3de/pull/12732/files/a8af31a375ed97152b0c0ae785c85a538c918de0#r1014510710). | -| [`ScreenWidget::NotifyCurrentScreen`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L61) | A function that is called anytime the screen needs to refresh itself. All necessary refresh logic should be expressed here. | - -`ScreenWidget` also defines various Qt [`signals`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreenWidget.h#L65-L70) that are used to facilitate transitions by connecting to Qt [`slots`](https://github.com/o3de/o3de/blob/99f713702e5e0a8949e38c7b92bf00682c2633ca/Code/Tools/ProjectManager/Source/ScreensCtrl.cpp#L201-L205) as defined in `ScreensCtrl::ResetScreen`. - -[Back to Top](#overview) \ No newline at end of file diff --git a/content/docs/learning-guide/samples/ai/kythera-city-level-overview.md b/content/docs/learning-guide/samples/ai/kythera-city-level-overview.md index d0c5b5514e1..6d2653550b9 100644 --- a/content/docs/learning-guide/samples/ai/kythera-city-level-overview.md +++ b/content/docs/learning-guide/samples/ai/kythera-city-level-overview.md @@ -175,7 +175,7 @@ The `KytSpaceship` entity has the following components, which are required for 3 * `PhysX Collider`, set to the convex shape of the ship * `Agent`, set to use the profile `GoToRandomEntityProfile` * `FlightMovementController`, which you can configure to change the speed and acceleration of the ships -* `PhysX Dynamic Rigid Body` (required by the movement controller) +* `PhysX Rigid Body` (required by the movement controller) You can find the profile `GoToRandomEntityProfile` in `KytheraAIDemo/Scripts/Profiles.xml`. ```xml @@ -203,7 +203,7 @@ The `KytSpaceship_Splines` entity has the following components, which are requir * `PhysX Collider`, set to the convex shape of the ship * `Agent`, set to use the profile `PathToNearestSplineStart` * `FlightMovementController`, which you can configure to change the speed and acceleration of the ships -* `PhysX Dynamic Rigid Body` (required by the movement controller) +* `PhysX Rigid Body` (required by the movement controller) The `KytDrone_Splines` entity is set up in almost exactly the same way as the `KytSpaceshp_Splines`, except that its `Agent` component is set to use the profile `PathToNearestSplinePoint`. diff --git a/content/docs/learning-guide/tutorials/_index.md b/content/docs/learning-guide/tutorials/_index.md index 0ee5f5283a8..8b058550747 100644 --- a/content/docs/learning-guide/tutorials/_index.md +++ b/content/docs/learning-guide/tutorials/_index.md @@ -32,7 +32,8 @@ Do you have O3DE installed and you aren't sure where to start? How about creatin | Tutorial | Description | | - | - | -| [Customize Mesh Asset Processing](assets/mesh-assets) | Use **Scene Settings** to process mesh assets for O3DE. | +| [Customize Mesh Asset Processing](assets/mesh-assets) | Use Scene Settings to process mesh assets for O3DE. | +| [Customize Actor Asset Processing](assets/actor-assets) | Use Scene Settings to process actor assets for O3DE. | | [Process PhysX Collider Assets](assets/physx-colliders) | Use Scene Settings to process PhysX collider assets for O3DE. | ## Entities and prefabs @@ -40,7 +41,6 @@ Do you have O3DE installed and you aren't sure where to start? How about creatin | Tutorial | Description | | - | - | | [Entity and Prefab Basics](entities-and-prefabs/entity-and-prefab-basics) | Learn the basics of creating and modifying entities and prefabs. | -| [Override a Prefab](entities-and-prefabs/override-a-prefab) | Learn how to make changes to a single prefab instance. | | [Spawn and Despawn a Prefab](entities-and-prefabs/spawn-a-prefab.md) | Use **Script Canvas** to create a script that spawns and despawns a prefab. | ## Environments diff --git a/content/docs/learning-guide/tutorials/assets/_index.md b/content/docs/learning-guide/tutorials/assets/_index.md index d4b5a406913..34f762455c8 100644 --- a/content/docs/learning-guide/tutorials/assets/_index.md +++ b/content/docs/learning-guide/tutorials/assets/_index.md @@ -4,9 +4,10 @@ title: Process Assets with Scene Settings description: Learn to process meshes, textures, characters, animation, and PhysX assets for Open 3D Engine (O3DE). --- -The meshes, textures, and animations that you create for your projects are known as *source assets*. The **Asset Pipeline** must process source assets before you can use them in your **Open 3D Engine (O3DE)** projects. The tutorials in this section cover all the basics of **Scene Settings** that you can use to customize the generation of runtime-optimized product assets. +The meshes, textures, and animations that you create for your projects are known as *source assets*. **Asset Pipeline** processes source assets to generate runtime-optimized *product assets* that you can use in your **Open 3D Engine (O3DE)** projects. The tutorials in this section cover all the basics of using the **Scene Settings** tool to customize how Asset Processor generates product assets. | Topic | Description | | - | - | | [Customize Mesh Asset Processing](mesh-assets) | Use Scene Settings to process mesh assets for O3DE. | +| [Customize Actor Asset Processing](actor-assets) | Use Scene Settings to process actor assets for O3DE. | | [Process PhysX Collider Assets](physx-colliders) | Use Scene Settings to process PhysX collider assets for O3DE. | diff --git a/content/docs/learning-guide/tutorials/assets/actor-assets.md b/content/docs/learning-guide/tutorials/assets/actor-assets.md new file mode 100644 index 00000000000..6cf47e72292 --- /dev/null +++ b/content/docs/learning-guide/tutorials/assets/actor-assets.md @@ -0,0 +1,90 @@ +--- +linkTitle: Actor Processing +title: Customize Actor Asset Processing +description: Learn to customize how actor assets are processed for Open 3D Engine (O3DE) with Scene Settings. +weight: 300 +toc: true +--- + +This tutorial demonstrates how to use [**Scene Settings**](/docs/user-guide/assets/scene-settings/scene-settings) to customize actor asset processing for **Open 3D Engine (O3DE)**. An actor contains one or more meshes bound to a skeleton. You can use any actor asset for this tutorial. The primary 3D scene format supported by O3DE is `.fbx`, so it's recommended to use an actor asset saved to a `.fbx` file. If you don't have your own actor source asset, you can use a character asset from a provider such as [Mixamo](https://www.mixamo.com/#/?page=1&type=Character). + +{{< note >}} +Understanding the [best practices](/docs/user-guide/assets/scene-settings/source-asset-best-practices#actors) for creating actor source assets can mitigate issues you might encounter when processing actors for O3DE. For technical details about the data supported by actors, refer to the [supported 3D scene data](/docs/user-guide/assets/scene-settings/scene-format-support#supported-3d-scene-data) table. +{{< /note >}} + +| O3DE Experience | Time to Complete | Feature Focus | Last Updated | +| - | - | - | - | +| Beginner | 10 Minutes | Customized processing of actor assets from `.fbx` files with Scene Settings. | January 4, 2023 | + +## Preparation + +Place your actor `.fbx` source asset in a [scan directory](/docs/user-guide/assets/pipeline/scan-directories) for your project, such as the `Assets` subdirectory, so it can be detected by [**Asset Processor**](/docs/user-guide/assets/asset-processor). + +## Processing an actor asset + +When you placed your actor `.fbx` source asset in your project's `Assets` directory, Asset Processor detected the asset, examined its contents, and processed it with a default set of rules. These default rules might be sufficient for simple actor assets, however, actors often require additional processing for custom normals and tangents, cloth meshes, root motion extraction, or coordinate space changes. To customize the rules that process the actor asset, do the following: + +1. In **O3DE Editor**, locate your asset in **Asset Browser**. You can type the name of the asset into the search field at the top of Asset Browser to filter the list and locate your actor asset. + + ![ Search for a specific mesh asset in Asset Browser. ](/images/learning-guide/tutorials/assets/actor-search-asset-browser.png) + + If your asset has already been processed, you might see a preview image of the asset, and a list of product assets below the `.fbx` source asset. + +1. **Double-click** the `.fbx` source asset and choose **Edit Settings...** from the context menu to open Scene Settings. + + ![ Open Scene Settings from Asset Browser. ](/images/learning-guide/tutorials/assets/actor-edit-settings.png) + +1. Select the [**Meshes**](/docs/user-guide/assets/scene-settings/meshes-tab) tab. + + ![ Scene Settings meshes tab. ](/images/learning-guide/tutorials/assets/actor-mesh-scene-settings.png) + + In the preceding image, there is one **Mesh group** in the **Meshes** tab. A mesh group produces a runtime optimized mesh asset. By default, all the meshes in the source asset are selected for the mesh group and are processed as a single mesh. + + Additional mesh groups can be created by choosing **Add another mesh**. However, an actor entity can only have one mesh component. All of the actor's meshes - which is to say, all the meshes that are bound to the actor's skeleton - must be included in a single mesh group. The actor in this example has one mesh, though it's common for actors to have many unique meshes. + + The following table explains the important elements of the default mesh group for actors: + + | Element | Description | + | --- | --- | + | **Name mesh** | This property is the name of the mesh group. All product assets of this mesh group use this string as a prefix for their name. The product assets appear in Asset Browser beneath the source asset. By default, the name of the source scene file is used. | + | **Select meshes** | The meshes selected for processing as part of the mesh group. Choosing the {{< icon browse-edit-select-files.svg >}} **node select** button allows you to select which meshes from the `.fbx` source asset to include in the mesh group. By default, all meshes in the `.fbx` source asset are selected. | + | **Skin** | The [Skin](/docs/user-guide/assets/scene-settings/meshes-tab/#skin) modifier is automatically added for meshes that are bound to a skeleton. The Skin modifier sets the max weights per vertex for the mesh, and the weight threshold for bone influences. The **Max weights per vertex** property has a default value of `8`, so that up to 8 bones can influence each vertex in the mesh. The default **Weight threshold** is `0.001`. Any vertex weights that are lower than the threshold value are ignored. | + | **Material** | The [Material](/docs/user-guide/assets/scene-settings/meshes-tab/#material) modifier is automatically added to mesh groups. With the Material modifier, you can choose to update the materials for the processed actor, and remove unused materials that might have been previously processed for the actor. | + + {{< note >}} +If your actor has custom normals and materials that use normal maps, you might need to add [**Mesh (Advanced)**](/docs/user-guide/assets/scene-settings/meshes-tab/#mesh-advanced) and [**Tangents**](/docs/user-guide/assets/scene-settings/meshes-tab/#tangents) modifiers as well. To learn more about mesh modifiers, refer to the [Meshes Tab](/docs/user-guide/assets/scene-settings/meshes-tab) topic in the User Guide. + {{< /note >}} + +1. Choose the {{< icon browse-edit-select-files.svg >}} file select button to view and select which meshes to include in the actor's mesh group. + + ![ Select meshes for actor. ](/images/learning-guide/tutorials/assets/select-actor-mesh.png) + +1. In the **Select nodes** dialog, select only the mesh nodes required by the actor. Mesh nodes are denoted by a mesh icon. Choose **Select** to complete the selection. + +1. Select the [**Actors**](/docs/user-guide/assets/scene-settings/actors-tab) tab to specify the root joint of the actor's skeleton. + + ![ Select the Actors tab. ](/images/learning-guide/tutorials/assets/actors-tab.png) + + In the preceding image, there is a single **Actor group**. + + The **Name actor** property is the name of the actor group. All product assets of this actor group use this string as a prefix for their name. The product assets of this actor group appear in Asset Browser beneath the source asset. By default, the name of the source scene file is used. + + The **Select root bone** property specifies the root bone of the skeleton to process for the actor. + +1. Click the **Select root bone** property to expose the list of bones. From the list, select the root bone of the skeleton. + + ![ Specify the root bone for the actor. ](/images/learning-guide/tutorials/assets/select-actor-root.png) + + {{< note >}} +The first node in the list is the scene root node, not the root of the skeleton. Make sure the bone you select is the root bone of the actor's skeleton. The skeleton root bone is critical for animation and root motion. For more information, refer to the [Data Driven Root Motion](/docs/learning-guide/tutorials/animation/data-driven-root-motion) tutorial. + {{< /note >}} + +1. Choose **Update** to save the customized settings for the actor. The asset is immediately reprocessed with the new settings. + +1. Locate the actor product asset in Asset Browser and drag the actor into the viewport to create an entity for the actor. + + ![ Drag the actor from Asset Browser to create an actor entity. ](/images/learning-guide/tutorials/assets/actor-entity-instance.png) + + In **Entity Inspector**, note that the entity contains a single **Actor** component that references the actor product asset that you dragged into the viewport. + + ![ Actor entity in Entity Inspector. ](/images/learning-guide/tutorials/assets/actor-entity-components.png) diff --git a/content/docs/learning-guide/tutorials/assets/mesh-assets.md b/content/docs/learning-guide/tutorials/assets/mesh-assets.md index 625afa6f65a..94b37be51bc 100644 --- a/content/docs/learning-guide/tutorials/assets/mesh-assets.md +++ b/content/docs/learning-guide/tutorials/assets/mesh-assets.md @@ -2,48 +2,49 @@ linkTitle: Mesh Processing title: Customize Mesh Asset Processing description: Learn to customize how mesh assets are processed for Open 3D Engine (O3DE) with Scene Settings. -weight: 100 +weight: 200 toc: true --- -This tutorial demonstrates how to customize mesh asset processing for **Open 3D Engine (O3DE)**. You can use any mesh for this tutorial. The primary 3D scene format supported by O3DE is `.fbx`, so it's recommended to use a simple mesh asset saved to a `.fbx` file for this tutorial. If you don't have your own source asset, you can use one of the assets provided with O3DE. +This tutorial demonstrates how to use [**Scene Settings**](/docs/user-guide/assets/scene-settings/scene-settings) to customize mesh asset processing for **Open 3D Engine (O3DE)**. You can use any mesh for this tutorial. The primary 3D scene format supported by O3DE is `.fbx`, so it's recommended to use a simple mesh asset saved to a `.fbx` file for this tutorial. If you don't have your own source asset, you can use one of the assets provided with O3DE. -## Preparation +{{< note >}} +Understanding the [best practices](/docs/user-guide/assets/scene-settings/source-asset-best-practices#meshes) for creating mesh source assets can mitigate issues you might encounter when processing meshes for O3DE. For technical details about the data supported by meshes, refer to the [supported 3D scene data](/docs/user-guide/assets/scene-settings/scene-format-support#supported-3d-scene-data) table. +{{< /note >}} + +| O3DE Experience | Time to Complete | Feature Focus | Last Updated | +| - | - | - | - | +| Beginner | 10 Minutes | Customized processing of mesh assets from `.fbx` files with Scene Settings. | January 4, 2023 | -**Asset Processor** is an application and a service that runs in the background while you use O3DE. Asset Processor automatically detects source assets that are placed in scan directories and schedules process jobs for the found source assets. The process jobs generate product assets that are runtime optimized for O3DE. The end-to-end process from source asset to product asset is the **Asset Pipeline**. To learn more about Asset Processor and the Asset Pipeline, refer to the [Assets](/docs/user-guide/assets/) topic in the User Guide. +## Preparation -Asset Processor uses *scan directories* to find assets that need to be processed. Your entire project directory structure is a scan directory. Place your `.fbx` source asset somewhere in your project, such as the `Assets` subdirectory, so it can be detected by Asset Processor. +Place your mesh `.fbx` source asset in a [scan directory](/docs/user-guide/assets/pipeline/scan-directories) for your project, such as the `Assets` subdirectory, so it can be detected by [**Asset Processor**](/docs/user-guide/assets/asset-processor). ## Processing a mesh asset -When you placed your `.fbx` source asset in your project, Asset Processor detected the asset and processed it with a default set of rules for `.fbx` source assets. To customize the rules that process a mesh asset, follow the steps below: +When you placed your mesh `.fbx` source asset in your project's `Assets` directory, Asset Processor detected the asset, examined its contents, and processed it with a default set of rules. To customize the rules that process the mesh asset, do the following: -1. In **O3DE Editor** locate your asset in **Asset Browser**. If you don't have an asset of your own, you can type `fbx` into the search field at the top of asset browser and use one of the provided `.fbx` files such as `sphere.fbx`. +1. In **O3DE Editor** locate your asset in **Asset Browser**. If you don't have an asset of your own, you can type `fbx` into the search field at the top of Asset Browser and use one of the `.fbx` files included with O3DE. ![ Search for a specific mesh asset in Asset Browser. ](/images/learning-guide/tutorials/assets/meshes-search-asset-browser.png) If your asset has already been processed, you might see a preview image of the asset, and a list of product assets below the `.fbx` source asset. -1. **Right-click** the `.fbx` source asset and choose **Edit Settings...** from the context menu to open **Scene Settings**. - +1. **Double-click** the `.fbx` source asset and choose **Edit Settings...** from the context menu to open Scene Settings. ![ Open Scene Settings from Asset Browser. ](/images/learning-guide/tutorials/assets/meshes-edit-settings.png) -1. The Scene Settings window presents different tabs depending on the contents of the source asset file. Make sure the **Meshes** tab is selected. +1. Select the [**Meshes**](/docs/user-guide/assets/scene-settings/meshes-tab) tab. ![ Scene Settings meshes tab. ](/images/learning-guide/tutorials/assets/meshes-scene-settings.png) - In the image above, there is a single **Mesh group**. By default, all the meshes in a source asset are processed as a single mesh group. Each mesh group produces a set of product assets. You can create additional mesh groups for a source asset by choosing **Add another mesh**. - - The **Name mesh** property contains the name of the source asset. All product assets of this mesh group use this string as a prefix for their name. When there are multiple mesh groups, the product assets appear in Asset Browser beneath the source asset and are organized by mesh group name. - - The **Select meshes** property reads **All meshes selected**. You can choose the {{< icon browse-edit-select-files.svg >}} file select button to select which meshes to include in the mesh group. + In the preceding image, there is a single **Mesh group**. By default, all the meshes in a source asset are processed as a single mesh group. Each mesh group produces a set of product assets. You can create additional mesh groups by choosing **Add another mesh**. - For this tutorial, you can use the default mesh group with all meshes selected. + The **Name mesh** property contains the name of the source asset. All product assets of this mesh group use this string as a prefix for their name. When there are multiple mesh groups, the product assets appear in Asset Browser beneath the source asset and are organized by mesh group name. -1. The customizations you make in Scene Settings are stored in a *sidecar file* with a `.assetinfo` extension. When Asset Processor detects a `.assetinfo` file, it uses the settings in the file to process the related source asset. This sidecar file is treated as a source dependency for the asset. This means that if the `.assetinfo` file is changed, the source asset will be reprocessed even if the source asset has not changed. + The **Select meshes** property reads **All meshes selected**. You can choose the {{< icon browse-edit-select-files.svg >}} **node select** button to select which meshes to include in the mesh group. - Let's add a modifier to customize how the asset is processed. Choose the **Add Modifier** button to view the mesh modifier list and select **Coordinate system change**. +1. Add a modifier to customize how the asset is processed. Choose the **Add Modifier** button to view the mesh modifier list and select [**Coordinate system change**](/docs/user-guide/assets/scene-settings/meshes-tab#coordinate-system-change). ![ Scene Settings meshes tab, adding mesh a modifier. ](/images/learning-guide/tutorials/assets/meshes-coordinate-system-change.png) @@ -51,20 +52,14 @@ When you placed your `.fbx` source asset in your project, Asset Processor detect ![ Scene Settings meshes Coordinate system change modifier, Use advanced settings. ](/images/learning-guide/tutorials/assets/meshes-use-advanced-settings.png) -1. Let's customize the scale of the asset. Set the **Scale** property to `5.0` to scale the asset to five times its size. - - {{< note >}} -You can learn about the advanced settings properties of the Coordinate system change modifier, as well as the other available modifiers and their properties, in the [Scene Settings](/docs/user-guide/assets/scene-settings) topic of the **User Guide**. - {{< /note >}} +1. Customize the scale of the asset. Set the **Scale** property to `5.0` to scale the asset to five times its size. 1. Choose the **Update** button at the bottom-right of Scene Settings. This creates or updates the `.assetinfo` sidecar file and triggers Asset Processor to reprocess the asset. + When Asset Processor detects a `.assetinfo` file, it uses the settings in the file to process the related source asset. This sidecar file is treated as a source dependency for the asset. This means that if the `.assetinfo` file is changed, the source asset will be reprocessed even if the source asset has not changed. + 1. Drag the `.azmodel` product asset from Asset Browser into the viewport. {{< image-width "/images/learning-guide/tutorials/assets/meshes-finished.png" "800" "Drag the mesh product asset into the viewport">}} - When you drag the asset into the viewport, O3DE automatically creates an entity with a **Mesh** component that references the mesh product asset. If the source asset contains materials that have been processed, the materials are applied to the mesh by default. - -There are many options for customizing mesh processing, but there are limitations to the data that can be processed for meshes. Note that there are several product assets generated for the mesh that are listed below the source asset in Asset Browser. Each of these product assets contains some stream of data for the mesh. To learn more about the data that can be processed for a mesh and the limitations on the data that can be processed, refer to [3D Scene Format Support](/docs/user-guide/assets/scene-settings/scene-format-support) in the User Guide. - - + When you drag the asset into the viewport, O3DE automatically creates an entity with a **Mesh** component that references the mesh product asset. If the source asset contains materials that have been processed, the materials are applied to the mesh by automatically. diff --git a/content/docs/learning-guide/tutorials/assets/physx-colliders.md b/content/docs/learning-guide/tutorials/assets/physx-colliders.md index 7ea157815ad..383ddc3b68c 100644 --- a/content/docs/learning-guide/tutorials/assets/physx-colliders.md +++ b/content/docs/learning-guide/tutorials/assets/physx-colliders.md @@ -2,21 +2,29 @@ linkTitle: PhysX Assets title: Process PhysX Collider Assets description: Learn to customize PhysX collider asset processing in Open 3D Engine (O3DE) with Scene Settings. -weight: 100 +weight: 400 toc: true --- -**Open 3D Engine (O3DE)** has a robust set of options for generating PhysX collider assets. In **Scene Settings**, you can customize PhysX collider asset generation. The generated PhysX colliders are stored in `.pxmesh` product assets. You can add the PhysX collider assets to a **PhysX Collider** component by selecting **PhysicsMesh** in the component's **Shape** property. +**Open 3D Engine (O3DE)** has a robust set of options for generating PhysX collider assets. There are three PhysX collider types that you can use in different simulation scenarios. This topic explains the benefits and limitations of the different collider types, as well as the basics of generating PhysX asset colliders with [**Scene Settings**](/docs/user-guide/assets/scene-settings/scene-settings). -There are three PhysX asset collider types that you can use in different simulation scenarios. This topic explains the benefits and limitations of the different collider types, as well as the basics of generating PhysX asset colliders with Scene Settings. +The generated PhysX colliders are stored in `.pxmesh` product assets. You can add the PhysX collider assets to a **PhysX Collider** component by selecting **PhysicsAsset** in the component's **Shape** property. + +{{< note >}} +Understanding the [best practices](/docs/user-guide/assets/scene-settings/source-asset-best-practices#physx) for creating PhysX collider source assets can mitigate issues you might encounter when processing colliders for O3DE. For technical details about the data supported by colliders, refer to the [supported 3D scene data](/docs/user-guide/assets/scene-settings/scene-format-support#supported-3d-scene-data) table. +{{< /note >}} + +| O3DE Experience | Time to Complete | Feature Focus | Last Updated | +| - | - | - | - | +| Beginner | 25 Minutes | Customized processing of PhysX collider assets from `.fbx` files with Scene Settings. | January 4, 2023 | ## Entity behavior Before you learn about collider types, you should understand the three types of entity behavior that influence the collider asset type you might choose in a given scenario: -* **Static** -- Static entities have a **PhysX Static Rigid Body** and can be collided with, but they don't move, and PhysX collisions and forces don't affect them. Static entities can use any collider type. -* **Kinematic** -- Kinematic entities have a **PhysX Dynamic Rigid Body** component and movement that is driven by code or script. Kinematic entities can be collided with, but PhysX collisions and forces don't affect them. Kinematic entities can use any collider type. -* **Simulated** -- Simulated entities have a **PhysX Dynamic Rigid Body** component and simulated movement that results from PhysX collisions and forces. Simulated entities can use only primitive and convex colliders. +* **Static** -- Static entities can be collided with, but they don't move, and PhysX collisions and forces don't affect them. Static entities can use any collider type. +* **Kinematic** -- Kinematic entities have a **PhysX Rigid Body** component and movement that is driven by script. Kinematic entities can be collided with, but PhysX collisions and forces don't affect them. Kinematic entities can use any collider type. +* **Dynamic** -- Dynamic entities have a **PhysX Rigid Body** component and simulated movement that results from PhysX collisions and forces. Dynamic entities can use only primitive and convex colliders. ## PhysX collider assets @@ -38,9 +46,9 @@ Triangle mesh colliders are commonly used for immobile environment objects that ### Primitive -Primitive colliders are composed of sphere, box, or capsule primitive shapes. Because simple properties such as **Radius**, **Height**, and **Width** define the primitive shapes, primitive colliders generally offer the best simulation performance. Primitive colliders are automatically fitted to the input mesh. However, depending on the complexity of the input mesh, areas of the collider might fall within or far outside of the input mesh surface. This can result in collisions that aren't visually accurate. The **Decompose Meshes** property decomposes complex input meshes into smaller parts, and fits primitive colliders to each part. You can use primitive colliders with static, kinematic, and simulated entities. These colliders can have only one physics material assignment. +Primitive colliders are composed of sphere, box, or capsule primitive shapes. Because simple properties such as **Radius**, **Height**, and **Width** define the primitive shapes, primitive colliders generally offer the best simulation performance. Primitive colliders are automatically fitted to the input mesh. However, depending on the complexity of the input mesh, areas of the collider might fall within or far outside of the input mesh surface. This can result in collisions that aren't visually accurate. The **Decompose Meshes** property decomposes complex input meshes into smaller parts, and fits primitive colliders to each part. You can use primitive colliders with static, kinematic, and dynamic entities. These colliders can have only one physics material assignment. -Colliders occupy the same physical space as the input mesh. In the following image, a primitive collider asset is offset to the right of the input mesh asset that generated the collider so that you can clearly view the collider. The collider asset (right) is a simple box that has been automatically oriented and scaled to encompass the render mesh (left). Note that one corner of the primitive collider extends far from the input mesh and penetrates the ground plane. This demonstrates one of the drawbacks of using a primitive collider on a complex input mesh. In a scenario where this is a simulated entity, the ground plane collision would push the asset upward, and the asset would not come to rest standing upright because of the sharp corner at the bottom of the primitive collider. +Colliders occupy the same physical space as the input mesh. In the following image, a primitive collider asset is offset to the right of the input mesh asset that generated the collider so that you can clearly view the collider. The collider asset (right) is a simple box that has been automatically oriented and scaled to encompass the render mesh (left). Note that one corner of the primitive collider extends far from the input mesh and penetrates the ground plane. This demonstrates one of the drawbacks of using a primitive collider on a complex input mesh. In a scenario where this is a dynamic entity, the ground plane collision would push the asset upward, and the asset would not come to rest standing upright because of the sharp corner at the bottom of the primitive collider. {{< image-width "/images/learning-guide/tutorials/assets/primitive-collider-example.png" "700" "An example primitive collider asset." >}} @@ -48,7 +56,7 @@ Primitive colliders are commonly used when the input mesh closely resembles one ### Convex -Convex colliders are automatically generated convex hulls. A convex hull has no concave or hollow surface areas. For PhysX, the convex hull is constructed within a limited number of vertices and is fitted to the input mesh. Convex colliders can better approximate a complex input mesh than primitive colliders, but convex colliders incur a greater performance cost. To a lesser extent than primitive colliders, convex colliders might also have areas where the collider surface falls inside or outside of the input mesh, which can result in collisions that aren't visually accurate. The Decompose Meshes property decomposes complex input meshes into smaller parts, and fits convex colliders to each part. You can use convex colliders with static, kinematic, or simulated entities. These colliders can have only one physics material assignment. +Convex colliders are automatically generated convex hulls. A convex hull has no concave or hollow surface areas. For PhysX, the convex hull is constructed within a limited number of vertices and is fitted to the input mesh. Convex colliders can better approximate a complex input mesh than primitive colliders, but convex colliders incur a greater performance cost. To a lesser extent than primitive colliders, convex colliders might also have areas where the collider surface falls inside or outside of the input mesh, which can result in collisions that aren't visually accurate. The Decompose Meshes property decomposes complex input meshes into smaller parts, and fits convex colliders to each part. You can use convex colliders with static, kinematic, or dynamic entities. These colliders can have only one physics material assignment. Colliders occupy the same physical space as the input mesh. In the following image, a convex collider asset is offset to the right of the input mesh asset that generated the collider so that you can clearly view the collider. Note that the collider asset (right) has been automatically generated to encompass and roughly approximate the silhouette shape of the render mesh (left). However, the convex collider does not include details such as the hole in the middle of the input mesh. @@ -63,14 +71,12 @@ The following table summarizes the most import information about the available c | Type | Entity behavior | Description | Limitations | | - | - | - | - | | **Triangle mesh** | Static, Kinematic | A collider composed of triangles. Can closely approximate complex input meshes and have more than one physics material assignment. | Can be used only with static and kinematic entities. Can be more computationally expensive to simulate than other collider types. | -| **Primitive** | Static, Kinematic, Simulated | A collider defined by a simple primitive sphere, box, or capsule shape that is automatically fitted to the input mesh. Generally offers the best performance. | Might not closely approximate a complex input mesh. Can be fitted to input meshes, but in some scenarios, might fall within or far outside the extents of the input mesh, yielding collisions that aren't visually accurate. Can have only one physics material assignment. | -| **Convex** | Static, Kinematic, Simulated | An automatically generated collider that is a convex hull composed of a limited number of vertices. Convex hulls have no concave or hollow surface areas, and are automatically fitted to the input mesh. This collider can better approximate input meshes than a primitive collider, but it's more computationally expensive to simulate. | Might not approximate an input mesh as well as a triangle mesh collider, or offer the performance of a primitive collider. Might fall slightly within or outside the extents of the input mesh. Can have only one physics material assignment. | +| **Primitive** | Static, Kinematic, Dynamic | A collider defined by a simple primitive sphere, box, or capsule shape that is automatically fitted to the input mesh. Generally offers the best performance. | Might not closely approximate a complex input mesh. Can be fitted to input meshes, but in some scenarios, might fall within or far outside the extents of the input mesh, yielding collisions that aren't visually accurate. Can have only one physics material assignment. | +| **Convex** | Static, Kinematic, Dynamic | An automatically generated collider that is a convex hull composed of a limited number of vertices. Convex hulls have no concave or hollow surface areas, and are automatically fitted to the input mesh. This collider can better approximate input meshes than a primitive collider, but it's more computationally expensive to simulate. | Might not approximate an input mesh as well as a triangle mesh collider, or offer the performance of a primitive collider. Might fall slightly within or outside the extents of the input mesh. Can have only one physics material assignment. | ## Generate PhysX collider assets -You can generate PhysX collider assets from any source asset that contains at least one mesh. You can customize the settings for PhysX collider generation in Scene Settings, in the **PhysX** tab. - -If you are unfamiliar with Scene Settings, refer to the [Mesh Asset tutorial](../mesh-assets) and check the [Scene Settings PhysX Tab](/docs/user-guide/assets/scene-settings/physx-tab) topic for in-depth information on the options for generating PhysX collider assets. +You can generate PhysX collider assets from any source asset that contains at least one mesh. You can customize the settings for PhysX collider generation in Scene Settings, in the **PhysX** tab. If you are unfamiliar with Scene Settings, refer to the [mesh processing tutorial](../mesh-assets) and check the [Scene Settings PhysX tab](/docs/user-guide/assets/scene-settings/physx-tab) topic for in-depth information on the options for generating PhysX collider assets. You can follow this tutorial using any source asset that contains at least one mesh. @@ -80,7 +86,7 @@ You can follow this tutorial using any source asset that contains at least one m If your asset has already been processed, you might see a preview image of the asset and a list of product assets below the `.fbx` source asset. -1. To open Scene Settings, right-click the `.fbx` source asset, and then choose **Edit settings...** from the context menu. +1. To open Scene Settings, **double-click** the `.fbx` source asset, and then choose **Edit settings...** from the context menu. ![ Open Scene Settings from Asset Browser. ](/images/learning-guide/tutorials/assets/meshes-edit-settings.png) @@ -89,10 +95,10 @@ You can follow this tutorial using any source asset that contains at least one m ![ Scene Settings PhysX tab. ](/images/learning-guide/tutorials/assets/physx-scene-settings.png) In this image, there is a single **PhysX mesh group**. Each PhysX mesh group produces a `.pxmesh` product asset. You can create additional PhysX mesh groups for a source asset by choosing **Add another physxmesh**. - + The **Name PhysX Mesh** property contains the name of the source asset. The `.pxmesh` product asset of this PhysX mesh group uses this string for its name. -1. To select which meshes to include in the PhysX mesh group, next to the **Select meshes** property, choose the file select {{< icon browse-edit-select-files.svg >}} button. Meshes in the list are denoted by a purple mesh icon, as in the following image. You can select more than one mesh here if multiple meshes are available in the asset. If you select more than one mesh, you might also want to enable **Merge Meshes** and **Weld Vertices** to ensure that the input mesh is optimized. +1. To select which meshes to include in the PhysX mesh group, next to the **Select meshes** property, choose the file select {{< icon browse-edit-select-files.svg >}} button. Meshes in the list are denoted by a purple mesh icon, as in the following image. You can select more than one mesh here if multiple meshes are available in the asset. If you select more than one mesh, you might additionally enable the **Merge Meshes** and **Weld Vertices** properties to ensure that the input mesh is optimized. ![ Selecting a PhysX mesh. ](/images/learning-guide/tutorials/assets/select-physx-mesh.png) @@ -100,7 +106,7 @@ You can follow this tutorial using any source asset that contains at least one m To automatically assign meshes in the source asset to a PhysX mesh group, add the suffix `_phys` to the mesh node name in your DCC application. Any meshes that have `_phys` postfixed to their node name in the source asset are excluded from the default render mesh group and are automatically added to a single PhysX mesh group in Scene Settings. {{< /note >}} -1. Customize the PhysX mesh collider type by setting the **Export As** property to `Convex` so that you can create any type of entity (static, kinematic, or simulated). +1. Customize the PhysX mesh collider type by setting the **Export As** property to `Convex` so that you can create any type of entity (static, kinematic, or dynamic). The customizations that you make in Scene Settings are stored in a *sidecar file* with a `.assetinfo` extension. When **Asset Processor** detects a `.assetinfo` file, it uses the settings in the file to process the related source asset. This sidecar file is treated as a source dependency for the asset. This means that if the `.assetinfo` file changes, the source asset is reprocessed, even if the source asset has not changed. @@ -108,9 +114,9 @@ To automatically assign meshes in the source asset to a PhysX mesh group, add th 1. Drag the `.azmodel` product asset from Asset Browser into the viewport. - {{< image-width "/images/learning-guide/tutorials/assets/physx-entity.png" "800" "Drag the mesh asset into the viewport.">}} + {{< image-width "/images/learning-guide/tutorials/assets/physx-entity.png" "900" "Drag the mesh asset into the viewport.">}} - When you drag the asset into the viewport, O3DE automatically creates an entity with a **Mesh** component that references the mesh product asset. If the source asset contains materials that have been processed, O3DE applies the materials to the mesh by default. Note that in Asset Browser, the `.pxmesh` product asset has been generated and appears beneath the source asset. + When you drag the asset into the viewport, O3DE automatically creates an entity with a **Mesh** component that references the mesh product asset. If the source asset contains materials that have been processed, the materials are automatically applied to the mesh. Note that in Asset Browser, the `.pxmesh` product asset has been generated and appears beneath the source asset. 1. Add a PhysX Collider component to the entity. With the entity selected in the viewport, in **Entity Inspector**, choose **Add Component**, and then select **PhysX Collider** from the component list. The component automatically detects the `.pxmesh` asset. The component's **Shape** property is set to `PhysicsAsset`, and the **PhysX Mesh** property automatically references the `.pxmesh` product asset. @@ -118,20 +124,20 @@ To automatically assign meshes in the source asset to a PhysX mesh group, add th 1. Depending on the type of entity that you want, do one of the following: - * For a static entity, , add a **PhysX Static Rigid Body** component. With the entity selected in the viewport, in **Entity Inspector**, choose **Add Component**, and then select **PhysX Static Rigid Body** from the component list. To optimize your current static entity, in the **Transform** component, enable the **Static** property. This property ensures the best runtime performance for a static entity. + * For a static entity, optimize your current static entity. In the **Transform** component, enable the **Static** property. This property ensures the best runtime performance for a static entity. - * For a simulated entity, add a **PhysX Dynamic Rigid Body** component. With the entity selected in the viewport, in **Entity Inspector**, choose **Add Component**, and then select **PhysX Dynamic Rigid Body** from the component list. If you choose the {{< icon simulate-physics.svg >}} simulation button now, the entity drops with gravity. + * For a dynamic entity, add a **PhysX Rigid Body** component. With the entity selected in the viewport, in **Entity Inspector**, choose **Add Component**, and then select **PhysX Rigid Body** from the component list. If you choose the {{< icon simulate-physics.svg >}} simulation button now, the entity drops with gravity. - * For a kinematic entity, add a **PhysX Dynamic Rigid Body** component, like you would for a simulated entity. Then, in the **PhysX Dynamic Rigid Body** component, select **Kinematic** in the property Type. + * For a kinematic entity, add a **PhysX Rigid Body** component, like you would for a dynamic entity. Then, in the **PhysX Rigid Body** component, enable the **Kinematic** property. {{< caution >}} -For a kinematic or simulated entity, in the **Transform** component, make sure that the **Static** property is *not* enabled. +For a kinematic or dynamic entity, in the **Transform** component, make sure that the **Static** property is *not* enabled. {{< /caution >}} ## Decompose input meshes -Assets that are composed of multiple meshes, or assets that have complex meshes, might require similarly complex PhysX collider assets. This is particularly true for kinematic entities and for simulated entities, which can't use triangle mesh colliders. In these scenarios, you can decompose the input mesh into convex parts. You can automatically generate primitive colliders or convex colliders, fit them to each part, and process them as collider `.pxmesh` product assets. +Assets that are composed of multiple meshes, or assets that have complex meshes, might require similarly complex PhysX collider assets. This is particularly true for kinematic entities and for dynamic entities, which can't use triangle mesh colliders. In these scenarios, you can decompose the input mesh into convex parts. You can automatically generate primitive colliders or convex colliders, fit them to each part, and process them as collider `.pxmesh` product assets. Mesh decomposition is part of the process of generating and fitting collider assets, and it doesn't alter the input mesh. You can use mesh decomposition only with primitive or convex colliders. diff --git a/content/docs/learning-guide/tutorials/entities-and-prefabs/_index.md b/content/docs/learning-guide/tutorials/entities-and-prefabs/_index.md index 55f8cd8c09d..14e1ad8df41 100644 --- a/content/docs/learning-guide/tutorials/entities-and-prefabs/_index.md +++ b/content/docs/learning-guide/tutorials/entities-and-prefabs/_index.md @@ -9,5 +9,5 @@ Entities and prefabs provide the foundation for building projects in **Open 3D E | Tutorial | Description | | - | - | | [Entity and Prefab Basics](entity-and-prefab-basics) | Learn the basics of creating and modifying entities and prefabs. | -| [Override a Prefab](override-a-prefab) | Learn how to make changes to a single prefab instance. | | [Spawn and Despawn a Prefab](spawn-a-prefab.md) | Use **Script Canvas** to create a script that spawns and despawns a prefab. | + diff --git a/content/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics.md b/content/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics.md index 0b06a19d55d..279c14e17bc 100644 --- a/content/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics.md +++ b/content/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics.md @@ -6,24 +6,11 @@ weight: 200 toc: true --- -This tutorial introduces entities and prefabs, and explains how to create, modify, and save them for your **Open 3D Engine (O3DE)** projects. +Entities and prefabs provide the foundation for building projects in **Open 3D Engine (O3DE)**. An entity is a collection of any combination of components that define an object. The only required component for an entity is a **Transform** component that places the entity in the level. An entity is an abstract concept, though, and only exists within the context of a level or a prefab. Saving an entity to disk requires saving the level that contains it, or creating a prefab from the entity. -| O3DE Experience | Time to Complete | Feature Focus | Last Updated | -| --- | --- | --- | --- | -| Beginner | 25 Minutes | Creating, modifying, and saving entities and prefabs. | January 11, 2023 | +A prefab is a container that can have one or more child entities or prefab instances. Prefabs are files saved to disk that are instantiated during edit-time or spawned at runtime. It's important to understand, that prefabs that exist in a level are *instances* of a prefab. Changes made to a prefab that has been opened in **O3DE Editor** automatically propagate to the instances of that prefab. -## Prerequisites - -* Basic knowledge of working with [O3DE Editor](/docs/user-guide/editor). -* A project built from the standard project template or one that contains the Gems in the standard template. - -## What are entities and prefabs? - -Entities and prefabs provide the foundation for building projects in O3DE. An entity is a collection of any combination of components that define an object. The only required component for an entity is a [**Transform**](/docs/user-guide/components/reference/transform) component that places the entity in the level. An entity is an abstract concept, though, and only exists within the context of a level or a prefab. Saving an entity to disk requires saving the level that contains it, or creating a prefab from the entity. - -A prefab is a container that can have one or more child entities or prefab instances. Prefabs are files saved to disk that can be instantiated at edit-time or spawned at runtime. Prefabs that exist in a level are *instances* of a file prefab. Changes made to a prefab that is open for editing in **O3DE Editor** automatically propagate to the instances of that prefab. - -The entities and prefab instances placed in a level are shown in **Entity Outliner**. Entities are indicated by a {{< icon "entity.svg" >}} white cube icon. Prefab instances are indicated by a {{< icon "prefab.svg" >}} white container icon with a dark gray background. Prefab instances also display the prefab file name on the right. +The entities and prefab instances placed in a level are shown in **Entity Outliner**. Entities are indicated by a {{< icon "entity.svg" >}} white cube icon. Prefab instances are indicated by a {{< icon "prefab.svg" >}} blue container icon. Prefab instances also display the prefab file name in parentheses. ![An entity and a prefab in Entity Outliner.](/images/learning-guide/tutorials/entities-and-prefabs/entity-outliner.png) @@ -34,7 +21,7 @@ The sections in this topic demonstrate the basics of working with entities, pref You can create an entity with either of the following methods: * In Entity Outliner or the viewport, **right-click** and choose **Create entity** from the context menu. -* With Entity Outliner focused, press **Ctrl+Alt+N**. +* With Entity Outliner focused, press **CTRL+ALT+N**. ![Creating a new entity in Entity Outliner.](/images/learning-guide/tutorials/entities-and-prefabs/create-entity.png) @@ -51,7 +38,7 @@ Prefabs are saved to disk and allow you to easily reuse objects by instantiating ![Creating a prefab from an entity in Entity Outliner.](/images/learning-guide/tutorials/entities-and-prefabs/create-prefab.png) -The prefab file is saved to disk and an instance of the prefab replaces the entity in O3DE Editor. The prefab instance displays the name of the instance on the left next to the {{< icon "prefab.svg" >}} prefab icon. The name of the prefab file is displayed on the right. In the following image, notice that the level itself is a prefab. +The prefab file is saved to disk and an instance of the prefab replaces the entity in **O3DE Editor**. The prefab instance displays the name of the instance on the left next to the {{< icon "prefab.svg" >}} prefab icon. The name of the prefab file is displayed on the right in parenthesis. In the following image, notice that the level itself is a prefab. ![A new prefab instance in Entity Outliner.](/images/learning-guide/tutorials/entities-and-prefabs/prefab-instanced.png) @@ -63,9 +50,9 @@ Complex prefabs might require multiple entities and prefab instances. You can cr 1. In Entity Outliner, **right-click** one of the selected entities or prefab instances and choose **Create Prefab...** from the context menu. 1. In the **Save As…** window, choose a directory in your project, such as the `Prefabs` directory, supply a name for the prefab, and choose **Save**. -In the following video, a prefab instance and an entity with a hierarchy are selected for a new prefab. When the new prefab instance is opened in [Prefab Edit Mode](#edit-a-prefab), it displays that the hierarchy is maintained in the new prefab. +In the following video, a prefab instance and an entity with a hierarchy are selected for a new prefab. When the new prefab instance is opened in [Focus Mode](#edit-a-prefab), it displays that the hierarchy is maintained in the new prefab. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/multiple-entity-prefab.mp4" info="Creating a prefab from a collection of entities and prefabs." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/multiple-entity-prefab.mp4" info="Creating a prefab from a collection of entities and prefabs." autoplay="true" loop="true" width="450" >}} ## Instantiate a prefab @@ -121,74 +108,75 @@ To focus the viewport on a particular entity or prefab instance, use either of t Entities and prefabs can have nested hierarchies. To create a hierarchy beneath an entity or within a prefab, **drag** an entity or prefab instance onto the root entity or prefab instance in Entity Outliner. As you drag a prefab or entity, a pale blue highlight marks where it will be placed in the hierarchy. {{< note >}} -Editing the hierarchy of a prefab requires that the prefab is open for edit in [Prefab Edit Mode](#edit-a-prefab). +Editing the hierarchy of a prefab requires that the prefab is open for edit in [Focus Mode](#edit-a-prefab). {{< /note >}} In the following video, an entity and a prefab instance are added as children of an entity. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/nested-entities.mp4" info="Nesting entities." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/nested-entities.mp4" info="Nesting entities." autoplay="true" loop="true" width="450" >}} Entities and prefabs can have multiple levels of nesting. You can drag and drop the nested entities and prefabs to change the hierarchy as demonstrated in the following video. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/multiple-nested.mp4" info="Rearranging a nested entity hierarchy." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/multiple-nested.mp4" info="Rearranging a nested entity hierarchy." autoplay="true" loop="true" width="450" >}} ## Edit an entity A basic entity has a collection of components that define an object. You can add components to a selected entity by choosing **Add Component** in Entity Inspector and selecting a component from the list. In the following video, a **Material** component is added to an entity that contains a **Mesh** component. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/basic-entity.mp4" info="Adding a component to an entity." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/basic-entity.mp4" info="Adding a component to an entity." autoplay="true" loop="true" width="450" >}} ## Edit a prefab -To make changes to a prefab it must be open for editing by entering **Prefab Edit Mode**. +To make changes to a prefab it must be open for editing by entering **Focus Mode**. -### Enter Prefab Edit Mode +### Enter Focus Mode -Use any of the following methods to enter Prefab Edit Mode: +Use any of the following methods to enter Focus Mode: * **Double-click** the prefab instance in Entity Outliner or in the viewport. * **Right-click** the prefab instance in Entity Outliner or in the viewport and choose **Open/Edit Prefab** from the context menu. * With the prefab instance selected, press **+**. -![Edit a prefab in Prefab Edit Mode.](/images/learning-guide/tutorials/entities-and-prefabs/edit-prefab.png) +![Edit a prefab in focus mode.](/images/learning-guide/tutorials/entities-and-prefabs/edit-prefab.png) -In Prefab Edit Mode, the prefab's contents are exposed in Entity Outliner within a blue frame. The viewport shifts to a monochromatic mode with the opened prefab rendered in full color. The toolbar above the viewport shows the path to the prefab that is open for edit. From the toolbar you can choose the **Prefab Edit Mode** list to switch the viewport render mode from monochromatic to color. When you select an entity contained in the prefab, the entity's components are displayed in Entity Inspector. +When Focus mode is active, the prefab's contents are exposed in Entity Outliner within a blue frame. The viewport also displays a blue frame. When you select an entity contained in the prefab, the entity's components are displayed in Entity Inspector. -{{< image-width "/images/learning-guide/tutorials/entities-and-prefabs/prefab-focus-mode.png" "1200" "A prefab opened for editing in Prefab Edit Mode" >}} +{{< image-width "/images/learning-guide/tutorials/entities-and-prefabs/prefab-focus-mode.png" "900" "A prefab opened for editing in focus mode" >}} -### Edit a prefab in Prefab Edit Mode +### Edit a prefab in Focus Mode -When Prefab Edit Mode is active, you can use any entity and prefab editing actions within the context of the prefab. You can create, duplicate, remove, and rename entities and prefab instances, edit entities, create and instantiate prefabs, and create hierarchies of entities and prefab instances using the methods described in this topic. The results of any modifications happen within the context of the prefab that is in Prefab Edit Mode. +When Focus Mode is active, you can use any entity and prefab editing actions within the context of the prefab. You can create, duplicate, remove, and rename entities and prefab instances, edit entities, create and instantiate prefabs, and create hierarchies of entities and prefab instances using the methods described in this topic. The results of any modifications happen within the context of the prefab that is in Focus Mode. -In the following video example, an `.azmodel` is dragged from Asset Browser into the viewport while a prefab is in Prefab Edit Mode. A new entity is created for the `.azmodel` within the prefab. +In the following video example, an `.azmodel` is dragged from Asset Browser into the viewport while an prefab is in focus mode. A new entity is created for the `.azmodel` within the prefab. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/create-entity-focus-mode.mp4" info="Creating an entity within a prefab in Prefab Edit Mode." autoplay="true" loop="true" width="1060" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/create-entity-focus-mode.mp4" info="Creating an entity within a prefab in focus mode." autoplay="true" loop="true" width="900" >}} When a prefab has unsaved changes, an **\*** appears next to the prefab file name. [Save the prefab](#saving-entities-and-prefabs) to write the changes to disk. -### Exit Prefab Edit Mode +### Exit Focus Mode -Use any of the following methods to exit Prefab Edit Mode: +Use any of the following methods to exit Focus Mode: * **Double-click** the prefab in Entity Outliner. * **Right-click** the prefab in Entity Outliner and choose **Close Prefab** from the context menu. * Press **-**. +* **Click** the **X** icon in the upper-right corner of the blue Focus Mode frame that surrounds the viewport. -### Prefab Edit Mode and nested prefabs +### Focus Mode and nested prefabs -You can edit a nested prefab by opening the nested prefab in Prefab Edit Mode. In the following video, the nested prefab is opened for editing, and a new entity is created within the context of the nested prefab. +You can edit a nested prefab by opening the nested prefab in Focus Mode. In the following video, the nested prefab becomes the focus and a new entity is created within the context of the nested prefab. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/nested-focus-mode.mp4" info="Open a nested prefab for edit in Prefab Edit Mode." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/nested-focus-mode.mp4" info="Open a nested prefab for edit in focus mode." autoplay="true" loop="true" width="450" >}} ## Detach a prefab instance When a prefab instance is detached, its link to the prefab file is broken and the prefab instance is converted to an entity. The hierarchy of the prefab is maintained by the new entity. To detach a prefab instance, **right-click** the prefab instance and select **Detach Prefab...** from the context menu, as demonstrated in the following video. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/detach-prefab.mp4" info="Detach a prefab instance." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/detach-prefab.mp4" info="Detach a prefab instance." autoplay="true" loop="true" width="450" >}} {{< note >}} -A prefab instance cannot be detached when it is in Prefab Edit Mode. +A prefab instance cannot be detached when it is in Focus Mode. {{< /note >}} ## Duplicate an entity or a prefab instance @@ -202,11 +190,11 @@ The duplicate appears below the source entity or prefab instance with a name tha When multiple entities and prefabs are selected, they all are duplicated along with their hierarchies, as demonstrated in the following video. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/multiple-duplicates.mp4" info="Duplicating multiple entities and prefab instances." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/multiple-duplicates.mp4" info="Duplicating multiple entities and prefab instances." autoplay="true" loop="true" width="450" >}} -In the following video, a nested entity and a prefab instance are duplicated in place within the hierarchy of a prefab. +In the following video, nested entities and prefab instances are duplicated in place within the hierarchy. -{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/nested-duplicate.mp4" info="Duplicating nested entities and prefab instances." autoplay="true" loop="true" >}} +{{< video src="/images/learning-guide/tutorials/entities-and-prefabs/nested-duplicate.mp4" info="Duplicating nested entities and prefab instances." autoplay="true" loop="true" width="450" >}} ## Delete entities and prefab instances @@ -225,4 +213,4 @@ Deleting a prefab instance has no effect on the prefab file that has been used t ## Conclusion and next steps -Now that you understand the basics of creating and working with prefabs, you can learn how to apply an override to a single prefab instance. Learn to [Override a Prefab](override-a-prefab) in the next tutorial. +Now that you understand the differences between an entities, prefabs, and prefab instances, and the basics of creating and working with them, you can put it into practice. Learn to [Spawn and Despawn a Prefab](spawn-a-prefab) in the next tutorial. diff --git a/content/docs/learning-guide/tutorials/entities-and-prefabs/override-a-prefab.md b/content/docs/learning-guide/tutorials/entities-and-prefabs/override-a-prefab.md deleted file mode 100644 index e17b7d7b9b0..00000000000 --- a/content/docs/learning-guide/tutorials/entities-and-prefabs/override-a-prefab.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -linktitle: Override a Prefab -title: Override a Prefab -description: Learn how to override a prefab in Open 3D Engine (O3DE). -weight: 300 -toc: true ---- - -When a prefab is open in [Prefab Edit Mode](/docs/learning-guide/tutorials/entities-and-prefabs/entity-and-prefab-basics#edit-a-prefab), changes to its content are automatically propagated to all instances of that prefab. Sometimes it is useful to alter a prefab instance on its own without affecting the other instances. For example, you might have multiple instances of the same car prefab in a level, but you want each car instance to be a different color. Prefab overrrides allow you to change the properties and contents of prefab instances to make them unique. - -| O3DE Experience | Time to Complete | Feature Focus | Last Updated | -| --- | --- | --- | --- | -| Beginner | 10 Minutes | Using prefab overrides to make prefab instances unique. | January 13, 2023 | - -## Prerequisites - -* Basic knowledge of working with [O3DE Editor](/docs/user-guide/editor). -* A project built from the standard project template or one that contains the Gems in the standard template. - -## What are prefab overrides? - -Because prefabs instances reference a file, all instances of a prefab are identical by default. Prefab overrides allow the content of prefab instances to be modified on an individual basis. - -The following image shows two instances of Car prefab in a level. The Car prefabs are expanded and open for editing: - -![Level in Prefab Edit Mode in Entity Outliner.](/images/learning-guide/tutorials/entities-and-prefabs/level-prefab-edit.png) - -Overrides applied to prefab instances are registered for that individual prefab instance and are stored in the parent prefab that contains the prefab instances. - -In the preceding example, the Car prefab instances are in a level (which is a prefab), so the prefab overrides applied to the Car instances are stored in the level when you save it. - -Suppose that the car's four tires are instances of a tire prefab that are nested within the Car prefab. If you apply overrides to each of the tire instances to give them unique appearances, the overrides are stored in the Car prefab when when you save it. - -{{< note >}} -A level is a prefab, and automatically enters Prefab Edit Mode when it is opened. This is indicated by the blue capsule around the level in **Entity Outliner**. - -Overrides are not limited to the level. In fact, any prefab that is open for editing in Prefab Edit Mode is responsible for storing the overrides made to its nested prefabs. -{{< /note >}} - -## Enable prefab overrides - -To enable prefab overrides, create a settings registry file called `editorpreferences.setreg` with the following contents: - -```JSON -{ - "O3DE": { - "Preferences": { - "Prefabs": { - "EnableOverridesUx": true - } - } - } -} -``` - -An example of such file exists as a project-specific override in the AutomatedTesting project: [`AutomatedTesting/Registry/editorpreferences.setreg`](https://github.com/o3de/o3de/blob/development/AutomatedTesting/Registry/editorpreferences.setreg) - -{{< note >}} -It is recommended to add your `editorpreferences.setreg` file to the `/user/Registry` directory as a user-specific override. Files in the user directory are ignored by git and won't be tracked for changes. -{{< /note >}} - -You can apply the following types of overrides to prefabs: - -* Edit component properties -* Add or remove components -* Add or remove entities -* Remove nested prefab instances - -Overrides are automatically added when you perform the preceding edits on the content of a prefab instance. You must save the parent prefab to retain the overrides. - -## Override a component property - -To override a component property of an entity under a prefab instance: - -1. In Entity Outliner, expand a prefab instance by clicking the arrow to the left of the instance name. -1. Select an entity under the instance and edit one of its properties in **Entity Inspector**. -1. Notice that a blue circle appears on the entity's icon in Entity Outliner. This indicates that an edit override is applied to the entity. - -In the below image, the Body entity in the first Car prefab instance has an override to change the default color of the car from red to blue: - -![Overriding a component property.](/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-property.png) -## Add an entity as an override - -To add an entity under a prefab instance as an override: -1. In Entity Outliner, **right-click** on a prefab instance and choose **Create entity** from the context menu. -1. Notice that a blue plus appears on the new entity's icon in Entity Outliner. This indicates that the entity has been added as an override. - -In the below image, an Antenna entity has been added to the first Car prefab instance. - -![Adding an entity as an override.](/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-add.png) - -## Revert an override - -Once an override has been registered, it will exist until explicitly removed. To revert overrides on an entity: - -1. In Entity Outliner, **right-click** on an entity with overrides and choose **Revert Overrides** from the context menu. -1. Notice that the entity no longer has any indication of having overrides. - -![Reverting overrides on an entity.](/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-revert.png) - -## Conclusion and next steps - -Now that you understand the differences between entities, prefabs, and prefab instances, and the basics of creating and working with them, you can put it into practice. Learn to [Spawn and Despawn a Prefab](spawn-a-prefab) in the next tutorial. diff --git a/content/docs/learning-guide/tutorials/entities-and-prefabs/spawn-a-prefab.md b/content/docs/learning-guide/tutorials/entities-and-prefabs/spawn-a-prefab.md index a8f46520c00..9e65e9f5e2c 100644 --- a/content/docs/learning-guide/tutorials/entities-and-prefabs/spawn-a-prefab.md +++ b/content/docs/learning-guide/tutorials/entities-and-prefabs/spawn-a-prefab.md @@ -2,22 +2,12 @@ linktitle: Spawn and Despawn title: Spawn and Despawn a Prefab description: Learn to spawn and despawn prefabs with Script Canvas in Open 3D Engine (O3DE). -weight: 400 +weight: 300 toc: true --- In this tutorial, you'll learn how to spawn and despawn prefab instances in **Open 3D Engine (O3DE)**. You'll create a prefab to spawn, create a spawner entity, assemble a spawning script with [Script Canvas Editor](/docs/user-guide/scripting/script-canvas/get-started/editor-interface), and test the results. You should be familiar with [entity and prefab basics](entity-and-prefab-basics) before working through this tutorial. -| O3DE Experience | Time to Complete | Feature Focus | Last Updated | -| --- | --- | --- | --- | -| Beginner | 25 Minutes | Spawning and despawning prefabs with Script Canvas. | January 13, 2023 | - -## Prerequisites - -* Basic knowledge of working with [O3DE Editor](/docs/user-guide/editor). -* Basic knowledge of working with [Script Canvas Editor](/docs/user-guide/scripting/script-canvas/editor-reference). -* A project built from the standard project template or one that contains the Gems in the standard template. - ## Create a prefab Follow the steps in this section to create a prefab to spawn. If you already have a prefab to use for this tutorial, skip ahead to the next section, [Create a spawner entity](#create-a-spawner-entity). diff --git a/content/docs/learning-guide/tutorials/physx/wind-provider.md b/content/docs/learning-guide/tutorials/physx/wind-provider.md index a4876c2e83d..3d0a13ff2c7 100644 --- a/content/docs/learning-guide/tutorials/physx/wind-provider.md +++ b/content/docs/learning-guide/tutorials/physx/wind-provider.md @@ -9,7 +9,7 @@ toc: true With the **PhysX Force Region** component, you can create global wind forces or localized wind forces contained within a collider volume. Wind forces act on entities with components that are affected by wind, such as [Cloth components](/docs/user-guide/components/reference/physx/cloth/). For this tutorial, make sure that you have the **NVIDIA Cloth** Gem enabled in your project so that you can easily test the results of the wind provider entity. {{< note >}} -Wind forces only affect components that support it, such as **Cloth** compopnents. Wind forces can't affect **PhysX Dynamic Rigid Body** components. +Wind forces only affect components that support it, such as **Cloth** compopnents. Wind forces can't affect **PhysX Rigid Body** components. {{< /note >}} ## Create a wind provider entity diff --git a/content/docs/user-guide/assets/asset-processor/_index.md b/content/docs/user-guide/assets/asset-processor/_index.md index d9d149bd8cc..950ca7f5b0a 100644 --- a/content/docs/user-guide/assets/asset-processor/_index.md +++ b/content/docs/user-guide/assets/asset-processor/_index.md @@ -41,7 +41,6 @@ Symbolic links are not supported when using Asset Processor. To ensure that Asse | [Asset Processor Batch](asset-processor-batch) | Use Asset Processor batch to batch process the source assets for a project in an automated build system. | | [Configuration](configuration) | Configure Asset Processor by setting options in the `AssetProcessorPlatformConfig.setreg` configuration file. | | [Faster Scanning](faster-scanning) | Learn how Asset processor determines when assets should be processed and how to set Asset Processor's scanning mode. | -| [Skip Startup Scan](skip-startup-scan) | Learn to skip startup checks for assets modified while AssetProcessor was closed. | | [Debugging](debugging) | Learn several methods you can use to debug Asset Processor issues. | | [Move Assets](move-assets) | Learn how to move assets to new directory locations in O3DE while maintaining internal references. | | [Asset Cache Server](asset-cache-server) | Learn how to enable the Asset Processor to cache assets in order to reduce asset processing for a team. | diff --git a/content/docs/user-guide/assets/asset-processor/asset-cache-server.md b/content/docs/user-guide/assets/asset-processor/asset-cache-server.md index d9939302f56..1df2875f1fd 100644 --- a/content/docs/user-guide/assets/asset-processor/asset-cache-server.md +++ b/content/docs/user-guide/assets/asset-processor/asset-cache-server.md @@ -2,7 +2,7 @@ linkTitle: Asset Cache Server Mode title: Asset Cache Server description: Enable a feature to reduce asset builds for a team. -weight: 800 +weight: 200 toc: true --- @@ -172,15 +172,15 @@ The asset caching system is configured using opt-in patterns. There are many typ This ACS block allows users to configure the types of source assets that should be cached in the remote folder. The block is placed in the JSON path `/AssetProcessor/Settings/Server` object. The title must start with the prefix `"ACS "` to designate the object as a configuration block. The next part is either `"glob"` or `"pattern"` followed by the correct text for a wild card pattern or a regular expression; these are used to tag source assets that need to be cached. -The `"name"` field is used for the title of the configuration block in the GUI tool, but it can also match an asset pattern by setting the `"name"` to a name of an asset builder. For example, a configuration block can set the name to "Atom Image Builder" so that all the processed images will be cached. +The ``name`` field is used for both the title of the configuration block in the GUI tool, but it is also possible to match all an asset pattern by setting the ``name`` to a name of an asset builder. For example, a configuration block can set the name to "Atom Image Builder" so that all the processed images will be cached. {{< note >}} The block should only be set to `"glob"` or `"pattern"`, not both. {{< /note >}} -The `"checkServer"` Boolean flag is used to enable the block. The default value for `"checkServer"` is false, so to enable the ACS block, the boolean flag needs to be set to true. +The `"checkServer"` Boolean flag is used to enable the block. The default value for `"checkServer"` is false, so to enable the ACS block the Boolean flag needs to be set to true. -As an example, this JSON ACS block will cache all product assets built by the "XmlBuilderWorker" builder: +An example this JSON ACS block will cache all product assets built by the "XmlBuilderWorker" builder: ```json "ACS XmlBuilderWorker": diff --git a/content/docs/user-guide/assets/asset-processor/asset-database.md b/content/docs/user-guide/assets/asset-processor/asset-database.md index 7e304a54cf1..863ff4cde2e 100644 --- a/content/docs/user-guide/assets/asset-processor/asset-database.md +++ b/content/docs/user-guide/assets/asset-processor/asset-database.md @@ -2,7 +2,7 @@ linkTitle: Asset Database title: Asset Database description: The Asset Database is used by the Asset Processor to track the work it has completed. -weight: 950 +weight: 400 toc: true --- diff --git a/content/docs/user-guide/assets/asset-processor/debugging.md b/content/docs/user-guide/assets/asset-processor/debugging.md index 0a279ae76ec..d85ce6552de 100644 --- a/content/docs/user-guide/assets/asset-processor/debugging.md +++ b/content/docs/user-guide/assets/asset-processor/debugging.md @@ -2,7 +2,7 @@ linkTitle: Debugging title: Debugging Asset Processor Issues description: Methods to debug Asset Processor issues in Open 3D Engine (O3DE). -weight: 600 +weight: 500 toc: true --- @@ -504,4 +504,4 @@ If you're a game artist and you're having issues running Asset Processor, the is {{< note >}} If you're an engineer making new BuilderSDK-based builders, we recommend that you don't delete your cache. -{{< /note >}} +{{< /note >}} \ No newline at end of file diff --git a/content/docs/user-guide/assets/asset-processor/faster-scanning.md b/content/docs/user-guide/assets/asset-processor/faster-scanning.md index 49ea3bbab8d..f31010c2bc8 100644 --- a/content/docs/user-guide/assets/asset-processor/faster-scanning.md +++ b/content/docs/user-guide/assets/asset-processor/faster-scanning.md @@ -101,4 +101,4 @@ A full scan checks the Asset Cache for product assets and rebuilds the appropria If you are having issues with the Asset Cache, performing a full scan might resolve the issues. If a full scan does not repair the Asset Cache, you can rebuild the entire Asset Cache by deleting the `Cache` directory in your project. If you're an engineer making BuilderSDK-based Asset Builders, deleting the cache is not recommended. {{< /note >}} -Deleting the Asset Cache to work around or solve a problem should be treated as a last resort solution. The issue might not be resolved after the cache is rebuilt. Even if it is, you might lose more time deleting and rebuilding the cache than it requires to fix the root problem. Instead, it is recommended that you document the issue and share that information with your team. Wait until a pipeline engineer can investigate the problem before deleting the cache. +Deleting the Asset Cache to work around or solve a problem should be treated as a last resort solution. The issue might not be resolved after the cache is rebuilt. Even if it is, you might lose more time deleting and rebuilding the cache than it requires to fix the root problem. Instead, it is recommended that you document the issue and share that information with your team. Wait until a pipeline engineer can investigate the problem before deleting the cache. \ No newline at end of file diff --git a/content/docs/user-guide/assets/asset-processor/interface.md b/content/docs/user-guide/assets/asset-processor/interface.md index 47a7a752c53..3a0383eeb14 100644 --- a/content/docs/user-guide/assets/asset-processor/interface.md +++ b/content/docs/user-guide/assets/asset-processor/interface.md @@ -46,9 +46,9 @@ Jobs in the Asset Status list display the statuses below: * {{< icon "pending.svg" >}} **Pending** - The job has been created, but has not run. * {{< icon "processing.svg" >}} **Processing** - The job is in progress. * {{< icon "warning-yellow.svg" >}} **Completed - Warning** - The job has completed but has emitted a warning. -* {{< icon "error.svg" >}} **Completed - Error** - The job has completed and has emitted an error. +* {{< icon "warning-yellow.svg" >}} **Completed - Error** - The job has completed and has emitted an error. * {{< icon "valid.svg" >}} **Completed** - The job has completed successfully with no warnings, errors, or failures. -* {{< icon "failure.svg" >}} **Failed** - The job has failed and has emitted a failure. +* {{< icon "error.svg" >}} **Failed** - The job has failed and has emitted a failure. It's possible for a job to emit a combination of warnings, errors, and failures. @@ -141,7 +141,7 @@ The Event Log Details table also features a context menu to copy details to the | **Copy Line With Details** | Copy the selected line and any related details that appear in the **Event Log Line Details** table. | | **Copy All** | Copy all log lines and any hidden details for each item. | -If the selected line in the Event Log Details table has any additional information, the Event Log Line Details table will be displayed automatically. The details and additional information are generally useful only when debugging issues with a particular asset. +The Context Details option in the lower right enables the Event Log Line Details table. It displays any additional information about the selected line in the Event Log Details table. The details and additional information are generally useful only when debugging issues with a particular asset. The Event Log Line Details table also features a context menu to copy details to the clipboard. **Right-click** on the row to expose a context menu with the following actions: @@ -151,8 +151,6 @@ The Event Log Line Details table also features a context menu to copy details to | **Copy Selected Value** | Copy the text in the **Value** column of the selected row. | | **Copy All Values** | Copy all keys and values in the table. | -![Event Log Line Details table](/images/user-guide/assets/asset-processor/event_log_line_details.png) - ## Assets In the Assets tab, the tabbed pane on the left displays either the **Source Assets** tree from the scan directories, the **Intermediate Assets**, or the **Product Assets** tree from the **Asset Cache**. You can browse either tree for specific assets, or use the search bar to find assets by name or ID. When an asset is selected, information about the asset is displayed on the right of the interface. diff --git a/content/docs/user-guide/assets/asset-processor/move-assets.md b/content/docs/user-guide/assets/asset-processor/move-assets.md index b53c7846a80..b1a61d24971 100644 --- a/content/docs/user-guide/assets/asset-processor/move-assets.md +++ b/content/docs/user-guide/assets/asset-processor/move-assets.md @@ -2,7 +2,7 @@ linkTitle: Move or Delete Assets title: Move or Delete Assets with Asset Processor Batch description: Learn how to move assets to new directory locations or delete assets while maintaining internal references with Asset Processor Batch. -weight: 700 +weight: 600 toc: true --- diff --git a/content/docs/user-guide/assets/asset-processor/skip-startup-scan.md b/content/docs/user-guide/assets/asset-processor/skip-startup-scan.md deleted file mode 100644 index 347e4a8040d..00000000000 --- a/content/docs/user-guide/assets/asset-processor/skip-startup-scan.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -linkTitle: Skip Startup Scan -title: Asset Processor Skip Startup Scan -description: Skips startup checks for assets modified while Asset Processor was closed. -weight: 500 -toc: true ---- - -Skipping Startup Scan improves O3DE Editor's launch time if no assets are modified while Asset Processor was closed. You can switch startup scan modes at any time but need to restart Asset Processor for the change to take effect. Asset Processor saves your preferences between sessions. - -Skipping Startup Scan is intended to be an aid for rapid code iteration workflows (edit, build, and debug cycles, for example). Use it only when you aren't modifying the asset processing pipeline or making changes to source assets. Asset Processor watches for asset changes once it enters the Idle state. - -When Skip Startup Scan is enabled: -1. Asset Processor skips startup checks on asset modifications after launch and enters the idle state directly. -2. O3DE Editor receives a message from Asset Processor which indicates that all the assets are ready to use. -3. O3DE Editor is unblocked to launch. - -When Skip Startup Scan is disabled: -1. Asset Processor scans and processes any assets that are modified while it was closed. -2. O3DE Editor receives a message from the Asset Processor which indicates that **critical** assets are processed and ready to use. -3. O3DE Editor is unblocked to launch. -4. Asset Processor finishes processing all the assets and enters the idle state. - -## Choose a startup scan mode - -![The Skip Startup Scan settings in Asset Processor](/images/user-guide/assets/asset-processor/skip-startup-scan-settings.png) - -Skip Startup Scan Mode is disabled by default for Asset Processor GUI. To enable/disable Skip Startup Scan Mode in the GUI, do the following: -1. Choose the Settings tab in Asset Processor. -2. Toggle the **Skip Startup Scan** option. -3. Restart the Asset Processor and Editor. - -{{< important >}} -Skipping startup checks may result in unexpected behavior if assets are modified while Asset Processor is not running. -You can [perform a full scan](/docs/user-guide/assets/asset-processor/faster-scanning/#perform-a-full-scan), even when Skip Startup Scan Mode is active. -{{< /important >}} diff --git a/content/docs/user-guide/assets/pipeline/asset-builders.md b/content/docs/user-guide/assets/pipeline/asset-builders.md index fbc61d897f2..bd80cb3e852 100644 --- a/content/docs/user-guide/assets/pipeline/asset-builders.md +++ b/content/docs/user-guide/assets/pipeline/asset-builders.md @@ -95,8 +95,8 @@ Individual Gems, the active O3DE project, and the engine itself can all be insta ![All files in asset processing](/images/user-guide/assets/pipeline/asset_builders/asset_builder_all_dependencies.png) * Source assets - * Source assets are files that exist in scan directories for an O3DE project, that match an Asset Builder's registered pattern, and result in a job being created when Create Jobs is called with the source asset for the Asset Builder. - * Read more about [source assets here](/docs/user-guide/assets/pipeline/source-assets/). + * Source assets are files that exist in scan directories for an O3DE project, that match an Asset Builder's registered pattern, and result in a job being created when Create Jobs is called with the source asset for the Asset Builder. + * Read more about [source assets here.](/docs/user-guide/assets/pipeline/source-assets/) * Non-asset source files * Non-asset source files are files that may or may not be in a scan directory, that are loaded and referenced when processing a source asset. * The difference between a source asset and a non-asset source file is either: @@ -104,8 +104,8 @@ Individual Gems, the active O3DE project, and the engine itself can all be insta * The file does not match a file pattern for any asset builder descriptor, or * The file does not generate a job when create jobs is called for the file for matching asset builders * Intermediate assets - * Intermediate assets are source assets that are generated as a product of an asset processing job. - * Read more about [intermediate assets here](/docs/user-guide/assets/pipeline/intermediate-assets/). + * Intermediate assets are source assets that are generated as a product of an asset processing job. + * Read more about [intermediate assets here.](/docs/user-guide/assets/pipeline/intermediate-assets/) * Product assets * Product assets are the runtime ready output of an asset processing job. @@ -157,16 +157,16 @@ Product assets should only have these references: * This kind of reference is not common, but there are cases where it may be necessary to reference a file outside the asset folder that will be in the shipped final product. While it's technically possible to reference files in other ways in product assets, it may end up causing problems later. The development version of a project, running the Editor or game launcher connected to the Asset Processor is what a team will be most used to interacting with. However, when preparing to deliver a project to end customers, with packaged and bundled content, the layout of the project and placement of assets will be different. References from product assets to other files that worked during development may not work in release builds of projects. For example, if a product asset references a source asset, that source asset likely won't be on the end user's machine in the packaged release build. - -Product assets should never reference other product assets with absolute path because this will result in the hash of the contents of product assets being unique per machine that generates product assets. When authoring a builder, the complete lifecycle of asset management for a project should be kept in mind. Keeping product assets stable across machines will ensure that the gathering modified assets step of generating a patch for a live game is accurate. You can read more about [asset bundling here](/docs/user-guide/packaging/asset-bundler/overview/). + +Product assets should never reference other product assets with absolute path because this will result in the hash of the contents of product assets being unique per machine that generates product assets. When authoring a builder, the complete lifecycle of asset management for a project should be kept in mind. Keeping product assets stable across machines will ensure that the gathering modified assets step of generating a patch for a live game is accurate. You can read more about [asset bundling here.](/docs/user-guide/packaging/asset-bundler/overview/) ### Load product assets in process job If the processing of one job requires loading the output product asset of another job, then a job dependency should be declared against that job, and when possible the specific product should be defined in this dependency. When setting up asset references, the source asset with the outgoing reference and the product asset it references maybe be on two different drive roots, so relative paths may not be possible between the source asset and the referenced product asset. - -Read more about [job dependencies here](/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies). + +Read more about [job dependencies here.](/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies) ### Load product assets in create jobs @@ -175,8 +175,8 @@ It's not recommended to load the product asset of one job during the create jobs If possible, it's recommended that the information needed is instead loaded from the source asset of the other job instead of the product asset. Then, source dependencies can be used to make sure jobs run in the correct order. If that isn't possible, then intermediate assets can provide a path to manage this processing order. To do this, the initial job should be updated to output an intermediate asset to be used as the source asset for the job to do the real work. The new job creating this intermediate asset should emit the product asset to be loaded in the middle job's create jobs function as a product specific job dependency. - -Read more about [intermediate assets here](/docs/user-guide/assets/pipeline/intermediate-assets/). Read more about [job dependencies here](/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies). + +Read more about [intermediate assets here.](/docs/user-guide/assets/pipeline/intermediate-assets/) Read more about [job dependencies here.](/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#job-dependencies) If you have a need to load a product asset during the create jobs step of asset processing, its recommended you discuss your use case with the O3DE community. Please create [a ticket](https://github.com/o3de/o3de/issues) or reach out in the [O3DE Discord](https://{{< links/o3de-discord >}}) @@ -185,5 +185,5 @@ If you have a need to load a product asset during the create jobs step of asset Sometimes processing a source asset, either the create jobs or process job steps, requires loading a second source asset or source file. In this situation, a source dependency should be used. A source dependency is declared during the CreateJob step, and when the file in this dependency changes, the job will be re-run. - -Read more about [source dependencies here](/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#source-dependencies). + +Read more about [source dependencies here.](/docs/user-guide/assets/pipeline/asset-dependencies-and-identifiers/#source-dependencies) diff --git a/content/docs/user-guide/assets/pipeline/scan-directories.md b/content/docs/user-guide/assets/pipeline/scan-directories.md index 4b21581ffa2..0742900cfa6 100644 --- a/content/docs/user-guide/assets/pipeline/scan-directories.md +++ b/content/docs/user-guide/assets/pipeline/scan-directories.md @@ -56,3 +56,4 @@ When this can't be done, such as with an existing file format like FBX files ref ### From in-editor tools In most cases, when authoring an in-editor tool that reads and writes source assets, the file format can be fully controlled by the author. In this case, when referencing another asset, the author should keep in mind potential pathing issues when one asset references another. In other cases, if the in-editor tool is loading an pre-existing file format that can't be modified, see the previous section on handling file references from external tools. + diff --git a/content/docs/user-guide/assets/scene-settings/meshes-tab.md b/content/docs/user-guide/assets/scene-settings/meshes-tab.md index 5ff13e81766..1ce8e02b363 100644 --- a/content/docs/user-guide/assets/scene-settings/meshes-tab.md +++ b/content/docs/user-guide/assets/scene-settings/meshes-tab.md @@ -85,7 +85,7 @@ Change the **Translation** (position), **Rotation** (orientation), and **Scale** LODs are optimized meshes with progressively lower polygon counts, fewer and smaller textures, and simplified materials. The farther an entity is from the camera, the less detail is required from the meshes that make up the entity. As the entity moves farther from the camera, it swaps to progressively simpler LOD. -With [Scene Settings](/docs/user-guide/assets/scene-settings/scene-settings/), you can specify up to five LODs (not including the base mesh) that are numbered \[`0`\] to \[`4`\], with \[`0`\] being the *highest* level of detail. LODs are not required but are recommended because they help get the best performance and visual fidelity across a range of platforms with different hardware capabilities. +You can specify up to five LODs (not including the base mesh) that are numbered \[`0`\] to \[`4`\], with \[`0`\] being the *highest* level of detail. LODs are not required but are recommended because they help get the best performance and visual fidelity across a range of platforms with different hardware capabilities. * Choose the {{< icon add.svg >}} **Add** button to add an LOD. @@ -93,41 +93,8 @@ With [Scene Settings](/docs/user-guide/assets/scene-settings/scene-settings/), y * Choose the {{< icon browse-edit-select-files.svg >}} **Selection list** button to specify the meshes to include in the LOD. -You can also define your optimized mesh names using a _soft naming convention_, which defines naming rules for automatically adding a Level of Detail modifier and assigning the meshes to the appropriate LOD slots. LODs are ordered from 0 (the *highest* level of detail), followed by progressively *lower* levels of detail to meet the O3DE application needs. - -For example, you may add `_lod0`, `_lod1`, `_lod2`, `_lod3`, `_lod4`, and `_lod5` as suffixes to your mesh names. `_lod0` is the base mesh with the highest resolution geometry, textures, and materials and is assigned to the base mesh group. `_lod1` is assigned to LOD slot **\[0\]**, `_lod2` is assigned to LOD slot **\[1\]**, and so on. - -The scene settings pipeline relies on the soft naming convention settings defined in [SoftNameSettings.setreg](https://github.com/o3de/o3de/blob/development/Gems/SceneProcessing/Registry/SoftNameSettings.setreg) for rules to identify the LOD meshes. The rules allow for various formats of name suffixes, including _LOD0, _LOD_0, Lod0, _Lod_0, _lod0, and _lod_0 (upper, lower, CamelCase, etc.). - -To override those default settings, please use the project user registry (`/Registry`) or the global machine registry (typically found in the users home directory under `.o3de/Registry/`) instead of modifying [SoftNameSettings.setreg](https://github.com/o3de/o3de/blob/development/Gems/SceneProcessing/Registry/SoftNameSettings.setreg) directly. Check [Settings Registry](/docs/user-guide/settings/) for more information on providing settings and configurations for O3DE applications and tools. For example, you can add a new settings registry file like below under `/Registry` to **exclude** children of the LOD0 nodes: -``` -{ - "O3DE": { - "AssetProcessor": { - "SceneBuilder": { - "NodeSoftNameSettings": [ - { - "pattern": { - "pattern": "^.*_[Ll][Oo][Dd]_?1(_optimized)?$", - "matcher": 2 - }, - "virtualType": "LODMesh1", - "includeChildren": false - }, - ... - }, - "FileSoftNameSettings": [ - ... - ] - } - } - } -} - -``` - {{< note >}} -You may add any number of soft naming convention settings by overriding the default settings registry, but each O3DE system has its own limit on the maximum LODs: [Atom renderer](/docs/atom-guide/) supports up to 10 LODs while each actor can have up to [six](/docs/user-guide/visualization/animation/using-actor-lods-optimize-game-performance/#using-actor-lods-in-o3de) LODs. +You can add `_lod0`, `_lod1`, `_lod2`, `_lod3`, `_lod4`, and `_lod5` as suffixes to your mesh names to automatically add a Level of Detail modifier and assign the meshes to the appropriate LOD slots. `_lod0` is the base mesh with the highest resolution geometry, textures, and materials and is assigned to the base mesh group. `_lod1` is assigned to LOD slot **\[0\]**, `_lod2` is assigned to LOD slot **\[1\]**, and so on. {{< /note >}} ## Material diff --git a/content/docs/user-guide/assets/scene-settings/physx-tab.md b/content/docs/user-guide/assets/scene-settings/physx-tab.md index dccada45364..d852c737bb8 100644 --- a/content/docs/user-guide/assets/scene-settings/physx-tab.md +++ b/content/docs/user-guide/assets/scene-settings/physx-tab.md @@ -11,7 +11,7 @@ You can create PhysX collider product assets for PhysX simulation, hit detection You can name meshes with the postfix `_phys` in your source asset to automatically process them as PhysX colliders. When a mesh in a source asset has the `_phys` postfix, it is recognized as a collider and automatically added to the default PhysX mesh group. {{< important >}} -There are many options for creating PhysX colliders. The *best* options in a scenario depend on many factors including mesh complexity, how the collider is used, and whether the entity containing the collider is static (doesn't move), kinematic (animated), or simulated (driven by forces and collisions). In general, primitive colliders offer the best simulation performance, but you might consider trading performance for precision in situations where collider assets that closely match the shape of a visible mesh are desirable. +There are many options for creating PhysX colliders. The *best* options in a scenario depend on many factors including mesh complexity, how the collider is used, and whether the entity containing the collider is static (doesn't move), kinematic (animated), or dynamic (simulated movement with a rigid body component). In general, primitive colliders offer the best simulation performance, but you might consider trading performance for precision in situations where collider assets that closely match the shape of a visible mesh are desirable. {{< /important >}} The PhysX tab is available if the source asset contains at least one mesh. @@ -33,7 +33,7 @@ The PhysX tab is available if the source asset contains at least one mesh. ![The Scene Settings PhysX triangle mesh asset properties.](/images/user-guide/assets/scene-settings/physx-triangle-mesh-asset.png) -Triangle mesh colliders accurately reproduce the shape of the selected meshes, but cannot be used on simulated entities. Triangle mesh colliders are most suitable for static environment entities that have complex shapes and require colliders that accurately resemble the shape of the visible mesh. +Triangle mesh colliders accurately reproduce the shape of the selected meshes, but cannot be used on dynamic entities. Triangle mesh colliders are most suitable for static environment entities that have complex shapes and require colliders that accurately resemble the shape of the visible mesh. | Property | Description | | - | - | @@ -50,7 +50,7 @@ Triangle mesh colliders accurately reproduce the shape of the selected meshes, b ![The Scene Settings PhysX convex asset properties.](/images/user-guide/assets/scene-settings/physx-convex-asset.png) -Convex hulls are generated colliders that can approximate the shape of the selected meshes. Convex hulls can be used with static, kinematic, and simulated entities, and are often used on interactive entities that require rigid body physics and a collider mesh that resembles the shape of the visible mesh. +Convex hulls are generated colliders that can approximate the shape of the selected meshes. Convex hulls can be used with static, kinematic, and dynamic entities, and are often used on interactive entities that require rigid body physics and a collider mesh that resembles the shape of the visible mesh. | Property | Description | | - | - | @@ -68,7 +68,7 @@ Convex hulls are generated colliders that can approximate the shape of the selec ![The Scene Settings PhysX primitive asset properties.](/images/user-guide/assets/scene-settings/physx-primitive-asset.png) -Primitive colliders are simple parametric shape primitives (box, capsule, sphere) that are fit to the input meshes and can be used with static, kinematic, and simulated entities. Primitive colliders generally provide the best simulation performance, but might not closely match the shape of the visible mesh. They are best suited for simulated entities with simple meshes, as well as projectiles, triggers, and entities where colliders that accurately represent shape of the visible mesh are not necessary. +Primitive colliders are simple parametric shape primitives (box, capsule, sphere) that are fit to the input meshes and can be used with static, kinematic, and dynamic entities. Primitive colliders generally provide the best simulation performance, but might not closely match the shape of the visible mesh. They are best suited for dynamic entities with simple meshes, as well as projectiles, triggers, and entities where colliders that accurately represent shape of the visible mesh are not necessary. | Property | Description | | - | - | @@ -79,9 +79,9 @@ Primitive colliders are simple parametric shape primitives (box, capsule, sphere ![The Scene Settings PhysX decompose meshes properties.](/images/user-guide/assets/scene-settings/physx-decompose-meshes.png) -Exporting a PhysX mesh as a convex or a primitive collider might not produce good results if the mesh's shape is concave or doesn't closely fit one of the primitive shapes. Exporting a PhysX mesh as a triangle mesh collider creates a collider that accurately resembles the original mesh, but won't work with a simulated entity. For these scenarios, O3DE supports approximate convex decomposition. Arbitrary meshes are broken down into convex parts which approximate the original shape before processing each part through the asset pipeline individually. +Exporting a PhysX mesh as a convex or a primitive collider might not produce good results if the mesh's shape is concave or doesn't closely fit one of the primitive shapes. Exporting a PhysX mesh as a triangle mesh collider creates a collider that accurately resembles the original mesh, but won't work with a dynamic entity. For these scenarios, O3DE supports approximate convex decomposition. Arbitrary meshes are broken down into convex parts which approximate the original shape before processing each part through the asset pipeline individually. -Decomposing meshes has the advantage that each individual convex part can be exported as a convex or primitive approximation. Since the resulting asset doesn't contain any triangle meshes, it can be used on simulated entities. +Decomposing meshes has the advantage that each individual convex part can be exported as a convex or primitive approximation. Since the resulting asset doesn't contain any triangle meshes, it can be used on dynamic entities. For more information and illustrated examples of results, see the [V-HACD library on GitHub](https://github.com/kmammou/v-hacd). diff --git a/content/docs/user-guide/assets/scene-settings/source-asset-best-practices.md b/content/docs/user-guide/assets/scene-settings/source-asset-best-practices.md index f0b69d2e658..6c908d75fd7 100644 --- a/content/docs/user-guide/assets/scene-settings/source-asset-best-practices.md +++ b/content/docs/user-guide/assets/scene-settings/source-asset-best-practices.md @@ -79,6 +79,6 @@ For more information on processing motions, check the Scene Settings [Motions Ta Physics colliders are generated based on selected meshes, meshes that use the `_phys` naming convention, or meshes that have a `collision = true` UDP property in the source scene asset. There are three types of PhysX meshes: triangle meshes, primitives, and convex hulls. Each type has it's own use cases. Because PhysX colliders are generated based on meshes in the scene source asset, the most important concern is that the selected meshes follow the recommendations for mesh density, clean mesh data, triangles and quads, and LODs that are outlined in the [Meshes](#meshes) section. -If the collider (and it's corresponding mesh asset) are intended to be simulated as a dynamic rigid body, it can be helpful to place the object in the scene source asset so that the world origin defines the center of mass (COM) of the rigid body. The COM can be adjusted in the PhysX Dynamic Rigid Body component, but it's much easier to define the COM in the scene source asset by positioning the asset. +If the collider (and it's corresponding mesh asset) are intended to be simulated as a dynamic rigid body, it can be helpful to place the object in the scene source asset so that the world origin defines the center of mass (COM) of the rigid body. The COM can be adjusted in the PhysX Rigid Body component, but it's much easier to define the COM in the scene source asset by positioning the asset. PhysX colliders are a complex topic and it's helpful to read the tutorial [Process PhysX Collider Assets](/docs/learning-guide/tutorials/assets/physx-colliders) to get a complete understanding of collider types and how they are processed. diff --git a/content/docs/user-guide/build/distributable-engine.md b/content/docs/user-guide/build/distributable-engine.md index 0813711e803..502c606a0d4 100644 --- a/content/docs/user-guide/build/distributable-engine.md +++ b/content/docs/user-guide/build/distributable-engine.md @@ -27,7 +27,7 @@ These instructions use the following example paths: These instructions use the following example CMake cache values: -* `O3DE_INSTALL_ENGINE_NAME`: "MyO3DE" +* `LY_VERSION_ENGINE_NAME`: "MyO3DE" {{< note >}} This example uses the Visual Studio generators and Windows `cmd` syntax for command-line instructions. For Linux users, change your CMake generator to `Ninja Multi-Config`, use a different build directory for CMake, and modify CLI syntax accordingly. Make sure that distributable engines on Linux systems are hosted on an `ext*`-format filesystem for performance reasons. @@ -57,10 +57,10 @@ The first step in creating a distributable build is generating local binaries fr Perform the following steps from the O3DE source directory (`C:\o3de-source` in this example): -1. Generate the toolchain project files using a unique `O3DE_INSTALL_ENGINE_NAME` CMake cache setting. This value is the name of the engine used by the O3DE project manager and registration system. - +1. Generate the toolchain project files using a unique `LY_VERSION_ENGINE_NAME` CMake cache setting. This value is the name of the engine used by **Project Manager** and the O3DE registration system. Giving the install layout a different engine name than the source engine enables the engines to be registered side-by-side. + ```cmd - cmake -B build/windows -G "Visual Studio 16" --config profile -DO3DE_INSTALL_ENGINE_NAME="MyO3DE" + cmake -B build/windows -G "Visual Studio 16" --config profile -DLY_VERSION_ENGINE_NAME="MyO3DE" ``` Other cache variables to consider setting on this line (using the `-D` option) include: @@ -92,7 +92,7 @@ Run the following step from the distributable install directory: ### Register the engine -The next step in creating a distributable build of the engine tools is to register the locally installed engine. You must re-run this registration step any time you make a change to `O3DE_INSTALL_ENGINE_NAME`. +The next step in creating a distributable build of the engine tools is to register the locally installed engine. You must re-run this registration step any time you make a change to `LY_VERSION_ENGINE_NAME`. Register the engine locally with the `o3de` script. Run the following command from your distributable install directory: @@ -128,7 +128,7 @@ Use the `o3de` script to re-register your project with the install build. This w scripts\o3de.bat register -pp W:\MyProject ``` -The `engine` field of the `project.json` file will now be the name of the engine that was set as `O3DE_INSTALL_ENGINE_NAME` during configuration. +The `engine` field of the `project.json` file will now be the name of the engine that was set as `LY_ENGINE_VERSION_NAME` during configuration. ## Perform a project build diff --git a/content/docs/user-guide/components/reference/_index.md b/content/docs/user-guide/components/reference/_index.md index 14eea5cbd7c..68bfe0ff28d 100644 --- a/content/docs/user-guide/components/reference/_index.md +++ b/content/docs/user-guide/components/reference/_index.md @@ -173,8 +173,7 @@ The following components are grouped by type as they appear in the O3DE Editor. [PhysX Heightfield Collider](/docs/user-guide/components/reference/physx/heightfield-collider/) | Creates a geometric collider based on the Axis-Aligned Box component. | | [PhysX Hinge Joint](/docs/user-guide/components/reference/physx/hinge-joint/) | Creates a dynamic hinge joint that constrains an entity to the joint with freedom to rotate around the x-axis of the joint.| | [PhysX Ragdoll](/docs/user-guide/components/reference/physx/ragdoll/) | Simulates ragdoll physics by creating a hierarchy of rigid bodies connected by joints. | -| [PhysX Static Rigid Body](/docs/user-guide/components/reference/physx/static-rigid-body/) | Defines the entity as a non-movable rigid object that is solid and can collide with other PhysX entities. | -| [PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) | Defines the movable entity as a movable rigid object that is solid and can collide with other PhysX entities. | +| [PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) | Defines the entity as a rigid object that is solid and can move and collide with other PhysX entities. | | [PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/) | Creates a geometric collider based on the **Shape** component. | ### Scripting diff --git a/content/docs/user-guide/components/reference/gradients/image-gradient.md b/content/docs/user-guide/components/reference/gradients/image-gradient.md index 96032b76d00..1c4f5382987 100644 --- a/content/docs/user-guide/components/reference/gradients/image-gradient.md +++ b/content/docs/user-guide/components/reference/gradients/image-gradient.md @@ -25,6 +25,29 @@ Add the **Image Gradient** component to generate a gradient from an image. The c | **Preview Position** | Sets the world location of the preview.

*This field is available only if there is no entity selected in **Pin Preview to Shape**.* | Vector3: -Infinity to Infinity | X:`0.0`, Y:`0.0`, Z:`0.0` | | **Preview Size** | Sets the dimensions of the preview.

*This field is available only if there is no entity selected in **Pin Preview to Shape**.* | Vector3: 0.0 to Infinity | X:`1.0`, Y:`1.0`, Z:`1.0` | | **Constrain to Shape** | If `Enabled`, the gradient preview uses the bounds of the entity selected in **Pin Preview to Shape**.

*This field is available only if an entity is selected in **Pin Preview to Shape**.* | Boolean | `Disabled` | +| **Source Type** | Determines whether to create a new image or use an existing image. | `Create New Image`, `Use Existing Image` | `Use Existing Image` | + +### Create New Image + +The `Create New Image` Source Type has the following set of properties. + +| Property | Description | Values | Default | +|-|-|-|-| +| **Resolution** | Defines the number of pixels to use in the X and Y directions for the created image. | Int32: 1 to 8192 pixels | X: `512`, Y: `512` | +| **Output Format** | Sets the output format for the created image, which determines how many bytes are used for each pixel. | `R8 (8-bit)`, `R16 (16-bit)`, `R32 (32-bit)` | `R32 (32-bit)` | + +To create a new image, set the properties to the desired image size and format and press the **Create** button. You will be prompted for a location to save the image. If the image is saved into a source asset directory that is used by the project, the Image Gradient will automatically switch the **Source Type** to `Use Existing Image` and populate the **Image Asset** field with the saved image. + +{{< important >}} +The image name should end in `_gsi` (ex: `image_gsi.tif`). This will ensure that the image is processed by the Asset Processor as a Gradient Signal Image (gsi) asset which will leave the image data uncompressed. +{{< /important >}} + +### Use Existing Image + +The `Use Existing Image` **Source Type** has the following set of properties. + +| Property | Description | Values | Default | +|-|-|-|-| | **Image Asset** | Sets the source image to use as the gradient's values.

**NOTE:** The **Image Gradient** currently only supports a subset of all available pixel formats. Most of the uncompressed formats are supported, as well as the `BC1` compressed format. For a full list of supported formats, refer to [`AZ::RPI::IsImageDataPixelAPISupported`](https://github.com/o3de/o3de/blob/development/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h). | `.streamingimage` | None | | **Sampling Type** | The sampling type to use on the image data. | `Point`, `Bilinear`, `Bicubic` | `Point` | | **Tiling** | Sets the number of times to tile the image horizontally (X) and vertically (Y). | Vector2: 0.01 to Infinity | X: `1.0`, Y: `1.0` | @@ -45,14 +68,6 @@ There are several sampling types to choose from. Choosing the best sampling type | `Bilinear` | The `Bilinear` filter smooths out the image by requesting four points in a grid around a requested pixel and then performing interpolation between the points.

Because this uses linear interpolation between 4 points, bilinear filtering can cause noticeable plus-shaped artifacts in the smoothed data. `Bilinear` sampling is the best general-purpose choice, as it balances performance and quality. | 4x | Good | ![Image Gradient using bilinear interpolation](/images/user-guide/components/reference/gradients/image-gradient-component-bilinear.png) | | `Bicubic` | The `Bicubic` filter smooths out the image by requesting sixteen points in a grid around a requested pixel and then performing Catmull-Rom interpolation between the points.

Because this uses non-linear interpolation, there are no noticeable plus-shaped artifacts in the smoothed data. `Bicubic` sampling is the best choice when quality is needed over performance. | 16x | Great | ![Image Gradient using bicubic interpolation](/images/user-guide/components/reference/gradients/image-gradient-component-bicubic.png) | -### Creating a new image - -To create a new image, press the **Create New Image...** button. You will be prompted for an image width and height in pixels, then for a location to save the image. If the image is saved into a [source asset directory](/docs/user-guide/assets/pipeline/scan-directories/) that is used by the project, the Image Gradient will automatically populate the **Image Asset** field with the saved image. - -{{< important >}} -The image name should end in `_gsi` (for example, `image_gsi.tif`). This will ensure that the image is processed by the Asset Processor as a Gradient Signal Image (gsi) asset which will leave the image data uncompressed. -{{< /important >}} - ## Editing an image To edit an existing image, press the **Edit** button on the Image Gradient component or select the Image Gradient component's icon in the **Component Switcher** in the viewport. This will enter Paint Brush mode. Refer to the [Paint Brush](/docs/user-guide/components/reference/paintbrush/paintbrush) documentation for more details on how to use the Paint Brush. diff --git a/content/docs/user-guide/components/reference/non-uniform-scale/non-uniform-scale.md b/content/docs/user-guide/components/reference/non-uniform-scale/non-uniform-scale.md index 586e69077d1..3744da3c883 100644 --- a/content/docs/user-guide/components/reference/non-uniform-scale/non-uniform-scale.md +++ b/content/docs/user-guide/components/reference/non-uniform-scale/non-uniform-scale.md @@ -17,8 +17,7 @@ The following components are **compatible** with **Non-uniform Scale**: + **[Quad Shape](/docs/user-guide/components/reference/shape/quad-shape/)** + **[PhysX Collider](/docs/user-guide/components/reference/physx/collider/)** - Note that primitive colliders are replaced with convex approximations if they are non-uniformly scaled, which may slightly deteriorate performance. The level of detail of the convex approximation can be adjusted using the **Subdivision level** setting on the [PhysX Collider](/docs/user-guide/components/reference/physx/collider/) component. + **[PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/)** -+ **[PhysX Static Rigid Body](/docs/user-guide/components/reference/physx/static-rigid-body/)** -+ **[PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/)** ++ **[PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/)** + **[PhysX Force Region](/docs/user-guide/components/reference/physx/force-region/)** + **[Decal](/docs/user-guide/components/reference/atom/decal/)** + **Mesh** diff --git a/content/docs/user-guide/components/reference/paintbrush/paintbrush.md b/content/docs/user-guide/components/reference/paintbrush/paintbrush.md index 06403d004fd..9866560480c 100644 --- a/content/docs/user-guide/components/reference/paintbrush/paintbrush.md +++ b/content/docs/user-guide/components/reference/paintbrush/paintbrush.md @@ -167,18 +167,3 @@ The **Smoothing Radius** is separate from the Paint Brush **Size**. The Paint Br | `ed_paintBrushHardnessPercentAdjustAmount` | Controls how much the `{` and `}` hotkeys adjust the Paint Brush Hardness in percent (0 - 100). | | `ed_paintBrushManipulatorInnerColor` | The color of the inner circle of the Paint Brush, which is used to show where the hardness falloff begins. | | `ed_paintBrushManipulatorOuterColor` | The color of the outer circle of the Paint Brush, which shows the overall Paint Brush size and where the hardness falloff ends. | - -## PaintBrushSessionBus - -The PaintBrush provides an EBus that exposes high-level painting APIs for any component that supports runtime painting. - -| Request Name | Description | Parameter | Return | Scriptable | -|-|-|-|-|-| -| `StartPaintSession` | Starts a runtime paint session and creates the temporary data buffers needed for modification. | PaintableEntityId: The entity that contains a paintable component. | `Uuid`: The new paint session ID. | Yes | -| `EndPaintSession` | Ends the runtime paint session for the given ID and cleans up the temporary data buffers. | sessionId: The paint session ID to end. | None | Yes | -| `BeginBrushStroke` | Starts a brush stroke for a paint session with the given brush settings for color/intensity/opacity. | sessionId: The paint session ID, brushSettings: The paint brush settings for this brush stroke. | None | Yes | -| `EndBrushStroke` | Ends a brush stroke for a paint session. | sessionId: The paint session ID. | None | Yes | -| `IsInBrushStroke` | Returns whether or not a paint session is currently in the middle of a brush stroke. | sessionId: The paint session ID. | `bool`: True if a brush stroke has been started, false if not. | Yes | -| `ResetBrushStrokeTracking` | Resets the brush tracking so that the next action will be considered the start of a stroke movement instead of a continuation. | sessionId: The paint session ID. | None | Yes | -| `PaintToLocation` | Applies a paint color to the underlying data from the previous location to the provided location using the given brush settings. | sessionId: The paint session ID, brushCenter: The location to move the center of the brush to, brushSettings: The paint brush settings for this brush stroke. | None | Yes | -| `SmoothToLocation` | Smooths the underlying data from the previous location to the provided location using the given brush settings. | sessionId: The paint session ID, brushCenter: The location to move the center of the brush to, brushSettings: The paint brush settings for this brush stroke. | None | Yes | diff --git a/content/docs/user-guide/components/reference/physx/ball-joint.md b/content/docs/user-guide/components/reference/physx/ball-joint.md index db87ff18364..b1038772419 100644 --- a/content/docs/user-guide/components/reference/physx/ball-joint.md +++ b/content/docs/user-guide/components/reference/physx/ball-joint.md @@ -23,7 +23,7 @@ Specify the parent entity that will drive the joint. **Breakable** When enabled, the joint will break if sufficient force is applied. Enabling **Breakable** exposes the **Maximum Force** and **Maximum Torque** properties. -**PhysX Dynamic Rigid Body** components that have their **Compute Mass** property enabled might have very large mass values. If the entity containing the joint component or the leader entity have their **Compute Mass** property enabled, the **Maximum Force** and **Maximum Torque** properties might require very high values to resist breaking. +**PhysX Rigid Body** components that have their **Compute Mass** property enabled might have very large mass values. If the entity containing the joint component or the leader entity have their **Compute Mass** property enabled, the **Maximum Force** and **Maximum Torque** properties might require very high values to resist breaking. **Maximum Force** When **Breakable** is enabled, specify the maximum force the joint can sustain before breaking. Valid values range from **0.01** to **Infinity**. diff --git a/content/docs/user-guide/components/reference/physx/character-controller.md b/content/docs/user-guide/components/reference/physx/character-controller.md index 031f0e6fc9c..46dd53a23c5 100644 --- a/content/docs/user-guide/components/reference/physx/character-controller.md +++ b/content/docs/user-guide/components/reference/physx/character-controller.md @@ -89,8 +89,8 @@ Use the **Shape** property in the **Entity Inspector** to choose the desired sha ## Differences Between PhysX and Legacy Character Physics Components -Character controllers are usually **kinematic** or **simulated**. Simulated character controllers are controlled through their velocity or by applying forces. Kinematic character controllers are controlled directly by position. Each controller type has advantages and disadvantages. +Character controllers are usually **kinematic** or **dynamic**. Dynamic character controllers are controlled through their velocity or by applying forces. Kinematic character controllers are controlled directly by position. Each controller type has advantages and disadvantages. For more information, see [Character Controllers](https://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/guide/3.3.4/Manual/CharacterControllers.html) in the NVIDIA documentation. -Because the **PhysX Character Controller** component is kinematic and not affected by outside forces, it is not affected by gravity out of the box. This separation allows you to use Script Canvas or C++ to implement custom behavior for gravity and other effects, since that behavior is likely to be highly game-specific. For example implementations of some gameplay features such as gravity, see the **[PhysX Character Gameplay](/docs/user-guide/components/reference/physx/character-gameplay/)** component. Kinematic controllers behave as if they have infinite mass when simulated objects collide with them. Your custom gameplay logic determines how the controller responds to collisions such as the recoil from heavy impacts. +Because the **PhysX Character Controller** component is kinematic and not affected by outside forces, it is not affected by gravity out of the box. This separation allows you to use Script Canvas or C++ to implement custom behavior for gravity and other effects, since that behavior is likely to be highly game-specific. For example implementations of some gameplay features such as gravity, see the **[PhysX Character Gameplay](/docs/user-guide/components/reference/physx/character-gameplay/)** component. Kinematic controllers behave as if they have infinite mass when dynamic objects collide with them. Your custom gameplay logic determines how the controller responds to collisions such as the recoil from heavy impacts. diff --git a/content/docs/user-guide/components/reference/physx/collider.md b/content/docs/user-guide/components/reference/physx/collider.md index f652d0a4564..35d8cbd1fa6 100644 --- a/content/docs/user-guide/components/reference/physx/collider.md +++ b/content/docs/user-guide/components/reference/physx/collider.md @@ -8,7 +8,7 @@ toc: true The **PhysX Collider** component adds a PhysX collider to an entity so that the entity can be included in PhysX simulation. The collider can be defined by a mesh you create, automatically generated convex meshes, shapes that have been automatically fit to a decomposed mesh, or a simple shape primitive selected in the the PhysX Collider component. The PhysX Collider component can also define a trigger area or a force region. {{< note >}} -Add a [PhysX Static Rigid Body](/docs/user-guide/components/reference/physx/static-rigid-body/) component with a PhysX Collider component to create a *static* entity that will never move. Add a [PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) component to create a *simulated* or a *kinematic* entity. Simulated entities move in response to collisions and forces. Kinematic entities aren't affected by collisions or forces, but are driven by scripted movement. For information about the various PhysX collider types and how to process them, refer to [Process PhysX Collider Assets](/docs/learning-guide/tutorials/assets/physx-colliders/). +The PhysX Collider component attached to an entity by itself creates a *static* (non-moving) entity. Add a [PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) component with a PhysX Collider component to create a *dynamic* or a *kinematic* entity. Dynamic entities have simulated movement in response to collisions and forces. Kinematic entities aren't affected by collisions or forces, but are driven by scripted movement. For information about the various PhysX collider types and how to process them, refer to [Process PhysX Collider Assets](/docs/learning-guide/tutorials/assets/physx-colliders/). {{< /note >}} ## Provider @@ -93,7 +93,7 @@ There are three editing modes available in collider component mode. | Mode | Description | | - | - | -| **Resize** | Edits the collider dimensions. The manipulator displayed in the viewport in resize mode is dependent on the collider shape. For primitive colliders, the resize manipulator handles are represented as black squares. For **Physics Asset** colliders, the resize manipulator is represented as a scale manipulator which modifies the **Asset Scale**. | +| **Resize** | Scales the collider. The manipulator displayed in the viewport in resize mode is dependent on the collider shape. For primitive colliders, the resize manipulator handles are represented as black squares. For **Physics Asset** colliders, the resize manipulator is represented as a familiar scale manipulator. | | **Offset** | Translates the collider relative to its entity transform. | | **Rotation** | Rotates the collider around the component's **Offset**. | @@ -105,13 +105,13 @@ Sphere resize mode has one linear manipulator that controls the **Radius** prope ### Resize (Box Shape) -Box resize mode has six linear manipulators, one on each side of the box. The manipulators control the width, depth, and height aspects of the **Dimensions** property. By default, each face of the box can be separately edited. Hold **Shift** to edit opposite pairs of faces symmetrically. +Box resize mode has six linear manipulators, one on each side of the box. The manipulators control the width, depth, and height **Dimensions** property. ![PhysX Collider component mode box resize manipulator](/images/user-guide/components/reference/physx/physx-collider-resize-box.png) ### Resize (Capsule Shape) -Capsule resize mode has three linear manipulators. The manipulators at the top and bottom of the capsule control the **Height** property. By default, each end of the capsule can be separately edited. Hold **Shift** to edit both ends symmetrically. The manipulator on the side controls the **Radius** property. +Capsule resize mode has two linear manipulators. The manipulator at the top of the capsule controls the **Height** property. The manipulator on the side controls the **Radius** property. ![PhysX Collider component mode capsule resize manipulator](/images/user-guide/components/reference/physx/physx-collider-resize-capsule.png) diff --git a/content/docs/user-guide/components/reference/physx/fixed-joint.md b/content/docs/user-guide/components/reference/physx/fixed-joint.md index f41d523c4f8..82ff635b6f0 100644 --- a/content/docs/user-guide/components/reference/physx/fixed-joint.md +++ b/content/docs/user-guide/components/reference/physx/fixed-joint.md @@ -23,7 +23,7 @@ Specify the parent entity that will drive the joint. **Breakable** When enabled, the joint will break if sufficient force is applied. Enabling **Breakable** exposes the **Maximum Force** and **Maximum Torque** properties. -**PhysX Dynamic Rigid Body** components that have their **Compute Mass** property enabled might have very large mass values. If the entity containing the joint component or the leader entity have their **Compute Mass** property enabled, the **Maximum Force** and **Maximum Torque** properties might require very high values to resist breaking. +**PhysX Rigid Body** components that have their **Compute Mass** property enabled might have very large mass values. If the entity containing the joint component or the leader entity have their **Compute Mass** property enabled, the **Maximum Force** and **Maximum Torque** properties might require very high values to resist breaking. **Maximum Force** When **Breakable** is enabled, specify the maximum force the joint can sustain before breaking. Valid values range from **0.01** to **Infinity**. diff --git a/content/docs/user-guide/components/reference/physx/force-region.md b/content/docs/user-guide/components/reference/physx/force-region.md index de67dd04fb4..e3d5ef06858 100644 --- a/content/docs/user-guide/components/reference/physx/force-region.md +++ b/content/docs/user-guide/components/reference/physx/force-region.md @@ -163,7 +163,7 @@ You can create a force region so that force applies to another entity that enter ![Direction of the PhysX Force Region.](/images/user-guide/component/physx/force-region-component-local-force.png) -1. To collide an entity with the force region, create a dynamic entity named *Sphere* and attach the **PhysX Collider** and **PhysX Dynamic Rigid Body** components. These components enable the entity to interact with other PhysX entities. +1. To collide an entity with the force region, create a dynamic entity named *Sphere* and attach the **PhysX Collider** and **PhysX Rigid Body Physics** components. These components enable the entity to interact with other PhysX entities. 1. (Optional) Add a **Mesh** component and, for **Mesh asset**, select a mesh asset, such as a `primitive_sphere.cgf`. diff --git a/content/docs/user-guide/components/reference/physx/hinge-joint.md b/content/docs/user-guide/components/reference/physx/hinge-joint.md index 83133be0e93..09660a11248 100644 --- a/content/docs/user-guide/components/reference/physx/hinge-joint.md +++ b/content/docs/user-guide/components/reference/physx/hinge-joint.md @@ -23,7 +23,7 @@ Specify the parent entity that will drive the joint. **Breakable** When enabled, the joint will break if sufficient force is applied. Enabling **Breakable** exposes the **Maximum Force** and **Maximum Torque** properties. -**PhysX Dynamic Rigid Body** components that have their **Compute Mass** property enabled might have very large mass values. If the entity containing the joint component or the leader entity have their **Compute Mass** property enabled, the **Maximum Force** and **Maximum Torque** properties might require very high values to resist breaking. +**PhysX Rigid Body** components that have their **Compute Mass** property enabled might have very large mass values. If the entity containing the joint component or the leader entity have their **Compute Mass** property enabled, the **Maximum Force** and **Maximum Torque** properties might require very high values to resist breaking. **Maximum Force** When **Breakable** is enabled, specify the maximum force the joint can sustain before breaking. Valid values range from **0.01** to **Infinity**. diff --git a/content/docs/user-guide/components/reference/physx/rigid-body.md b/content/docs/user-guide/components/reference/physx/rigid-body.md index 1a9a5483e94..23833f319fa 100644 --- a/content/docs/user-guide/components/reference/physx/rigid-body.md +++ b/content/docs/user-guide/components/reference/physx/rigid-body.md @@ -1,18 +1,18 @@ --- -linkTitle: PhysX Dynamic Rigid Body -title: PhysX Dynamic Rigid Body Component -description: The PhysX Dynamic Rigid Body component creates a simulated or kinematic solid object that can move and collide with other PhysX entities. +linkTitle: PhysX Rigid Body +title: PhysX Rigid Body Component +description: The PhysX Rigid Body component creates a dynamic or kinematic solid object that can move and collide with other PhysX entities. toc: true --- -The **PhysX Dynamic Rigid Body** component makes an entity a *simulated* or *kinematic* solid object that can move and collide with other PhysX entities. The entity must also have at least one [PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/) or [PhysX Collider](/docs/user-guide/components/reference/physx/collider/) component that defines a collider for the entity. +The **PhysX Rigid Body** component makes an entity a *dynamic* or *kinematic* solid object that can move and collide with other PhysX entities. The entity must also have at least one [PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/) or [PhysX Collider](/docs/user-guide/components/reference/physx/collider/) component that defines a collider for the entity. -Simulated rigid bodies are fully driven by PhysX. Simulated rigid bodies move in response to collision events and forces and are not animated through motions or scripts. By default, simulated rigid bodies are affected by gravity, but gravity can be deactivated in the PhysX Dynamic Rigid Body component. +Dynamic rigid bodies are fully simulated by PhysX. Dynamic rigid bodies move in response to collision events and forces and are not animated through motions or scripts. By default, dynamic rigid bodies are affected by gravity, but gravity can be deactivated in the PhysX Rigid Body component. -Kinematic rigid bodies are not fully driven by PhysX. They have scripted animation and are not affected by forces or gravity. Doors, for example, often have scripted animation. If the door is a kinematic rigid body, the door can move through scripted animation and collide with other PhysX entities during simulation. Movement is created with the `SetKinematicTarget` method that you specify in a script. +Kinematic rigid bodies are not fully simulated by PhysX. They have scripted animation and are not affected by forces or gravity. Doors, for example, often have scripted animation. If the door is a kinematic rigid body, the door can move through scripted animation and collide with other PhysX entities during simulation. Movement is created with the `SetKinematicTarget` method that you specify in a script. {{< note >}} -You should always add the PhysX Dynamic Rigid Body component to the top level of an entity hierarchy. Adding the PhysX Dynamic Rigid Body component to a child entity can cause conflicts with the entity's world transform and result in undefined behavior. +You should always add the PhysX Rigid Body component to the top level of an entity hierarchy. Adding the PhysX Rigid Body component to a child entity can cause conflicts with the entity's world transform and result in undefined behavior. {{< /note >}} ## Provider @@ -21,19 +21,19 @@ You should always add the PhysX Dynamic Rigid Body component to the top level of ## Properties -![PhysX Dynamic Rigid Body component interface.](/images/user-guide/components/reference/physx/physx-rigid-body-ui-01.png) +![PhysX Rigid Body component interface.](/images/user-guide/components/reference/physx/physx-rigid-body-ui-01.png) | Property | Description | Value | Default | | - | - | - | - | -| **Type** | Determines how the movement/position of the rigid body is controlled. A simulated rigid body responds to collision events and forces, and its motion is simulated by PhysX. A kinematic rigid body is not affected by gravity or other forces and can be moved by script. | `Simulated`, `Kinematic` | `Simulated` | | **Initial linear velocity** | Sets the starting linear velocity (in meters per second) of the rigid body when the entity is activated. This creates movement in the direction of the linear velocity vector. | Vector3: -Infinity to Infinity | X: `0.0`, Y: `0.0`, Z: `0.0` | | **Initial angular velocity** | Sets the starting angular velocity (in radians per second) of the rigid body when the entity is activated. This creates rotation in the direction of the angular velocity vector. | Vector3: -Infinity to Infinity | X: `0.0`, Y: `0.0`, Z: `0.0` | | **Linear damping** | Sets the rate of decay over time for linear velocity even if no forces are acting on the rigid body. A non-zero value eventually stops the rigid body if no linear force is applied. Value must be non-negative. | Float: 0 to Infinity | `0.05` | | **Angular damping** | Sets the rate of decay over time for angular velocity even if no forces are acting on the rigid body. A non-zero value eventually stops the rigid body if no torque force is applied. Value must be non-negative. | Float: 0.0 to Infinity | `0.15` | | **Sleep threshold** | Sets the kinetic energy per unit mass below which the rigid body can go to sleep. Value must be non-negative. | Float: 0.0 to Infinity | `0.005` | -| **Start asleep** | If enabled, the PhysX Dynamic Rigid Body component is asleep when the entity is activated and wakes when a sufficient force is applied. | Boolean | `Disabled` | +| **Start asleep** | If enabled, the PhysX Rigid Body component is asleep when the entity is activated and wakes when a sufficient force is applied. | Boolean | `Disabled` | | **Interpolate motion** | If enabled, the resulting motion from the simulation is smoothed. Enable this property for objects that require smooth motion such as vehicles. | Boolean | `Disabled` | -| **Gravity enabled** | If enabled, the rigid body is affected by gravity. This only applies to simulated rigid bodies. | Boolean | `Enabled` | +| **Gravity enabled** | If enabled, the rigid body is affected by gravity. This only applies to dynamic rigid bodies. | Boolean | `Enabled` | +| **Kinematic** | If enabled, the rigid body is kinematic. A kinematic rigid body is not affected by gravity or other forces and can be moved by script. If disabled, the rigid body is dynamic. A dynamic rigid body responds to collision events and forces, and its motion is simulated by PhysX. | Boolean | `Disabled` | | **CCD enabled** | If enabled, continuous collision detection (CCD) is performed. This property is useful for high speed objects to ensure accurate collision detection. Activating this property reveals two additional properties, **Min advance coefficient** and **CCD Friction**. To use continuous collision detection, you must also activate **Continuous Collision Detection** in the **PhysX Configuration** window. For more information, refer to [PhysX Configuration](/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-global/#physx-configuration-global-world). | Boolean | `Disabled` | | **Min advance coefficient** | Fine-tune continuous collision detection. Lower values reduce clipping but can affect motion smoothness. | Float: 0.01 to 0.99 | `0.15` | | **CCD friction** | If enabled, friction is applied when CCD collisions are resolved. | Boolean | `Disabled` | @@ -44,7 +44,7 @@ You should always add the PhysX Dynamic Rigid Body component to the top level of | **Angular Axis - Lock X** | If enabled, forces won't create rotation on the X-axis of the rigid body. | Boolean | `Disabled` | | **Angular Axis - Lock Y** | If enabled, forces won't create rotation on the Y-axis of the rigid body. | Boolean | `Disabled` | | **Angular Axis - Lock Z** | If enabled, forces won't create rotation on the Z-axis of the rigid body. | Boolean | `Disabled` | -| **Mass** | If **Compute Mass** is disabled, a **Mass** value can be specified for the PhysX Dynamic Rigid Body in kilograms. | Float: 0.0 to Infinity | `1.0` | +| **Mass** | If **Compute Mass** is disabled, a **Mass** value can be specified for the PhysX rigid body in kilograms. | Float: 0.0 to Infinity | `1.0` | | **Compute COM** | If enabled, the center of mass is automatically computed for the rigid body. | Boolean | `Enabled` | | **COM offset** | If **Compute COM** is disabled, the center of mass can be specified as an offset. | Vector3: -Infinity to Infinity | X: `0.0`, Y: `0.0`, Z: `0.0` | | **Compute inertia** | If enabled, inertia is computed based on the mass and shape of the rigid body. | Boolean | `Enabled` | diff --git a/content/docs/user-guide/components/reference/physx/shape-collider.md b/content/docs/user-guide/components/reference/physx/shape-collider.md index c7709d5695b..b030727c0bd 100644 --- a/content/docs/user-guide/components/reference/physx/shape-collider.md +++ b/content/docs/user-guide/components/reference/physx/shape-collider.md @@ -8,7 +8,7 @@ toc: true The **PhysX Shape Collider** component adds PhysX collider based on a **Shape** component so that the entity can be included in PhysX simulation. The PhysX Shape Collider component can also define a trigger area or a force region. {{< note >}} -Add a [PhysX Static Rigid Body](/docs/user-guide/components/reference/physx/static-rigid-body/) component with a PhysX Shape Collider component to create a *static* entity that will never move. Add a [PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) component to create a *simulated* or a *kinematic* entity. Simulated entities move in response to collisions and forces. Kinematic entities aren't affected by collisions or forces, but are driven by scripted movement. +The PhysX Shape Collider component attached to an entity by itself creates a *static* (non-moving) entity. Add a [PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) component with a PhysX Shape Collider component to create a *dynamic* or a *kinematic* entity. Dynamic colliders have simulated movement in response to collisions and forces. Kinematic colliders aren't affected by collisions or forces, but are driven by scripted movement. {{< /note >}} ## Provider diff --git a/content/docs/user-guide/components/reference/physx/static-rigid-body.md b/content/docs/user-guide/components/reference/physx/static-rigid-body.md deleted file mode 100644 index 135b1546bc6..00000000000 --- a/content/docs/user-guide/components/reference/physx/static-rigid-body.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -linkTitle: PhysX Static Rigid Body -title: PhysX Static Rigid Body Component -description: The PhysX Static Rigid Body component creates a static solid object that cannot move and collides with other PhysX entities. -toc: true ---- - -The **PhysX Static Rigid Body** component makes an entity a static solid object that cannot move. It can collide with other PhysX entities. The entity must also have at least one [PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/) or [PhysX Collider](/docs/user-guide/components/reference/physx/collider/) component that defines a collider for the entity. - -## Provider - -[PhysX Gem](/docs/user-guide/gems/reference/physics/nvidia/physx/) - -## Properties - -![PhysX Static Rigid Body component interface.](/images/user-guide/components/reference/physx/physx-static-rigid-body-ui-01.png) - diff --git a/content/docs/user-guide/components/reference/shape/axis-aligned-box-shape.md b/content/docs/user-guide/components/reference/shape/axis-aligned-box-shape.md index 807a546791a..6c7b965c66e 100644 --- a/content/docs/user-guide/components/reference/shape/axis-aligned-box-shape.md +++ b/content/docs/user-guide/components/reference/shape/axis-aligned-box-shape.md @@ -22,16 +22,11 @@ The **Axis Aligned Box Shape** component creates a transparent box that is alway | **Filled** | Enable to display the shape as filled. Disable to display the shape as a wireframe. | Boolean | `Enabled` | | **Shape Color** | The color of the shape. | Eight bits per channel color: 0-255 | `255,255,199` | | **Dimensions** | The size of the shape in the X, Y and Z dimensions of local space. | Vector3: -Infinity to Infinity | X:`1.0`, Y:`1.0`, Z:`1.0` | -| **Translation Offset** | Translation offset of the shape relative to its entity. | Vector3: -Infinity to Infinity | X:`0.0`, Y:`0.0`, Z:`0.0` | | **Edit** | Choose the **Edit** button to enter Edit mode. In Edit mode, you can modify the dimensions of the shape in the viewport using the methods outlined in [Edit mode actions](#edit-mode-actions) below. While in Edit mode, the Edit menu in the menu bar displays available actions and hotkeys. To exit Edit mode, choose **Done** in the component interface. | | | ## Edit mode actions -The edit mode provides two sub-modes. -| Mode | Icon | Description -| - | - | - | -| **Dimensions** | ![Shape component mode dimensions submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg) | **Left-click** and drag the black handles on the sides of the Axis Aligned Box Shape to resize the box in its local X, Y, and Z dimensions. By default, each face of the box can be separately edited. Hold **Shift** to edit opposite pairs of faces symmetrically. | -| **Translation Offset** | ![Shape component mode translation offset submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg) | **Left-click** and drag the linear or planar manipulators to edit the **Translation Offset**. | +* **Left-click** and drag the black handles on the sides of the Axis Aligned Box Shape to resize the box in its local X, Y, and Z dimensions. ## BoxShapeComponentRequestsBus diff --git a/content/docs/user-guide/components/reference/shape/box-shape.md b/content/docs/user-guide/components/reference/shape/box-shape.md index 8debba9dad7..4ddd280055b 100644 --- a/content/docs/user-guide/components/reference/shape/box-shape.md +++ b/content/docs/user-guide/components/reference/shape/box-shape.md @@ -24,16 +24,11 @@ The **Box Shape** component creates transparent box. The dimensions of the box c | **Filled** | Enable to display the shape as filled. Disable to display the shape as a wireframe. | Boolean | `Enabled` | | **Shape Color** | The color of the shape. | Eight bits per channel color: 0-255 | `255,255,199` | | **Dimensions** | The size of the shape in the X, Y and Z dimensions of local space. | Vector3: -Infinity to Infinity | X:`1.0`, Y:`1.0`, Z:`1.0` | -| **Translation Offset** | Translation offset of the shape relative to its entity. | Vector3: -Infinity to Infinity | X:`0.0`, Y:`0.0`, Z:`0.0` | | **Edit** | Choose the **Edit** button to enter Edit mode. In Edit mode, you can modify the dimensions of the shape in the viewport using the methods outlined in [Edit mode actions](#edit-mode-actions) below. While in Edit mode, the Edit menu in the menu bar displays available actions and hotkeys. To exit Edit mode, choose **Done** in the component interface. | | | ## Edit mode actions -The edit mode provides two sub-modes. -| Mode | Icon | Description -| - | - | - | -| **Dimensions** | ![Shape component mode dimensions submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg) | **Left-click** and drag the black handles on the sides of the Box Shape to resize the box in its local X, Y, and Z dimensions. By default, each face of the box can be separately edited. Hold **Shift** to edit opposite pairs of faces symmetrically. | -| **Translation Offset** | ![Shape component mode translation offset submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg) | **Left-click** and drag the linear or planar manipulators to edit the **Translation Offset**. | +* **Left-click** and drag the black handles on the sides of the Box Shape to resize the box in its local X, Y, and Z dimensions. ## BoxShapeComponentRequestsBus diff --git a/content/docs/user-guide/components/reference/shape/capsule-shape.md b/content/docs/user-guide/components/reference/shape/capsule-shape.md index 26ecd01bd91..5f1375045fd 100644 --- a/content/docs/user-guide/components/reference/shape/capsule-shape.md +++ b/content/docs/user-guide/components/reference/shape/capsule-shape.md @@ -25,16 +25,6 @@ The **Capsule Shape** component creates a transparent capsule that's oriented on | **Shape Color** | The color of the shape. | Eight bits per channel color: 0-255 | `255,255,199` | | **Height** | The height of the shape in meters. The height value must be at least twice the value of **Radius**. | 0.0 to Infinity | `1.0` | | **Radius** | The radius of the shape in meters. The radius value must be no more than half the value of **Height**. | 0.0 to Infinity | `0.25` | -| **Translation Offset** | Translation offset of the shape relative to its entity. | Vector3: -Infinity to Infinity | X:`0.0`, Y:`0.0`, Z:`0.0` | -| **Edit** | Choose the **Edit** button to enter Edit mode. In Edit mode, you can modify the dimensions of the shape in the viewport using the methods outlined in [Edit mode actions](#edit-mode-actions) below. While in Edit mode, the Edit menu in the menu bar displays available actions and hotkeys. To exit Edit mode, choose **Done** in the component interface. | | | - -## Edit mode actions - -The edit mode provides two sub-modes. -| Mode | Icon | Description -| - | - | - | -| **Dimensions** | ![Shape component mode dimensions submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg) | **Left-click** and drag the black handles on the ends of the Capsule Shape to edit the **Height**. By default, each end of the capsule can be separately edited. Hold **Shift** to edit both ends symmetrically. **Left-click** and drag the black handle situated halfway along the Capsule Shape to edit the **Radius**. | -| **Translation Offset** | ![Shape component mode translation offset submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg) | **Left-click** and drag the linear or planar manipulators to edit the **Translation Offset**. | ## CapsuleShapeComponentRequestsBus diff --git a/content/docs/user-guide/components/reference/shape/sphere-shape.md b/content/docs/user-guide/components/reference/shape/sphere-shape.md index ee3743a310c..c1990ecc85a 100644 --- a/content/docs/user-guide/components/reference/shape/sphere-shape.md +++ b/content/docs/user-guide/components/reference/shape/sphere-shape.md @@ -24,16 +24,6 @@ The **Sphere Shape** component creates a transparent sphere. The dimensions of t | **Filled** | Enable to display the shape as filled. Disable to display the shape as a wireframe. | Boolean | `Enabled` | | **Shape Color** | The color of the shape. | Eight bits per channel color: 0-255 | `255,255,199` | | **Radius** | The radius of the shape in meters. | 0.0 to Infinity | `0.5` | -| **Translation Offset** | Translation offset of the shape relative to its entity. | Vector3: -Infinity to Infinity | X:`0.0`, Y:`0.0`, Z:`0.0` | -| **Edit** | Choose the **Edit** button to enter Edit mode. In Edit mode, you can modify the dimensions of the shape in the viewport using the methods outlined in [Edit mode actions](#edit-mode-actions) below. While in Edit mode, the Edit menu in the menu bar displays available actions and hotkeys. To exit Edit mode, choose **Done** in the component interface. | | | - -## Edit mode actions - -The edit mode provides two sub-modes. -| Mode | Icon | Description -| - | - | - | -| **Dimensions** | ![Shape component mode dimensions submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg) | **Left-click** and drag the black handle on the surface of the Sphere Shape to edit the **Radius**. | -| **Translation Offset** | ![Shape component mode translation offset submode icon](/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg) | **Left-click** and drag the linear or planar manipulators to edit the **Translation Offset**. | ## SphereShapeComponentRequestsBus diff --git a/content/docs/user-guide/components/reference/terrain/terrain-macro-material.md b/content/docs/user-guide/components/reference/terrain/terrain-macro-material.md index 82ebf7366fb..71c665e0d70 100644 --- a/content/docs/user-guide/components/reference/terrain/terrain-macro-material.md +++ b/content/docs/user-guide/components/reference/terrain/terrain-macro-material.md @@ -31,7 +31,6 @@ The **Terrain Macro Material** also depends on at least one **Terrain Layer Spaw | **Normal Flip Y** | Set to true to flip the normals about Y. | Boolean | `False` | | **Normal Factor** | Adjusts the strength of the normal values. | Float | `1.0` | | **Priority** | The priority of the macro material data relative to other **Terrain Macro Material** components. Larger values are higher in priority. | Integer | `0` | -| **Save Mode** | Specify how to choose the path for saving the image after any image edits. | `Save As...`, `Auto Save`, `Auto Save With Incrementing Names` | `Auto Save` | ## Usage @@ -45,23 +44,6 @@ The **Terrain Macro Material** can exist on the same entity as a **Terrain Layer If two **Terrain Macro Material** volumes overlap, the **Priority** field dictates which macro material data will be used. Larger values are higher in priority. -### Creating a new image - -To create a new image, press the **Create New Image...** button. You will be prompted for an image width and height in pixels, then for a location to save the image. If the image is saved into a [source asset directory](/docs/user-guide/assets/pipeline/scan-directories/) that is used by the project, the Terrain Macro Material will automatically populate the **Color Texture** field with the saved image. - -## Editing an image - -To edit an existing color texture, press the **Edit** button on the Terrain Macro Material component or select the Terrain Macro Material component's icon in the **Component Switcher** in the viewport. This will enter Paint Brush mode. Refer to the [Paint Brush](/docs/user-guide/components/reference/paintbrush/paintbrush) documentation for more details on how to use the Paint Brush. - -After editing is complete, end the Paint Brush mode by pressing **Esc**, pressing the **Done** button on the Terrain Macro Material component, or by selecting a different component's icon in the **Component Switcher** in the viewport. At this point, the image changes will be saved, re-processed by the Asset Processor, and reloaded when processing is complete. - -The **Save Mode** determines where the image will be saved. -| Save Mode | Description | -| - | - | -| `Save As...` | Prompts for a save location every time the image is saved. | -| `Auto Save` | Prompts for a save location the first time the image is saved after loading the level, but on every subsequent save, it automatically overwrites the image in that location. | -| `Auto Save With Incrementing Names` | Automatically saves the image with an incrementing number at the end of the name and only prompts for a save location if there is already an existing image with that name.

For example, if the initially-selected image is `image.tif`, this will save it as `image.0000.tif`, then as `image.0001.tif`, then as `image.0002.tif`, etc. | - ## MacroMaterialData This structure is used when sending out information about the macro material settings. @@ -78,17 +60,15 @@ This structure is used when sending out information about the macro material set ## TerrainMacroMaterialRequestBus -The `TerrainMacroMaterialRequestBus` is an internal system bus that is only intended for communication between the terrain rendering and editing systems and the Terrain Macro Material component. Other systems generally do not need to use this EBus since nothing outside the terrain system should need any information from the individual component instances. However, if a use case arises, the following request functions on the `TerrainMacroMaterialRequestBus` EBus interface can be used to query individual Terrain Macro Material components. +The `TerrainMacroMaterialRequestBus` is an internal system bus that is only intended for communication between the terrain renderer and the **Terrain Macro Material** component. Other systems generally do not need to use this EBus since nothing outside the terrain system should need any information from the individual component instances. However, if a use case arises, the following request functions on the `TerrainMacroMaterialRequestBus` EBus interface can be used to query individual **Terrain Macro Material** components. | Request Name | Description | Parameter | Return | Scriptable | |-|-|-|-|-| | `GetTerrainMacroMaterialData` | Returns the `MacroMaterialData` structure assigned to the **Terrain Macro Material** component. | None | [MacroMaterialData](#macromaterialdata) | Yes | -| `GetTerrainMacroColorImageSize` | Returns the height/width/depth of the color texture in pixels. | None | RHI::Size | No | -| `GetMacroColorImagePixelsPerMeter` | Returns the number of color texture pixels per meter in world space. | None | Vector2 | No | ## TerrainMacroMaterialNotificationBus -The `TerrainMacroMaterialNotificationBus` is an internal EBus used by the terrain rendering and editing systems to monitor changes to Terrain Macro Materials. Other systems generally do not need to use this EBus since nothing outside the terrain system should need any information about individual Terrain Macro Materials. However, if a use case arises, the following notification functions on the `TerrainMacroMaterialNotificationBus` EBus interface can be used to monitor Terrain Macro Material changes. +The `TerrainMacroMaterialNotificationBus` is also an internal system bus that is only intended for communication between the terrain renderer and the **Terrain Macro Material** component. The `TerrainMacroMaterialNotificationBus` EBus notifies listeners through the following notification functions. | Notification Name | Description | Parameter | Return | Scriptable | |-|-|-|-|-| @@ -96,27 +76,3 @@ The `TerrainMacroMaterialNotificationBus` is an internal EBus used by the terrai | `OnTerrainMacroMaterialChanged` | Notifies listeners when a macro material has been changed. | None | EntityId; [MacroMaterialData](#macromaterialdata) | Yes | | `OnTerrainMacroMaterialDestroyed` | Notifies listeners when a macro material is removed. | None | EntityId | Yes | | `OnTerrainMacroMaterialRegionChanged` | Notifies listeners when the bounding area of the macro material changes. | None | EntityId; Old Region: Aabb; New Region: Aabb | Yes | - -## TerrainMacroColorModificationBus - -The `TerrainMacroColorModificationBus` is an internal EBus used by the terrain editing systems to modify the Terrain Macro Material color texture. This is a lower-level API, most systems should use the higher-level [Paint Brush](/docs/user-guide/components/reference/paintbrush/paintbrush) painting API to modify the texture. - -| Notification Name | Description | Parameter | Return | Scriptable | -|-|-|-|-|-| -| `StartMacroColorImageModification` | Start an image modification session. | None | None | No | -| `EndMacroColorImageModification` | Finish an image modification session. | None | None | No | -| `GetMacroColorPixelIndicesForPositions` | Given a list of world positions, return a list of pixel indices into the image. | positions: The list of positions to query, outIndices: The output list of pixel indices | None | No | -| `GetMacroColorPixelValuesByPosition` | Get the image pixel values at a list of positions. | positions: The list of positions to query, outValues: The output list of pixel colors | None | No | -| `GetMacroColorPixelValuesByPixelIndex` | Get the image pixel values at a list of pixel indices. | indices: The list of pixel indices to query, outValues: The output list of pixel colors | None | No | -| `StartMacroColorPixelModifications` | Start a series of pixel modifications. | None | None | No | -| `EndMacroColorPixelModifications` | Finish a series of pixel modifications. | None | None | No | -| `SetMacroColorPixelValuesByPixelIndex` | Set the image pixel values at a list of pixel indices. | indices: The list of pixel indices to set the values for, outValues: The list of pixel colors to set | None | No | - -## TerrainMacroColorModificationNotificationBus - -The `TerrainMacroColorModificationNotificationBus` is an internal EBus used by the terrain editing systems to modify the Terrain Macro Material color texture. This is a lower-level API, most systems should use the higher-level [Paint Brush](/docs/user-guide/components/reference/paintbrush/paintbrush) painting API to modify the texture. - -| Notification Name | Description | Parameter | Return | Scriptable | -|-|-|-|-|-| -| `OnTerrainMacroColorBrushStrokeBegin` | Notify any listeners that a brush stroke has started on the macro color image. | None | None | No | -| `OnTerrainMacroColorBrushStrokeEnd` | Notify any listeners that a brush stroke has ended on the macro color image. | changedDataBuffer: A pointer to the ImageTileBuffer containing the changed data, dirtyRegion: The AABB defining the world space region affected by the brush stroke | None | No | diff --git a/content/docs/user-guide/gems/reference/_index.md b/content/docs/user-guide/gems/reference/_index.md index d82830a2c42..ddb4d5cd004 100644 --- a/content/docs/user-guide/gems/reference/_index.md +++ b/content/docs/user-guide/gems/reference/_index.md @@ -151,12 +151,6 @@ toc: true | [Starting Point Camera](./rendering/starting-point-camera) | The Starting Point Camera Gem provides the behaviors used with the Camera Framework Gem to define a camera rig. | | [Video Playback Framework](./rendering/video-playback-framework) | The Video Playback Framework Gem provides the interface to play back video. | -## Robotics - -| Gem | Description | -| - | - | -| [ROS 2](./ros2/) | The ROS 2 Gem provides integration with the [Robot Operating System (ROS) 2](https://docs.ros.org/en/rolling/index.html) library and enables design of simulation of robotics systems. | - ## Script | Gem | Description | diff --git a/content/docs/user-guide/gems/reference/aws/_index.md b/content/docs/user-guide/gems/reference/aws/_index.md index ef8074b7408..cdb239851b7 100644 --- a/content/docs/user-guide/gems/reference/aws/_index.md +++ b/content/docs/user-guide/gems/reference/aws/_index.md @@ -18,7 +18,7 @@ When you create a resource, it exists in the cloud, but you can use it and manag ## Resource groups -To create an AWS-connected feature, such as a metrics reporting pipeline, AWS Gems use the [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) (AWS CDK) to model and deploy resources. Each AWS Gem contains an AWS CDK application that defines the AWS resources that the feature requires. Because the AWS CDK applications model resources as code, you can extend or combine AWS CDK constructs to create powerful backend services. +To create an AWS-connected feature, such as a metrics reporting pipeline, AWS Gems use the [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) (AWS CDK) to model and deploy resources. Each AWS Gem contains an AWS CDK application that defines the AWS resources that the feature requires. Because the AWS CDK applications model resources as code, you can extend or combine AWS CDK constructs to create powerful backend services. ## AWS accounts diff --git a/content/docs/user-guide/gems/reference/aws/aws-client-auth/authentication-providers.md b/content/docs/user-guide/gems/reference/aws/aws-client-auth/authentication-providers.md index cf60dfe5e17..18e98bc2626 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-client-auth/authentication-providers.md +++ b/content/docs/user-guide/gems/reference/aws/aws-client-auth/authentication-providers.md @@ -28,7 +28,7 @@ Use the app ID that you obtained when you enabled your account as the value for If you are using Google, you must also use the app secret you were given for your account as the value for `ClientSecret`. -When deploying the optional AWS Cloud Development Kit (AWS CDK) application, be sure to use the AWS CDK constant that corresponds to your selected provider. Refer to the AWS CDK application deployment step in [Setting Up Client Auth](./setup/) for details. +When deploying the CDK application, be sure to use the CDK constant that corresponds to your selected provider. Refer to the CDK application deployment step in [Setting Up Client Auth](./setup/) for details. These settings and those in the resource mapping file are read once during activation of `AWSClientAuthSystemComponent`. @@ -73,11 +73,11 @@ To use a custom authentication provider with the AWS Client Auth Gem, you must h 1. Update the **Amazon Cognito identity pool** to support a custom login provider. - a. In the AWS CDK application, in the file `constants.py`, add an entry for the App Client ID for your authentication service. + a. In the CDK application, in the file `constants.py`, add an entry for the App Client ID for your authentication service. b. Add the same App Client ID to `supported_login_providers` in `cognito_identity_pool.py`. - c. Synth and deploy the AWS Client Auth stack. For help with these commands, see [Deploying the CDK Application](/docs/user-guide/gems/reference/aws/aws-core/cdk-application/) in the AWSCore Gem documentation. + c. Synth and deploy the AWS Client Auth stack. For help with these commands, see [Deploying the CDK Application](/docs/user-guide/gems/reference/aws/aws-core/cdk-application/) in the AWS Core Gem documentation. 1. Implement your C++ custom provider. @@ -87,6 +87,6 @@ To use a custom authentication provider with the AWS Client Auth Gem, you must h c. In the `AuthenticationProviderManager::CreateAuthenticationProviderObject` method, add support for the above. - d. Authorization will work if the Amazon Cognito setting above is set up correctly. + d. Authorization will work if the Amazon Cognito setting above is setup correctly. Refer to the [AWS Client Auth](/docs/api/gems/awsclientauth) API Reference for more information. diff --git a/content/docs/user-guide/gems/reference/aws/aws-client-auth/setup.md b/content/docs/user-guide/gems/reference/aws/aws-client-auth/setup.md index 0ee6d645d69..a1f906c1df2 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-client-auth/setup.md +++ b/content/docs/user-guide/gems/reference/aws/aws-client-auth/setup.md @@ -29,7 +29,7 @@ Complete the following set up steps to use the AWS Client Auth Gem in your proje ### 1. Enable the AWS Client Auth Gem -If you haven't already added and built the **AWS Client Auth Gem** into your project, follow the instructions to [Add a Gem to a Project](/docs/user-guide/project-config/add-remove-gems/). +If you haven't already added and built the **AWS Client Auth Gem** in your project, do so now using the instructions in [Enabling the AWS Client Auth Gem](./). ### 2. Configure authentication providers @@ -45,7 +45,7 @@ When setting constants for deploy, the AWS Client Auth Gem supports the followin **`LOGIN_WITH_AMAZON_APP_CLIENT_ID`**: **Login with Amazon** (LWA) app client ID to enable LWA-authenticated authorization in Amazon Cognito identity pool. -You can use [deployment scripts](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) to set these environment variables. +You can use [deployment scripts](https://docs.aws.amazon.com/cdk/latest/guide/environments.html) to set these environment variables. After a successful deployment, the following resources are provisioned. diff --git a/content/docs/user-guide/gems/reference/aws/aws-core/_index.md b/content/docs/user-guide/gems/reference/aws/aws-core/_index.md index 6624abc2da4..ed66223ae7b 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-core/_index.md +++ b/content/docs/user-guide/gems/reference/aws/aws-core/_index.md @@ -22,7 +22,7 @@ The AWS Core Gem has the following key features: * Provides a common client configuration ready for O3DE. Refer to [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) for details. * Handles HTTPS calls to AWS services, including responses and errors. -* Lets you use AWS credentials, including existing AWS Command Line Interface (AWS CLI) profiles and roles, along with console variables (CVARs) for easier configuration. Refer to [Configuring AWS Credentials](./configuring-credentials/) for details. +* Lets you use AWS credentials, including existing AWS Command Line Interface (AWS CLI) profiles and roles, along with console variables (cvars) for easier configuration. Refer to [Configuring AWS Credentials](./configuring-credentials/) for details. * Supports AWS resource sharing, helping you identify AWS resources that you can use from O3DE. * Provides utility functions that make it easier to work with AWS services and resources. @@ -32,6 +32,6 @@ To enable the AWS Core Gem, do the following: 1. Use **O3DE Project Manager** or the command line to add the AWS Core Gem to your project. -2. Build your project using Project Manager, Visual Studio, or CMake. +1. Build your project using Project Manager, Visual Studio, or CMake. -3. To configure your environment and project to use AWS services, follow the instructions in [Getting Started with AWS Gems](./getting-started/). +1. To configure your environment and project to use AWS services, follow the instructions in [Getting Started with AWS Gems](./getting-started/). diff --git a/content/docs/user-guide/gems/reference/aws/aws-core/cdk-application.md b/content/docs/user-guide/gems/reference/aws/aws-core/cdk-application.md index e78032560b7..e2579fd563d 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-core/cdk-application.md +++ b/content/docs/user-guide/gems/reference/aws/aws-core/cdk-application.md @@ -1,82 +1,76 @@ --- -title: Deploying the AWS CDK Application +title: Deploying the CDK Application description: Learn how to deploy the optional Python AWS CDK application in Open 3D Engine. weight: 200 toc: true --- -The [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/v2/guide/home.html) (AWS CDK) is a software development framework from AWS for defining cloud infrastructure for your project and provisioning it through **AWS CloudFormation**. +The [Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/home.html) (CDK) is a software development framework from AWS for defining cloud infrastructure for your project and provisioning it through **AWS CloudFormation**. -{{< note >}} -The AWS Gems have been updated to support AWS CDK v2,the new long term AWS CDK version. AWS CDK v1 entered maintenance on June 1, 2022, and will now receive only critical bug fixes and security patches. +The AWS Core Gem includes an optional Python CDK application that provides two stacks: -For those still using the AWS CDK v1, a legacy snapshot of the sample applications are available in a `cdkv1` folder inside each Gem. See the [AWS CDK Migration Guide](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html) for advice about how to migrate legacy AWS CDK applications to the AWS CDK v2. -{{< /note >}} - -The AWS Core Gem includes an optional Python AWS CDK application that provides two stacks: - -1. A core stack to use as the basis for a project's AWS CDK application. -2. An example stack with example resources that can be connected to **ScriptBehavior** samples in Core. +1. A core stack to use as the basis for a project's CDK application. +1. An example stack with example resources that can be connected to **ScriptBehavior** samples in Core. The Python project is set up like a standard Python project. The initialization process uses virtual environments, created with `virtualenv` and stored under the `.venv` directory. To create the virtual environment, you must have a `python3` executable (or `python` for Windows) in your path with access to the `venv` package. If the automatic creation of the `virtualenv` fails, you can create the `virtualenv` manually. - ## Prerequisites * AWS credentials configured. Refer to the steps shown in [Configuring AWS Credentials](./configuring-credentials/). -* [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install) installed. +* [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install) (CDK) installed. * O3DE project built. -## Working with the AWS CDK application +## Working with the CDK application -There are a few one-time set up steps to prepare for your first AWS CDK deployment. The following commands should all be run from the `cdk` directory of the Gem you're working with. +There are a few one-time set up steps to prepare for your first CDK deployment. The following commands should all be run from the `cdk` directory of the Gem you're working with. ### 1. Set up Python environment _For the latest instructions, refer to the `README.MD` located in `\Gems\AWSCore\cdk`._ -1. Open a command prompt to the `cdk` directory of the Gem you're working with. +Open a command prompt to the `cdk` directory of the Gem you're working with. - ```cmd - cd \Gems\\cdk - ``` +```cmd +cd \Gems\\cdk +``` + +* Example when deploying the CDK application for AWS Core: - For example when deploying the AWS CDK application for AWS Core Gem ```cmd cd \Gems\AWSCore\cdk - ``` + ``` -2. Create a `virtualenv`. +Create a `virtualenv`. - ```cmd - # Windows - python -m venv .venv +```cmd +# Windows +python -m venv .venv - # Mac or Linux - python3 -m venv .venv - ``` +# Mac or Linux +python3 -m venv .venv +``` -3. Activate your `virtualenv`. +Activate your `virtualenv`. - ```cmd - # Windows - .venv\Scripts\activate.bat +```cmd +# Windows +.venv\Scripts\activate.bat - # Mac or Linux - source .venv/bin/activate - ``` +# Mac or Linux +source .venv/bin/activate +``` -4. Install the required dependencies. +Install the required dependencies. - ```cmd - # Windows - pip install -r requirements.txt +```cmd +# Windows +pip install -r requirements.txt - # Mac or Linux - pip3 install -r requirements.txt - ``` +# Mac or Linux +pip3 install -r requirements.txt +``` ### 2. Set environment variables or accept defaults @@ -86,13 +80,13 @@ _For the latest instructions, refer to the `README.MD` located in ` | `O3DE_AWS_DEPLOY_ACCOUNT` | The account to deploy stacks into, will default to CDK_DEFAULT_ACCOUNT. | | `O3DE_AWS_PROJECT_NAME` | The name of the O3DE project that stacks should be deployed for, will default to AWS-PROJECT. | -See [Environments](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) in the AWS CDK Developer Guide for more information including how to pass parameters to use for environment variables. +See [Environments](https://docs.aws.amazon.com/cdk/latest/guide/environments.html) in the AWS CDK Developer Guide for more information including how to pass parameters to use for environment variables. ### 3. Bootstrap the environment -An AWS environment is a combination of an AWS account and region and must be bootstrapped to provision common AWS CDK resources used for deployment. This only needs to happen once. +The AWS environment needs to be bootstrapped because this CDK application uses assets in a local directory that contains handler code for the AWS Lambda functions. -Use the AWS CDK `bootstrap` command to bootstrap one or more AWS environments. +Use the CDK `bootstrap` command to bootstrap one or more AWS environments. ```cmd cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 aws://ACCOUNT-NUMBER-2/REGION-2 ... @@ -104,38 +98,38 @@ For example: cdk bootstrap aws://123456789012/us-east-1 ``` -For more information about the bootstrap provisioning process, see the [Bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) section of the AWS CDK Developer Guide. +See [Bootstrapping](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) in the AWS CDK Developer Guide for more information about the bootstrap provisioning process. ### 4. Synthesize the project -At this point you can now synthesize the AWS CloudFormation template. Use the AWS CDK `synth` command from the `cdk` directory of the Gem whose application you are deploying. +At this point you can now synthesize the AWS CloudFormation template. Use the CDK `synth` command from the `cdk` directory of the Gem whose application you are deploying. ```cmd cdk synth ``` -To add additional dependencies, such as other AWS CDK libraries, just add them to your `requirements.txt` file and rerun the `pip install -r requirements.txt` command. +To add additional dependencies, such as other CDK libraries, just add them to your `requirements.txt` file and rerun the `pip install -r requirements.txt` command. ### 5. Deploy the project -To deploy the AWS CDK application, use the `deploy` command from the `cdk` directory of the Gem whose application you are deploying. +To deploy the CDK application, use the CDK `deploy` command from the `cdk` directory of the Gem whose application you are deploying. ```cmd cdk deploy ``` -The `deploy` command displays progress information as your stack is deployed. +The deploy command displays progress information as your stack is deployed. ## Useful commands -| Command | Description | -| --- |-------------------------------------------------------| -| `cdk ls` | List all stacks in the app. | -| `cdk synth` | Emits the synthesized AWS CloudFormation template. | +| Command | Description | +| --- | --- | +| `cdk ls` | List all stacks in the app. +| `cdk synth` | Emits the synthesized CloudFormation template. | | `cdk deploy` | Deploy this stack to your default AWS account/region. | -| `cdk diff` | Compare deployed stack with current state. | -| `cdk docs` | Open AWS CDK documentation. | +| `cdk diff` | Compare deployed stack with current state. | +| `cdk docs` | Open CDK documentation. | ## Troubleshooting -For help troubleshooting, see [Troubleshooting Common AWS CDK Issues](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) in the AWS CDK Developer Guide. +For help troubleshooting, see [Troubleshooting Common AWS CDK Issues](https://docs.aws.amazon.com/cdk/latest/guide/troubleshooting.html) in the AWS CDK Developer Guide. diff --git a/content/docs/user-guide/gems/reference/aws/aws-core/configuring-credentials.md b/content/docs/user-guide/gems/reference/aws/aws-core/configuring-credentials.md index d8cc675db87..b7d010fb162 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-core/configuring-credentials.md +++ b/content/docs/user-guide/gems/reference/aws/aws-core/configuring-credentials.md @@ -144,7 +144,7 @@ We recommend that you adhere to the following guidelines: ### Creating IAM user groups To make managing permissions easier, we recommend that you create [IAM user groups](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html). User groups let you specify permissions for multiple users at a time, which can make it easier to manage the permissions for groups of users. -Create user groups using the AWS Console, the AWS CLI, AWS CloudFormation templates or using the AWS Cloud Development Kit (AWS CDK). We recommend you create at least two user groups to work with AWS in O3DE: +Create user groups using the AWS Console, the AWS CLI, or the CloudFormation/CDK. We recommend you create at least two user groups to work with AWS in O3DE: * **Admins** - These are the administrators who own and manage AWS resources. Typically, they will perform updates and manage key resources. * **Users** - These are the users who can take action on the resources, as part of normal gameplay or a simulation. @@ -165,9 +165,9 @@ aws iam create-group --group-name MyUserGroup ``` #### To create user groups using the AWS CDK examples -The AWS CDK stacks defined in the AWS Core Gem will autogenerate sample `Admins` and `Users` user groups for you. By default, these groups are named ```O3DE-AWS-PROJECT-Admins``` and ```O3DE-AWS-PROJECT-Users```. +The CDK stacks defined in the AWSCore Gem will autogenerate sample `Admins` and `Users` user groups for you. By default, these groups are named ```O3DE-AWS-PROJECT-Admins``` and ```O3DE-AWS-PROJECT-Users```. -See the [AWS CDK setup instructions](cdk-application) for more details. +See the [CDK setup instructions](cdk-application) for more details. ### Adding users to a user group You can add users to IAM User Groups using either the AWS Console or the AWS CLI. See [Adding and removing users in an IAM user group ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_add-remove-users.html) for full details. @@ -179,12 +179,12 @@ aws iam add-user-to-group --group-name MyGroup --user-name MyNewUser ``` ### Attaching permissions to a user group -You can attach IAM policies to a user group to control the permissions they have access to. This can be done using either the AWS Console, the AWS CLI, AWS CloudFormation template or with the AWS CDK. See [Attaching a policy to an IAM user group ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_attach-policy.html) to attach permissions using the AWS Console or AWS CLI. +You can attach IAM policies to a user group to control the permissions they have access to. This can be done using either the AWS Console, the AWS CLI, or the CloudFormation/CDK. See [Attaching a policy to an IAM user group ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_attach-policy.html) to attach permissions using the AWS Console or AWS CLI. -#### Working with O3DE AWS CDK examples +#### Working with O3DE CDK examples If you deploy both the Core and example stack from the AWS Core Gem you can see examples of user permissions that were automatically generated by the ```generate_user_policy``` and ```generate_admin_policy``` functions. The user permissions are automatically attached to the user groups by a call to ```__grant_access```. -See the AWS CDK [Permissions](https://docs.aws.amazon.com/cdk/v2/guide/permissions.html) documentation for more details. +See the CDK [Permissions](https://docs.aws.amazon.com/cdk/latest/guide/permissions.html) documentation for more details. The AWS feature gems, such as AWS Metrics Gem, during deployment automatically create managed policies for users and admins that can then be attached manually to the appropriate user group. @@ -227,45 +227,6 @@ To set up a team, repeat the instructions for individual users above to: Please read [Working with AWS credentials](#working-with-aws-credentials) to decide the right method for providing AWS IAM credentials for your O3DE project. -## Running your O3DE project on Amazon EC2 - -If you are running your project on Amazon EC2, you can utilize the [instance profile](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#ec2-instance-profile) to authenticate calls made to AWS. Using the IAM role from the Amazon EC2 instance profile lets you avoid configuring AWS credentials on the machine through less secure methods like supplying them as user data at deploy time or remotely accessing the machine to manually set up a profile. - -To use Amazon EC2 instance role credentials with your project: -1. Create an Amazon EC2 [instance profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) through the [Amazon web console](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html#instance-profiles-manage-console) or AWS CLI. An instance profile is essentially a container for an IAM role that your Amazon EC2 instance can assume to make calls to AWS. -1. Provide the associated IAM role with any [permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) required to access the AWS resources that your O3DE project needs. -1. Attach the instance profile to the Amazon EC2 instance(s) running your O3DE project. You can attach it to a new instance [at launch time](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html) or you can [attach it to a running instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#attach-iam-role). - -The AWS Core Gem also requires that the `AllowAWSMetadataCredentials` setting be set to `true` before it will query the [Amazon EC2 Instance Metadata Service (IMDS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) for credentials. By default, it is set to `false` to prevent unwanted calls to the Amazon EC2 IMDS endpoint when running your O3DE project locally or on non-Amazon EC2 compute. - -{{< note >}} -If the environment variable `AWS_EC2_METADATA_DISABLED` is set to `true`, this will override the `AllowAWSMetadataCredentials` setting and you will be unable to use credentials from the instance profile. For more information about this environment variable, refer to the [HttpRequestor Gem](/docs/user-guide/gems/reference/network/http-requestor/#turn-off-amazon-ec2-instance-metadata-service-calls). -{{< /note>}} - -To turn on `AllowAWSMetadataCredentials` in AWSCore: - -1. Add it to your `awscoreconfiguration.setreg` [project settings file](./getting-started/#project-settings) at the following path: - - ```json - { - "Amazon": - { - "AWSCore": { - "ProfileName": "testprofile", - "ResourceMappingConfigFileName": "default_aws_resource_mappings.json", - "AllowAWSMetadataCredentials": true, // example of value set to "true" - } - } - } - ``` - -2. **OR** set it to true via the command line when directly invoking the launcher: - - ``` - ./MyGame.ServerLauncher.exe --regset="/Amazon/AWSCore/AllowAWSMetadataCredentials=true" - ``` - - ## Additional resources * For general help with AWS CLI configuration commands, see [Configuring the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). diff --git a/content/docs/user-guide/gems/reference/aws/aws-core/getting-started.md b/content/docs/user-guide/gems/reference/aws/aws-core/getting-started.md index 102ce8c1449..567c228ba8b 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-core/getting-started.md +++ b/content/docs/user-guide/gems/reference/aws/aws-core/getting-started.md @@ -9,21 +9,21 @@ To get started using AWS Gems with AWS services in your O3DE project, complete t 1. [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you don't have one. -2. Configure **AWS credentials** following the instructions in [Configuring AWS Credentials for O3DE](./configuring-credentials/). +1. Configure **AWS credentials** following the instructions in [Configuring AWS Credentials for O3DE](./configuring-credentials/). a. Confirm you have credentials using the command `aws configure list`. -3. Install the [AWS Cloud Development Kit (CDK)](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install). +1. Install the [AWS Cloud Development Kit (CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install). - a. Confirm the AWS CDK is set up using the command `cdk --version`. + a. Confirm the CDK is setup using the command `cdk --version`. -4. **Build** your O3DE project with the AWS Core Gem (and other AWS Gems you need) enabled. +1. **Build** your O3DE project with the AWS Core Gem (and other AWS Gems you need) enabled. -5. Deploy the **AWS CDK applications** for the AWS Gems you have enabled. See [Deploying the AWS CDK Application](./cdk-application/) for instructions. +1. Deploy the **CDK applications** for the AWS Gems you have enabled. See [Deploying the CDK Application](./cdk-application/) for instructions. -6. Configure a [resource mapping file](./resource-mapping-files/) using the [Resource Mapping Tool](./resource-mapping-tool/). +1. Configure a [resource mapping file](./resource-mapping-files/) using the [Resource Mapping Tool](./resource-mapping-tool/). -7. Associate the resource mapping file with the project. See the next section entitled [Project Settings](#project-settings). +1. Associate the resource mapping file with the project. See the next section entitled [Project Settings](#project-settings). You should now be able to utilize AWS functions in Lua script, Script Canvas, or C++ to communicate with your AWS resources. See [Scripting with AWS Core](./scripting/) for scripting examples. @@ -53,7 +53,6 @@ You will need to create this file if you want to set any of the following option | --- | --- | | **ProfileName** | \[Optional\] The project will use your **default** profile in `./aws/credentials` (on macOS and Linux) or `%USERPROFILE%\.aws\credentials` (on Windows). Override the **default** profile or any environment variable setting by using this variable. Must be a named profile in your `credentials` file. | | **ResourceMappingConfigFileName** | \[Optional\] The name of the resource mapping file to load while starting up. Resource mapping files are expected to be located in `\Config`. See [Resource Mapping Files](./resource-mapping-files/) for more information. | -| **AllowAWSMetadataCredentials** | \[Optional\] Whether or not the AWS Core Gem should query AWS environment endpoints like the [Amazon EC2 Instance Metadata Service (IMDS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) when looking up credentials. Defaults to `false`. See [Running your O3DE project on Amazon EC2](./configuring-credentials#running-your-o3de-project-on-amazon-ec2) for more information. | {{< note >}} If you make changes to this file, you will need to restart the O3DE Editor. @@ -62,14 +61,13 @@ If you make changes to this file, you will need to restart the O3DE Editor. Example registry settings file: ```json - { +{ "Amazon": { - "AWSCore": { - "ProfileName": "testprofile", - "ResourceMappingConfigFileName": "default_aws_resource_mappings.json", - "AllowAWSMetadataCredentials": false - } + "AWSCore": { + "ProfileName": "testprofile", + "ResourceMappingConfigFileName": "default_aws_resource_mappings.json" + } } - } +} ``` diff --git a/content/docs/user-guide/gems/reference/aws/aws-core/telemetry-data-collection.md b/content/docs/user-guide/gems/reference/aws/aws-core/telemetry-data-collection.md index 185e7861a18..44ee09c11c7 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-core/telemetry-data-collection.md +++ b/content/docs/user-guide/gems/reference/aws/aws-core/telemetry-data-collection.md @@ -22,7 +22,7 @@ Data collected is subject to the [AWS Privacy Policy](https://aws.amazon.com/pri ## Opting Out -You can opt out via the Editor preferences found at **Edit** -> **Editor Settings** -> **Global Preferences** -> **AWS**. +You can opt-out via the Editor preferences found at **Edit** -> **Editor Settings** -> **Global Preferences** -> **AWS**. Or, you can modify the Editor Registry setting file under `{YOUR-PROJECT}/user/Registry/editorpreferences.setreg` and restart the Editor. @@ -30,10 +30,11 @@ Registry setting: ```json { - "Amazon": { - "Telemetry": { - "SendAWSUsageMetric": true + "Amazon" + { + "Telemetry": { + "SendAWSUsageMetric": true + } } - } } ``` diff --git a/content/docs/user-guide/gems/reference/aws/aws-gamelift/_index.md b/content/docs/user-guide/gems/reference/aws/aws-gamelift/_index.md index ce42dc97ea7..98e41eeabbc 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-gamelift/_index.md +++ b/content/docs/user-guide/gems/reference/aws/aws-gamelift/_index.md @@ -13,7 +13,7 @@ The **AWS GameLift** Gem provides the following features: **Build and package management** - Instructions to package and optionally upload the dedicated server build. -- A sample [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) application. You can deploy the AWS CDK application to set up basic GameLift resources, or modify the application to meet your needs by adding or updating the deployed resources. +- A sample [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) application. You can deploy the AWS CDK application to set up basic GameLift resources, or modify the application to meet your needs by adding or updating the deployed resources. ## Release highlights diff --git a/content/docs/user-guide/gems/reference/aws/aws-gamelift/resource-management.md b/content/docs/user-guide/gems/reference/aws/aws-gamelift/resource-management.md index ccec44ca824..b71db43d1d6 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-gamelift/resource-management.md +++ b/content/docs/user-guide/gems/reference/aws/aws-gamelift/resource-management.md @@ -1,12 +1,12 @@ --- linkTitle: Resource Management title: AWS GameLift Gem Resource Management -description: "Learn about the sample AWS CDK application with the AWS GameLift Gem in O3DE" +description: "Learn about the sample CDK application with the AWS GameLift Gem in O3DE" toc: true weight: 900 --- -The AWS GameLift Gem provides a sample [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)(AWS CDK) application that can be used to model and deploy the following Amazon GameLift resources: +The AWS GameLift Gem provides a sample CDK application that can be used to model and deploy the following Amazon GameLift resources: * A list of [GameLift fleets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html) to host game servers. * (Optional) A list of [GameLift builds](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html) used for GameLift fleet generation. @@ -15,9 +15,9 @@ The AWS GameLift Gem provides a sample [AWS Cloud Development Kit](https://aws.a ## Prerequisites -To deploy the AWS CDK application, you must have the following: +To deploy the CDK application, you must have the following: -- [AWS CLI](https://aws.amazon.com/cli/) and [AWS Cloud Development Kit](https://aws.amazon.com/cdk/) installed on your local machine. +- [AWS CLI](https://aws.amazon.com/cli/) and [AWS Cloud Development Kit](https://aws.amazon.com/cdk/) (CDK) installed on your local machine. - Your AWS credentials set up. For instructions on setting up AWS credentials, refer to [Configuring AWS Credentials for O3DE](/docs/user-guide/gems/reference/aws/aws-core/configuring-credentials/). ## Setup @@ -213,12 +213,12 @@ $ cdk synth -c upload-with-support-stack=true --all ``` -When this optional feature is enabled, an additional AWS CloudFormation stack will be deployed. The additional stack contains the AWS resources that are required to support the build upload and creation. The `--all` argument tells the AWS CDK application to synthesize all the available stacks. +When this optional feature is enabled, an additional CloudFormation stack will be deployed. The additional stack contains the AWS resources that are required to support the build upload and creation. The `--all` argument tells the CDK application to synthesize all the available stacks. #### Create game session queue -It is recommended you create the optional game session queue using this AWS CDK application by providing the `create_game_session_queue` context variable when synthesizing stack(s). The following example command synthesizes the application with this optional features enabled: +It is recommended you create the optional game session queue using this CDK application by providing the `create_game_session_queue` context variable when synthesizing stack(s). The following example command synthesizes the application with this optional features enabled: ```cmd $ cdk synth -c create_game_session_queue=true @@ -227,7 +227,7 @@ $ cdk synth -c create_game_session_queue=true #### Create FlexMatch resources -You can also create matchmaking configuration and matchmaking rule set using this AWS CDK application by providing the `flex_match` context variable when synthesizing stack(s). The following example command synthesizes the application with this optional features enabled: +You can also create matchmaking configuration and matchmaking rule set using this CDK application by providing the `flex_match` context variable when synthesizing stack(s). The following example command synthesizes the application with this optional features enabled: ```cmd $ cdk synth -c flex_match=true @@ -253,7 +253,7 @@ Similar to using the `synth` command, if you want the AWS CDK application to upl $ cdk deploy -c upload-with-support-stack=true --all ``` -To deploy this AWS CDK application with optional features enabled, you must provide the corresponding context variables when deploying stack(s). The following example command deploys the application with all the optional features enabled: +To deploy this CDK application with optional features enabled, you must provide the corresponding context variables when deploying stack(s). The following example command deploys the application with all the optional features enabled: ```cmd $ cdk deploy -c upload-with-support-stack=true -c create_game_session_queue=true -c flex_match=true --all @@ -267,13 +267,13 @@ To update the existing AWS CDK application, re-run the same commands that you us ## Destroy the AWS CDK application -To destroy all the AWS resources that the AWS CDK application deployed, run the following AWS CLI command: +To destroy all of the AWS resources that the AWS CDK application (which uses an existing GameLift build) deployed, run the following AWS CLI command: ```cmd $ cdk destroy ``` -If you have any of the optional features enabled, you can destroy the AWS CDK application with all the optional features enabled by providing the corresponding context variables and the `--all` argument. The following command destroys the AWS CDK application with all the optional features enabled: +If you have any of the optional feature enabled, you can destroy the CDK application with all the optional features enabled by providing the corresponding context variables and the `--all` argument. The following command destroys the CDK application with all the optional features enabled: ```cmd $ cdk -c upload-with-support-stack=true -c create_game_session_queue=true -c flex_match=true --all diff --git a/content/docs/user-guide/gems/reference/aws/aws-metrics/_index.md b/content/docs/user-guide/gems/reference/aws/aws-metrics/_index.md index 21fa703803c..f2291166a6f 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-metrics/_index.md +++ b/content/docs/user-guide/gems/reference/aws/aws-metrics/_index.md @@ -13,7 +13,7 @@ The **AWS Metrics** Gem provides an extensible, out-of-the-box instrumentation a * Monitoring * Reporting -Using this Gem, you can generate and submit metrics events in a thread-safe manner from C++, Lua, and Script Canvas. To use AWS services for real-time and batch analytics, you can deploy the sample AWS Cloud Development Kit (AWS CDK) application as a reasonable starting point. You can also extend the supplied AWS CDK application to a full, production-ready solution to meet your production and scaling needs. Refer to [Game Analytics Pipeline](https://aws.amazon.com/solutions/implementations/game-analytics-pipeline/) on the AWS website for a detailed look at the architecture. +Using this Gem, you can generate and submit metrics events in a thread-safe manner from C++, Lua, and Script Canvas. To use AWS services for real-time and batch analytics, you can deploy the sample AWS Cloud Development Kit (AWS CDK) application as a reasonable starting point. You can also extend the AWS CDK application to a full, production-ready solution to meet your production and scaling needs. Refer to [Game Analytics Pipeline](https://aws.amazon.com/solutions/implementations/game-analytics-pipeline/) on the AWS website for a detailed look at the architecture. ## Enabling the AWS Metrics Gem diff --git a/content/docs/user-guide/gems/reference/aws/aws-metrics/advanced-topics.md b/content/docs/user-guide/gems/reference/aws/aws-metrics/advanced-topics.md index 0aca6f5e368..9471f8589d6 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-metrics/advanced-topics.md +++ b/content/docs/user-guide/gems/reference/aws/aws-metrics/advanced-topics.md @@ -48,8 +48,8 @@ Configurable settings include the following. The AWS Metrics Gem uses an [Event JSON Schema](./event-schema/) for validating the metrics events submitted from the client or sent to the Service API. Any metrics event that fails the validation will be dropped. Any custom metrics attributes that are not defined in the schema will be added to the `event_data` field of the metrics event as a flat JSON dictionary. -If you want to customize the schema, update it in both `Gems\AWSMetrics\Code\Include\Public\AWSMetricsConstant.h` and `api_spec.json` inside your AWS CDK application. You will need to rebuild your project and redeploy your AWS CDK application after this change. +If you want to customize the schema, update it in both `Gems\AWSMetrics\Code\Include\Public\AWSMetricsConstant.h` and `api_spec.json` inside your CDK application. You will need to rebuild your project and redeploy your CDK application after this change. ## Migrate to production-ready solution -The sample AWS CDK application provides a reasonable starting point to use AWS analytics services that is thoughtful with respect to security, cost, and usability. Experienced developers can also customize the AWS CDK application or even migrate it to the production-ready solution detailed in the AWS guide on the [Game Analytics Pipeline](https://aws.amazon.com/solutions/implementations/game-analytics-pipeline/). +The sample CDK application provides a reasonable starting point to use AWS analytics services that is thoughtful with respect to security, cost, and usability. Experienced developers can also customize the CDK application or even migrate it to the production-ready solution detailed in the AWS guide on the [Game Analytics Pipeline](https://aws.amazon.com/solutions/implementations/game-analytics-pipeline/). diff --git a/content/docs/user-guide/gems/reference/aws/aws-metrics/setup.md b/content/docs/user-guide/gems/reference/aws/aws-metrics/setup.md index 8bdb17b4280..92269580459 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-metrics/setup.md +++ b/content/docs/user-guide/gems/reference/aws/aws-metrics/setup.md @@ -10,7 +10,7 @@ weight: 100 The AWS Metrics Gem requires the following to be installed and configured: -* AWS Cloud Development Kit (AWS CDK) +* AWS Cloud Development Kit (CDK) * AWS credentials * O3DE AWS Core Gem @@ -23,18 +23,18 @@ See [Getting Started with AWS Gems](/docs/user-guide/gems/reference/aws/aws-core Complete the following set up steps to use the AWS Metrics Gem in your project: * Enable the AWS Metrics Gem in your project. -* Deploy the AWS CDK application. +* Deploy the CDK application. * Update the resource mapping file to use the deployed AWS resources. ### 1. Enable the AWS Metrics Gem -If you haven't already added and built the **AWS Metrics Gem** in your project, follow the steps to [add the Gem](/docs/user-guide/project-config/add-remove-gems/) to your current project. +If you haven't already added and built the **AWS Metrics Gem** in your project, do so now using the instructions in [Enabling the AWS Metrics Gem](./#enabling-the-aws-metrics-gem). -### 2. Deploy the AWS CDK application +### 2. Deploy the CDK application -Use the AWS CDK `synth` and `deploy` commands from the AWS Metrics Gem directory to deploy the sample CDK application and build the AWS-backed analytics pipeline shown in the following diagram. For help with these deployment operations, refer to the synth and deploy steps in [Deploying the CDK Application](/docs/user-guide/gems/reference/aws/aws-core/cdk-application/) in the AWS Core documentation. +Use the CDK synth and deploy commands from the AWS Metrics Gem directory to deploy the sample CDK application and build the AWS-backed analytics pipeline shown in the following diagram. For help with these deployment operations, refer to the synth and deploy steps in [Deploying the CDK Application](/docs/user-guide/gems/reference/aws/aws-core/cdk-application/) in the AWS Core documentation. -![Analytics pipeline provided by the sample AWS CDK application](/images/user-guide/gems/reference/aws/aws-metrics/sample-analytics-pipeline.png) +![Analytics pipeline provided by the sample CDK application](/images/user-guide/gems/reference/aws/aws-metrics/sample-analytics-pipeline.png) The pipeline focuses on two use cases: hot/near-real-time for operations and cold/batch for BI use cases (such as DAU, MAU). The sample analytics pipeline uses Amazon API Gateway (a service endpoint) for the user access and administrative interface, Amazon Kinesis Data Streams and Kinesis Data Firehose for streaming ingestion, Kinesis Data Analytics and Amazon CloudWatch for real-time analytics, Amazon Simple Storage Service (S3) for date lake integration, and AWS Glue and Amazon Athena for batch analytics. diff --git a/content/docs/user-guide/gems/reference/aws/aws-metrics/using.md b/content/docs/user-guide/gems/reference/aws/aws-metrics/using.md index 358a4e3329a..8149204e7e2 100644 --- a/content/docs/user-guide/gems/reference/aws/aws-metrics/using.md +++ b/content/docs/user-guide/gems/reference/aws/aws-metrics/using.md @@ -9,7 +9,7 @@ Once the AWS Metrics resources have been deployed, you can use features such as ## Using real-time analytics -After deploying the AWS Cloud Development Kit (AWS CDK) application, an **Amazon CloudWatch** dashboard is created automatically to show the operational health metrics and sample metrics (TotalLogin) defined in the AWS CDK application. +After deploying the CDK application, an **Amazon CloudWatch** dashboard is created automatically to show the operational health metrics and sample metrics (TotalLogin) defined in the CDK application. To start the real-time analytics, go to the **Amazon Kinesis** console or use the AWS CLI [`start-application`](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kinesisanalytics/start-application.html) command to start the **Kinesis Data Analytics** application. @@ -21,30 +21,30 @@ The CloudWatch dashboard will start showing the metrics you sent from the client ![Sample metrics dashboard](/images/user-guide/gems/reference/aws/aws-metrics/sample-metrics-dashboard.png) -Most of the components deployed for real-time analytics are extensible. You can customize the Kinesis Data Analytics application, analytics-processing Lambda, and CloudWatch dashboard from the AWS CDK application code or the AWS console to transform and analyze your streaming data. +Most of the components deployed for real-time analytics are extensible. You can customize the Kinesis Data Analytics application, analytics-processing Lambda, and CloudWatch dashboard from the CDK application code or the AWS console to transform and analyze your streaming data. -Note that re-deploying the AWS CDK application will overwrite any changes you made through the AWS Console. Therefore it is suggested that you make the modification through the AWS CDK application code and redeploy the AWS CDK application. +Note that re-deploying the CDK application will overwrite any changes you made through the AWS Console. Therefore it is suggested that you make the modification through the CDK application code and redeploy the CDK application. ## Enabling batch analytics -To enable the optional batch analytics feature, specify `batch_processing=true` when you synth and deploy the AWS CDK application. +To enable the optional batch analytics feature, specify `batch_processing=true` when you synth and deploy the CDK application. ```cmd cdk synth -c batch_processing=true cdk deploy -c batch_processing=true ``` -Metrics data will be sent to the **Amazon S3 Data Lake** and saved in the parquet format. To make the data discoverable, go to the **AWS Glue** console or use the AWS CLI [`start-crawler`](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/start-crawler.html) command to start the Glue crawler deployed by the AWS CDK application. After the crawler finishes its work, the metrics event table will be updated. Then you can run queries on the data through **Amazon Athena** engine. +Metrics data will be sent to the **Amazon S3 Data Lake** and saved in the parquet format. To make the data discoverable, go to the **AWS Glue** console or use the AWS CLI [`start-crawler`](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/start-crawler.html) command to start the Glue crawler deployed by the CDK application. After the crawler finishes its work, the metrics event table will be updated. Then you can run queries on the data through **Amazon Athena** engine. -There are a few named queries created within your AWS CDK application under a specific work group for your project. You can run these sample queries as an example or create custom queries for batch analytics. +There are a few named queries created within your CDK application under a specific work group for your project. You can run these sample queries as an example or create custom queries for batch analytics. -You can also create an **Amazon QuickSight** dashboard (not included in the AWS CDK application) to visualize the statistics. For instructions, see [Build the Amazon QuickSight Dashboard](https://docs.aws.amazon.com/solutions/latest/game-analytics-pipeline/deployment.html#step5) in the Game Analytics Pipeline documentation. +You can also create an **Amazon QuickSight** dashboard (not included in the CDK application) to visualize the statistics. For instructions, see [Build the Amazon QuickSight Dashboard](https://docs.aws.amazon.com/solutions/latest/game-analytics-pipeline/deployment.html#step5) in the Game Analytics Pipeline documentation. Similar to the real-time analytics, you can also customize the components for batch processing. For example, you can define custom transformation in the events processing Lambda or change the behavior of the Glue crawler to run it periodically. -## AWS CloudFormation stack output +## CloudFormation stack output -The AWS CloudFormation stack deployed by the AWS CDK application contains the following outputs. You can use these outputs for reference and create the resource mapping file based on them. +The AWS CloudFormation stack deployed by the CDK application contains the following outputs. You can use these outputs for reference and create the resource mapping file based on them. | Output | Description | | --- | --- | diff --git a/content/docs/user-guide/gems/reference/physics/nvidia/physx-debug.md b/content/docs/user-guide/gems/reference/physics/nvidia/physx-debug.md index a79fc6a6486..08aad9355a3 100644 --- a/content/docs/user-guide/gems/reference/physics/nvidia/physx-debug.md +++ b/content/docs/user-guide/gems/reference/physics/nvidia/physx-debug.md @@ -5,7 +5,7 @@ description: The PhysX Debug Gem provides debugging functionality and visualizat toc: true --- -The PhysX Debug Gem provides features to debug visualizations for your PhysX scene geometry, such as the **PhysX Collider** and **PhysX Dynamic Rigid Body** components, and so on. +The PhysX Debug Gem provides features to debug visualizations for your PhysX scene geometry, such as the **PhysX Collider** and **PhysX Rigid Body** components, and so on. When you enter console variables or the use the **ImGui** tool, you can view the PhysX debug lines in editor and game modes. This Gem uses data directly from PhysX to show a culled (limited by proximity to the camera) view of the simulated world in real time. diff --git a/content/docs/user-guide/gems/reference/ros2/_index.md b/content/docs/user-guide/gems/reference/ros2/_index.md deleted file mode 100644 index 6abd1542f27..00000000000 --- a/content/docs/user-guide/gems/reference/ros2/_index.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -linkTitle: ROS 2 -title: ROS 2 Gem -description: The ROS 2 Gem helps build robotic simulations with Robot Operating System (ROS) 2 in Open 3D Engine (O3DE). -toc: true ---- - - - -The **ROS 2** Gem provides integration with the [Robot Operating System (ROS) 2](https://docs.ros.org/en/rolling/index.html) library and enables design of simulation of robotics systems. - -## Requirements - -* Ubuntu 20.04 or 22.04. - Other Ubuntu versions and Linux distributions can also work as long as they support ROS 2. - **The O3DE ROS 2 Gem is not available for Windows.** -* [O3DE built from source on Linux](/docs/welcome-guide/setup/setup-from-github/building-linux). **The ROS 2 Gem does not work with a release version of O3DE yet**. -* The [latest version](https://docs.ros.org/en/rolling/Releases.html) of ROS 2. This instruction assumes that the `desktop` version is installed. Otherwise, some packages might be missing. The O3DE ROS 2 has been tested with: - * [ROS 2 Galactic](https://docs.ros.org/en/galactic/Installation.html) with Ubuntu 20.04 - * [ROS 2 Humble](https://docs.ros.org/en/humble/Installation.html) with Ubuntu 22.04 - -#### Source your ROS 2 workspace - -To build or run projects using ROS 2 Gem, you must [source your ROS 2 workspace](https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html) in your console. The best way to ensure that ROS 2 is sourced at all times is by adding the following line to the `~/.profile` file: -``` -source /opt/ros//setup.bash -``` -Replace `` with the ROS 2 distribution name (`galactic`, `humble`, and so on). -Then, you must log out and log in from Ubuntu for the change to take effect. -#### Additional ROS 2 packages required - -* gazebo_msgs: `sudo apt install ros-${ROS_DISTRO}-gazebo-msgs` -* Ackermann messages: `sudo apt install ros-${ROS_DISTRO}-ackermann-msgs` -* Control toolbox `sudo apt install ros-${ROS_DISTRO}-control-toolbox` -* XACRO `sudo apt install ros-${ROS_DISTRO}-xacro` - -If a `desktop` installation of ROS 2 distro was selected, everything else should be there. - -Use this helpful command to install: - -``` -sudo apt install ros-${ROS_DISTRO}-ackermann-msgs ros-${ROS_DISTRO}-control-toolbox ros-${ROS_DISTRO}-nav-msgs ros-${ROS_DISTRO}-gazebo-msgs -``` - -## Features - -* Direct and natural support of ROS 2 ecosystem: - * No bridges. Your simulation node will function as any other ROS 2 node. - * This is also good for performance - * Easy way to include ROS 2 dependencies. -* Sensors: - * Sensor Component serves as a handy abstraction. - * Example implementations of Lidar, Camera, IMU sensors. - * Including a few Assets and prefabs which are ready to use. -* Automated handling of: - * Simulation time, publishing `/clock` supporting non-real time. - * Publishing of transformation frames (`/tf`, `/tf_static`). - * Validation for topic and namespace names. -* Robot Control Component: - * A quick to use method of controlling your robot with Twist messages. - * Can be used with custom LUA scripting. -* Vehicle dynamics: - * Ackermann Steering, subscribes to message of type [AckermannDrive](http://docs.ros.org/en/api/ackermann_msgs/html/msg/AckermannDrive.html). - * Differential drive, subscribes to message of type [Twist](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html). -* URDF/XACRO (experimental). - - -For a "feel" of these features, see an [example project](https://github.com/o3de/RobotVacuumSample) which uses this Gem to run navigation stack. - -## Clone this repository - -The ROS 2 Gem lives in the [`o3de/o3de-extras`](https://github.com/o3de/o3de-extras) repository. Clone the GitHub repository to your machine: - -``` -git clone https://github.com/o3de/o3de-extras -``` - -## Adding Gem to your project - -To use the ROS 2 Gem in your O3DE project, you need to register the Gem with O3DE. Then, you can enable the Gem in your project. Run the following commands from the O3DE folder: -``` -scripts/o3de.sh register --gem-path /Gems/ROS2 -scripts/o3de.sh enable-gem -gn ROS2 -pp -``` - -For more information, refer to [Adding and Removing Gems](/docs/user-guide/project-config/add-remove-gems/) and [Registering Gems](/docs/user-guide/project-config/register-gems/). - - -## Building - -The ROS 2 Gem is built when you build an O3DE project and enable the ROS 2 Gem. For more information, refer to [Project Creation](/docs/welcome-guide/create/) and [Adding and Removing Gems in a Project](/docs/user-guide/project-config/add-remove-gems/). Make sure to [source your ROS 2 workspace](#source-your-ros-2-workspace) before building. - -## Example project - -You can test O3DE ROS 2 Gem with the [Robot Vacuum Sample](https://github.com/o3de/RobotVacuumSample) project. This project allows you to run robot navigation. All necessary assets are included. - -## User Guides - -Follow the [O3DE ROS2 Gem User Guide](ros2-gem-user-guide.md) to understand its concepts and components. For additional developer's documentation, check the [Gem documentation](https://github.com/o3de/o3de-extras/blob/development/Gems/ROS2/docs/guides/development_in_clion.md) and [Open 3D Engine Contributor guide](/docs/contributing) - -## How to create your own robotic simulation - ->This section is to be detailed. - -Once you are set up and familiar with the example project, consider the following steps: -1. [Create a new O3DE project](/docs/welcome-guide/create/) -2. [Register ROS 2 Gem](#adding-gem-to-your-project) and other useful Gems to created project. -Follow [Registering Gems to a Project](/docs/user-guide/project-config/register-gems/) guide. -3. Create or import Assets for your robots and environment. - 1. You can use formats supported by O3DE. - 2. You can import your robot from URDF/XACRO. - 3. Imported models might require some adjustments to be simulation-ready. - 4. Mobilize robot with Vehicle Dynamics controllers. -4. Determine which sensors you need to simulate. - 1. Some sensors are already implemented in this Gem. - 1. They might require specialization (implementation specific for particular models). - 2. You might like to consider tradeoffs between performance and realism in each case. - 2. Use `ROS2SensorComponent` as a base class if you are implementing a new sensor. Follow [Contribution to Source Code](docs/contributing/to-code/) guide. -5. Develop necessary sensors and their prefabs. -6. Consider developing additional abstraction to handle spawning and despawning robots. - 1. This would also be a valuable contribution to the Gem. -7. Develop your scene and simulation scenario, placing Assets and configuring components. - -Enjoy simulation with some of many [ROS 2 packages](https://index.ros.org/packages/#humble) and projects in [ROS 2 ecosystem](https://project-awesome.org/fkromer/awesome-ros2). diff --git a/content/docs/user-guide/gems/reference/ros2/class_diagram.md b/content/docs/user-guide/gems/reference/ros2/class_diagram.md deleted file mode 100644 index fc4d7d537c3..00000000000 --- a/content/docs/user-guide/gems/reference/ros2/class_diagram.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -linkTitle: Class Diagram -title: O3DE ROS 2 Gem Details -description: User guide to develop ROS 2 enabled simulation -toc: true ---- - -# Diagram of classes - -Some classes with relationships and functions are presented on this diagram. Specific sensor classes (e.g. Lidar) are -not included. Some classes are presented in sub-diagrams: -![classes diagram](/images/user-guide/gems/ros2/diagram_ros2_gem.svg) -![Vehicle Dynamics](/images/user-guide/gems/ros2/ROSVehicleDynamics.svg) diff --git a/content/docs/user-guide/gems/reference/ros2/ros2-gem-user-guide.md b/content/docs/user-guide/gems/reference/ros2/ros2-gem-user-guide.md deleted file mode 100644 index 29186681b18..00000000000 --- a/content/docs/user-guide/gems/reference/ros2/ros2-gem-user-guide.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -linkTitle: Guide -title: O3DE ROS 2 Gem Details -description: User guide to develop ROS 2 enabled simulation -toc: true ---- - -The ROS 2 Gem helps to build robotic simulations with [ROS 2 / Robot Operating System](https://www.ros.org/). -An example of usage can be seen at [Robot Vacuum Sample](https://github.com/o3de/RobotVacuumSample). -The ROS 2 Gem contains a number of components that gives you a set of tools for robotic simulation. -Components allow you to: -- add locomotion to robotics platforms ([Vehicle Dynamics](#vehicle-model)), -- simulate sensors ([Sensors](#sensors)), -- provide tools to interact with simulation (e.g. [Robot Control](#robot-control), [Spawner](#spawner)). - -## Components overview - -- __Central Singleton__ - - ROS2SystemComponent -- __Core abstractions__ - - ROS2FrameComponent - - ROS2SensorComponent -- __Sensors__ - - ROS2CameraSensorComponent - - ROS2GNSSSensorComponent - - ROS2IMUSensorComponent - - ROS2LidarSensorComponent - - ROS2OdometrySensorComponent -- __Robot control__ - - AckermannControlComponent - - RigidBodyTwistControlComponent - - SkidSteeringControlComponent -- __Spawner__ - - ROS2SpawnerComponent - - ROS2SpawnPointComponent -- __Vehicle dynamics__ - - AckermannVehicleModelComponent - - SkidSteeringModelComponent - - WheelControllerComponent -- __Robot Import (URDF) system component__ - - ROS2RobotImporterSystemComponent - -## The Gem and ROS 2 ecosystem - -### Supported Platforms and versions - -The Gem is currently Linux-only and is being tested with ROS 2 Humble on Ubuntu 22.04 as well as ROS 2 Galactic with Ubuntu 20.04. - -It is intended to support any modern ROS 2 version, following these priorities: - -- The most recent LTS version (e.g. in June 2022, [ROS 2 Humble](https://docs.ros.org/en/humble/Installation.html)). -- The most recent non-LTS version ([ROS 2 Galactic](https://docs.ros.org/en/galactic/Installation.html)). -- The always-fresh [ROS 2 Rolling](https://docs.ros.org/en/rolling/Installation.html). -- Older versions. - -Currently tested and validated versions / platforms will be detailed in the [project repository](https://github.com/o3de/o3de-extras/tree/development/Gems/ROS2). - -**Currently, the O3DE ROS 2 Gem is not available for Windows.** - -If you have multiple versions installed, make sure you [source](https://docs.ros.org/en/humble/Tutorials/Workspace/Creating-A-Workspace.html#source-the-overlay) the one you would like to use. You can check which version is sourced in your console by checking the value of `ROS_DISTRO` environment variable (`echo $ROS_DISTRO`). - -### ROS 2 Concepts - -Please refer to [ROS 2 Concepts documentation](https://docs.ros.org/en/humble/Concepts.html). - -### Structure and Communication - -The Gem creates a [ROS 2 node](https://docs.ros.org/en/humble/Tutorials/Understanding-ROS2-Nodes.html) which is directly a part of the ROS 2 ecosystem. As such, your simulation will not use any bridges to communicate and is subject to configuration through settings such as Environment Variables. It is truly a part of the ecosystem. - -Note that the simulation node is handled through `ROS2SystemComponent` - a singleton. However, you are free to create and use your own nodes if you need more than one. - -Typically, you will be creating publishers and subscriptions. This is done through [rclcpp API](https://docs.ros2.org/humble/api/rclcpp/classrclcpp_1_1Node.html). Example: - -``` -auto ros2Node = ROS2Interface::Get()->GetNode(); -AZStd::string fullTopic = ROS2Names::GetNamespacedName(GetNamespace(), m_MyTopic); -m_myPublisher = ros2Node->create_publisher(fullTopic.data(), QoS()); -``` - -Note that QoS class is a simple wrapper to [`rclcpp::QoS`](https://docs.ros.org/en/humble/p/rclcpp/generated/classrclcpp_1_1QoS.html). - -### Frames - -`ROS2FrameComponent` is a representation of an interesting physical part of the robot. It handles spatio-temporal relationship between this part and other frames of reference. It also encapsulates namespaces, which help to distinguish between different robots and different parts of the robot, such in the case of multiple identical sensors on one robot. - -All Sensors and the Robot Control component require `ROS2FrameComponent`. - -### Sensors - -Sensors are components deriving from `ROS2SensorComponent`. They acquire data from the simulated environment and publish it to ROS 2 domain. - -- Each sensor has a configuration, including one or more Publishers. -- Sensors publish at a given rate (frequency). -- Some sensors can be visualized. - -If you intend to add your own sensor, it might be useful to look at how sensors already provided within the O3DE ROS2 Gem are implemented. - -Sensors can be fall into one of two categories: -- sensors which replicate real devices to some degree of realism. -- ground truth "sensors", which can be useful for development and machine learning. - -### Robot Control - -The Gem comes with `ROS2RobotControlComponent`, which you can use to move your robot through: - -- [Twist](https://github.com/ros2/common_interfaces/blob/master/geometry_msgs/msg/Twist.msg) messages. -- [AckermannDrive](https://index.ros.org/p/ackermann_msgs/#humble) - The component subscribes to these command messages on a configured topic. The topic is "cmd_vel" by default, in a namespace as dictated by ROS2Frame. - -To make use of received command messages, use either `AckermannControlComponent`, `RigidBodyTwistControlComponent` or `SkidSteeringControlComponent` , depending on steering type. You can also implement your own control component or use LUA scripting to handle these commands. Unless scripting is used, control components should translate ROS 2 commands to events on `VehicleInputControlBus`. These events will be handled by a [`VehicleModelComponent`](#vehicle-model) if it is present. You can use tools such as [rqt_robot_steering](https://index.ros.org/p/rqt_robot_steering/) to move your robot with Twist messages. `RobotControl` is suitable to use with [ROS 2 navigation stack](https://navigation.ros.org/). It is possible to implement your own control mechanisms with this Component. - -### Vehicle Model - -`VehicleModelComponent` serves the purpose of converting inputs such as target velocity, steering or acceleration to physical forces on parts of a vehicle (robot). `VehicleModel` has a `VehicleConfiguration` which is used to define axles, parametrize and assign wheels. The model requires a `WheelControllerComponent` present in each wheel entity. It also uses an implementation of `DriveModel`, which converts vehicle inputs to forces acting on steering elements and wheels. - -#### Wheel Controller - -A wheel controller is a controller that should be attached to the vehicle's wheel. The wheel entity should have PhysX Hinge Joint attached. The Joint controller should have: - - `Motor Configuration / Use Motor` enabled, - - `Motor Configuration / Force Limit Value` set to a desirable value. - -![PhysX Joint](/images/user-guide/gems/ros2/physx_joint.png) - -The wheel controller has the following parameters shown below. - -![Wheel Controller](/images/user-guide/gems/ros2/wheelController.png) -| Parameter Name | Description | -|------------------------------|----------------------------------------------------------------------------------| -| `Steering Entity` | The entity that has a PhysX Hinge Joint that changes the direction of the wheel. | -| `Scale of steering axis` | Allows the user to change the ratio or / and direction of wheel steering. | - -#### Ackermann Drive Model - -The implementation of `AckermannDriveModel` uses [PID controllers](https://en.wikipedia.org/wiki/PID_controller) from [control_toolbox](https://github.com/ros-controls/control_toolbox) package. The model computes velocities or forces in the joints of the vehicle and applies it accordingly to commanded velocity. - -![AckermannModel](/images/user-guide/gems/ros2/ackermanModel.png) - -Parameters of the model are exposed to the user via `AckermannVehicleModelComponent`: -| Parameter Name | Description | -|------------------------------------------------|--------------------------------------------------------------------------| -| `DriveModel / Axles ` | List of axles of the vehicle. | -| `DriveModel / Axles / Axle Wheels ` | List of wheels in axis. | -| `DriveModel / Axles / Is it a steering` | If it is enabled the Ackermann Drive Model will apply a steering angle. | -| `DriveModel / Axles / Is it a drive` | If it is enabled the Ackermann Drive Model will apply drive force. | -| `DriveModel / Axles / Track` | Distance between front and rear axis. | -| `DriveModel / Axles / Wheelbase` | Distance between left and right wheel. | -| `DriveModel / Steering PID / P` | Proportional gain of PID controller for steering servo. | -| `DriveModel / Steering PID / I` | Integral gain of PID controller for steering servo. | -| `DriveModel / Steering PID / D` | Derivative gain of PID controller for steering servo. | -| `DriveModel / Steering PID / IMin` | Minimum integration impact of PID. | -| `DriveModel / Steering PID / IMax` | Maximum integration impact of PID. | -| `DriveModel / Steering PID / AntiWindUp` | Prevents integral wind-up in PID. | -| `DriveModel / Steering PID / OutputLimit` | Clamps output to maximum value. | -| `DriveModel / Vehicles Limits / Speed limit ` | Maximum achievable linear speed in meters per second. | -| `DriveModel / Vehicles Limits / Steering limit`| Maximum achievable steering angle. | - -#### Skid Steering Drive Model -The model computes velocities in the joints of the vehicle and applies it accordinlgy to commanded velocity and configuration. - -![SkidSteeringModel](/images/user-guide/gems/ros2/skidSteeringModel.png) -Parameters of the model are exposed to the user via `AckermannVehicleModelComponent`: -| Parameter Name | Description | -|------------------------------------------------------|--------------------------------------------------------------------| -| `DriveModel / Axles ` | List of axles of the vehicle. | -| `DriveModel / Axles / Axle Wheels ` | List of wheels in axis. | -| `DriveModel / Axles / Is it a steering` | It is ignored in this model. | -| `DriveModel / Axles / Is it a drive` | If it is enabled, the Skid Steering Drive Model will apply velocities to the axis' wheels.| -| `DriveModel / Axles / Track` | Distance between front and rear axis. | -| `DriveModel / Axles / Wheelbase` | Distance between left and right wheel. | -| `DriveModel / Vehicles Limits / Linear speed limit ` | Maximum achievable linear speed in meters per second. | -| `DriveModel / Vehicles Limits / Angular speed limit` | Maximum achievable angular speed in radians per second. | - #### Manual control - -The `VehicleModel` will handle input events with names "steering" and "accelerate". This means you can add an [InputComponent](/docs/user-guide/components/reference/gameplay/input/) to the same entity and define an input map for your input devices (such as keyboard or a game pad) to control the vehicle manually. - -You can use tools such as [rqt_robot_steering](https://index.ros.org/p/rqt_robot_steering/) to move your robot with Twist messages. `RobotControl` is suitable to use with [ROS 2 navigation stack](https://navigation.ros.org/). - -It is possible to implement your own control mechanisms with this Component. - -### Spawner - -`ROS2SpawnerComponent` handles spawning entities during simulation. Available spawnables have to be set up as the component's field before the simulation. User is able to define named spawn points inside the Editor. This can be done by adding `ROS2SpawnPointComponent` to a child entity of an entity with `ROS2SpawnerComponent`. During the simulation user can access names of available spawnables and request spawning using ros2 services. The names of services are `/get_available_spawnable_names` and `/spawn_entity` respectivly. GetWorldProperties.srv and SpawnEntity.srv types are used to handle these features. In order to request defined spawn points names user can use `/get_spawn_points_names` service with GetWorldProperties.srv type. Detailed information about specific spawn point (e.g. pose) can be accessed using `/get_spawn_point_info` service with GetModelState.srv type. All used services types are defined in gazebo_msgs package. - -- **Spawning**: The spawnable name must be passed in `request.name` and the position of entity in `request.initial_pose`. - - Example call: - ``` - ros2 service call /spawn_entity gazebo_msgs/srv/SpawnEntity '{name: 'robot', initial_pose: {position:{ x: 4, y: 4, z: 0.2}, orientation: {x: 0.0, y: 0.0, z: 0.0, w:.0}}} - ``` -- Spawning in defined spawn point: spawnable name should be passed in request.name and the name of the spawn point in request.xml - - example call: `ros2 service call /spawn_entity gazebo_msgs/srv/SpawnEntity '{name: 'robot', xml: 'spawn_spot'}'` -- Available spawnable names access: names of available spawnables are sent in response.model_names - - example call: `ros2 service call /get_available_spawnable_names gazebo_msgs/srv/GetWorldProperties` -- Defined spawn points' names access: names of defined points are sent in response.model_names - - example call: `ros2 service call /get_spawn_points_names gazebo_msgs/srv/GetWorldProperties` -- Detailed spawn point info access: spawn point name should be passed in request.model_name. Defined pose is sent in response.pose. - - example call: `ros2 service call /get_spawn_point_info gazebo_msgs/srv/GetModelState '{model_name: 'spawn_spot'}'` - -## Handling custom ROS 2 dependencies - -The ROS 2 Gem will respect your choice of [__sourced__](https://docs.ros.org/en/humble/Tutorials/Workspace/Creating-A-Workspace.html#source-the-overlay) ROS 2 environment. The Gem comes with a number of ROS 2 packages already included and linked, but you might want to include additional packages in your project. To do so, use the `target_depends_on_ros2` function in your project's `Gem/CMakeLists.txt`: - -``` -target_depends_on_ros2_packages( ) -``` - -in your project's `Gem/CMakeLists.txt`. - -### Example - -It could be the case that you need to create new type of sensor publishing a custom message. - -Lets assume your project is called `MyProject`, the custom message package is called `my_sensor_msgs` and ROS 2 workspace `my_ros2_ws`. Take following steps: - -1. Build your ROS 2 message package in a workspace as you normally would (e.g. `~/projects/my_ros2_ws`) -2. Source the overlay: `source ~/projects/my_ros2_ws/install/setup.bash`. -3. Put `target_depends_on_ros2_packages(MyProject my_sensor_msgs)` in your `Gem/CMakeLists.txt` file. -4. You can now build `MyProject` and use the new messages. - -Remember to __always have your ROS 2 overlay sourced__ when building and running the project as sourcing provides visibility of ROS 2 package paths. diff --git a/content/docs/user-guide/interactivity/physics/nvidia-blast/static-chunks.md b/content/docs/user-guide/interactivity/physics/nvidia-blast/static-chunks.md index 79ebed9c69d..519985e4333 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-blast/static-chunks.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-blast/static-chunks.md @@ -40,6 +40,6 @@ If the specified chunk has been fractured, its descendants are also static when 1. Enable the **Static root** parameter in the **Blast Export** SOP before exporting the asset. -See the result simulation in O3DE below. A large, invisible PhysX Dynamic Rigid Body collider is dropped on the rabbit. The front half of the rabbit is destroyed. The chunks are simulated as dynamic rigid bodies while the back of the rabbit remains in place. +See the result simulation in O3DE below. A large, invisible PhysX rigid body collider is dropped on the rabbit. The front half of the rabbit is destroyed. The chunks are simulated as dynamic rigid bodies while the back of the rabbit remains in place. ![Create static chunks in Houdini for NVIDIA Blast.](/images/user-guide/physx/blast/anim-nvidia-blast-static-simulation.gif) diff --git a/content/docs/user-guide/interactivity/physics/nvidia-physx/_index.md b/content/docs/user-guide/interactivity/physics/nvidia-physx/_index.md index 3617b260dbc..60ae95cc2dd 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-physx/_index.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-physx/_index.md @@ -5,7 +5,6 @@ title: Simulating physics behavior with the PhysX system weight: 100 --- - O3DE's PhysX system acts upon entities to create realistic physical effects such as collision detection and rigid body dynamics simulation. **Topics** @@ -24,7 +23,6 @@ O3DE's PhysX system acts upon entities to create realistic physical effects such + [Determinism](#determinism) - ## PhysX Gems The PhysX system uses the following Gems, which you can enable in **Project Manager**. @@ -36,24 +34,13 @@ The PhysX system uses the following Gems, which you can enable in **Project Mana For more information, see [PhysX Debug](/docs/user-guide/gems/reference/physics/nvidia/physx-debug/). -## PhysX version support - -O3DE uses PhysX 4.1 by default. You can enable PhysX 5.1 by specifying `-DAZ_USE_PHYSX5=ON` as a command-line option in the configuration step when you configure and build your project or the engine. The following is an an example configuration command that enables PhysX 5.1. - -```cmd -cmake -B build/windows -S . -G "Visual Studio 16" -DLY_3RDPARTY_PATH=C:\o3de-packages -DAZ_USE_PHYSX5=ON -``` - -For more information on configuring and building projects see the [Configure and Build](/docs/user-guide/build/configure-and-build/) topic. - ## PhysX Components The **PhysX** gem has the following components, which you can [add](/docs/user-guide/components/reference/#adding-components-to-an-entity) to entities by using the [**Entity Inspector**](/docs/user-guide/editor/entity-inspector/): -+ **[PhysX Collider](/docs/user-guide/components/reference/physx/collider/)** - Enables physics objects to collide with other physics objects. -+ **[PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/)** - Enables physics objects to collide with other physics objects, using geometry defined by a **[Shape component](/docs/user-guide/components/reference/shape/)**. ++ **[PhysX Collider](/docs/user-guide/components/reference/physx/collider/)** - Enables physics objects to collide with other physics objects. An entity that does not have a **PhysX Rigid Body Physics** component is a **static** collider, while an entity with the component is a **dynamic** collider. ++ **[PhysX Shape Collider](/docs/user-guide/components/reference/physx/shape-collider/)** - Enables physics objects to collide with other physics objects, using geometry defined by a **[Shape component](/docs/user-guide/components/reference/shape/)**. An entity that does not have a **PhysX Rigid Body Physics** component is a **static** collider, while an entity with the component is a **dynamic** collider. + **[PhysX Force Region](/docs/user-guide/components/reference/physx/force-region/)** - Enables an entity to specify a region that applies physical force to entities. For each physics simulation frame, the component applies force to entities that are in the bounds of the region. -+ **[PhysX Static Rigid Body](/docs/user-guide/components/reference/physx/static-rigid-body/)** - Enables a non-movable entity to be part of the physics simulation. Static rigid bodies can collide other simulated rigid bodies. -+ **[PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/)** - Enables a movable entity to be part of the physics simulation. Dynamic Rigid body type can be **kinematic** or **simulated**. Simulated rigid bodies respond to collision events with other rigid bodies. Kinematic rigid bodies are not affected by outside forces and gravity; their motion is driven by scripting. ++ **[PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/)** - Enables an entity to be simulated by physics. Rigid body mode can be **kinematic** or **dynamic**. Dynamic rigid bodies respond to collision events with other rigid bodies. Kinematic rigid bodies are not affected by outside forces and gravity; their motion is driven by scripting. + **[PhysX Character Controller](/docs/user-guide/components/reference/physx/character-controller/)** - Implements basic character interactions with the physical world. For example, it can control interactions with slopes and steps, manage interactions with other characters, and prevent characters from walking through walls or passing through terrain. + **[PhysX Character Gameplay](/docs/user-guide/components/reference/physx/character-gameplay/)** - Provides example implementations for character controller behaviors which are likely to require game-specific tweaking, such as detecting whether the character is on the ground, interacting with gravity, and behavior for interacting with kinematic bodies and other controllers. + **[PhysX Ragdoll](/docs/user-guide/components/reference/physx/ragdoll/)** - Enables animation of certain character behaviors. The physical representation is usually a hierarchical collection of rigid bodies with simple shapes connected by joints. diff --git a/content/docs/user-guide/interactivity/physics/nvidia-physx/best-practices.md b/content/docs/user-guide/interactivity/physics/nvidia-physx/best-practices.md index 0a1e5fa37d7..da35a0eb037 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-physx/best-practices.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-physx/best-practices.md @@ -6,8 +6,7 @@ weight: 600 See the following best practices when working with PhysX. + Colliders intersecting with terrain can result in unexpected behavior. For example, the object might rocket into space, jitter, or slow down performance. Avoid intersecting colliders with terrain. If you need to intersect a collider with terrain, use a small value for the collider size. These scenarios can be mitigated by clearing the **Persistent Contact Manifold** check box in the **Global Configuration** tab in the **PhysX Configuration** tool. -+ The **PhysX Character Controller** component must be on the same entity as the **Actor** component in order to work with the **Animation Editor**. -+ When adding the **PhysX Static Rigid Body** component to entities, check the **Static** option in the **Transform** component. This allows other systems to apply optimizations to static entities that will never move at run time. -+ Avoid checking the **Static** option when there is a **PhysX Dynamic Rigid Body** component. The rigid body will behave statically and a warning will appear about the incompatibility of the **PhysX Dynamic Rigid Body** component and the **Static** transform option. ++ The **PhysX Character Controller component** must be on the same entity as the **Actor** component in order to work with the **Animation Editor**. ++ If you select the **Static** check box in the **Transform** component for an entity that also has a **PhysX Rigid Body** component, the rigid body behaves statically and a warning appears about the incompatibility of the **PhysX Rigid Body** component and the **Static** transform option. + When adding the **PhysX Collider** component to entities, prefer a primitive shape (box, capsule, or sphere) for the collider. These shape colliders offer better performance and should be used when possible. diff --git a/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-collision-layers.md b/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-collision-layers.md index 35027f07ff3..e2ec6fd4265 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-collision-layers.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-collision-layers.md @@ -9,7 +9,7 @@ toc: true With collision layers, you can place related PhysX entities into categories. The following list demonstrates some example PhysX collision layers: * **Terrain** - Terrain, flooring, and any entities that player entities can traverse. -* **Static objects** - Entities that have colliders and static rigid body components, but no animation, such as large rocks, tree trunks, and walls. +* **Static objects** - Entities that have colliders, but no animation or rigid body components, such as large rocks, tree trunks, and walls. * **Players** - All player controlled entities. * **Enemies** - Entities that move via script or AI that can deal damage to, and receive damage from, player controlled entities. * **Projectiles** - Entities that can deal damage. diff --git a/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-global.md b/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-global.md index d6304edf714..8dd5008da60 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-global.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-physx/configuring/configuration-global.md @@ -35,7 +35,7 @@ The following table describes the settings for **Scene Configuration**. ## Editor configuration -The following options control the appearance of PhysX debug visualizations in **O3DE Editor**, including the **Debug Draw COM** (center of mass) option of the [PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) component. +The following options control the appearance of PhysX debug visualizations in **O3DE Editor**, including the **Debug Draw COM** (center of mass) option of the [PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/) component. {{< note >}} These options are part of the [PhysX](/docs/user-guide/gems/reference/physics/nvidia/physx/) Gem and are not related to the [Debug Draw](/docs/user-guide/gems/reference/debug/debug-draw/) Gem or the [PhysX Debug](/docs/user-guide/gems/reference/physics/nvidia/physx-debug/) Gem. diff --git a/content/docs/user-guide/interactivity/physics/nvidia-physx/joint-intro.md b/content/docs/user-guide/interactivity/physics/nvidia-physx/joint-intro.md index 33a58c66902..98a7b485263 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-physx/joint-intro.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-physx/joint-intro.md @@ -5,9 +5,9 @@ title: Dynamic joints with PhysX weight: 400 --- -PhysX joint components constrain the position and orientation of one PhysX Dynamic Rigid Body called the *follower*, relative to another rigid body, called the *leader*. The follower rigid body will have rotational freedom in zero, one, or two axes around the joint, depending on the type of PhysX joint. +PhysX joint components constrain the position and orientation of one PhysX rigid body called the *follower*, relative to another PhysX rigid body, called the *leader*. The leader rigid body will have rotational freedom in zero, one, or two axes around the joint, depending on the type of PhysX joint. -The example image below is a simple demonstration of the different joint types. In each example, the blue sphere is the lead rigid body. The red sphere is the follower rigid body, which must always be a simulated rigid body. The joint component is always part of the follower entity. Once the joint is added to the follower, it needs to be configured to be placed around the leader (using the **Local Position** and **Local Rotation** properties of the joint component). In this example, the ball and hinge leaders are static rigid bodies, but they could be kinematic or simulated rigid bodies too. +The example image below is a simple demonstration of the three joint types. In each example, the blue sphere is the follower rigid body. The joints are centered on their respective follower rigid bodies. The red sphere is the leader rigid body. For clarity, the ball joint and hinge joint follower rigid bodies are set to fixed positions, but they can be dynamic rigid bodies like the fixed joint example. Also note that the joints can be offset from the follower rigid body using the **Local Position** and **Local Rotation** properties of the joint component. ![PhysX Joints example](/images/user-guide/physx/physx/anim-joints-example.gif) @@ -28,44 +28,46 @@ The example image below is a simple demonstration of the different joint types. ## PhysX joint types See the linked component reference below for information on the three PhysX joint types: -+ [ PhysX Ball Joint component reference ](/docs/user-guide/components/reference/physx/ball-joint/) - The **PhysX Ball Joint** component allows freedom of rotation of the follower rigid body in two axes. -+ [ PhysX Fixed Joint component reference ](/docs/user-guide/components/reference/physx/fixed-joint/) - The **PhysX Fixed Joint** component does not allow freedom of rotation of the follower rigid body in any axis. -+ [ PhysX Hinge Joint component reference ](/docs/user-guide/components/reference/physx/hinge-joint/) - The **PhysX Hinge Joint** component allows freedom of rotation of the follower rigid body in one axis. ++ [ PhysX Ball Joint component reference ](/docs/user-guide/components/reference/physx/ball-joint/) - The **PhysX Ball Joint** component allows freedom of rotation of the leader rigid body in two axes. ++ [ PhysX Fixed Joint component reference ](/docs/user-guide/components/reference/physx/fixed-joint/) - The **PhysX Fixed Joint** component does not allow freedom of rotation of the leader rigid body in any axis. ++ [ PhysX Hinge Joint component reference ](/docs/user-guide/components/reference/physx/hinge-joint/) - The **PhysX Hinge Joint** component allows freedom of rotation of the leader rigid body in one axis. ## PhysX joint setup The setup for each joint type is the same. -1. Create an entity for the **leader** rigid body. +**To set up a PhysX joint** - 1. Create a new entity. Right click in **Perspective** and choose **Create enity** from the context menu. - - 1. Add a **PhysX Static Rigid Body** or a **PhysX Dynamic Rigid Body** (type *kinematic* or *simulated*) component depending if you want the leader to move or not. - - 1. Add a **PhysX Collider** component to the entity. +1. Create an entity for the joint and the follower rigid body. -1. Create an entity for the **follower** rigid body and the joint. - - 1. Create a new entity. + 1. Create a new entity. Right click in **Perspective** and choose **Create enity** from the context menu. - 1. Add a **PhysX Dynamic Rigid Body** (type *simulated*) component to the entity. + 1. Add a **PhysX Rigid Body** component to the entity. 1. Add a **PhysX Collider** component to the entity. This is required for angle limits to work correctly. Joints still work without a PhysX Collider component but angle limits and might not be enforced. This is also true when using trigger colliders. - 1. Add one of the PhysX joint components: + 1. Add one of the PhysX joint components: + **PhysX Ball Joint** + **PhysX Fixed Joint** + **PhysX Hinge Joint** - 1. Assign the leader entity to the PhysX joint by clicking the **Target** button to the right of the **Lead Entity** property and select the leader entity in **Perspective**. + 1. The joint's position and orientation are expressed as an offset from the follower. Adjust the position and orientation of the joint by changing the **Local Position** and **Local Rotation** fields in the PhysX joint component. + +1. Create an entity for the leader rigid body. + + 1. Create a new entity. + + 1. Add a **PhysX Rigid Body** component to the entity. + + 1. Add a **PhysX Collider** component to the entity. + +1. Assign the leader entity to the **Lead Entity** property of the PhysX joint. - 1. Adjust the position and orientation of the joint to move it to the leader's location. Use the **Local Position** and **Local Rotation** fields in the PhysX joint component. You can enter component mode by clicking the **Edit** button and configure the joint in **Perspective**. + 1. In the Joint component, click the **Target** button to the right of the **Lead Entity** property to start entity selection. -{{< note >}} -It is not required for a follower rigid body to have an leader rigid body. When a follower doesn't have a leader it will be constrained on global position. -{{< /note >}} + 1. In **Perspective**, click on the leader entity to select it and assign it to the **Lead Entity** property. -## PhysX Joint configuration using component edit mode +## PhysX Joint configuration Joint components have an **Edit** button that enables component edit mode. In component edit mode, you can edit the properties of the joint in **Perspective**. You can use one of several edit contexts in component edit mode. Press the **Tab** key to cycle through the edit mode contexts. The current context is displayed at the bottom of the **Perspective** pane. diff --git a/content/docs/user-guide/interactivity/physics/nvidia-physx/simulated-bodies.md b/content/docs/user-guide/interactivity/physics/nvidia-physx/simulated-bodies.md index 09d3c46f3f5..7cebd9ffa5d 100644 --- a/content/docs/user-guide/interactivity/physics/nvidia-physx/simulated-bodies.md +++ b/content/docs/user-guide/interactivity/physics/nvidia-physx/simulated-bodies.md @@ -5,8 +5,7 @@ weight: 300 --- `AzPhysics::SimulatedBody` is a base type from which many PhysX components inherit: -+ **[PhysX Static Rigid Body](/docs/user-guide/components/reference/physx/static-rigid-body/)** -+ **[PhysX Dynamic Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/)** ++ **[PhysX Rigid Body](/docs/user-guide/components/reference/physx/rigid-body/)** + **[PhysX Character Controller](/docs/user-guide/components/reference/physx/character-controller/)** + **[PhysX Ragdoll](/docs/user-guide/components/reference/physx/ragdoll/)** diff --git a/content/docs/user-guide/networking/multiplayer/VersionMismatch.md b/content/docs/user-guide/networking/multiplayer/VersionMismatch.md deleted file mode 100644 index 07cfb3d07a6..00000000000 --- a/content/docs/user-guide/networking/multiplayer/VersionMismatch.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -linkTitle: Version Mismatch -title: Multiplayer Version Mismatch -description: Learn how to detect multiplayer version mismatch in Open 3D Engine (O3DE). -weight: 900 ---- - -In order to keep the multiplayer simulation in sync, it's important that all connected multiplayer endpoints are running the same multiplayer version. - -For example, consider a server that is running a particular build of a multiplayer game. If an updated client connects with changes to its network components, the server may not know how to handle the updated network properties, or how to serialize network packets correctly. - -Servers and clients must be running the same version of all the multiplayer components (components which communicate to each other over the network); any difference may lead to unexpected behavior. - -**Open 3D Engine (O3DE)** networking provides multiplayer version checks to identify and guard against this unexpected behavior. - -## How to enable the Multiplayer Version Mismatch feature: -Multiplayer version mismatch detection is enabled automatically inside the [Multiplayer Gem](/docs/user-guide/gems/reference/multiplayer/). If two multiplayer endpoints connect with different versions, a `Multiplayer::VersionMismatchEvent` [AZ::Event](/docs/user-guide/programming/az-event/) will be triggered. In addition, information about which auto-components are mismatched will be printed to the console and written to logs to aid debugging. - -## Relevant console variables (CVARs) -| Setting | Description | Default | | -|------------------------------------|-------------------------------------------------------------|---------|--------------------------| -| sv_versionMismatch_autoDisconnect | Determines if a mismatched connection will automatically terminate. It's recommended to keep this true; even minor differences between the version of a multiplayer component can cause unexpected behavior. | True | -| sv_versionMismatch_sendManifestToClient | Determines if the server will send all its individual multiplayer component version information to the client when there's a mismatch. Upon receiving the information, the client will print which components are different to the console. It's recommended to set to false for release builds. This is to prevent clients having knowledge to any multiplayer component information that should be kept private (component names and version hashes). | True | -| bg_viewportConnectionStatus| If true, the viewport connection status system will display on-screen warnings whenever important multiplayer events occur; this includes version mismatches. | True || - -## How it works behind the scenes: -1. AzAutoGen creates a unique 64-bit hash value for each auto-component XML file that it digests. - 1. The 64-bit hash will be stored in the `ComponentData` class that’s passed to the global `MultiplayerComponentRegistry`. -2. During application start up, as all the gems are registering their components with the `MultiplayerComponentRegistry`, the `MultiplayerComponentRegistry` will combine each component’s hash to create its own 64-bit system version hash. -3. On a connection event the `MultiplayerComponentRegistry’s` version hash is sent from the connector (typically the client) to the acceptor (the server) as part of the `MultiplayerPackets::Connect` packet. -4. Server will compare the client’s version hash with its own to make sure it matches. - 1. If there's a multiplayer system version mismatch then: - 1. A version mismatch packet is exchanged containing the version hash of each individual auto-component in order for the server and client to know exactly which components are out-of-date. - 2. Error logs are reported. - 3. An [AZ::Event](/docs/user-guide/programming/az-event/) is broadcast using `AZ::Interface::Get()->AddVersionMismatchHandler`. - 4. The connection is terminated (if `sv_versionMismatch_autoDisconnect` is enabled). diff --git a/content/docs/user-guide/networking/multiplayer/_index.md b/content/docs/user-guide/networking/multiplayer/_index.md index 9d622830aec..ee07d7445ff 100644 --- a/content/docs/user-guide/networking/multiplayer/_index.md +++ b/content/docs/user-guide/networking/multiplayer/_index.md @@ -26,7 +26,6 @@ The Multiplayer Gem supports the following: | [Configuring a Project](configuration) | How to add and enable the O3DE Multiplayer Gem in a project. | | [Running Multiplayer Projects](running) | How to run projects that use the O3DE Multiplayer Gem. | | [Multiplayer Auto-components](autocomponents) | How to automatically create components for use with the Multiplayer Gem using the AzAutoGen system. | -| [Separating Client and Server](code_separation) | How to separate client and server logic and build dependencies. | [Testing Multiplayer Projects in the Editor](test-in-editor) | How to automatically launch local servers or connect to a remote persistent server when working on a multiplayer project in the **O3DE Editor**. | | [Network Entity Hierarchies](hierarchy) | How to group network entities into hierarchies that process their input together. | | [Spawning Players](spawning) | How to spawn an entity for a connecting player to control. | diff --git a/content/docs/user-guide/networking/multiplayer/code_separation.md b/content/docs/user-guide/networking/multiplayer/code_separation.md deleted file mode 100644 index 45adb672f9a..00000000000 --- a/content/docs/user-guide/networking/multiplayer/code_separation.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: Separating Multiplayer Logic into Client and Server Launchers -description: Build Open 3D Engine launchers with the Multiplayer Gem specifically targeting Clients, Servers or both. -linkTitle: Separating Client and Server -weight: 450 ---- - -The **Multiplayer Gem** supports code separation at build time, to create code that contains only client logic, only server logic, or both client and server logic. This allows users to create executables of smaller size by excluding unnecessary logic and dependencies. It also allows hiding potentially sensitive logic unique to one executable from the other. For example, ensuring that a free-to-play client executable never includes any server logic code will reduce the chances of hacking or abuse. - -The splitting functionality produces multiple build types: -* _GameLauncher_ is a client-only launcher. -* _ServerLauncher_ is a server-only launcher suitable for dedicated servers. -* _UnifiedLauncher_ provides both functionalities, and is suitable for _client-hosted servers_, which are clients that can simultaneously host and participate in a multiplayer session. - -This functionality is implemented through a variety of build mechanisms and it's important to understand these mechanisms in any Gem or project using the Multiplayer Gem. - -## Splitting client and server logic - -The Multiplayer Gem contains code files that can be divided into two categories: -1. Files that are fully required on all launcher types. -2. Files that have parts conditionally compiled out depending on launcher type and their dependents. - -These file lists are maintained in `multiplayer_files.cmake` and `multiplayer_split_files.cmake` respectively. - -`multiplayer_files.cmake` generally contains core datatypes, base and core classes. `multiplayer_split_files.cmake` contains AutoComponent based MultiplayerComponents and types dependent on them. - -### CMake setup - -The split by cmake files leads us to four Multiplayer targets: - -1. Common - A target containing `multiplayer_files.cmake`. -2. Client - A target containing `multiplayer_files.cmake` plus `multiplayer_split_files.cmake` conditionally compiled for clients. -3. Server - A target containing `multiplayer_files.cmake` plus `multiplayer_split_files.cmake` conditionally compiled for servers. -4. Unified - A target containing `multiplayer_files.cmake` plus `multiplayer_split_files.cmake` conditionally compiled for both clients and servers. - -When including the Multiplayer Gem it is important to understand the needs of your usage. If the usage requires split logic, it is recommended to create Client, Server, and Unified targets which specify `Multiplayer.Client`, `Multiplayer.Server `, and `Multiplayer.Unified` dependencies, respectively. If your usage does not require split logic, then `Multiplayer.Common` is sufficient. - -As an example, [MultiplayerSample](https://github.com/o3de/o3de-multiplayersample) uses and builds upon MultiplayerComponents in the Multiplayer Gem. It therefore defines its own respective Client, Server and Unified targets. - -{{< note >}} -The following CMake examples are abbreviated. -{{< /note >}} - -```cmake - ly_add_target( - NAME MultiplayerSample.Client.Static STATIC - NAMESPACE Gem - FILES_CMAKE - multiplayersample_autogen_files.cmake - multiplayersample_files.cmake - ${pal_dir}/multiplayersample_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake - BUILD_DEPENDENCIES - PUBLIC - Gem::DebugDraw - Gem::PhysX - Gem::Multiplayer - PRIVATE - Gem::Multiplayer.Client.Static - Gem::PhysX.Static - Gem::DebugDraw.Static - Gem::ImGui.Static - AUTOGEN_RULES - *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h - *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp - *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h - *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp - ) - - ly_add_target( - NAME MultiplayerSample.Server.Static STATIC - NAMESPACE Gem - FILES_CMAKE - multiplayersample_autogen_files.cmake - multiplayersample_files.cmake - ${pal_dir}/multiplayersample_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake - BUILD_DEPENDENCIES - PUBLIC - Gem::PhysX - Gem::Multiplayer - PRIVATE - Gem::Multiplayer.Server.Static - Gem::PhysX.Static - AUTOGEN_RULES - *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h - *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp - *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h - *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp - ) - - ly_add_target( - NAME MultiplayerSample.Unified.Static STATIC - NAMESPACE Gem - FILES_CMAKE - multiplayersample_autogen_files.cmake - multiplayersample_files.cmake - ${pal_dir}/multiplayersample_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake - BUILD_DEPENDENCIES - PUBLIC - Gem::DebugDraw - Gem::PhysX - Gem::Multiplayer - PRIVATE - Gem::Multiplayer.Unified.Static - Gem::PhysX.Static - Gem::DebugDraw.Static - Gem::ImGui.Static - AUTOGEN_RULES - *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h - *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp - *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h - *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp - ) -``` - -Meanwhile, Multiplayer_ScriptCanvas only requires core datatypes so it only uses `Multiplayer.Common`. - -```cmake - ly_add_target( - NAME ${gem_name}.Static STATIC - NAMESPACE Gem - FILES_CMAKE - scriptcanvas_multiplayer_files.cmake - scriptcanvas_autogen_files.cmake - BUILD_DEPENDENCIES - PUBLIC - Gem::ScriptCanvas - PRIVATE - Gem::Multiplayer.Common.Static - ) -``` -### Conditional compilation - -MultiplayerComponents are subject to conditional compilation. This is done using the macros `AZ_TRAIT_CLIENT` and `AZ_TRAIT_SERVER`. Client-specific logic should be wrapped in the former, while server-specific logic should be wrapped in the latter. The motivation for this approach is to allow target specific logic in MultiplayerComponents without requiring target specific files (i.e. a ServerComponent and ClientComponent with or without a BaseComponent). - -In the Multiplayer Gem's cmake, observe that each target enables or disables these traits based on the target. For example, Server enables `AZ_TRAIT_SERVER` while disabling `AZ_TRAIT_CLIENT`. Usage of these targets will bring the macro definitions with them. - -{{< note >}} -The following CMake example is abbreviated. -{{< /note >}} - -```cmake - ly_add_target( - NAME Multiplayer.Client.Static STATIC - NAMESPACE Gem - FILES_CMAKE - multiplayer_split_files.cmake - COMPILE_DEFINITIONS - PUBLIC - AZ_TRAIT_CLIENT=1 - AZ_TRAIT_SERVER=0 - BUILD_DEPENDENCIES - PUBLIC - AZ::AzCore - AZ::AzFramework - AZ::AzNetworking - Gem::Multiplayer.Common.Static - ) - - ly_add_target( - NAME Multiplayer.Server.Static STATIC - NAMESPACE Gem - FILES_CMAKE - multiplayer_split_files.cmake - COMPILE_DEFINITIONS - PUBLIC - AZ_TRAIT_CLIENT=0 - AZ_TRAIT_SERVER=1 - BUILD_DEPENDENCIES - PUBLIC - AZ::AzCore - AZ::AzFramework - AZ::AzNetworking - Gem::Multiplayer.Common.Static - ) - - ly_add_target( - NAME Multiplayer.Unified.Static STATIC - NAMESPACE Gem - FILES_CMAKE - multiplayer_split_files.cmake - COMPILE_DEFINITIONS - PUBLIC - AZ_TRAIT_CLIENT=1 - AZ_TRAIT_SERVER=1 - BUILD_DEPENDENCIES - PUBLIC - AZ::AzCore - AZ::AzFramework - AZ::AzNetworking - Gem::Multiplayer.Common.Static - ) -``` - -### AutoComponents - -AutoComponents make use of `AZ_TRAIT_SERVER` and `AZ_TRAIT_CLIENT`. Depending on the specification of elements of a component, they will conditionally exclude logic. For example, given an RPC that is invoked on the client and handled on the server, the invocation signal will be wrapped in `AZ_TRAIT_CLIENT` while the handler will be wrapped in `AZ_TRAIT_SERVER`. Classes inheriting from AutoComponents will need to honor these usages in order to compile correctly. - -Consider the following RPC: - -```xml - - - - -``` - -This generates the following AutoComponent signatures: - -```cpp - //! SendClientInput Invocation - //! Client to server move / input RPC - //! HandleOn Authority - #if AZ_TRAIT_CLIENT - void SendClientInput(const Multiplayer::NetworkInputArray& inputArray, const AZ::HashValue32& stateHash); - #endif - - #if AZ_TRAIT_SERVER - //! SendClientInput Handler - //! Client to server move / input RPC - //! HandleOn Authority - virtual void HandleSendClientInput(AzNetworking::IConnection* invokingConnection, const Multiplayer::NetworkInputArray& inputArray, const AZ::HashValue32& stateHash) {} - #endif -``` - -A component inheriting from this AutoComponent that overrides HandleSendClientInput would need to similarly wrap it in `AZ_TRAIT_SERVER` as well. \ No newline at end of file diff --git a/content/docs/user-guide/networking/multiplayer/test-in-editor.md b/content/docs/user-guide/networking/multiplayer/test-in-editor.md index 780980257ee..516c4ad6f7a 100644 --- a/content/docs/user-guide/networking/multiplayer/test-in-editor.md +++ b/content/docs/user-guide/networking/multiplayer/test-in-editor.md @@ -24,17 +24,3 @@ The **Multiplayer Gem** exposes a variety of cvars to help you configure how to | `editorsv_rhi_override` | `string` | Override the default rendering hardware interface (rhi) when launching the Editor server. For example, you may be running an Editor using 'dx12', but want to launch a headless server using 'null'. If empty, the server will launch using the same rhi as the Editor. | Using these features, you can configure the Editor to connect to a compatible remote host if you wanted or a specific server executable. For example, you could configure your profile Editor to connect to a debug server. - -![The Editor connected to a dedicated server](/images/user-guide/networking/multiplayer/editor_client_with_dedicated_server_mode.png) - -#### Configuring Editor in Client-Server Mode - -You can configure your Editor to act as both the server and a client at the same time. This allows for an immediate start of game mode when pressing CTRL-G. (On the other hand, it takes a few seconds to enter the game mode with the dedicated server as configured above.) This mode requires two CVars to be set to true: `editorsv_enabled` and `editorsv_clientserver`. - -| CVar name | Type | Description | -|--|--|--| -| `editorsv_clientserver` | `bool` | Whether the Editor should act as a server and a client at the same time, without launching a dedicated server process. This is useful for quick iterative work that does not require testing client-only logic. | - -You can tell which multiplayer editor game mode are you in by looking at the debug text in the bottom right corner of the Editor's viewport. - -![The Editor with editorsv_clientserver set to true](/images/user-guide/networking/multiplayer/editor_clientserver_mode.png) diff --git a/content/docs/user-guide/networking/settings.md b/content/docs/user-guide/networking/settings.md index b2b239a3720..7de87722fff 100644 --- a/content/docs/user-guide/networking/settings.md +++ b/content/docs/user-guide/networking/settings.md @@ -82,7 +82,6 @@ The `sv` CVARs control server behavior. | sv_isDedicated | Whether the host command creates an independent or client hosted server. | True | | | sv_isTransient | Whether a dedicated server shuts down if all existing connections disconnect. | True || | sv_serverSendRateMs | Minimum number of milliseconds between each network update. | 50 ms || -| sv_versionMismatch_autoDisconnect | Determines if a mismatched connection will automatically terminate. It's recommended to keep this true; even minor differences between the version of a multiplayer component can cause unexpected behavior. | True || ### Server to client connection settings | Setting | Description | Default | Notes | @@ -119,7 +118,6 @@ The `editorsv` settings control how a server will be launched during the "play-i | editorsv_process | The file path to your project's ServerLauncher. If `editorsv_enabled` and `editorsv_launch` is true, the Editor will attempt to launch its own server when entering game mode. By default it looks for the ServerLauncher executable inside the same folder where Editor lives; `editorsv_process` overrides that path. | "" | | | editorsv_rhi_override | If `editorsv_launch` is true, the server will use the same render hardware interface (rhi) that the editor is using. For example, if the editor is using DX12, then the new server will be launched using DX12. `editorsv_rhi_override` can be used to override the rhi. | "" | If you don't need to see the launched server's graphics then set `editorsv_rhi_override=null`, the null renderer. | | editorsv_enabled | If true the Editor will attempt to connect to a Multiplayer server upon entering game mode. | False || -| editorsv_clientserver | Whether the Editor should act as the server and a client at the same time, without launching a dedicated server process. | False | Only applies if `editorsv_enabled` is also true. | | editorsv_hidden | If true the Editor will automatically launch a server upon entering game mode. Set `editorsv_hidden` to true if you want the launched server to be started as a background process without any visible window. | False | | | editorsv_launch | If true the Editor will automatically launch its own server upon entering game mode. | True | Only applies if `editorsv_enabled` is also true. If starting your own editor-server remember to set `editorsv_isDedicated` to true on the server | | editorsv_connectionMessageFontSize | | 0.7 | | @@ -208,7 +206,6 @@ The `net` settings control networking behavior. | Setting | Description | Default | Notes | |------------------------------------|-------------------------------------------------------------|---------|--------------------------| | net_DebugCheckNetworkEntityManager | Enables extra debug checks inside the NetworkEntityManager. | False | Requires Multiplayer Gem | -| sv_versionMismatch_sendManifestToClient | Determines if the server will send all its individual multiplayer component version information to the client when there's a mismatch. Upon receiving the information, the client will print which components are different to the console. It's recommended to set to false for release builds. This is to prevent clients having knowledge to any multiplayer component information that should be kept private (component names and version hashes). | True || ### Other useful settings The following settings can be passed as command line arguments to control server performance. diff --git a/content/docs/user-guide/packaging/asset-bundler/overview.md b/content/docs/user-guide/packaging/asset-bundler/overview.md index fca2734bf36..819a687b178 100644 --- a/content/docs/user-guide/packaging/asset-bundler/overview.md +++ b/content/docs/user-guide/packaging/asset-bundler/overview.md @@ -26,7 +26,7 @@ By using the Asset Bundler, because you have smaller release packages, less risk Generating a platform-specific asset bundle using the Asset Bundler follows these steps: -1. **Define your seeds**. A *seed* is generally a top-level asset, such as a `.spawnable` file that contains an entire game level. You must have one or more seeds defined in a seed list. A seed list is a file with the suffix `.seed`. +1. **Define your seeds**. A *seed* is generally a top-level asset, such as a `.pak` file that contains an entire game or game level. You must have one or more seeds defined in a seed list. A seed list is a file with the suffix `.seed`. 1. **Generate your asset lists**. The Asset Bundler evaluates each seed defined in your seed list. It then recursively evaluates each dependent asset for inclusion in a complete asset list. Generated asset lists have the suffix `.assetlist`. @@ -38,7 +38,7 @@ Generating a platform-specific asset bundle using the Asset Bundler follows thes ![The steps used in the general process for bundling assets with O3DE.](/images/user-guide/assetbundler/asset-bundler-overview.png) -In this example, the seeds are the assets Level1.spawnable and Level2.spawnable. These `.spawnable` files reference O3DE prefab product asset files and in this context represent game levels, which reference the entity meshes they contain, which in turn reference the material and texture files for those entities. +In this example, the seeds are the assets Level1.pak and Level2.pak. These `.pak` files reference O3DE slice files, which reference the entity meshes they contain, which in turn reference the material and texture files for those entities. With those product dependency relationships in place, the Asset Bundler examines the hierarchies of each seed and generates an asset list. Asset lists, along with the bundle settings file that you create, are used to assemble the final bundle as a `.pak` file with all of the dependent assets. Any assets not associated with a seed are not included in the final release bundle. diff --git a/content/docs/user-guide/packaging/windows-release-builds.md b/content/docs/user-guide/packaging/windows-release-builds.md index 7e418cc214d..f05bfe7c0d6 100644 --- a/content/docs/user-guide/packaging/windows-release-builds.md +++ b/content/docs/user-guide/packaging/windows-release-builds.md @@ -228,13 +228,9 @@ The most common workflow is to release your game only, in which case you should ```cmd cd C:\o3de - cmake --preset windows-mono-default -DO3DE_INSTALL_ENGINE_NAME=o3de-install + cmake --preset windows-mono-default -DLY_VERSION_ENGINE_NAME=o3de-install ``` - {{< note >}} -Use `Visual Studio 16` as the generator for Visual Studio 2019, and `Visual Studio 17` for Visual Studio 2022. For a complete list of common generators for each supported platform, refer to [Configuring projects](/docs/user-guide/build/configure-and-build/#configuring-projects). - {{< /note >}} - 1. In your source engine, use CMake to invoke Visual Studio to append non-monolithic release artifacts to the pre-built SDK layout. ```cmd @@ -267,7 +263,7 @@ A pre-built SDK engine supports non-monolithic projects by default. As detailed ```cmd cd C:\o3de - cmake --preset windows-default -DO3DE_INSTALL_ENGINE_NAME=o3de-install + cmake --preset windows-default -DLY_VERSION_ENGINE_NAME=o3de-install ``` **Note:** Use `Visual Studio 16` as the generator for Visual Studio 2019, and `Visual Studio 17` for Visual Studio 2022. For a complete list of common generators for each supported platform, refer to [Configuring projects](/docs/user-guide/build/configure-and-build/#configuring-projects). diff --git a/content/docs/user-guide/programming/metrics/_index.md b/content/docs/user-guide/programming/metrics/_index.md deleted file mode 100644 index 26eb0860108..00000000000 --- a/content/docs/user-guide/programming/metrics/_index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -linktitle: Metrics API -title: Performance Metrics Gathering in O3DE -description: Describes how to use the Performance Gathering API in Open 3D Engine (O3DE) to log performances metrics to JSON -weight: 450 ---- -## Performance Metrics Gathering Explained -The Performance Metrics Gathering API in the **Open 3D Engine (O3DE)** provides a standardized API for gathering metrics relevant to for querying a feature system performance metrics. -It provides a C++ interface for recording metrics based on the Google [Trace Event Format](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#) via the Event Logger API. -A Statistic collection API is provided via the [Statistical Manager](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/Statistics/StatisticsManager.h), which can record statistics over a period of frames and calculate higher level statistical results, including minimum, maximum, standard deviation, and variance. -These two APIs are tied to the Performance Collector system, which encapsulates a Statistical Manager and a JSON trace Event Logger to record statistical metrics data to record gathered statistics to the Google Trace Event Format. - -To learn how to use the Event Logger API in order to set up a JSON Trace Event Log into the Google [Trace Event Format](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#) and preview the logs in a Chromium-based browser, read [Recording using Json Trace Event Logger](./trace-event-logger.md). diff --git a/content/docs/user-guide/programming/metrics/trace-event-logger.md b/content/docs/user-guide/programming/metrics/trace-event-logger.md deleted file mode 100644 index 45c17ec5fa9..00000000000 --- a/content/docs/user-guide/programming/metrics/trace-event-logger.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -linktitle: Google Trace Event Format -title: Google Trace Event Format Metrics -description: Describes how to create, register and record metrics using the Event Logger API in Open 3D Engine (O3DE) to JSON format viewable in the chromium about:tracing window. -weight: 100 ---- - - -## Learn the JSON Trace Event Logger - -The Trace Event Logger in **Open 3D Engine (O3DE)** provides the ability to log metrics compatible with the Google [Trace Event Format](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#). -The implementation is a limited subset of Google Trace format and only events types relevant for O3DE needs at the time have been implemented. - -O3DE currently supports the following set of events: -|Events|Description|Phase Markers| -|---|---|---| -|Duration|Provides a way to measure duration within a single thread. Duration events can be nested|B (begin), E(end)| -|Complete|Combines the Begin and End of a Duration Event into a single event.|X| -|Instant|Corresponds to an event that occurs at a point in time. It has no duration associated with it. For example an out of memory event might be logged as an "instant" event. An "s" scope parameter is available to provide the scope of the event. Valid scopes are "g" (global), "p" (process), "t" (thread). If no scope is provided it is assumed to be a thread scope event.|i| -|Counter|Provides a way to track multiple values over time. When an "id" is provided , it combines with the "name" field to form the counter name.|C| -|Async|Provides a way to measure asynchronous operations across multiple threads. This event may be used to output the frame time or network I/O stastistics. Events with the same "cat"(category) and "id" field values are considered to be from the same event tree. The "scope" argument is an optional string used to avoid id conflicts. When specified the "cat", "id" and "scope" will be used to identify an event from the same event tree.|b (nestable start), n (nestable instant), e (nestable end)| - - -The following set of events are not provided by the JSON Trace Event Logger in O3DE currently: -|Events|Description|Phase Markers| -|---|---|---| -|Flow|Similar to an asynchronous event, except each thread can have a duration associated with it.|s (start), t (step), f (end)| -|Object|Provides a way to build complex structures in events. Normally used to track when an object instance is created("N") and destroyed("D") in-memory. The "O" object can be used to associate "snapshot" data with an object, which can be anything that is storable in an JSON object.|N (created), O (snapshot), D (destroyed)| -|Metadata|Allows associating associating custom data with one of the supported fields("process_name", "process_labels", "process_sort_index", "thread_name", "thread_sort_index"). The "args" argument is used to specify that metadata.|M| -|Memory Dump|Corresponds to a memory dump of either the global OS memory or the running application process memory. The "V" phase is used for a global memory information such as system ram. The "v" phase is used for process statistics.|V (global), v (process)| -|Mark|(Not Needed for O3DE) Used for logging events when a web navigation timing API is used.|R| -|Clock Sync|(Not needed for O3DE) Used to perform sync clock synchronization among multiple event logs.|c| -|Context|Used to mark a sequence of events belonging to a context.|,| - -More information about each of these events can be found in the [Event Descriptions](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#heading=h.uxpopqvbjezh) section of the Google Trace Event Format document. - -## Event Logger API documentation - -Detailed doxygen comments on the available interfaces for the Event Logger API is located within the header API files located within the [Code/Framework/AzCore/AzCore/Metrics](https://github.com/o3de/o3de/tree/development/Code/Framework/AzCore/AzCore/Metrics) directory. -Within that directory the following are the most important files to examine to learn about the API: - -|File|Description| -|---|---| -|[IEventLogger.h](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/Metrics/IEventLogger.h)|Provides the interface for recording event data via using an Event Description. Structures definitions for specific Event Phase Types are also described in this file.| -|[IEventLoggerFactory.h](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/Metrics/IEventLoggerFactory.h)|Provides the interface for registration of Event Loggers with a global registrar. This can be used to access Event Loggers accross shared library boundaries or access an EventLogger without the needing to store it explicitly.| -|[EventLoggerUtils.h](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/AzCore/Metrics/EventLoggerUtils.h)|Contains utility functions to simplify recording of events using the Event Logger API. The functions can both query and Event Logger from the Event Logger Factory and record and event in a single call. This file also provides the simplified `AZ::Metrics::RecordEvent` api which can accept any type of supported Event Phase Type.| - -## How to use the JSON Trace Event Logger - -This section describes how to register to create an Event Factory and register it with a global interface, create an Event Logger, provide the Event Logger stream to record data output and to record sample metrics. By the end you will be able to view collected metrics in a Chromium-based browser. - -The full source code in this section is available in the [JsonTraceEventLogger Unit Tests](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/Tests/Metrics/JsonTraceEventLoggerTests.cpp) and [EventLoggerUtils Unit Tests](https://github.com/o3de/o3de/blob/development/Code/Framework/AzCore/Tests/Metrics/EventLoggerUtilsTests.cpp) - -### Create EventLogger Factory and register it as a global instance -```c++ -//! The logger is created from a compile time hash of the "SampleEventLogger" string using the FNV-1a 64 bit algorithm -constexpr AZ::Metrics::EventLoggerId SampleLoggerId{ static_cast(AZStd::hash{}("SampleEventLogger")) }; - -//! This is a google test fixture class used for illustration purposes of recording using the Event Logger API -class JsonTraceEventLoggerTest - : public ::UnitTest::ScopedAllocatorSetupFixture -{ -public: - JsonTraceEventLoggerTest() - { - // Create an event logger factory - m_eventLoggerFactory = AZStd::make_unique(); - - // Register it as a global instance - AZ::Metrics::EventLoggerFactory::Register(m_eventLoggerFactory.get()); - - //... - } - -protected: - AZStd::string m_metricsOutput; - AZStd::unique_ptr m_eventLoggerFactory; -}; -``` - -### Create a JSON Trace Event Logger that writes to an in-memory string and register it with the Event Logger Factory -```c++ - JsonTraceEventLoggerTest() - { - //... Previous logic to register event factory - - // Create an byte container stream that allows event logger output to be logged in-memory - auto metricsStream = AZStd::make_unique>(&m_metricsOutput); - // Create the trace event logger that logs to the Google Trace Event format - auto eventLogger = AZStd::make_unique(AZStd::move(metricsStream)); - - // Register the Google Trace Event Logger with the Event Logger Factory - auto registerOutcome = m_eventLoggerFactory->RegisterEventLogger(SampleLoggerId, AZStd::move(eventLogger)); - // Validate that the registration of the factory succeeded - EXPECT_TRUE(registerOutcome); - } -``` - -### Generate duration trace metrics and record them to the Event Logger - -The following block of code shows how to record a string and a number using the event logger: - -```c++ -{ - constexpr AZStd::string_view eventString = "Hello world"; - constexpr AZ::s64 eventInt64 = -2; - - - // Populate the "args" container to associate with each events "args" field - AZ::Metrics::EventObjectStorage argsContainer; - argsContainer.emplace_back("string", eventString); - argsContainer.emplace_back("int64_t", eventInt64); - - { - // Record Duration Begin and End Events - AZ::Metrics::DurationArgs durationArgs; - durationArgs.m_name = "Duration Event"; - durationArgs.m_cat = "Test"; - durationArgs.m_args = argsContainer; - durationArgs.m_id = "0"; - auto resultOutcome = AZ::Metrics::RecordEvent(SampleLoggerId, AZ::Metrics::EventPhase::DurationBegin, durationArgs); - EXPECT_TRUE(resultOutcome); - - // Update the string value to "GoodbyeWorld and the integer value to "400" - argsContainer[0].m_value = "Goodbye world"; - argsContainer[1]= 400; - - // Re-update the durationArgs argument container to have the latetst argument values - durationArgs.m_args = argsContainer; - - resultOutcome = AZ::Metrics::RecordEvent(SampleLoggerId, AZ::Metrics::EventPhase::DurationEnd, durationArgs); - EXPECT_TRUE(resultOutcome); - } -} -``` - -### Flush the metrics string to a text file - -At this point the the metrics can be logged to `stdout`, sent over the network or written to a JSON file on disk. -The example will write the metrics a file named with the prefix "sample_metrics_" with the current time formatted using the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) standard. An example filename is `sample_metrics_2023-01-01T120000.123456.json`. -```c++ -{ - constexpr AZ::IO::OpenMode openMode = AZ::IO::OpenMode::ModeWrite; - auto metricsFilepath = AZ::IO::FixedMaxPath(AZ::Utils::GetProjectUserPath()) / "metrics/sample_metrics_"; - //! Append a ISO 8601 timestamp to the metrics filename to make it unique across runs - AZ::Date::Iso8601TimestampString currentUtcTimestamp; - AZ::Date::GetFilenameCompatibleFormatNowWithMicroseconds(currentUtcTimestamp) - metricsFilepath.Native() += currentUtcTimestamp; - metricsFilepath.Native() += ".json"; - - AZ::IO::SystemFileStream systemFileStream(metricsFilepath.c_str(), openMode); - // The metrics were written to the ByteContainerStream which was backed by the @m_metricsOutput member - systemFileStream.Write(m_metricsOutput.size(), m_metricsOutput.c_str()); -} -``` - -### Event Metrics JSON output - - The following example shows logging of metrics using multithreads, to illustrate that the thread ID is associated with each metric. -```json -[ - {"name":"Duration Event","id":"0","cat":"Test","ph":"B","ts":1664329933375019,"pid":31760,"tid":36036,"args":{"string":"Hello world","int64_t":-2}}, - {"name":"Duration Event","id":"0","cat":"Test","ph":"E","ts":1664329933375119,"pid":31760,"tid":36036,"args":{"string":"Goodbye world","int64_t":400}} -] -``` - - -### Viewing the event metrics -Using a Cchromium-based browser `about:tracing` page or the trace-viewer provided by the [catapult repo](https://google.github.io/trace-viewer/), the recorded metrics can be visualized based on their event types. - -![about::tracing](/images/user-guide/metrics/about-tracing.png) diff --git a/content/docs/user-guide/scripting/lua/debugging-tutorial.md b/content/docs/user-guide/scripting/lua/debugging-tutorial.md index e428ebedc32..07563dc9821 100644 --- a/content/docs/user-guide/scripting/lua/debugging-tutorial.md +++ b/content/docs/user-guide/scripting/lua/debugging-tutorial.md @@ -68,7 +68,7 @@ This tutorial shows you how to use O3DE Lua Editor to perform debugging operatio ## Connect to O3DE Editor -The [**Remote Tools Gem**](/docs/user-guide/gems/reference/debug/remote-tools) facilitates local connections between O3DE applications. +The [**Remote Tools Gem**](docs/user-guide/gems/reference/debug/remote-tools) facilitates local connections between O3DE applications. {{< note >}} The **Remote Tools Gem** must be [enabled in your project](/docs/user-guide/project-config/add-remove-gems/#enabling-or-disabling-gems) for debugging to work. @@ -148,4 +148,4 @@ The following table summarizes common options available while debugging. | ![Step Into Icon](/images/user-guide/scripting/lua/lua-editor-debugger-step-into.png) | Step Into | **F11** | Step into the function called on the current line. | | ![Step Out Icon](/images/user-guide/scripting/lua/lua-editor-debugger-step-out.png) | Step Out | **Shift+F11** | Step out of the called function. | | ![Step Over Icon](/images/user-guide/scripting/lua/lua-editor-debugger-step-over.png) | Step Over | **F10** | Step over the function called on the current line. | -| ![Toggle Breakpoint Icon](/images/user-guide/scripting/lua/lua-editor-debugger-toggle-breakpoint.png) | Toggle Breakpoint | **F9** | Enable or disable a breakpoint on the current line. | \ No newline at end of file +| ![Toggle Breakpoint Icon](/images/user-guide/scripting/lua/lua-editor-debugger-toggle-breakpoint.png) | Toggle Breakpoint | **F9** | Enable or disable a breakpoint on the current line. | diff --git a/content/docs/welcome-guide/requirements.md b/content/docs/welcome-guide/requirements.md index 0ed691238b6..2730222f8fd 100644 --- a/content/docs/welcome-guide/requirements.md +++ b/content/docs/welcome-guide/requirements.md @@ -130,14 +130,14 @@ The primary Linux distribution for using the O3DE Editor is Ubuntu {{< versions/ Support for Ubuntu 22.04 is in an experimental stage. {{< /note >}} -The following instructions describe how to retrieve and install the required software packages through Ubuntu's `apt` command-line utility. +The following instructions describe how to retrieve and install the required software packages through Ubuntu's `apt-get` command-line utility. ### CMake {#linux-cmake} As with the other operating systems, [CMake {{< versions/cmake >}} or later](https://cmake.org/download/#latest) is required to configure and build O3DE projects. We strongly recommend that you install the **Latest Release** of CMake rather than the default one provided by your current Linux distribution. If CMake is already installed, but does not match the minimum version, you will need to remove it with the following command. ```shell -sudo apt remove cmake +sudo apt-get remove cmake ``` Install CMake using the instructions for the version of Ubuntu that you have installed: @@ -145,16 +145,16 @@ Install CMake using the instructions for the version of Ubuntu that you have ins {{< tabs name="CMake install" >}} {{% tab name="20.04 LTS" %}} -In order to get the latest version of CMake for Ubuntu 20.04 LTS, you can add the Kitware APT repository to your Ubuntu package list and run `apt` to install it. Refer to [Kitware APT Page](https://apt.kitware.com/) for more information. +In order to get the latest version of CMake for Ubuntu 20.04 LTS, you can add the Kitware APT repository to your Ubuntu package list and run `apt-get` to install it. Refer to [Kitware APT Page](https://apt.kitware.com/) for more information. ```shell wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main' | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null -sudo apt update +sudo apt-get update -sudo apt install cmake +sudo apt-get install cmake ``` {{% /tab %}} @@ -163,7 +163,7 @@ sudo apt install cmake You can install the default version of CMake for Ubuntu 22.04 LTS. For additional information, refer to the CMake [download page](https://cmake.org/download/#latest). ```shell -sudo apt install cmake +sudo apt-get install cmake ``` {{% /tab %}} @@ -187,7 +187,7 @@ Install Clang using the instructions for the version of Ubuntu that you have ins The minimum version of Clang required by O3DE is clang-12. To override the older default version of Clang for Ubuntu 20.04 LTS during the installation of Clang, you will need to specify a version as part of the install command. ```shell -sudo apt install clang-12 +sudo apt-get install clang-12 ``` {{% /tab %}} @@ -196,7 +196,7 @@ sudo apt install clang-12 You can install the default version of Clang for Ubuntu 22.04 LTS, which is clang-14. ```shell -sudo apt install clang +sudo apt-get install clang ``` {{% /tab %}} @@ -224,22 +224,21 @@ O3DE also requires some additional library packages to be installed: * zlib1g-dev * mesa-common-dev * libssl-dev -* libunwind-dev -You can download and install these packages through `apt`. +You can download and install these packages through `apt-get`. ```shell -sudo apt install libglu1-mesa-dev libxcb-xinerama0 libxcb-xinput0 libxcb-xinput-dev libxcb-xfixes0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev libcurl4-openssl-dev libsdl2-dev zlib1g-dev mesa-common-dev libssl-dev libunwind-dev +sudo apt-get install libglu1-mesa-dev libxcb-xinerama0 libxcb-xinput0 libxcb-xinput-dev libxcb-xfixes0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev libcurl4-openssl-dev libsdl2-dev zlib1g-dev mesa-common-dev libssl-dev ``` ### Ninja Build System (Optional) By default, CMake uses Unix Makefiles for building O3DE. O3DE supports multiple build configurations (debug, profile, and release), which you specify when building O3DE. Unix Makefiles only supports single-configuration builds, so you must determine which configuration you want to build when you generate the project. All project builds are based on that configuration. In order to change the build configuration, you need to regenerate the project with the different configuration. This process restricts O3DE's support for multiple-configuration builds and slows down building workflows. -The Ninja build system is an alternative to Linux's default Unix Makefiles. The Ninja build system makes it easier to generate, configure, and build your project. With the Ninja build system, specifically [Ninja Multi-Config](https://cmake.org/cmake/help/latest/generator/Ninja%20Multi-Config.html), you can generate the project once and determine which configuration to build during build time. We recommend that you use this generator for O3DE development. You can install the Ninja build tool through `apt`. +The Ninja build system is an alternative to Linux's default Unix Makefiles. The Ninja build system makes it easier to generate, configure, and build your project. With the Ninja build system, specifically [Ninja Multi-Config](https://cmake.org/cmake/help/latest/generator/Ninja%20Multi-Config.html), you can generate the project once and determine which configuration to build during build time. We recommend that you use this generator for O3DE development. You can install the Ninja build tool through `apt-get`. ```shell -sudo apt install ninja-build +sudo apt-get install ninja-build ``` ## macOS diff --git a/content/smoketest.md b/content/smoketest.md index 4f46afa3654..2ba163e9ea6 100644 --- a/content/smoketest.md +++ b/content/smoketest.md @@ -557,60 +557,4 @@ $$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \ **Example Output** -$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$ - -## Embedding Mermaid diagrams - -**Example UML Class Diagram** - -```` -```mermaid -classDiagram - Animal <|-- Duck - Animal <|-- Fish - Animal <|-- Zebra - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Duck{ - +String beakColor - +swim() - +quack() - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - +bool is_wild - +run() - } -``` -```` - -**Example Output** - -```mermaid -classDiagram - Animal <|-- Duck - Animal <|-- Fish - Animal <|-- Zebra - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Duck{ - +String beakColor - +swim() - +quack() - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - +bool is_wild - +run() - } -``` +$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$ \ No newline at end of file diff --git a/layouts/_default/_markup/render-codeblock-mermaid.html b/layouts/_default/_markup/render-codeblock-mermaid.html deleted file mode 100644 index 2ed70017135..00000000000 --- a/layouts/_default/_markup/render-codeblock-mermaid.html +++ /dev/null @@ -1,4 +0,0 @@ -
- {{- .Inner | safeHTML }} -
-{{ .Page.Store.Set "hasMermaid" true }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 36a6045ae40..dac8b52f347 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,5 +1,4 @@ {{ define "main" }} -{{ $mermaidVersion := site.Params.mermaid_version }}
@@ -9,13 +8,6 @@

{{ .Page.Title | markdownify }}

{{ . }}
{{ end }} - - {{ if .Page.Store.Get "hasMermaid" }} - - - {{ end }} diff --git a/layouts/partials/blog/content.html b/layouts/partials/blog/content.html index 81dd6c23c6a..a4cae4e3d41 100644 --- a/layouts/partials/blog/content.html +++ b/layouts/partials/blog/content.html @@ -1,4 +1,3 @@ -{{ $mermaidVersion := site.Params.mermaid_version }} {{ $posts := where site.RegularPages "Section" "blog" }}
diff --git a/static/google02776549bd8d79da.html b/static/google02776549bd8d79da.html new file mode 100644 index 00000000000..572e6716f8b --- /dev/null +++ b/static/google02776549bd8d79da.html @@ -0,0 +1 @@ +google-site-verification: google02776549bd8d79da.html \ No newline at end of file diff --git a/static/images/engine-dev-guide/guide_img.png b/static/images/engine-dev-guide/guide_img.png deleted file mode 100644 index d9d480a5af2..00000000000 Binary files a/static/images/engine-dev-guide/guide_img.png and /dev/null differ diff --git a/static/images/icons/failure.svg b/static/images/icons/failure.svg deleted file mode 100644 index bf441fdf564..00000000000 --- a/static/images/icons/failure.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/images/icons/prefab.svg b/static/images/icons/prefab.svg index a3449691a6a..924fb353c86 100644 --- a/static/images/icons/prefab.svg +++ b/static/images/icons/prefab.svg @@ -1,7 +1,7 @@ - icon / prefab / edit - - + icon / prefab / default + + diff --git a/static/images/icons/warning-yellow.svg b/static/images/icons/warning-yellow.svg index b2e88335b1a..ae84495735c 100644 --- a/static/images/icons/warning-yellow.svg +++ b/static/images/icons/warning-yellow.svg @@ -1,3 +1,15 @@ - - + + + + Icons / System / Text Field / Warning + Created with Sketch. + + + + + + + + + diff --git a/static/images/learning-guide/tutorials/assets/actor-edit-settings.png b/static/images/learning-guide/tutorials/assets/actor-edit-settings.png new file mode 100644 index 00000000000..7fe1dda45b5 Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/actor-edit-settings.png differ diff --git a/static/images/learning-guide/tutorials/assets/actor-entity-components.png b/static/images/learning-guide/tutorials/assets/actor-entity-components.png new file mode 100644 index 00000000000..76c0441119a Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/actor-entity-components.png differ diff --git a/static/images/learning-guide/tutorials/assets/actor-entity-instance.png b/static/images/learning-guide/tutorials/assets/actor-entity-instance.png new file mode 100644 index 00000000000..fe7aa4b1fc9 Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/actor-entity-instance.png differ diff --git a/static/images/learning-guide/tutorials/assets/actor-mesh-scene-settings.png b/static/images/learning-guide/tutorials/assets/actor-mesh-scene-settings.png new file mode 100644 index 00000000000..e60d6eb0a38 Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/actor-mesh-scene-settings.png differ diff --git a/static/images/learning-guide/tutorials/assets/actor-search-asset-browser.png b/static/images/learning-guide/tutorials/assets/actor-search-asset-browser.png new file mode 100644 index 00000000000..c4400e41377 Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/actor-search-asset-browser.png differ diff --git a/static/images/learning-guide/tutorials/assets/actors-tab.png b/static/images/learning-guide/tutorials/assets/actors-tab.png new file mode 100644 index 00000000000..d27aa0f33f0 Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/actors-tab.png differ diff --git a/static/images/learning-guide/tutorials/assets/select-actor-mesh.png b/static/images/learning-guide/tutorials/assets/select-actor-mesh.png new file mode 100644 index 00000000000..a503163b316 Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/select-actor-mesh.png differ diff --git a/static/images/learning-guide/tutorials/assets/select-actor-root.png b/static/images/learning-guide/tutorials/assets/select-actor-root.png new file mode 100644 index 00000000000..d3e0b39ae8c Binary files /dev/null and b/static/images/learning-guide/tutorials/assets/select-actor-root.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity-focus-mode.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity-focus-mode.mp4 index 389c65a4ff7..47927205245 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity-focus-mode.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity-focus-mode.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.mp4 index 43b7de50f6b..3e5279be30c 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.png b/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.png index 00fb1404278..86cbaca5a75 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/create-entity.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/create-prefab.png b/static/images/learning-guide/tutorials/entities-and-prefabs/create-prefab.png index ec0640bbe27..e51cf86e98d 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/create-prefab.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/create-prefab.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/detach-prefab.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/detach-prefab.mp4 index 6a82d31e671..ba763a254ab 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/detach-prefab.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/detach-prefab.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/edit-prefab.png b/static/images/learning-guide/tutorials/entities-and-prefabs/edit-prefab.png index d44e45b0363..0c7d5231e98 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/edit-prefab.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/edit-prefab.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/entity-outliner.png b/static/images/learning-guide/tutorials/entities-and-prefabs/entity-outliner.png index 65d44915d5f..2a378b34cf3 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/entity-outliner.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/entity-outliner.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/find-in-viewport.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/find-in-viewport.mp4 index 57031ebc595..cdf536f4773 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/find-in-viewport.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/find-in-viewport.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/instantiate-prefab.png b/static/images/learning-guide/tutorials/entities-and-prefabs/instantiate-prefab.png index 3d3f0bff362..77a79019319 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/instantiate-prefab.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/instantiate-prefab.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/level-prefab-edit.png b/static/images/learning-guide/tutorials/entities-and-prefabs/level-prefab-edit.png deleted file mode 100644 index 73e6721ce8b..00000000000 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/level-prefab-edit.png and /dev/null differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-duplicates.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-duplicates.mp4 index 9bff3ed4f2d..9e8b9ab530d 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-duplicates.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-duplicates.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-entity-prefab.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-entity-prefab.mp4 index b7e661026d0..da30cbd141e 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-entity-prefab.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-entity-prefab.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-nested.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-nested.mp4 index 1e7b75ccdb9..2217b260b52 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-nested.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/multiple-nested.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/nested-duplicate.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/nested-duplicate.mp4 index 424d60ff46f..599cab38166 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/nested-duplicate.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/nested-duplicate.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/nested-entities.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/nested-entities.mp4 index 6ed597a87e1..580980e1eb9 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/nested-entities.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/nested-entities.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/nested-focus-mode.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/nested-focus-mode.mp4 index 1633a379f80..79dac315e67 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/nested-focus-mode.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/nested-focus-mode.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-focus-mode.png b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-focus-mode.png index b4e1c4c138a..64d965acf6d 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-focus-mode.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-focus-mode.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instance.mp4 b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instance.mp4 index cd5f937c276..fc10cfaf202 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instance.mp4 and b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instance.mp4 differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instanced.png b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instanced.png index 3fef67599e7..d447bc29cc4 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instanced.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-instanced.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-add.png b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-add.png deleted file mode 100644 index 8d8c1c17392..00000000000 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-add.png and /dev/null differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-property.png b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-property.png deleted file mode 100644 index 6b845f00e0b..00000000000 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-property.png and /dev/null differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-revert.png b/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-revert.png deleted file mode 100644 index 637264395e2..00000000000 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/prefab-override-revert.png and /dev/null differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/rename-prefab.png b/static/images/learning-guide/tutorials/entities-and-prefabs/rename-prefab.png index 53c06baca6d..8ea90f82653 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/rename-prefab.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/rename-prefab.png differ diff --git a/static/images/learning-guide/tutorials/entities-and-prefabs/save-prefab.png b/static/images/learning-guide/tutorials/entities-and-prefabs/save-prefab.png index d2718bd8ae0..57f024a096d 100644 Binary files a/static/images/learning-guide/tutorials/entities-and-prefabs/save-prefab.png and b/static/images/learning-guide/tutorials/entities-and-prefabs/save-prefab.png differ diff --git a/static/images/user-guide/assetbundler/asset-bundler-overview.png b/static/images/user-guide/assetbundler/asset-bundler-overview.png index 40b0e369861..b2a8a1a73cb 100644 Binary files a/static/images/user-guide/assetbundler/asset-bundler-overview.png and b/static/images/user-guide/assetbundler/asset-bundler-overview.png differ diff --git a/static/images/user-guide/assets/asset-processor/event_log_line_details.png b/static/images/user-guide/assets/asset-processor/event_log_line_details.png deleted file mode 100644 index 9cbdb9513f5..00000000000 Binary files a/static/images/user-guide/assets/asset-processor/event_log_line_details.png and /dev/null differ diff --git a/static/images/user-guide/assets/asset-processor/interface-jobs.png b/static/images/user-guide/assets/asset-processor/interface-jobs.png index ad84baa7c84..6f47542d5f7 100644 Binary files a/static/images/user-guide/assets/asset-processor/interface-jobs.png and b/static/images/user-guide/assets/asset-processor/interface-jobs.png differ diff --git a/static/images/user-guide/assets/asset-processor/interface.png b/static/images/user-guide/assets/asset-processor/interface.png index 8fd476bf1a1..e37c07039f7 100644 Binary files a/static/images/user-guide/assets/asset-processor/interface.png and b/static/images/user-guide/assets/asset-processor/interface.png differ diff --git a/static/images/user-guide/assets/asset-processor/skip-startup-scan-settings.png b/static/images/user-guide/assets/asset-processor/skip-startup-scan-settings.png deleted file mode 100644 index 29c3228d13b..00000000000 Binary files a/static/images/user-guide/assets/asset-processor/skip-startup-scan-settings.png and /dev/null differ diff --git a/static/images/user-guide/components/reference/gradients/image-gradient-component.png b/static/images/user-guide/components/reference/gradients/image-gradient-component.png index f16480cc098..44d830baf47 100644 Binary files a/static/images/user-guide/components/reference/gradients/image-gradient-component.png and b/static/images/user-guide/components/reference/gradients/image-gradient-component.png differ diff --git a/static/images/user-guide/components/reference/paintbrush/paintbrush-tool.png b/static/images/user-guide/components/reference/paintbrush/paintbrush-tool.png index 0c2a5ced1dd..3acff2ca094 100644 Binary files a/static/images/user-guide/components/reference/paintbrush/paintbrush-tool.png and b/static/images/user-guide/components/reference/paintbrush/paintbrush-tool.png differ diff --git a/static/images/user-guide/components/reference/physx/physx-rigid-body-ui-01.png b/static/images/user-guide/components/reference/physx/physx-rigid-body-ui-01.png index 5a94397ed0b..e5880d7b5d4 100644 Binary files a/static/images/user-guide/components/reference/physx/physx-rigid-body-ui-01.png and b/static/images/user-guide/components/reference/physx/physx-rigid-body-ui-01.png differ diff --git a/static/images/user-guide/components/reference/physx/physx-static-rigid-body-ui-01.png b/static/images/user-guide/components/reference/physx/physx-static-rigid-body-ui-01.png deleted file mode 100644 index 878be4dbd73..00000000000 Binary files a/static/images/user-guide/components/reference/physx/physx-static-rigid-body-ui-01.png and /dev/null differ diff --git a/static/images/user-guide/components/reference/shape/axis-aligned-box-shape-component-ui-01.png b/static/images/user-guide/components/reference/shape/axis-aligned-box-shape-component-ui-01.png index 704558adb98..cad74b9beba 100644 Binary files a/static/images/user-guide/components/reference/shape/axis-aligned-box-shape-component-ui-01.png and b/static/images/user-guide/components/reference/shape/axis-aligned-box-shape-component-ui-01.png differ diff --git a/static/images/user-guide/components/reference/shape/box-shape-component-ui-01.png b/static/images/user-guide/components/reference/shape/box-shape-component-ui-01.png index 9f56de28d9f..7b757afe74d 100644 Binary files a/static/images/user-guide/components/reference/shape/box-shape-component-ui-01.png and b/static/images/user-guide/components/reference/shape/box-shape-component-ui-01.png differ diff --git a/static/images/user-guide/components/reference/shape/capsule-shape-component-ui-01.png b/static/images/user-guide/components/reference/shape/capsule-shape-component-ui-01.png index b0cbc031ca2..f0a16fd3db8 100644 Binary files a/static/images/user-guide/components/reference/shape/capsule-shape-component-ui-01.png and b/static/images/user-guide/components/reference/shape/capsule-shape-component-ui-01.png differ diff --git a/static/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg b/static/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg deleted file mode 100644 index a55acf62f1a..00000000000 --- a/static/images/user-guide/components/reference/shape/shape-component-mode-submode-dimensions.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - Icons / Toolbar / Scale - Created with Sketch. - - - - - - diff --git a/static/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg b/static/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg deleted file mode 100644 index 39db8c1f04d..00000000000 --- a/static/images/user-guide/components/reference/shape/shape-component-mode-submode-translation-offset.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Icons / Toolbar / Move - Created with Sketch. - - - - - - - - diff --git a/static/images/user-guide/components/reference/shape/sphere-shape-component-ui-01.png b/static/images/user-guide/components/reference/shape/sphere-shape-component-ui-01.png index 0952ce33c1f..b99debe8d88 100644 Binary files a/static/images/user-guide/components/reference/shape/sphere-shape-component-ui-01.png and b/static/images/user-guide/components/reference/shape/sphere-shape-component-ui-01.png differ diff --git a/static/images/user-guide/components/reference/terrain/terrain-macro-material-component.png b/static/images/user-guide/components/reference/terrain/terrain-macro-material-component.png index 228bd293d01..a92e91f1e17 100644 Binary files a/static/images/user-guide/components/reference/terrain/terrain-macro-material-component.png and b/static/images/user-guide/components/reference/terrain/terrain-macro-material-component.png differ diff --git a/static/images/user-guide/gems/ros2/ROSVehicleDynamics.svg b/static/images/user-guide/gems/ros2/ROSVehicleDynamics.svg deleted file mode 100644 index 203acfa0872..00000000000 --- a/static/images/user-guide/gems/ros2/ROSVehicleDynamics.svg +++ /dev/null @@ -1,697 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ROS2RobotControlComponent - - - - - - - - - - ControlConfiguration - type of steering - topic - QoS - control mode - - - - - - - - - - TwistSubscriptionHandler - Broadcast to bus - - - - - - - TwistBus - - - - - - - - - - ControlSubscriptionHandler - Control subscription<T> - - - - - - - - - - AckermannSubscriptionHandler - Broadcast to bus - - - - - - - AckermannBus - - - - - - - - - - IControlSubscriptionHandler - Activate, deactivate with config - - - - - - - - - - InputControlRequestBus - set acceleration - set steering - turn / stop lights etc - set other inputs for the model - stop on no inputs - - - - - - - - - - ManualControlEventHandler - key/input map - inputs handler - - - - - - - - - - VehicleModelComponent - apply inputs - get current states - vehicle-level parameters - - - - - - - - - - VehicleConfiguration - - - - - - - - - - WheelControllerComponent - tire material (overwrite) - drive and steering axes - steering entity (parent) - - - - - - - - - - DriveModel - ApplyInputState - is disabled - - - - - - - - - - AckermannControlComponent - Handle bus notification - Calculate and send inputs - - - - - - - - - - RigidBodyTwistControlComponent - Handle bus notification - Apply directly to RigidBody - - - - - - - InputControlBus - - - - - - - - - - AxleConfiguration - wheels (with placement) - is drive - is steering - wheel radius - - - - - - - Steering Entity - - - - - - - - - - Utilities - Get all steering entities - Get all drive wheels - Create front steer axle - .... - - - - - - - RigidBody - - - - - - - - - - VehicleModelLimits - LimitState - GetMaxiumState - - - - - - - - - - AckermannDriveModel - steeringPid - - - - - - - - - - AckermannVehicle - ModelComponent - - - - - - - - - - SkidSteering - ModelComponent - - - - - - - - - - SkidSteeringDriveModel - - - - - - - - - - SkidSteeringModelLimits - linear limit - anular limit - - - - - - - - - - AckermannModelLimits - speed limit - steering limit - - - - - - - PhysX Hinge Joint - - - - - - - PhysX Hinge Joint - - - - - - - - - - SkidSteeringControlComponent - Handle bus notification - Calculate and send inputs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n - - - n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/images/user-guide/gems/ros2/ROSVehicleDynamics_planned.graphml b/static/images/user-guide/gems/ros2/ROSVehicleDynamics_planned.graphml deleted file mode 100644 index 0844a6ea58c..00000000000 --- a/static/images/user-guide/gems/ros2/ROSVehicleDynamics_planned.graphml +++ /dev/null @@ -1,816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - ROS2RobotControlComponent - - - - - - - - - - - - - - - - - - - - - ControlConfiguration - type of steering -topic -QoS -control mode - - - - - - - - - - - - - TwistSubscriptionHandler - Broadcast to bus - - - - - - - - - - - - - TwistBus - - - - - - - - - - - ControlSubscriptionHandler - Control subscription<T> - - - - - - - - - - - - - AckermannSubscriptionHandler - Broadcast to bus - - - - - - - - - - - - - AckermannBus - - - - - - - - - - - IControlSubscriptionHandler - Activate, deactivate with config - - - - - - - - - - - - - InputControlRequestBus - set acceleration -set steering -turn / stop lights etc -set other inputs for the model -stop on no inputs - - - - - - - - - - - - - ManualControlEventHandler - key/input map -inputs handler - - - - - - - - - - - - - VehicleModelComponent - apply inputs -get current states -vehicle-level parameters - - - - - - - - - - - - - VehicleConfiguration - - - - - - - - - - - - - - - - - - - - - WheelControllerComponent - tire material (overwrite) -drive and steering axes -steering entity (parent) - - - - - - - - - - - - - - DriveModel - ApplyInputState -is disabled - - - - - - - - - - - - - AckermannControlComponent - Handle bus notification -Calculate and send inputs - - - - - - - - - - - - - RigidBodyTwistControlComponent - Handle bus notification -Apply directly to RigidBody - - - - - - - - - - - - - InputControlBus - - - - - - - - - - - AxleConfiguration - wheels (with placement) -is drive -is steering -wheel radius - - - - - - - - - - - - - Steering Entity - - - - - - - - - - - Utilities - Get all steering entities -Get all drive wheels -Create front steer axle -.... - - - - - - - - - - - - - RigidBody - - - - - - - - - - - VehicleModelLimits - LimitState -GetMaxiumState - - - - - - - - - - - - - AckermannDriveModel - steeringPid - - - - - - - - - - - - - - AckermannVehicle -ModelComponent - - - - - - - - - - - - - - - - - - - - - SkidSteering -ModelComponent - - - - - - - - - - - - - - - - - - - - - SkidSteeringDriveModel - - - - - - - - - - - - - - - - - - - - - SkidSteeringModelLimits - linear limit -anular limit - - - - - - - - - - - - - AckermannModelLimits - speed limit -steering limit - - - - - - - - - - - - - PhysX Hinge Joint - - - - - - - - - - - PhysX Hinge Joint - - - - - - - - - - - SkidSteeringControlComponent - Handle bus notification -Calculate and send inputs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/images/user-guide/gems/ros2/ackermanModel.png b/static/images/user-guide/gems/ros2/ackermanModel.png deleted file mode 100644 index 24aac03c959..00000000000 Binary files a/static/images/user-guide/gems/ros2/ackermanModel.png and /dev/null differ diff --git a/static/images/user-guide/gems/ros2/diagram_ros2_gem.svg b/static/images/user-guide/gems/ros2/diagram_ros2_gem.svg deleted file mode 100644 index bd748684aa1..00000000000 --- a/static/images/user-guide/gems/ros2/diagram_ros2_gem.svg +++ /dev/null @@ -1 +0,0 @@ -System Component (Singleton)ROS2SystemComponentGetNode()GetROSTimestamp()BroadcastTransform()SimulationClockGetROSTimestamp()Robot ControlTwistSubscriptionHandlerIControlSubscriptionHandlerControlSubscriptionHandler<T>Activate()Deactivate()BroadcastBus()ROS2RobotControlComponentControlConfigurationm_qosm_topicm_steeringAckermannSubscriptionHandlerAckermannControlComponentRigidBodyTwistControlComponent UtilitiesROS2ConversionsFromROS2Vector3()ToROS2Vector3()ToROS2Quaternion()ROS2NamesGetNamespacedName()RosifyName()Validate*()Robot ImporterRobot Importer ClassesFrameTransformPublisherROS2FrameComponentGetGrameID()GetNamespace()GetFrameTransform()NamespaceConfigurationPopulateNamespace()GetNamespace()m_namespaceStrategySensor1..nROS2SensorComponentSensorConfigurationm_frequencym_publishingEnabledm_visualisePublisherConfigurationm_typem_topicGetQoS()QoSQoSGetQoS()IMUROS2IMUSensorComponent...GNSSROS2GNSSSensorComponent...CameraROS2CameraSensorComponent...LidarROS2LidarSensorComponent...Vehicle DynamicsVehicle Dynamics ClassesOdometryROS2OdometrySensorComponent... \ No newline at end of file diff --git a/static/images/user-guide/gems/ros2/diagram_ros2_gem_yEd.graphml b/static/images/user-guide/gems/ros2/diagram_ros2_gem_yEd.graphml deleted file mode 100644 index 94490d43b8b..00000000000 --- a/static/images/user-guide/gems/ros2/diagram_ros2_gem_yEd.graphml +++ /dev/null @@ -1,1031 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - System Component (Singleton) - - - - - - - - - - Folder 2 - - - - - - - - - - - - - - - - ROS2SystemComponent - GetNode() -GetROSTimestamp() -BroadcastTransform() - - - - - - - - - - - - - SimulationClock - GetROSTimestamp() - - - - - - - - - - - - - - - - - - - Robot Control - - - - - - - - - - Folder 4 - - - - - - - - - - - - - - - - TwistSubscriptionHandler - - - - - - - - - - - - - IControlSubscriptionHandler - - - - - - - - - - - - - ControlSubscriptionHandler<T> - Activate() -Deactivate() -BroadcastBus() - - - - - - - - - - - - - - ROS2RobotControlComponent - - - - - - - - - - - - - ControlConfiguration - m_qos -m_topic -m_steering - - - - - - - - - - - - - AckermannSubscriptionHandler - - - - - - - - - - - - - AckermannControlComponent - - - - - - - - - - - - - RigidBodyTwistControlComponent - - - - - - - - - - - - - - - - - - - Utilities - - - - - - - - - - Folder 5 - - - - - - - - - - - - - - - - ROS2Conversions - FromROS2Vector3() -ToROS2Vector3() -ToROS2Quaternion() - - - - - - - - - - - - - ROS2Names - GetNamespacedName() -RosifyName() -Validate*() - - - - - - - - - - - - - - - - - - Robot Importer - - - - - - - - - - Folder 5 - - - - - - - - - - - - - - - - Robot Importer Classes - - - - - - - - - - - - - - - Frame - - - - - - - - - - Folder 6 - - - - - - - - - - - - - - - - TransformPublisher - - - - - - - - - - - - - ROS2FrameComponent - GetGrameID() -GetNamespace() -GetFrameTransform() - - - - - - - - - - - - - NamespaceConfiguration - PopulateNamespace() -GetNamespace() -m_namespaceStrategy - - - - - - - - - - - - - - - - - - Sensor - - - - - - - - - - Folder 8 - - - - - - - - - - - - - - - - ROS2SensorComponent - - - - - - - - - - - - - SensorConfiguration - m_frequency -m_publishingEnabled -m_visualise - - - - - - - - - - - - - PublisherConfiguration - m_type -m_topic -GetQoS() - - - - - - - - - - - - - - - - - - QoS - - - - - - - - - - Folder 8 - - - - - - - - - - - - - - - - QoS - GetQoS() - - - - - - - - - - - - - - - - - - IMU - - - - - - - - - - Folder 9 - - - - - - - - - - - - - - - - ROS2IMUSensorComponent - ... - - - - - - - - - - - - - - - - - - GNSS - - - - - - - - - - Folder 9 - - - - - - - - - - - - - - - - ROS2GNSSSensorComponent - ... - - - - - - - - - - - - - - - - - - Camera - - - - - - - - - - Folder 9 - - - - - - - - - - - - - - - - ROS2CameraSensorComponent - ... - - - - - - - - - - - - - - - - - - Lidar - - - - - - - - - - Folder 9 - - - - - - - - - - - - - - - - ROS2LidarSensorComponent - ... - - - - - - - - - - - - - - - - - - Vehicle Dynamics - - - - - - - - - - Folder 13 - - - - - - - - - - - - - - - - Vehicle Dynamics Classes - - - - - - - - - - - - - - - - Odometry - - - - - - - - - - Folder 13 - - - - - - - - - - - - - - - - ROS2OdometrySensorComponent - ... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1..n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/images/user-guide/gems/ros2/physx_joint.png b/static/images/user-guide/gems/ros2/physx_joint.png deleted file mode 100644 index 5d299481607..00000000000 Binary files a/static/images/user-guide/gems/ros2/physx_joint.png and /dev/null differ diff --git a/static/images/user-guide/gems/ros2/skidSteeringModel.png b/static/images/user-guide/gems/ros2/skidSteeringModel.png deleted file mode 100644 index d0ee01b517f..00000000000 Binary files a/static/images/user-guide/gems/ros2/skidSteeringModel.png and /dev/null differ diff --git a/static/images/user-guide/gems/ros2/wheelController.png b/static/images/user-guide/gems/ros2/wheelController.png deleted file mode 100644 index 8114a588567..00000000000 Binary files a/static/images/user-guide/gems/ros2/wheelController.png and /dev/null differ diff --git a/static/images/user-guide/metrics/about-tracing.png b/static/images/user-guide/metrics/about-tracing.png deleted file mode 100644 index 8dabed930c6..00000000000 Binary files a/static/images/user-guide/metrics/about-tracing.png and /dev/null differ diff --git a/static/images/user-guide/networking/multiplayer/editor_client_with_dedicated_server_mode.png b/static/images/user-guide/networking/multiplayer/editor_client_with_dedicated_server_mode.png deleted file mode 100644 index 71503b2bae0..00000000000 Binary files a/static/images/user-guide/networking/multiplayer/editor_client_with_dedicated_server_mode.png and /dev/null differ diff --git a/static/images/user-guide/networking/multiplayer/editor_clientserver_mode.png b/static/images/user-guide/networking/multiplayer/editor_clientserver_mode.png deleted file mode 100644 index 2d54305d7f8..00000000000 Binary files a/static/images/user-guide/networking/multiplayer/editor_clientserver_mode.png and /dev/null differ diff --git a/static/images/user-guide/physx/physx/anim-joints-example.gif b/static/images/user-guide/physx/physx/anim-joints-example.gif index 2286f703083..f1037252121 100644 Binary files a/static/images/user-guide/physx/physx/anim-joints-example.gif and b/static/images/user-guide/physx/physx/anim-joints-example.gif differ