* Hair
- First introduction of Hair gem to Atom and O3DE
- The hair technology is based off TressFX 4.1
- These are some of the areas we enhanced the original TressFX implementation:
- Lighting model was replaced and we now use a modified Marschner model
- Blending is done directly with the back buffer removing the silhouette of the original implementation
- Hair depth / thickness is now calculated to remove incorrect back lighting (TT lobe in the Marschner model)
- Thickness corrected to handle hair gaps hence introducing better light passage for the TT
- The hair is fully integrated into the Atom pipeline and structure design
- Usage of single shared buffer for the computer buffers reduces barriers sync overhead
Remarks:
- Collisions via SDF compute are to be introduced soon
- Improved shortcut rendering method ala Eidos Montreal to be introduced soon
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - code clean pass
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - EMFX Actor visibility implementation
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - COnnecting hair passes to Atom's MainPipeline.pass
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - adding dedicated thumbnail pipeline that does not include the hair gem
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - changed Atom shader files to allow hooking the hair to the lighting data structures
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixed a few headers to have the latest O3DE license + verification fixes
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - enabling editor component only when tool pipline is built + default texture add
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixing Linux and Android compilation builds
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - another files change to make Linux compile
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - more Linux and Android build fixes
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair
- Adding usage of fallback white texture
- Removing invalid null assignments into vectors
- Removing redundant mutex preventing deletion on some platforms
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair
- Shame: removed forgoten #pragma optimize
- Adding header complained by Android
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - removing the Hair Gem connection in the active project.
- This submission removes the connection to the active project hence allowing to run without the Gem. Enable the passes in MainPipeline.pass and declare them again when you want to use the Gem.
Remark: the gem file PassTemplates.azasset was renamed and will be connected via code in the future to avoid the need to declare in the global pass template.
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - registrating gem pass templates through the gem templates file (#198)
* Hair - registrating gem pass templates through the gem templates file
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - adding handler disconnect for the pass template registration.
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - PPLLIndexCounter buffer going data driven via the pass declarations (#202)
* Hair - PPLLIndexCounter buffer going data driven via the pass declaration
- Moving PPLLIndexCounter from code allocation and attachment to be data driven
- Fixed RPI typo bug that can prevent using buffers like that
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixing UI Editor (LYShine) crash (#209)
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair - resolved the multi pipeline mismatches and crashes + cleaned initialization & leftovers (#222)
* [Hair] - multiple render pipelines handling
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair] - Shut down order is handle to allow hair feature processor be deregistered only after the bootstrap component has disabled it
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair] - minor cleanups
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair] - followups from review nits
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - code fixes based on the CR remarks for the Hair merge to Dev (#248)
* Hair
- First introduction of Hair gem to Atom and O3DE
- The hair technology is based off TressFX 4.1
- These are some of the areas we enhanced the original TressFX implementation:
- Lighting model was replaced and we now use a modified Marschner model
- Blending is done directly with the back buffer removing the silhouette of the original implementation
- Hair depth / thickness is now calculated to remove incorrect back lighting (TT lobe in the Marschner model)
- Thickness corrected to handle hair gaps hence introducing better light passage for the TT
- The hair is fully integrated into the Atom pipeline and structure design
- Usage of single shared buffer for the computer buffers reduces barriers sync overhead
Remarks:
- Collisions via SDF compute are to be introduced soon
- Improved shortcut rendering method ala Eidos Montreal to be introduced soon
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - code clean pass
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - EMFX Actor visibility implementation
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - COnnecting hair passes to Atom's MainPipeline.pass
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - adding dedicated thumbnail pipeline that does not include the hair gem
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - changed Atom shader files to allow hooking the hair to the lighting data structures
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixed a few headers to have the latest O3DE license + verification fixes
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - enabling editor component only when tool pipline is built + default texture add
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixing Linux and Android compilation builds
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - another files change to make Linux compile
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - more Linux and Android build fixes
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair
- Adding usage of fallback white texture
- Removing invalid null assignments into vectors
- Removing redundant mutex preventing deletion on some platforms
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair
- Shame: removed forgoten #pragma optimize
- Adding header complained by Android
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - removing the Hair Gem connection in the active project.
- This submission removes the connection to the active project hence allowing to run without the Gem. Enable the passes in MainPipeline.pass and declare them again when you want to use the Gem.
Remark: the gem file PassTemplates.azasset was renamed and will be connected via code in the future to avoid the need to declare in the global pass template.
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - registrating gem pass templates through the gem templates file (#198)
* Hair - registrating gem pass templates through the gem templates file
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - adding handler disconnect for the pass template registration.
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - PPLLIndexCounter buffer going data driven via the pass declarations (#202)
* Hair - PPLLIndexCounter buffer going data driven via the pass declaration
- Moving PPLLIndexCounter from code allocation and attachment to be data driven
- Fixed RPI typo bug that can prevent using buffers like that
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixing UI Editor (LYShine) crash (#209)
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair - resolved the multi pipeline mismatches and crashes + cleaned initialization & leftovers (#222)
* [Hair] - multiple render pipelines handling
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair] - Shut down order is handle to allow hair feature processor be deregistered only after the bootstrap component has disabled it
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair] - minor cleanups
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* [Hair] - followups from review nits
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - last fixes based on CR remarks
Signed-off-by: Adi-Amazon <barlev@amazon.com>
* Hair - fixing AR
Signed-off-by: Adi-Amazon <barlev@amazon.com>
Untangled the system component from editor ticking dependencies and moved it to the main window which is the more logical place for it.
Signed-off-by: Benjamin Jillich <jillich@amazon.com>
* Update the simulated object layout
Signed-off-by: rhhong <rhhong@amazon.com>
* Fixed the bug. Do not store uncessory cached selected model indices which would become stall.
Signed-off-by: rhhong <rhhong@amazon.com>
* update the simulted object layout.
Signed-off-by: rhhong <rhhong@amazon.com>
* Get rid of locally cached selectedIndices variable.
Signed-off-by: rhhong <rhhong@amazon.com>
* Remove debug code
Signed-off-by: rhhong <rhhong@amazon.com>
Wrong invalid index type caused the crash. Selecting another joint was broken as well and got fixed directly, too. The selection done event was never received due to not being connected to the node hierarchy widget.
Resolves#4108
Signed-off-by: Benjamin Jillich <jillich@amazon.com>
Following the same approach as cloth plugin, which is to ask if the system component of the gem is available (in this case PhysX::SystemComponent).
Fixes#2540
Signed-off-by: moraaar moraaar@amazon.com
This allows the EMotionFX runtime to compile with `/we4267` enabled, which
emits a warning when converting from `size_t` to a smaller type. All tests
for the runtime have been updated accordingly, and they pass.
In instances where a range-for loop could be used, or a std algorithm, that
was used instead of using `size_t numItems = vec.size()` and a for loop.
Casts to `uint32` were removed where possible. Some places remain, like in
the file formats.
Signed-off-by: Chris Burel <burelc@amazon.com>
This translates all usages of MCore::Array to AZStd::vector. It is
designed to be as minimal of a change as possible (no changing to
range-for loops or other C++11 stuff).
We can decide to submit this wholesale, or submit it to a separate
branch that we can then integrate individual files from once we're ready
to do a specific class's transition.
It does not completely solve the `uint32`->`size_t` transition.
One important finding from doing this: `MCore::Array` uses a `memcpy`
when it reallocates. `AZStd::vector` will use the contained type's copy
or move constructor, per element. This is a significant change in
behavior. If you have type, `SomeStruct` that defines a destructor, that
type is copyable and not movable. So if you have a
`MCore::Array<SomeStruct>`, and you call `Add(); Add(); Add()`, that
reallocates 3 times, copying the contents using `memcpy`, and never
invokes `SomeStruct`'s copy constructor or destructor. Translating that
to `AZStd::vector<SomeStruct>` and calling `push_back(); push_back();
push_back();` will still reallocate 3 times, but it sees that
`SomeStruct` is non-movable, and uses the copy constructor to make the
copies, and then the destructor on the previous values. This call to the
destructor wasn't there before, and can cause things to be deleted that
weren't before. The solution to this is to make that struct be a
move-only type. Where possible, this was done by changing that type to
use `AZStd::unique_ptr` instead of a raw pointer, to get the proper move
behavior. Where that is not possible (types that inherit from
`MCore::MemoryObject`), a hand-written move constructor was created.
In general:
GetLength() becomes size()
GetMaxLength() becomes capacity()
GetIsEmpty() becomes empty()
Reserve() becomes reserve()
ReserveExact() becomes reserve()
Resize() becomes resize()
ResizeFast() becomes resize_no_construct()
Add() becomes emplace_back()
AddExact() becomes emplace_back()
AddEmpty() becomes emplace_back()
AddEmptyExact() becomes emplace_back()
GetPtr() becomes data()
GetItem() becomes at()
Shrink() becomes shrink_to_fit()
GetFirst() becomes front()
GetLast() becomes back()
Remove() becomes erase()
RemoveFirst() becomes erase()
RemoveLast() becomes pop_back()
RemoveByValue() becomes if (const auto it = AZStd::find(...); it != end(container)) container.erase(it);
Insert() becomes emplace()
Swap() becomes swap()
Clear(true) becomes clear(); shrink_to_fit()
Clear() becomes clear(); shrink_to_fit()
Clear(false) becomes clear()
Swap() becomes swap()
Find() becomes AZStd::find
MoveElements() becomes AZStd::move
SetMemoryCategory() is removed
Signed-off-by: Chris Burel <burelc@amazon.com>
* Final update copyright headers to reference license files at the repo root
Signed-off-by: spham <spham@amazon.com>
* Fix copyright validator unit tests to support the stale O3DE header scenario
Signed-off-by: spham <spham@amazon.com>
-Re-purposed an unused boolean in RPI::Cullable for previous frame's visiblity to instead represent objects that are hidden in the simulation.
-Updated MeshFeatureProcessor::SetVisible to set this value on the cullable.
-Updated the MeshComponent to handle visiblity changes by not rendering the mesh instead of deactivating and/or reactivating the component.
-Updated the AtomActorInstance to handle changes to the visibility from the ActorComponent.
Tested by creating two entities with static mesh components, on entity hidden and the other visible. Plus three entities with actor components, one where the actor is visible, one where the entity is visible but the 'render character' setting on the actor component is disabled, and one where the 'render character' setting is enabled, but the entity is not visible.
For each of these 5 entities, I added them as 5 loose entities, 5 entities that were children to a parent entity, and a slice with all 5 as children to a parent entity, and tested toggling visibility of the parent entities.
For each of these 3 sets of 5 entities, I added them directly to the level, added them all to a layer where the layer was visible, and added them all to a layer where the layer was not visible, and tested toggling the visibility of the layers.
* Expose Actor bounding box configurations to component serialize and edit contexts.
Allows one, for example, to have an animation which moves the character far away from the static bounds, and not have that character dissapear when the static bounds are outside of the camera frustum
* Apply suggestions from code review
* Bug fix: name the parameter, place comments in the intended place.