Commit Graph

205 Commits

Author SHA1 Message Date
santorac c8d2f74ca1 Added backward-compatible support for the old "id" key in material type files, which is being renamed to "name".
This required the use of custom serializers, because the JSON serialization system does not have any means of supporting field name aliases through SerializeContext.

Testing: RPI unit test pass and AtomSampleViewer material screenshot test script passes.

Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
2021-09-28 22:05:26 -07:00
santorac c2abd2d74f Updated the naming convention for material property "names" vs "IDs".
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>
2021-09-17 22:19:31 -07:00
santorac bd0032a6d1 Fixed a recently introduced Material initialization bug.
An early-return in Material::SetPropertyValue was breaking initialization because Init() was called multiple times, and on subsequent initializations the property values weren't getting reset.
Added a unit test to ensure this kind of thing doesn't happen again.

Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
2021-09-17 18:03:33 -07:00
santorac 5b04183b4e Material System Reports Warnings About PSO-Impacting Changes
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.
2021-09-15 15:11:01 -07:00
santorac 48e0a9d5ff Merge remote-tracking branch 'upstream/development' into Atom/santorac/WarnOnMaterialPsoChanges 2021-09-15 11:35:39 -07:00
Esteban Papp ee2e728760 Merge branch 'development' into cmake/warn_virtual
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-09-14 10:28:58 -07:00
Nicholas Van Sickle db63dcbcd9 Refresh rate driven rendering tick logic (#3375)
* Implement sync interval and refresh rate API for RenderViewportWidget

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Measure actual frame timings in the viewport info overlay.

Takes the median of the sum of (frame end - frame begin) to provide more a more representative view of when frames begin and end.

Note: Until VSync is internally supported by the event loop, this will produce nearly identical frame timings as the frame will spend as much time as needed synchronously waiting on a vblank.

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Make frame timing per-pipeline, wire up refresh rate info to ViewportContext

Signed-off-by: nvsickle <nvsickle@amazon.com>

* POC: Frame limit pipeline rendering

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Switch Editor tick to every 0ms to allow better tick accumulation behavior

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Move RPISystemComponent to the tick bus, remove tick accumulation logic

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Add `AddToRenderTickAtInterval` to RenderPipeline API

This allows a pipeline to update at a set cadence, instead of rendering every frame or being directly told when to tick.

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Make ViewportContext enforce a target framerate

-Adds GetFpsLimit/SetFpsLimit for actively limiting FPS
-Calculates a render tick interval based on vsync and the vps limit and updates the current pipeline

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Add r_fps_limit and ed_inactive_viewport_fps_limit cvars

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Quick null check from a crash I bumped into

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Fix off-by-one on FPS calculation (shouldn't include the not-yet-rendered frame)

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Clarify frame time begin initialization

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Fix TrackView export.

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Address some reviewer feedback, revert RPISystem API change, fix CPU profiler.

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Add g_simulation_tick_rate

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Address review feedback, make frame limit updates event driven

Signed-off-by: nvsickle <nvsickle@amazon.com>

* Remove timestamp update from ComponentApplication::Tick

Signed-off-by: nvsickle <nvsickle@amazon.com>
2021-09-13 17:57:42 -07:00
santorac 51f101748d 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".
- 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.

Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
2021-09-13 17:05:11 -07:00
srikappa-amzn b2963f2bc1 Renamed AtomMaxFileSize to DefaultMaxFileSize (#4067)
Signed-off-by: srikappa-amzn <srikappa@amazon.com>
2021-09-13 17:55:28 -05:00
Esteban Papp 5965760612 Merge branch 'development' into cmake/warn_virtual
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-09-10 20:27:01 -07:00
Qing Tao d9cbc97ec0 ATOM-16063 Remove SetShaderResourceGroupCallback in scene and update scene srg handling (#3969)
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>
2021-09-10 10:38:16 -07:00
Esteban Papp 9f6d4125b8 Merge branch 'development' into cmake/warn_virtual
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-09-09 11:50:40 -07:00
AMZN-koppersr a62cb8cf2b Merge pull request #3999 from aws-lumberyard-dev/Prefab/IncreaseReadFileSizeLimit
Set max file size limits for AZ::JsonSerializationUtils::ReadJsonFile and AZ::Utils::ReadFile
2021-09-09 10:33:40 -07:00
Esteban Papp f414cd3966 More fixes
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-09-08 16:50:57 -07:00
srikappa-amzn 1e7af75d94 Merge branch 'development' into Prefab/IncreaseReadFileSizeLimit
Signed-off-by: srikappa-amzn <srikappa@amazon.com>
2021-09-08 14:09:07 -07:00
Esteban Papp d58bda5bbf WIP
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-09-08 13:43:30 -07:00
srikappa-amzn 5a6daf4352 Maximize read file size limit and set it to 1MiB for Atom use cases
Signed-off-by: srikappa-amzn <srikappa@amazon.com>
2021-09-08 02:02:24 -07:00
Esteban Papp c805d443d2 Merge branch 'development' into cmake/warn_virtual
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>

# Conflicts:
#	Code/Legacy/CryCommon/IConsole.h
#	Code/Legacy/CrySystem/LocalizedStringManager.h
#	Code/Legacy/CrySystem/XConsole.h
#	Code/Legacy/CrySystem/XConsoleVariable.h
#	Code/Legacy/CrySystem/XML/XmlUtils.cpp
#	cmake/Platform/Common/Clang/Configurations_clang.cmake
2021-09-07 18:42:40 -07:00
moudgils 4d5b047c1b Fix PipelineLibraries (DX12 backend). (#3768)
* Fix loading of PipelineLibraries from disk for DX12 backend.

Signed-off-by: moudgils <moudgils@amazon.com>

* Disabled Saving out PipelineLibraries (for DX12) if pix or Renderdoc is enabled.
Addressed some feedback

Signed-off-by: moudgils <moudgils@amazon.com>

* Fixed an issue withe loading PipelineLibraries and added a cleaner abstraction to not save empty libraries for dx12

Signed-off-by: moudgils <moudgils@amazon.com>
2021-09-07 11:03:11 -07:00
Esteban Papp 40d2fe61a1 Gems/Atom
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-09-03 20:35:39 -07:00
hershey5045 4249ceeae7 Add material property names to material assets, disable FBX dependency on materialtype files. (#3408)
* Add material property names to material assets, disable FBX dependency on materialtype files.

Signed-off-by: Robin <rbarrand@amazon.com>

* Add reflection for MaterialAssets. Update member variable comment.

Signed-off-by: Robin <rbarrand@amazon.com>

* Switch cvar to using bus value. Refine comments.

Signed-off-by: Robin <rbarrand@amazon.com>

* Refactor functions and refine comments.

Signed-off-by: Robin <rbarrand@amazon.com>

* Realign property values when material property names are populated.

Signed-off-by: Robin <rbarrand@amazon.com>

* Switch PostLoadInit check to on asset status ready. Add realign property values code to PostLoadInit as well.

Signed-off-by: Robin <rbarrand@amazon.com>

* Stash@{1} code.

Signed-off-by: Robin <rbarrand@amazon.com>

* Refactor realignment code into the right places.

Signed-off-by: Robin <rbarrand@amazon.com>

* Remove pragma optmize off.

Signed-off-by: Robin <rbarrand@amazon.com>

* More refactoring.

Signed-off-by: Robin <rbarrand@amazon.com>

* Refactor comments and remove code no longer needed.

Signed-off-by: Robin <rbarrand@amazon.com>

* Refactor comments and remove unused include.

Signed-off-by: Robin <rbarrand@amazon.com>

* Comment refactor, corrected some code.

Signed-off-by: Robin <rbarrand@amazon.com>

Co-authored-by: Robin <rbarrand@amazon.com>
2021-09-01 16:01:33 -07:00
Qing Tao f2eb8ff51f ATOM-16237 Using setting registry to RPI system settings (#3663)
* ATOM-16237 Using setting registry to RPI system settings
Changes include:
- Remove RHISystemDesriptor since the pre-registered draw list tag is not needed.
- Remove EitorContext which was for system component settings.
- Add atom_rpi.setreg file
- Add getting RPISystemDescriptor from setting registry.

Signed-off-by: qingtao <qingtao@amazon.com>
2021-08-30 10:10:22 -07:00
Jeremy Ong 07a14bdce1 Add AZ_BUDGET_DEFINE/AZ_BUDGET_DECLARE and remove driller
NOTE: The memory driller is still intact for now to avoid needing to
modify allocators, but the frame/cpu portions of driller and the
standalone executable are now gone.

Signed-off-by: Jeremy Ong <jcong@amazon.com>
2021-08-24 15:07:27 -06:00
carlitosan 4e0399b283 Merge pull request #3309 from aws-lumberyard-dev/carlitosan/development
JSON serialization of SC Editor Assets
2021-08-24 11:45:18 -07:00
Guthrie Adams 701e36f493 Merge pull request #2752 from greenrazer/ExposeLodControls
Expose lod controls
2021-08-24 10:41:24 -05:00
chcurran 794c22c02e merge latest
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
2021-08-23 16:02:58 -07:00
santorac 60d137c5b6 Merge pull request #2746 from aws-lumberyard-dev/Atom/santorac/OptionalSceneApiMaterialConversion3
Made Model Material Conversion Optional

Added a new registry setting that disables automatic conversion of materials from model files like FBX.

By default, processing of model files (like FBX) automatically convert the included materials to Atom materials, using StandardPBR. This adds a job dependency on StandardPBR.materialtype, which propagates to any related azsl files as well. Thus any change to azsl code will cause all model files in the project to rebuild.

Some game teams have no interest in using the auto-converted materials; they always use a Material Component to apply material overrides for every mesh. This new setting allows teams to disable material auto-conversion for the entire project, thus removing the job dependency on StandardPBR.materialtype. Instead, every mesh will be assigned the same default material. Any change to azsl code will cause that one default material to rebuild, but this will not trigger any models to rebuild.

Details:
- Added /O3DE/SceneAPI/MaterialConverter registry settings for configuring the scene material converter. It includes an enable flag, and a default material to use when conversion is disabled.
- Added SceneBuilderDependencyRequests::AddFingerprintInfo which allows SceneAPI components to modify the scene builder analysis fingerprint. We use this to reprocess scene files when the material converter settings change.
- Updated SceneAPI's material asset builder to skip the StandardPBR dependency when material conversion is disabled.
- Added some code to MaterialComponentController to handle an edge case that may when disabling material conversion on an existing project, and assigned materials disappear.

Testing:
- Changing the registry setting does trigger a rebuild of the fbx files.
- When material conversion is disabled, changing an azsl file does not cause fbx files to rebuild, but the shader still reloads as expected.
- Made a test level using multiple models with multiple meshes, made various adjustments to the material slots for each mesh, and tried switching the material conversion registry setting from true to false. (Details below)
- Merged this change to a customer's fork and tested on their existing content.

Details about my test level:
- Made a new test level AtomTest project
- Added two entities, both using multi-mat_mesh-groups_1m_cubes.fbx
- Added a material component to both entities
  - Entity 1 material assignments
    - Blue_Zaxis: left as-is
    - Green_Yaxis: exported the material
    - Red_Xaxis: exported the material, and changed the material instance color to pink
    - StingrayPBS1: exported the material, scaled the UVs in the exported material source, and changed the material instance color to green.
    - With_Texture: selected an existing brick material, changed the material instance color to red.
  - Entity 2 material assignments
    - Default Material: set to an existing brick material
    - Blue_Zaxis: manually assigned built-in material that was converted from fbx
    - Green_Yaxis: manually assigned built-in material that was converted from fbx, and changed the material instance color to orange
2021-08-23 15:24:21 -07:00
santorac 6b23e07af4 Changed MaterialConverterBus GetMaterialTypePath() to return a string instead of char*
Minor code cleanup.

Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
2021-08-20 17:22:11 -07:00
Kyle Birnbaum 2b1f4c2fc0 Merge branch 'development' into ExposeLodControls 2021-08-20 12:45:00 -07:00
Kyle B b53a085700 Merge branch 'development' into ExposeLodControls 2021-08-20 12:14:59 -07:00
santorac 079e018e8e Merge remote-tracking branch 'upstream/development' into Atom/santorac/OptionalSceneApiMaterialConversion3 2021-08-19 10:37:01 -07:00
Esteban Papp f8e99cd7dd Merge branch 'development' into cmake/SPEC-2513_w4244
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>

# Conflicts:
#	Code/Editor/CryEditDoc.cpp
#	Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.cpp
#	Gems/Atom/Feature/Common/Code/Source/PostProcessing/BlendColorGradingLutsPass.cpp
#	Gems/PhysXDebug/Code/Source/SystemComponent.cpp
2021-08-19 08:53:41 -07:00
Ken Pruiksma 90845313fb Overhaul of LookModification (#3282)
* 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>
2021-08-18 16:59:34 -05:00
chcurran de9e991ccc merge development
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
2021-08-17 15:37:30 -07:00
chcurran 88121f3bb4 move JsonUtils to AzCore
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
2021-08-17 14:06:24 -07:00
Esteban Papp 036114a5a7 Merge branch 'development' into cmake/SPEC-2513_w4244
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>

# Conflicts:
#	Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.cpp
2021-08-17 12:10:46 -07:00
Jacob Hilliard e865ad5d23 Profiler: implement loading from saved captures (#3026)
* Profiler: implement loading from saved capture
Adds functionality for finding a saved capture on disk and then
deserializing it using rapidjson's built-in buffered stream reader. This
does require use of raw file pointers since saved captures can be
hundreds of megabytes.
Actually showing the data in the visualizer is TODO.
* Profiler: use heap buffer over stack buffer
* Profiler: move deserialization logic to ImGuiCpuProfiler

Signed-off-by: Jacob Hilliard <jhlliar@amazon.com>
2021-08-17 11:33:13 -07:00
pappeste dcab2751de Atom
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
2021-08-16 16:39:57 -07:00
chcurran 5044204839 Move JsonUtils.h for support of SC serialization
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
2021-08-13 21:53:20 -07:00
michabr cd5081a7c3 Fix byte alignment issue for index/vertex buffers (#3110)
* Fix byte alignment issue for index/vertex buffers
* Remove default alignment value when getting dynamic buffer

Signed-off-by: abrmich <abrmich@amazon.com>
2021-08-13 13:31:46 -07:00
antonmic 7d4022fbdf Merge pull request #3035 from aws-lumberyard-dev/Atom/antonmic/PassBuilder
Changing pass builder to declare job dependencies on referenced .shader files and consequently removing the critical flag from the shader builder.
2021-08-13 11:50:51 -07:00
Kyle B 0c05c9f204 [not working] Made lod selection more generic for further work
Signed-off-by: Kyle B <kylebirnbaum@gmail.com>
2021-08-11 15:49:50 -07:00
antonmic 193fa3c918 Merge pull request #2584 from aws-lumberyard-dev/Atom/antonmic/SrgDebugImprovements
Shader resource group debug improvements
2021-08-11 10:37:36 -07:00
antonmic adf7a34ef5 Got PassBuilder shader dependency working and removed critical flag from shader builder
Signed-off-by: antonmic <56370189+antonmic@users.noreply.github.com>
2021-08-10 23:07:23 -07:00
Artur K 4cee263033 Minimal TypeInfo header/reduce std interdependencies. (#2688)
* Minimal TypeInfo header/reduce std interdependencies.

TypeInfoSimple.h is a small header that can replace the use of
TypeInfo.h in some cases.

Signed-off-by: Nemerle <nemerle5+git@gmail.com>

* Windows build fixed

Removed algorithm.h from string_view.h

smoke-test passed

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Resotore dynamic_pointer_cast in intrusive_ptr

Requested by reviewer.

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Fix CI build

string.h - missed alogorithm.h, since it was removed from string_view
NodeWrapper.h - missing smart_ptr.h

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

Co-authored-by: Nemerle <nemerle5+git@gmail.com>
2021-08-10 19:07:01 -05:00
antonmic 5472d6768e Minor improvements
Signed-off-by: antonmic <56370189+antonmic@users.noreply.github.com>
2021-08-10 12:48:26 -07:00
antonmic 8d7d560d9d Merge branch 'dev' into Atom/antonmic/SrgDebugImprovements 2021-08-09 23:47:40 -07:00
antonmic 5f1e973b3f Removing condition from View SRG compilation
Signed-off-by: antonmic <56370189+antonmic@users.noreply.github.com>
2021-08-08 23:34:09 -07:00
Kyle B 51271fa15b Created group for Lod component data
Signed-off-by: Kyle B <kylebirnbaum@gmail.com>
2021-08-06 16:57:00 -07:00
Kyle B 3db93a564d Made formatting changes per pull comments, incuding adding comments, changing spacing, and changing the ui type of component fields
Signed-off-by: Kyle B <kylebirnbaum@gmail.com>
2021-08-03 18:28:55 -07:00