* Refactored depth, shadow, and motion vector shaders to support custom object srgs. Added a new skin object srg and moved wrinklemask data out of the default object srg. Added a new minimal morph target asset for testing wrinkle masks to AutomatedTesting.
Signed-off-by: Tommy Walton <waltont@amazon.com>
* Fix copyright header
Signed-off-by: Tommy Walton <waltont@amazon.com>
* Adding vertex shadow and using it for all shadows
* Fixing small issue with it not being initialized
* Adis recommendations for hair
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* Define fallback slots when shader is disabled
* Disable SSAO parent pass depending on the settings
* Move SSAO modulation pass into SsaoParent pass so it can be disabled with the rest of SSAO
* Enable SSAO by default
Co-authored-by: Tobias Alexander Franke <tobias.alexander.franke@huawei.com>
* 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>
* Add HDR color grading pass and shaders.
* Remove color grading pass from light adaptation parent pass due to failing ASV tests. This will be added back later on.
* Editor HDR Color Grading Component implemented under the PostFx stack (#219)
* Add softmin/max for unbounded color grading properties.
* Revert channel mixer properties to vector3. Refactor mix to weight. Fix color grading pass to convert any color variable into vec4.
Signed-off-by: rbarrand <rbarrand@amazon.com>
Co-authored-by: Robin <rbarrand@amazon.com>
This revealed that the approach of reflecting both the old "id" and the new "name" would not work, because whenn saving it would write out both fields. So I decied to just give up on backward compatibility. This will be much cleaner than trying to continue supporting "id" as a field name, it is uncommon for users to make their own material types at this point, and if they have made some it is very easy to search and replace "id" with "name" update their files.
All .materialtype files have been updated. RPI unit tests now pass. ASV still passes.
Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
A "property name" is the name of the just the property without regard to the group that it's in. A "group name" is the name of the group. And a "property ID" is the full unique name of a property in the form "groupName.propertyName". This is important preparation for upcoming changes where property sets can contain other property sets, and property IDs can be arbitrarily long like "layer1.baseColor.factor" for example.
The naming changes include variables, some code comments, and the .materialtype file format. I was able to make these changes in a backward compatible way so a property or group "id" field has been replaced with a "name" field, but "id" is still supported for compatibility. StandardPBR, EnhancedPBR, StandardMultilayerPBR, and Skin have all been updated. Note that MinimalPBR has not been updated, proving that backward compatibility works. (We can update this one too at some point though).
Testing:
Opened up materials in the material editor.
Ran AtomSampleViewer in dx12 and vulkan with no new failures.
Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
Merge pull request #4102 from aws-lumberyard-dev/Atom/santorac/WarnOnMaterialPsoChanges
These changes make material system report warnings when gameplay scripts attempt to change PSO-impacting material properties at runtime. So far the material system has always allowed any properties to be changed at runtime, including those that affect Pipeline State Objects (PSOs), as this is supported on several platforms. But some platforms require that Pipeline State Objects be pre-compiled and shipped with the game. At some point we will need to add new restrictions that limit what material properties can be changed at runtime. In the meantime, these warnings should alert users to avoid this, as the functionality likely won't be supported in the future.
- Made the Material and LuaMaterialFunctor classes configurable to report errors or warnings when material properties modify Pipeline State Objects. This is controlled by a new "MaterialPropertyPsoHandling" enum.
- Made the EditorMaterialComponent override PSO handling as Enabled, to prevent warnings when the user is editing material instance property overrides. This requried a new MaterialComponentNotificationBus bus message "OnMaterialInstanceCreated".
- Added a new ScopedValue utility class that simply sets a value when it goes out of scope.
- Removed unnecessary GetMaterialPropertyDependencies member from material functor context classes, as this is already available as part of the functor itself.
- Made Material::SetPropertyValue return early when the property value hadn't actually changed. Besides being more efficientn, this prevents unnecessary spamming of the new warning.
- Made a couple imporvements to material_find_overrides_demo.lua:
- Made the target material slot name configurable through an exposed component property.
- Fixed a timing issue where the assignmentId was invalid if FindMaterialAssignmentId is called too early.
* Add HDR color grading pass and shaders.
Signed-off-by: Robin <rbarrand@amazon.com>
* Improve code quality.
Signed-off-by: Robin <rbarrand@amazon.com>
* Code refactor.
Signed-off-by: Robin <rbarrand@amazon.com>
* Remove color grading pass from light adaptation parent pass due to failing ASV tests. This will be added back later on.
Signed-off-by: Robin <rbarrand@amazon.com>
* Add newline.
Signed-off-by: Robin <rbarrand@amazon.com>
* Correct case for file.
Signed-off-by: Robin <rbarrand@amazon.com>
* Update comment.
Signed-off-by: Robin <rbarrand@amazon.com>
Co-authored-by: Robin <rbarrand@amazon.com>
* [ATOM-5441] Shader Builders May Fail When Multiple
New Files Are Added
ShaderAssetBuilder::CreateJobs now recursively parses *.azsl files
looking for #include lines and builds the list of source dependencies
using a depth-first algorithm. It was using MCPP before but not anymore
(during CreateJobs).
The new algorithm may over prescribe, but fixes the issues
when multiple new shader related files are added, at once or out of order, to a game project
or Gem.
Overall the new ShaderAssetBuilder::CreateJobs() is around 40% faster
and, of course, handles source dependencies in a robust way.
* Added new test suite to AutomatedTesting project:
Gem/PythonTests/atom_renderer/test_Atom_ShaderBuildPipelineSuite.py
Bug fix to Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp
discovered thanks to the automated test suite. The idea is that
CreateJobs doesn't fail if the AZSL file doesn't exist. The failure is
deferred during ProcessJob. This way if the AZSL file exists the .shader
file is rebuilt automatically.
* For testability purposes and avoid memory leakage errors
during Unit Tests created the class ShaderBuilderUtility::IncludedFilesParser
Now accepts "# include <file>" with space between '#' and 'include'.
Also now accepts the '-' character inside the file path.
Added Unit Test to validate all cases of "#include <file>" parsing.
* Fixed linux runtime issues for Unit Tests in Atom_Asset_Shader.Tests
Signed-off-by: garrieta <garrieta@amazon.com>
* Replacing the old gaussian blur with a much faster, better quality kawase blur
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* Removing atomtesting outdated msg
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* Some recommendations from Tommy
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* Adding early termination from previous gaussian filtering algorithm that kawase replaces
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* Removing pcf method
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* removing the old blur and adding in the new kawase blur into .cmake file
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
* Removing the boundary search method. Bicubic is now the default and only PCF filtering method
* Removing padding (based upon feedback)
* Removing PCF method from py auto testing
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
- Made the target material slot name configurable through an exposed component property.
- Fixed a timing issue where the assignmentId was invalid if FindMaterialAssignmentId is called too early.
Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
ATOM-16273 Compiling SceneSRG before updating it can cause a gpu crash
Changes include:
1. Removed Scene::SetShaderResourceGroupCallback() function and clean up code which use this function.
2. Moved SceneTimeSrg.azsli to RPI's DefaultSceneSrg folder and setup the constants in RPI::Scene
3. Add AZ::Event for Scene's update srg event which features and update scene srg at proper place
4. UpdateTransformServcie FP to use PrepareSceneSrg event handler.
5. Clean up shaders and srgs used in project templates.
Signed-off-by: Qing Tao <qingtao@amazon.com>
* Various terrain improvements:
- Height now stored in a R16_unorm to decrease the amount of memory / memory bandwidth needed for the height field
- Many simplifications to the feature processor
- Added a shader to render to the depth pre pass
- Pulled common functionality needed by depth and forward to a common include shader
- Forward shader now outputs to all the expected render targets
- Adjusted the way normals and lighting are being calculated
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Adding missing shader files. Updated terrain shader to alter the color slightly with height.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Removed pixel shader code from terrain depth pass
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Renamed the depth pass shaders to no longer indicate they include a pixel shader.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Removing unneeded code from TerrainCommon.azsli
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Adjust the sharpness of TAA's Catmull-Rom filter based on local area luminance.
This helps prevent ringing artifacts in high contrast areas. Due to Catmull-Rom's use of negative weights, it's possible to have a very high value neighbor sample with a negative weight completely overwhelm the result leading to a negative output. This change reduces the sharpness of the catmull rom filter in high contrast areas so the negative weights contribute less to the final result.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* PR review feedback fixes - more comments and updated the way the sharpness equation was written for clarity.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Various fixes for AtomStarterGame on ios
- Use low end pipeline on ioos by default for BoootStrapComponent
- Track the need to bind null heap within Argument buffers
- Only bind the null heap if its needed
- Track its usage for Vertex/Fragment stages
- Increase null dummy buffer to 1K to address GPU crash oon thee first frame
Signed-off-by: moudgils <moudgils@amazon.com>
* Moved PlatformLimits to setreg. Removed Device PostInit. Some clean up.
Signed-off-by: jiaweig <jiaweig@amazon.com>
* Move setreg loading the PlatformLimitsDescriptor super class.
Signed-off-by: jiaweig <jiaweig@amazon.com>
* Apply same implementation for fake device used in unit tests
Signed-off-by: jiaweig <jiaweig@amazon.com>
* Add implementation for Null renderer. Swap order for register RHI interface in initialization.
Signed-off-by: jiaweig <jiaweig@amazon.com>
* Move back setreg from PlatfromLimitsDescriptor to Device, due to Linux dependency issue.
Signed-off-by: jiaweig <jiaweig@amazon.com>
* Changed the function to take in RHI backend name
Signed-off-by: jiaweig <jiaweig@amazon.com>
* Fixed log2 shaper equations. Added bspline sampling for lut. Added options for custom log2 or linear lut with custom exposure ranges.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Added support for PQ shaper. Added shader option & cvar for lut sampling quality. Fixed issues in the blend lut shader that were causing considerable quality loss. No longer always changing to the log2 1000 nit shaper when blending luts - if the source luts all use the same shaper, keep using that shaper in the blended lut.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Fixed an integer -> float
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Minor PR reveiw updates
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* [ATOm][RHI][Vulkan][Android] - Reorganize float2 data members to float to avoid Android Mali GPUdriver crashes
Signed-off-by: Peng <tonypeng@amazon.com>
* [ATOM][RHI][Vulkan][Android] - Added reason comment for modifying float2 in the shader
Signed-off-by: Peng <tonypeng@amazon.com>
* Re-add support for UI Elements that use Render Targets
* Move LyShine pass request from Atom's MainPipeline.pass to project's
* Make all dynamic draw contexts in LyShine draw to pass directly without the need of draw list tags
* Remove local RPI changes that are no longer needed
* Prevent crash if LyShine gem is enabled but its custom pass hasn't been added to the main render pipeline
* Revert to default UI pass if the LyShine pass has not been added to project's main render pipeline
Signed-off-by: abrmich <abrmich@amazon.com>
* Expose shadow bias to component & feature processors. Shadow bias now works more consistently with various near / far shadow planes and caster positions. Bias now also affects esm shadows which helps eliminate acne in certain situations.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Adding jira comment to light configuration serialization version. Improved comment on final adjustment to bias before its sent to the shader.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Hooking up bias to behavior context.
Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
* Enable Shader Compilation support for Linux
* Add azslc package 3P definition for download
* Add AzslcGeader.azsli nad PlatformHeader.hlsli for Linux/Null and Linux/Vulkan (Copy of Android/Vulkan)
* Enable trait PAL_TRAIT_BUILD_ATOM_ASSET_SHADER_SUPPORTED for Linux
* Add platform builder file dependencies
* Updated AZ_TRAIT_ATOM_SHADERBUILDER_AZSLC to use new 3P linux version of azslc
* Add AtomShaderCapabilities.json, PlatformLimits.azasset for Linux (Copy from Android)
* Fix paths/values for Vulkan_Traits_Linux.h
* Enable trait PAL_TRAIT_BUILD_ATOM_ASSET_SHADER_SUPPORTED for Linux
* Enabled AZ_TRAIT_ATOM_VULKAN_LAYER_LUNARG_STD_VALIDATION_SUPPORT for Linux/Vulkan
* Added AzslcHeader.azsli, PlatformHeader.hlsli dependencies for Linux/Null and Linux/Vulkan in the platform builders for windows and mac for consistency
Signed-off-by: spham-amzn <spham@amazon.com>