Merge branch 'development' into Atom/guthadam/thumbnail_and_preview_refactor
Signed-off-by: Guthrie Adams <guthadam@amazon.com>
This commit is contained in:
@@ -1,18 +1,5 @@
|
||||
<settings>
|
||||
<r_PostProcessEffects value="1"/>
|
||||
<r_HDREyeAdaptationSpeed value="100000000"/>
|
||||
<r_MotionBlur value="0"/>
|
||||
<e_ScreenShotQuality value="0"/>
|
||||
<e_ViewDistRatio value="100000000"/>
|
||||
<r_DisplayInfo value="0"/>
|
||||
<e_StreamCgfPoolSize value="128" />
|
||||
<e_ViewDistRatioVegetation value="100"/>
|
||||
<e_Lods value="0"/>
|
||||
<e_Vegetation value="0"/>
|
||||
<e_TerrainOcclusionCulling value="0"/>
|
||||
<e_OcclusionVolumes value="0"/>
|
||||
<e_shadows value="0"/>
|
||||
<e_portals value="3"/>
|
||||
<e_fog value="0"/>
|
||||
<r_hdrdebug value="0"/>
|
||||
</settings>
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
<Tool Title="| Draw Helpers" Command="p_draw_helpers" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| AI Debug Draw" Command="ai_DebugDraw" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Toggle Music" Command="s_MusicEnable" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Toggle Sound" Command="s_SoundEnable" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Toggle ForcefeedBack" Command="i_forcefeedback" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Freeze Camera " Command="e_CameraFreeze" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Log Verbosity 0" Command="log_Verbosity 0" EditorCmd="" ToggleVar="0"/>
|
||||
<Tool Title="| SaveLevelStats" Command="savelevelstats" EditorCmd="" ToggleVar="0"/>
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
ConsoleHide
|
||||
g_godMode=1
|
||||
sys_warnings=0
|
||||
con_showonload=1
|
||||
i_forcefeedback=0
|
||||
g_infiniteammo=1
|
||||
e_ObjectLayersActivation=0
|
||||
e_ObjectLayersActivationPhysics=0
|
||||
g_flashrenderingduringloading=0
|
||||
sys_maxfps=0
|
||||
r_vsync=0
|
||||
p_max_substeps=1
|
||||
demo_file=autotest
|
||||
demo_num_runs=0
|
||||
demo_quit=1
|
||||
demo_ai=1
|
||||
|
||||
@@ -1,15 +1,5 @@
|
||||
ConsoleHide
|
||||
g_godMode=1
|
||||
g_infiniteammo=1
|
||||
r_displayinfo=1
|
||||
s_profiling=1
|
||||
sys_maxfps=0
|
||||
e_ObjectLayersActivation=0
|
||||
e_ObjectLayersActivationPhysics=0
|
||||
|
||||
demo_file=autotest
|
||||
demo_num_runs=2
|
||||
demo_quit=1
|
||||
demo_savestats=1
|
||||
demo_profile=-1
|
||||
demo
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
ConsoleHide
|
||||
g_godMode=1
|
||||
g_infiniteammo=1
|
||||
r_displayinfo=1
|
||||
s_profiling=1
|
||||
sys_maxfps=0
|
||||
demo_file=playthru
|
||||
demo_num_runs=2
|
||||
demo_quit=1
|
||||
demo_savestats=1
|
||||
demo_profile=-1
|
||||
demo
|
||||
demo
|
||||
|
||||
@@ -11,113 +11,16 @@
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
sys_spec_ObjectDetail=7
|
||||
sys_spec_Shading=7
|
||||
sys_spec_VolumetricEffects=7
|
||||
sys_spec_Shadows=7
|
||||
sys_spec_Texture=7
|
||||
sys_spec_Physics=7
|
||||
sys_spec_PostProcessing=7
|
||||
sys_spec_Particles=7
|
||||
sys_spec_Sound=7
|
||||
sys_spec_Water=7
|
||||
sys_spec_GameEffects=7
|
||||
sys_spec_light=7
|
||||
|
||||
[1]
|
||||
sys_spec_ObjectDetail=1
|
||||
sys_spec_Shading=1
|
||||
sys_spec_VolumetricEffects=1
|
||||
sys_spec_Shadows=1
|
||||
sys_spec_Texture=1
|
||||
sys_spec_Physics=1
|
||||
sys_spec_PostProcessing=1
|
||||
sys_spec_Particles=1
|
||||
sys_spec_Sound=1
|
||||
sys_spec_Water=1
|
||||
sys_spec_GameEffects=1
|
||||
sys_spec_light=1
|
||||
|
||||
[2]
|
||||
sys_spec_ObjectDetail=2
|
||||
sys_spec_Shading=2
|
||||
sys_spec_VolumetricEffects=2
|
||||
sys_spec_Shadows=2
|
||||
sys_spec_Texture=2
|
||||
sys_spec_Physics=2
|
||||
sys_spec_PostProcessing=2
|
||||
sys_spec_Particles=2
|
||||
sys_spec_Sound=2
|
||||
sys_spec_Water=2
|
||||
sys_spec_GameEffects=2
|
||||
sys_spec_light=2
|
||||
|
||||
[3]
|
||||
sys_spec_ObjectDetail=3
|
||||
sys_spec_Shading=3
|
||||
sys_spec_VolumetricEffects=3
|
||||
sys_spec_Shadows=3
|
||||
sys_spec_Texture=3
|
||||
sys_spec_Physics=3
|
||||
sys_spec_PostProcessing=3
|
||||
sys_spec_Particles=3
|
||||
sys_spec_Sound=3
|
||||
sys_spec_Water=3
|
||||
sys_spec_GameEffects=3
|
||||
sys_spec_light=3
|
||||
|
||||
[4]
|
||||
sys_spec_ObjectDetail=4
|
||||
sys_spec_Shading=4
|
||||
sys_spec_VolumetricEffects=4
|
||||
sys_spec_Shadows=4
|
||||
sys_spec_Texture=4
|
||||
sys_spec_Physics=4
|
||||
sys_spec_PostProcessing=4
|
||||
sys_spec_Particles=4
|
||||
sys_spec_Sound=4
|
||||
sys_spec_Water=4
|
||||
sys_spec_GameEffects=4
|
||||
sys_spec_light=4
|
||||
|
||||
[5]
|
||||
sys_spec_ObjectDetail=5
|
||||
sys_spec_Shading=5
|
||||
sys_spec_VolumetricEffects=5
|
||||
sys_spec_Shadows=5
|
||||
sys_spec_Texture=5
|
||||
sys_spec_Physics=5
|
||||
sys_spec_PostProcessing=5
|
||||
sys_spec_Particles=5
|
||||
sys_spec_Sound=5
|
||||
sys_spec_Water=5
|
||||
sys_spec_GameEffects=5
|
||||
sys_spec_light=5
|
||||
|
||||
[6]
|
||||
sys_spec_ObjectDetail=6
|
||||
sys_spec_Shading=6
|
||||
sys_spec_VolumetricEffects=6
|
||||
sys_spec_Shadows=6
|
||||
sys_spec_Texture=6
|
||||
sys_spec_Physics=6
|
||||
sys_spec_PostProcessing=6
|
||||
sys_spec_Particles=6
|
||||
sys_spec_Sound=6
|
||||
sys_spec_Water=6
|
||||
sys_spec_GameEffects=6
|
||||
sys_spec_light=6
|
||||
|
||||
[8]
|
||||
sys_spec_ObjectDetail=8
|
||||
sys_spec_Shading=8
|
||||
sys_spec_VolumetricEffects=8
|
||||
sys_spec_Shadows=8
|
||||
sys_spec_Texture=8
|
||||
sys_spec_Physics=8
|
||||
sys_spec_PostProcessing=8
|
||||
sys_spec_Particles=8
|
||||
sys_spec_Sound=8
|
||||
sys_spec_Water=8
|
||||
sys_spec_GameEffects=8
|
||||
sys_spec_light=8
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
mfx_Timeout = 0.01
|
||||
|
||||
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
ca_AttachmentCullingRation=360
|
||||
es_DebrisLifetimeScale=1
|
||||
e_CoverageBufferReproj=6
|
||||
e_DecalsAllowGameDecals=1
|
||||
e_DecalsLifeTimeScale=2
|
||||
e_DecalsOverlapping=1
|
||||
e_Dissolve=2
|
||||
e_LightQuality=3
|
||||
e_LodMin=0
|
||||
e_LodRatio=20
|
||||
e_MaxViewDistSpecLerp=1
|
||||
e_MergedMeshesInstanceDist=1.0
|
||||
e_MergedMeshesPool=8192
|
||||
e_ObjQuality=3
|
||||
e_OcclusionCullingViewDistRatio=1
|
||||
e_ProcVegetation=1
|
||||
e_StatObjBufferRenderTasks=1
|
||||
e_StreamCgf=0
|
||||
e_TerrainLodRatio=1
|
||||
e_TerrainOcclusionCullingMaxDist=200
|
||||
e_Tessellation=0
|
||||
e_VegetationMinSize=0
|
||||
e_ViewDistMin=10
|
||||
e_ViewDistRatio=100
|
||||
e_ViewDistRatioCustom=100
|
||||
e_ViewDistRatioDetail=100
|
||||
e_ViewDistRatioLights=50
|
||||
e_ViewDistRatioVegetation=100
|
||||
r_DrawNearZRange=0.12
|
||||
r_FlaresTessellationRatio=1
|
||||
r_SilhouettePOM=0
|
||||
r_usezpass=2
|
||||
|
||||
[1]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=1
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=1
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=21
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=0
|
||||
e_ViewDistRatio=50
|
||||
|
||||
[2]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=2
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=2
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=1
|
||||
e_ViewDistRatio=50
|
||||
|
||||
[3]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=3
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=3
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=1
|
||||
e_ViewDistRatio=75
|
||||
|
||||
[4]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=4
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=4
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=1
|
||||
e_ViewDistRatio=75
|
||||
|
||||
[5]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_LightQuality=1
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=1
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatio=50
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
|
||||
[6]
|
||||
ca_AttachmentCullingRation=300
|
||||
es_DebrisLifetimeScale=0.8
|
||||
e_LightQuality=2
|
||||
e_LodRatio=15
|
||||
e_ObjQuality=2
|
||||
e_ViewDistRatio=75
|
||||
e_ViewDistRatioDetail=35
|
||||
e_ViewDistRatioVegetation=75
|
||||
|
||||
[8]
|
||||
ca_AttachmentCullingRation=400
|
||||
e_LightQuality=4
|
||||
e_LodRatio=40
|
||||
e_MergedMeshesInstanceDist=2.0
|
||||
e_MergedMeshesPool=16384
|
||||
e_ObjQuality=4
|
||||
e_TerrainLodRatio=0.5
|
||||
e_Tessellation=1
|
||||
e_ViewDistRatio=125
|
||||
e_ViewDistRatioCustom=125
|
||||
e_ViewDistRatioDetail=125
|
||||
e_ViewDistRatioLights=75
|
||||
e_ViewDistRatioVegetation=125
|
||||
r_DrawNearZRange = 0.08
|
||||
r_SilhouettePOM=1
|
||||
@@ -1,94 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_ParticlesGI=1
|
||||
e_ParticlesPreload=0
|
||||
e_ParticlesMaxScreenFill=128
|
||||
e_ParticlesMinDrawPixels=1
|
||||
e_ParticlesMotionBlur=0
|
||||
e_ParticlesObjectCollisions=2
|
||||
e_ParticlesQuality=3
|
||||
e_ParticlesSortQuality=0
|
||||
e_ParticlesPoolSize=16384
|
||||
r_ParticlesHalfRes=0
|
||||
r_ParticlesTessellation=1
|
||||
r_ParticlesInstanceVertices=1
|
||||
r_ParticlesGpuMaxEmitCount=10000
|
||||
|
||||
[1]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=10
|
||||
|
||||
|
||||
[2]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=100
|
||||
|
||||
|
||||
[3]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=500
|
||||
|
||||
|
||||
[4]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=1000
|
||||
|
||||
|
||||
[5]
|
||||
e_ParticlesMaxScreenFill=32
|
||||
e_ParticlesMinDrawPixels=1.5
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=1
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesGpuMaxEmitCount=3000
|
||||
|
||||
[6]
|
||||
e_ParticlesMaxScreenFill=64
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
r_ParticlesGpuMaxEmitCount=5000
|
||||
|
||||
[8]
|
||||
e_ParticlesMaxScreenFill=160
|
||||
e_ParticlesMotionBlur=1
|
||||
e_ParticlesQuality=4
|
||||
r_ParticlesGpuMaxEmitCount=1048576
|
||||
@@ -1,100 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
es_MaxPhysDist=100
|
||||
es_MaxPhysDistInvisible=25
|
||||
e_CullVegActivation=50
|
||||
e_FoliageWindActivationDist=25
|
||||
e_PhysMinCellSize=4
|
||||
e_PhysOceanCell=0.5
|
||||
e_PhysProxyTriLimit=10000
|
||||
g_breakage_mem_limit=0
|
||||
g_breakage_particles_limit=160
|
||||
g_no_secondary_breaking=0
|
||||
g_tree_cut_reuse_dist=0
|
||||
p_gravity_z=-13
|
||||
p_max_entity_cells=300000
|
||||
p_max_MC_iters=6000
|
||||
p_max_object_splashes=3
|
||||
p_max_substeps=5
|
||||
p_max_substeps_large_group=5
|
||||
p_num_bodies_large_group=100
|
||||
p_splash_dist0=7
|
||||
p_splash_dist1=30
|
||||
p_splash_force0=10
|
||||
p_splash_force1=100
|
||||
p_splash_vel0=4.5
|
||||
p_splash_vel1=10
|
||||
v_vehicle_quality=4
|
||||
|
||||
[1]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[2]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[3]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[4]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[5]
|
||||
es_MaxPhysDist=50
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_particles_limit=80
|
||||
g_tree_cut_reuse_dist=0.35
|
||||
p_max_MC_iters=4000
|
||||
p_max_substeps=2
|
||||
|
||||
[6]
|
||||
|
||||
[8]
|
||||
@@ -1,114 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
r_PostProcessEffects=1
|
||||
q_ShaderHDR=2
|
||||
q_ShaderPostProcess=2
|
||||
r_ChromaticAberration=0
|
||||
r_ColorGradingChartsCache=0
|
||||
r_DepthOfField=2
|
||||
r_Flares=1
|
||||
r_HDRBloomQuality=2
|
||||
r_MotionBlur=2
|
||||
r_MotionBlurMaxViewDist=100000
|
||||
r_MotionBlurQuality=1
|
||||
r_MotionBlurShutterSpeed=125
|
||||
r_Rain=2
|
||||
r_RainMaxViewDist_Deferred=150
|
||||
r_Sharpening=0
|
||||
r_Snow=2
|
||||
r_SunShafts=2
|
||||
r_TranspDepthFixup=1
|
||||
r_ToneMapTechnique=0
|
||||
r_ToneMapExposureType=0
|
||||
r_HDRBloom=1
|
||||
r_ColorGrading=1
|
||||
r_ColorSpace=0
|
||||
|
||||
[1]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_ColorGrading=0
|
||||
r_DepthOfField=0
|
||||
r_Flares=0
|
||||
r_HDRBloom=0
|
||||
r_HDRBloomQuality=0
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=0
|
||||
r_TranspDepthFixup=0
|
||||
r_ToneMapTechnique=3
|
||||
r_ToneMapExposureType=1
|
||||
r_ColorSpace=2
|
||||
|
||||
|
||||
[2]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_ColorGradingChartsCache=4
|
||||
r_DepthOfField=1
|
||||
r_Flares=0
|
||||
r_HDRBloomQuality=0
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=1
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
|
||||
[3]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=2
|
||||
r_ColorGradingChartsCache=4
|
||||
r_DepthOfField=1
|
||||
r_HDRBloomQuality=1
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=1
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
[4]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=2
|
||||
r_ColorGradingChartsCache=4
|
||||
r_DepthOfField=1
|
||||
r_HDRBloomQuality=1
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=1
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
[5]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_ColorGradingChartsCache=4
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
[6]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_RainMaxViewDist_Deferred=100
|
||||
|
||||
[8]
|
||||
q_ShaderHDR=3
|
||||
q_ShaderPostProcess=3
|
||||
r_MotionBlurQuality=2
|
||||
@@ -1,98 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
q_ShaderGeneral=2
|
||||
q_ShaderMetal=2
|
||||
q_ShaderGlass=2
|
||||
q_ShaderVegetation=2
|
||||
q_ShaderIce=2
|
||||
q_ShaderTerrain=2
|
||||
q_ShaderShadow=2
|
||||
q_ShaderFX=2
|
||||
q_ShaderSky=2
|
||||
q_Renderer=2
|
||||
|
||||
[1]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[2]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[3]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=2
|
||||
|
||||
[4]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=2
|
||||
|
||||
[5]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[6]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[8]
|
||||
q_ShaderGeneral=3
|
||||
q_ShaderMetal=3
|
||||
q_ShaderGlass=3
|
||||
q_ShaderVegetation=3
|
||||
q_ShaderIce=3
|
||||
q_ShaderTerrain=3
|
||||
q_ShaderShadow=3
|
||||
q_ShaderFX=3
|
||||
q_ShaderSky=3
|
||||
q_Renderer=3
|
||||
@@ -1,120 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_CacheNearestCubePicking=1
|
||||
e_DynamicLightsMaxEntityLights=16
|
||||
e_GI=1
|
||||
e_LightVolumes=1
|
||||
e_SkyUpdateRate=1
|
||||
e_TerrainAo=0
|
||||
e_VegetationUseTerrainColor=1
|
||||
r_DeferredShadingDepthBoundsTest=1
|
||||
r_DeferredShadingTiled=2
|
||||
r_DeferredShadingTiledHairQuality=1
|
||||
r_deferredShadingFilterGBuffer=0
|
||||
r_DeferredShadingSSS=1
|
||||
r_AntialiasingMode=3
|
||||
r_DetailDistance=8
|
||||
r_EnvTexUpdateInterval=0.05
|
||||
r_Refraction=1
|
||||
r_RefractionPartialResolves=2
|
||||
r_ssdo=1
|
||||
r_ssdoHalfRes=2
|
||||
r_ssdoColorBleeding=1
|
||||
r_SSReflections=1
|
||||
r_SSReflHalfRes=1
|
||||
r_VisAreaClipLightsPerPixel=1
|
||||
sys_spec_Quality=7
|
||||
|
||||
[1]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_Refraction=0
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=0
|
||||
r_ssdoHalfRes=1
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=1
|
||||
|
||||
[2]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=0
|
||||
r_ssdoHalfRes=1
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=2
|
||||
|
||||
[3]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=0
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=3
|
||||
|
||||
[4]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=1
|
||||
r_ssdoHalfRes=1
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=4
|
||||
|
||||
[5]
|
||||
e_DynamicLightsMaxEntityLights=7
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_SSReflections=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
sys_spec_Quality=5
|
||||
|
||||
[6]
|
||||
e_DynamicLightsMaxEntityLights=11
|
||||
sys_spec_Quality=6
|
||||
|
||||
[8]
|
||||
r_DeferredShadingTiledHairQuality=2
|
||||
r_SSReflHalfRes=0
|
||||
sys_spec_Quality=8
|
||||
@@ -1,116 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_GsmLodsNum=5
|
||||
e_GsmRange=3
|
||||
e_ParticlesShadows=1
|
||||
e_Shadows=1
|
||||
e_ShadowsBlendCascades=1
|
||||
e_ShadowsClouds=1
|
||||
e_ShadowsCastViewDistRatio=1
|
||||
e_ShadowsLodBiasFixed=0
|
||||
e_ShadowsMaxTexRes=1024
|
||||
e_ShadowsOnAlphaBlend=0
|
||||
e_ShadowsPoolSize=4096
|
||||
e_ShadowsResScale=4
|
||||
e_ShadowsTessellateCascades=1
|
||||
e_ShadowsTessellateDLights=0
|
||||
e_ShadowsUpdateViewDistRatio=256
|
||||
r_DrawNearShadows=1
|
||||
r_FogShadows=2
|
||||
r_FogShadowsWater=0
|
||||
r_ShadowJittering=2.5
|
||||
r_ShadowPoolMaxFrames=30
|
||||
r_ShadowPoolMaxTimeslicedUpdatesPerFrame=100
|
||||
r_ShadowsPCFiltering=1
|
||||
r_ShadowsCache=4
|
||||
r_ShadowsCacheFormat=1
|
||||
r_ShadowsCacheResolutions=6324,4214
|
||||
r_ShadowsUseClipVolume=1
|
||||
e_ObjShadowCastSpec=3
|
||||
|
||||
[1]
|
||||
e_GsmLodsNum=3
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[2]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[3]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[4]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[5]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=1
|
||||
e_ObjShadowCastSpec=1
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
|
||||
[6]
|
||||
r_ShadowJittering=1
|
||||
e_ObjShadowCastSpec=2
|
||||
|
||||
[8]
|
||||
r_FogShadows=1
|
||||
r_FogShadowsWater=1
|
||||
r_ShadowPoolMaxFrames=0
|
||||
r_ShadowPoolMaxTimeslicedUpdatesPerFrame=100
|
||||
e_ObjShadowCastSpec=4
|
||||
r_ShadowsCache=5
|
||||
r_ShadowsCacheResolutions=4214
|
||||
@@ -1,17 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
[1]
|
||||
|
||||
[2]
|
||||
|
||||
[3]
|
||||
|
||||
[4]
|
||||
|
||||
[5]
|
||||
|
||||
[6]
|
||||
|
||||
[8]
|
||||
@@ -1,94 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_TerrainTextureStreamingPoolItemsNum=64
|
||||
r_DynTexAtlasCloudsMaxSize=32
|
||||
r_DynTexAtlasSpritesMaxSize=32
|
||||
r_DynTexMaxSize=80
|
||||
r_EnvCMResolution=2
|
||||
r_EnvTexResolution=3
|
||||
r_ImposterRatio=1
|
||||
r_TexAtlasSize=2048
|
||||
r_TexMaxAnisotropy=4
|
||||
r_TexMinAnisotropy=4
|
||||
r_TexNoAnisoAlphaTest=0
|
||||
|
||||
[1]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[2]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[3]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[4]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[5]
|
||||
r_DynTexAtlasCloudsMaxSize=24
|
||||
r_DynTexAtlasSpritesMaxSize=16
|
||||
r_DynTexMaxSize=50
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[6]
|
||||
r_DynTexAtlasCloudsMaxSize=24
|
||||
r_DynTexAtlasSpritesMaxSize=16
|
||||
r_DynTexMaxSize=60
|
||||
r_EnvCMResolution=1
|
||||
r_EnvTexResolution=2
|
||||
r_ImposterRatio=1.5
|
||||
r_TexMaxAnisotropy=8
|
||||
r_TexMinAnisotropy=8
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[8]
|
||||
r_TexMaxAnisotropy=16
|
||||
r_TexMinAnisotropy=16
|
||||
@@ -1,52 +0,0 @@
|
||||
[default]
|
||||
; dummy default for this CVarGroup (will be auto initialized during streaming system init or overridden by user via system.cfg)
|
||||
= 0
|
||||
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=1
|
||||
r_TexturesStreamingMipBias=0
|
||||
r_TexturesstreamingMinUsableMips=8
|
||||
r_TexturesStreamingSkipMips=2
|
||||
r_TexturesStreamPoolSize=256
|
||||
|
||||
[1]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[2]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[3]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[4]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[5]
|
||||
; VRAM 1.0 GB
|
||||
|
||||
[6]
|
||||
; VRAM 1.5 GB
|
||||
r_TexturesStreamingSkipMips=1
|
||||
r_TexturesStreamPoolSize=512
|
||||
|
||||
[7]
|
||||
; VRAM 2.0 GB
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=640
|
||||
|
||||
[8]
|
||||
; VRAM 3.0 GB
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=1536
|
||||
@@ -1,26 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_Clouds=1
|
||||
r_Beams=1
|
||||
|
||||
[1]
|
||||
r_Beams=0
|
||||
|
||||
[2]
|
||||
r_Beams=0
|
||||
|
||||
[3]
|
||||
r_Beams=0
|
||||
|
||||
[4]
|
||||
r_Beams=0
|
||||
|
||||
[5]
|
||||
r_Beams=0
|
||||
|
||||
[6]
|
||||
r_Beams=0
|
||||
|
||||
[8]
|
||||
@@ -1,81 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_WaterOceanFFT=1
|
||||
e_WaterTessellationAmount=10
|
||||
e_WaterTessellationSwathWidth=10
|
||||
q_ShaderWater=2
|
||||
r_WaterCaustics=1
|
||||
r_WaterReflections=1
|
||||
r_WaterReflectionsQuality=4
|
||||
r_WaterReflectionsMinVisiblePixelsUpdate=0.05
|
||||
r_WaterTessellationHW=0
|
||||
r_WaterUpdateDistance=0.2
|
||||
r_WaterUpdateFactor=0.0
|
||||
r_WaterVolumeCaustics=0
|
||||
r_WaterVolumeCausticsDensity=256
|
||||
r_WaterVolumeCausticsMaxDist=35
|
||||
r_WaterVolumeCausticsRes=1024
|
||||
r_WaterVolumeCausticsSnapFactor=1
|
||||
|
||||
[1]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=0
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.1
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[2]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=0
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.1
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[3]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=0
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.05
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[4]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=4
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.01
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[5]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.1
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[6]
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.05
|
||||
r_WaterVolumeCausticsDensity=128
|
||||
r_WaterVolumeCausticsMaxDist=25
|
||||
r_WaterVolumeCausticsRes=512
|
||||
|
||||
[8]
|
||||
e_WaterTessellationAmount=85
|
||||
r_WaterTessellationHW=1
|
||||
r_WaterVolumeCaustics=1
|
||||
@@ -1,4 +1 @@
|
||||
ai_DebugDraw = 1
|
||||
ai_DebugDrawNavigation = 1
|
||||
ai_DrawPath all
|
||||
ai_debugMNMAgentType MediumSizedCharacters
|
||||
@@ -1,7 +1,6 @@
|
||||
; Setup useful cvars for artists profiling GPU cost
|
||||
; Once in level (e.g. map c3mp_rooftop_gardens from the frontend/cmdline), in the console:
|
||||
; exec artprof.cfg
|
||||
; Be sure also to set r_shadersAsyncActivation=0 in your user.cfg (or copy artprof_user.cfg -> user.cfg)
|
||||
|
||||
; used to allow loading of loose shaders
|
||||
sys_pakPriority=0
|
||||
@@ -9,19 +8,8 @@ sys_pakPriority=0
|
||||
; because it's annoying and not relevant for artists
|
||||
sys_pakLogInvalidFileAccess=0
|
||||
|
||||
; disable fog volumes and particles as they can be misleading with r_measureOverdraw 4
|
||||
e_fogVolumes=0
|
||||
e_particles=0
|
||||
|
||||
; for convenience
|
||||
g_infiniteSuitEnergy=1
|
||||
g_infiniteAmmo=1
|
||||
g_timelimit=0
|
||||
|
||||
bind o "r_measureOverdraw 0"
|
||||
bind p "r_measureOverdraw 4"
|
||||
bind k "r_artProfile 0"
|
||||
bind l "r_artProfile 1"
|
||||
|
||||
; loading into an MP level with the map command stops you looking up and down unless you have a weapon
|
||||
i_giveitem scar
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
; disable async shader activation as it crashes when r_shadersAllowCompilation=1
|
||||
r_shadersAsyncActivation=0
|
||||
|
||||
; enable shader compiliation for r_measureOverdraw 4
|
||||
r_shadersAllowCompilation=1
|
||||
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
demo_restart_level = 2
|
||||
g_godMode=1
|
||||
g_infiniteammo=1
|
||||
r_displayinfo=1
|
||||
demo_file = autotest
|
||||
demo_ai = 1
|
||||
demo_num_runs = 4
|
||||
demo_quit = 1
|
||||
hud_startPaused=0
|
||||
sys_maxfps=0
|
||||
e_ObjectLayersActivation=0
|
||||
sys_flash = 0
|
||||
r_vsync = 0
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
demo_restart_level = 1
|
||||
g_godMode = 1
|
||||
g_infiniteammo = 1
|
||||
r_displayinfo = 2
|
||||
demo_file = timedemo_short
|
||||
demo_ai = 0
|
||||
demo_num_runs = 2
|
||||
demo_quit = 1
|
||||
-- hud_startPaused = 0
|
||||
sys_maxfps = -1
|
||||
-- e_ObjectLayersActivation = 0
|
||||
-- sys_flash = 0
|
||||
r_vsync = 0
|
||||
r_vsync = 0
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
r_ColorGradingChartsCache = 0
|
||||
r_waterupdateFactor = 0
|
||||
r_PostProcessHUD3DCache = 0
|
||||
e_gsmcache = 0
|
||||
r_ConditionalRendering = 0
|
||||
e_gicache = 0
|
||||
@@ -1,77 +0,0 @@
|
||||
ag_turnSpeedParamScale=0.0
|
||||
aim_assistFalloffDistance=200
|
||||
aim_assistInputForFullFollow_Ironsight=0.20
|
||||
aim_assistMaxDistance=255
|
||||
aim_assistMaxDistance_ironsight=255
|
||||
aim_assistMinTurnScale=0.5
|
||||
aim_assistMinTurnScale_ironsight=0.5
|
||||
aim_assistSlowDisableDistance=255
|
||||
aim_assistSlowFalloffStartDistance=200
|
||||
aim_assistSlowThresholdOuter=2.5
|
||||
aim_assiststrength=0.7
|
||||
aim_assiststrength_ironsight=0.75
|
||||
br_breakmaxworldsize=511
|
||||
cl_sensitivityControllerMP=0.6
|
||||
cl_shallowWaterSpeedMulPlayer=1.0
|
||||
controller_multiplier_x=3
|
||||
controller_multiplier_z=4
|
||||
g_actorViewDistRatio=255
|
||||
|
||||
-- This forces broken trees to have spherical inertia, which makes them harder to rotate around their vertical axis.
|
||||
g_breakageMinAxisInertia=1.0
|
||||
g_glassAutoShatterMinArea=0.5
|
||||
|
||||
g_distanceForceNoIk=35
|
||||
g_fpDbaManagementEnable=0
|
||||
g_godMode=0
|
||||
g_highlightingMaxDistanceToHighlightSquared=625
|
||||
g_hitDeathReactions_streaming=2
|
||||
g_mp_as_DefendersMaxHealth=150
|
||||
g_multiplayerDefault=1
|
||||
|
||||
-- Overriden in GameSDK\Difficulty\*.cfg
|
||||
g_playerLowHealthThreshold=20
|
||||
g_playerMidHealthThreshold=60
|
||||
|
||||
g_spawn_vistable_numLineTestsPerFrame=3
|
||||
g_telemetryConfig="MP"
|
||||
g_telemetrySampleRateBandwidth=3
|
||||
g_telemetrySampleRateMemory=2
|
||||
g_telemetrySampleRatePerformance=1
|
||||
g_VTOLInsideBoundsScaleX=0.6
|
||||
g_VTOLInsideBoundsScaleY=1
|
||||
net_breakage_sync_entities=0
|
||||
net_enable_tfrc=0
|
||||
net_log=1
|
||||
|
||||
-- Make consoles match the PC gravity
|
||||
p_gravity_z="-13"
|
||||
|
||||
-- Sanity check for physics RepositionEntity
|
||||
p_max_entity_cells=10000
|
||||
|
||||
pl_impulseEnabled=1
|
||||
pl_jump_maxTimerValue=0.0
|
||||
pl_jump_quickPressThresh=0.12
|
||||
pl_melee.angle_limit_from_behind=70
|
||||
pl_melee.impulses_enable=1
|
||||
pl_melee.melee_snap_angle_limit=45
|
||||
pl_melee.melee_snap_end_position_range=1.5
|
||||
pl_melee.melee_snap_move_speed_multiplier=10
|
||||
pl_melee.melee_snap_target_select_range=3.5
|
||||
pl_melee.mp_knockback_strength_hor=2
|
||||
pl_melee.mp_melee_system=1
|
||||
pl_melee.mp_victim_screenfx_blendout_duration=0.25
|
||||
pl_melee.mp_victim_screenfx_duration=0.1
|
||||
pl_nanovision_timetodrain=8
|
||||
pl_nanovision_timetorecharge=16
|
||||
pl_pickAndThrow.chargedThrowAutoAimConeSize=10
|
||||
pl_pickAndThrow.complexMelee_snap_angle_limit=25
|
||||
pl_sliding_control_mp.deceleration_speed=4
|
||||
pl_sliding_control_mp.max_downhill_acceleration=15
|
||||
pl_sliding_control_mp.min_speed=4
|
||||
pl_sliding_control_mp.min_speed_threshold=5
|
||||
pl_stealthKill_aimVsSpineLerp=0.65
|
||||
pl_stealthKill_useExtendedRange=1
|
||||
p_splash_vel0=0.5
|
||||
sv_bandwidth=2147483647
|
||||
@@ -1,29 +0,0 @@
|
||||
e_GI=0
|
||||
r_DeferredShadingIndexedAmbient=0
|
||||
e_ParticlesObjectCollisions=0
|
||||
g_distanceForceNoLegRaycasts=0.00001
|
||||
g_telemetryDisplaySessionId=1
|
||||
g_breakageNoDebrisCollisions=1
|
||||
|
||||
; Breakage throttling
|
||||
; These are explained in ActionGame.cpp
|
||||
;
|
||||
g_glassAutoShatterOnExplosions=1
|
||||
g_glassNoDecals=1
|
||||
g_glassMaxPanesToBreakPerFrame=2
|
||||
g_breakageTreeMax=100
|
||||
g_breakageTreeInc=101
|
||||
g_breakageTreeDec=25
|
||||
g_breakageTreeIncGlass=51
|
||||
|
||||
sys_PakInMemoryPakSizeLimit=25
|
||||
|
||||
r_TexturesStreamPoolSecondarySize=35
|
||||
r_MotionBlur=1
|
||||
|
||||
e_CoverageBufferReproj=2
|
||||
|
||||
osm_enabled = 1
|
||||
|
||||
g_waterHitOnly = 1
|
||||
p_max_object_splashes=1
|
||||
|
||||
@@ -1,63 +1,3 @@
|
||||
-- added this lines for proper 360 deg panorama renderings
|
||||
|
||||
e_ScreenShotFileFormat = jpg
|
||||
demo_fixed_timestep = 60
|
||||
s_SoundEnable = 0
|
||||
r_DisplayInfo = 0
|
||||
e_PanoramaScreenShotHeight = 720
|
||||
e_PanoramaScreenShotWidth = 10053
|
||||
c_shakeMult = 0
|
||||
demo_ai = 1
|
||||
r_MotionBlur = 0
|
||||
|
||||
-- enables full water reflection
|
||||
-- e_DebugMask = 2 -- e_DebugMask not allowed here
|
||||
|
||||
-- set weapong lighting effect to 0 to prevent flickering bug because of too much dynamic lights in the scene
|
||||
|
||||
|
||||
sys_spec = 2
|
||||
r_WaterRefractions = 1
|
||||
r_WaterReflections = 1
|
||||
r_WaterUpdateFactor = 0.01
|
||||
r_WaterReflections_ForceParticles = 0
|
||||
|
||||
r_EnvCMResolution = 2
|
||||
r_EnvTexResolution = 3
|
||||
r_EnvTexUpdateInterval = 0.05
|
||||
e_Decals = 1
|
||||
e_DecalsLifeTimeScale = 2
|
||||
ca_EnableDecals = 1
|
||||
e_LodRatio = 10
|
||||
e_ViewDistRatio = 55
|
||||
e_Lods = 1
|
||||
e_VegetationMinSize = 0
|
||||
r_CloudsUpdateAlways = 0
|
||||
|
||||
e_DynamicLightsMaxEntityLights = 3
|
||||
r_DepthOfField = 1
|
||||
--r_MotionBlur = 1
|
||||
r_Flares = 1
|
||||
r_checkSunVis = 1
|
||||
r_Coronas = 1
|
||||
r_CoronaFade = 0.1625
|
||||
r_UseEdgeAA = 1
|
||||
e_Clouds = 1
|
||||
|
||||
r_TexResolution = 0
|
||||
r_TexBumpResolution = 0
|
||||
r_DetailTextures = 1
|
||||
r_DetailNumLayers = 1
|
||||
r_DetailDistance = 8
|
||||
|
||||
e_ParticlesLod = 0.9
|
||||
|
||||
r_ShadowBlur = 3
|
||||
e_ShadowsMaxTexRes = 1024
|
||||
r_ShadowJittering = 1
|
||||
e_Shadows = 1
|
||||
e_VegetationBending = 1
|
||||
ai_UpdateAllAlways = 1
|
||||
r_refraction = 1
|
||||
r_sunshafts = 1
|
||||
r_ImposterRatio = 1
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
ai_CompatibilityMode=crysis2
|
||||
ai_BurstWhileMovingDestinationRange=9999.0
|
||||
|
||||
g_telemetryConfig=SP
|
||||
|
||||
net_inactivitytimeout=3600
|
||||
net_inactivitytimeoutDevmode=3600
|
||||
|
||||
pl_movement.nonCombat_heavy_weapon_speed_scale=1.0
|
||||
|
||||
-- BLM - Don't override game rules. The template project only has DummyRules.
|
||||
-- Furthermore, multiplayer.cfg doesn't set sv_gamerules, so the inconsistency
|
||||
-- is likely to create bugs.
|
||||
--sv_gamerules=SinglePlayer
|
||||
ca_StreamCHR=1
|
||||
@@ -1,24 +0,0 @@
|
||||
r_UseZPass = 1
|
||||
r_GeomInstancing = 1
|
||||
|
||||
e_Fog = 1
|
||||
e_Clouds = 1
|
||||
e_Decals = 1
|
||||
e_TerrainDetailMaterials = 1
|
||||
e_Dissolve = 1
|
||||
e_TerrainAo = 1
|
||||
|
||||
r_WaterReflections = 1
|
||||
|
||||
e_Shadows = 1
|
||||
e_VegetationBending = 1
|
||||
|
||||
r_PostProcessEffects = 1
|
||||
r_Flares = 1
|
||||
r_Beams = 1
|
||||
r_Glow = 1
|
||||
|
||||
r_DetailTextures = 1
|
||||
|
||||
r_refraction = 1
|
||||
r_sunshafts = 1
|
||||
@@ -1,24 +0,0 @@
|
||||
r_UseZPass = 0
|
||||
r_GeomInstancing = 0
|
||||
|
||||
e_Fog = 0
|
||||
e_Clouds = 0
|
||||
e_Decals = 0
|
||||
e_TerrainDetailMaterials = 0
|
||||
e_Dissolve = 0
|
||||
e_TerrainAo = 0
|
||||
|
||||
r_WaterReflections = 0
|
||||
|
||||
e_Shadows = 0
|
||||
e_VegetationBending = 0
|
||||
|
||||
r_PostProcessEffects = 0
|
||||
r_Flares = 0
|
||||
r_Beams = 0
|
||||
r_Glow = 0
|
||||
|
||||
r_DetailTextures = 0
|
||||
|
||||
r_refraction = 0
|
||||
r_sunshafts = 0
|
||||
@@ -1,76 +1,8 @@
|
||||
sys_spec_Full=2
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Disable gmem for this device because it causes a crash
|
||||
r_EnableGMEMPath=0
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
|
||||
e_recursion=1
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
e_ViewDistRatioVegetation=21
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_HDRBloom=0
|
||||
r_SunShafts=0
|
||||
r_ToneMapTechnique=3
|
||||
r_ToneMapExposureType=1
|
||||
r_ColorSpace=2
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
------------------------
|
||||
-- sys_spec_textureresolution
|
||||
------------------------
|
||||
r_TexturesstreamingMinUsableMips=7
|
||||
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,65 +1,7 @@
|
||||
sys_spec_Full=3
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=2
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,61 +1,8 @@
|
||||
sys_spec_Full=3
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Disabling gmem for this configuration
|
||||
r_EnableGMEMPath=0
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
|
||||
|
||||
@@ -1,76 +1,7 @@
|
||||
sys_spec_Full=1
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
|
||||
e_recursion=0
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
|
||||
-- Water occlusion queries crash in some OpenGL ES 3.0 devices
|
||||
e_HwOcclusionCullingWater = 0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_textureresolution
|
||||
------------------------
|
||||
r_TexturesstreamingMinUsableMips=6
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,81 +1,7 @@
|
||||
sys_spec_Full=2
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
|
||||
e_recursion=1
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
e_ViewDistRatioVegetation=21
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_HDRBloom=0
|
||||
r_SunShafts=0
|
||||
r_ToneMapExposureType=1
|
||||
r_ColorSpace=2
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
------------------------
|
||||
-- sys_spec_textureresolution
|
||||
------------------------
|
||||
r_TexturesstreamingMinUsableMips=7
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,60 +1,5 @@
|
||||
sys_spec_Full=4
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,100 +1,10 @@
|
||||
sys_spec_Full=3
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=2048
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,103 +1,10 @@
|
||||
sys_spec_Full=1
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,101 +1,10 @@
|
||||
sys_spec_Full=2
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,102 +1,10 @@
|
||||
sys_spec_Full=4
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=2048
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,38 +0,0 @@
|
||||
|
||||
sys_spec_Full=7
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI = 0
|
||||
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
sys_spec_Full=5
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI=0
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
sys_spec_Full=6
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI = 0
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
sys_spec_Full=8
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI = 0
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 7
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 5
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 6
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 8
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
profile=-1
|
||||
profile_allthreads=1
|
||||
i_forcefeedback=0
|
||||
g_godmode=1
|
||||
log_verbosity=-1
|
||||
sys_pakLogInvalidFileAccess=1
|
||||
e_StatoscopeDataGroups=fgmrtudlipny
|
||||
e_StatoscopeFilenameUseBuildInfo=0
|
||||
e_StatoscopeFilenameUseMap=1
|
||||
e_StatoscopeMinFuncLengthMs=0.1
|
||||
e_StatoscopeMaxNumFuncsPerFrame=60
|
||||
e_StatoscopeScreenshotCapturePeriod=5
|
||||
|
||||
@@ -3,39 +3,13 @@
|
||||
-----------------------------------------------
|
||||
r_width = 960
|
||||
r_height = 1080
|
||||
r_backbufferWidth = 1920
|
||||
r_backbufferHeight = 1080
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
-- Set the system Spec (Medium)
|
||||
-------------------------------------------
|
||||
sys_spec = 2
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
-- HMD related
|
||||
-------------------------------------------
|
||||
r_overrideDXGIoutput = 0
|
||||
r_stereodevice = 100
|
||||
r_stereomode = 1
|
||||
r_stereooutput = 7
|
||||
r_minimizeLatency = 1
|
||||
hmd_low_persistence = 1
|
||||
r_stereoScaleCoefficient = 1
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
-- Set some video optimisations
|
||||
-------------------------------------------
|
||||
r_vsync = 0
|
||||
r_MotionBlur = 0
|
||||
r_ssdoHalfRes = 3
|
||||
r_Refraction = 0
|
||||
r_DeferredShadingTiled = 0
|
||||
r_CBufferUseNativeDepth = 0
|
||||
|
||||
-------------------------------------------
|
||||
-- Hide the hud
|
||||
-------------------------------------------
|
||||
--hud_hide = 1
|
||||
|
||||
@@ -48,22 +48,6 @@
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/perfhud_pc.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{6C3531BB-4A37-515B-86F6-4FC3A9ABEF9F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/sketch_off.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{EA424FC8-20C9-51D3-A4DD-08DA8B7F7FB3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/sketch_on.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{34B60E74-28FA-57C4-9A2E-77515A083AC5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
@@ -432,110 +416,6 @@
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_full.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{8A877B20-8B7D-5F61-93C9-FD02CB856165}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_gameeffects.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{5D7C3B35-E171-5A4B-8C36-1D22B3F7636F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_objectdetail.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{8EAED4CA-6E4B-5F11-94E9-F4FB39E966C4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_particles.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{437E9B76-BFC3-57AB-9993-9C249EEAEF97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_physics.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{35B8614B-F080-5BE4-AD78-23F24E104C72}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_postprocessing.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{9CC310DD-0D00-555D-99A7-D339DF0E2A73}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_quality.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{2BD0EFEF-9DA5-5F48-B579-C500CA0D42AB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_shading.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{979A2D8D-79B9-57E8-9250-A981538FA893}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_shadows.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{90964883-E22A-5D57-86FC-86571AD213BE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_sound.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{89BEF8A4-AA05-5339-B4DE-C475541FD532}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_texture.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{15CBF6A7-1107-55A9-A173-2F7AD1329589}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_textureresolution.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{4CD3711E-09EE-5F91-8688-FB523F350C43}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_volumetriceffects.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{F316DFFF-ABA2-5145-A637-2BBA2C86E7A0}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_water.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{FD38C182-1AFC-514C-99E5-BB1AB60C4A31}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
@@ -616,38 +496,6 @@
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{B9622C57-85C2-5C68-AFB8-35AA0D65FEC7}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{E79532D9-BE8F-5969-B672-A2E8030578B9}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{4B05219C-0D19-5A04-B029-8417CE06A243}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{C0F09A4E-A77A-5FFF-B1ED-DDB37DED623C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
</Class>
|
||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||
<Class name="AZ::Uuid" field="guid" value="{B632E8B1-884A-5A65-BC01-D85F0FED1266}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||
|
||||
@@ -113,7 +113,6 @@ def create_basic_atom_level(level_name):
|
||||
general.close_pane("Error Log")
|
||||
general.idle_wait(1.0)
|
||||
general.run_console("r_displayInfo=0")
|
||||
general.run_console("r_antialiasingmode=0")
|
||||
general.idle_wait(1.0)
|
||||
|
||||
# Delete all existing entities & create default_level entity
|
||||
|
||||
-1
@@ -66,7 +66,6 @@ def run():
|
||||
general.close_pane("Error Log")
|
||||
general.idle_wait(1.0)
|
||||
general.run_console("r_displayInfo=0")
|
||||
general.run_console("r_antialiasingmode=0")
|
||||
general.idle_wait(1.0)
|
||||
|
||||
return True
|
||||
|
||||
@@ -82,7 +82,6 @@ def run():
|
||||
general.close_pane("Error Log")
|
||||
general.idle_wait(1.0)
|
||||
general.run_console("r_displayInfo=0")
|
||||
general.run_console("r_antialiasingmode=0")
|
||||
general.idle_wait(1.0)
|
||||
|
||||
return True
|
||||
|
||||
-1
@@ -149,7 +149,6 @@ class TestHelper:
|
||||
general.idle_wait(1.0)
|
||||
general.idle_wait(1.0)
|
||||
general.run_console("r_displayInfo=0")
|
||||
general.run_console("r_antialiasingmode=0")
|
||||
general.idle_wait(1.0)
|
||||
|
||||
|
||||
|
||||
@@ -187,7 +187,3 @@ def prepare_for_screenshot_compare(remote_console_instance):
|
||||
"""
|
||||
wait_for(lambda: _retry_command(remote_console_instance, 'r_displayinfo 0',
|
||||
'$3r_DisplayInfo = $60 $5[DUMPTODISK, RESTRICTEDMODE]$4'))
|
||||
wait_for(lambda: _retry_command(remote_console_instance, 'r_antialiasingmode 0',
|
||||
'$3r_AntialiasingMode = $60 $5[]$4'))
|
||||
wait_for(lambda: _retry_command(remote_console_instance, 'e_WaterOcean 0',
|
||||
'$3e_WaterOcean = $60 $5[]$4'))
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
"""
|
||||
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
"""
|
||||
|
||||
|
||||
class Tests:
|
||||
load_level = (
|
||||
"Level loaded successfully",
|
||||
"Failed to load the level"
|
||||
)
|
||||
create_entity = (
|
||||
"Parent entity created successfully",
|
||||
"Failed to create a parent entity"
|
||||
)
|
||||
set_entity_name = (
|
||||
"Entity name set successfully",
|
||||
"Failed to set entity name"
|
||||
)
|
||||
delete_entity = (
|
||||
"Parent Entity deleted successfully",
|
||||
"Failed to delete parent entity"
|
||||
)
|
||||
create_child_entity = (
|
||||
"Child entity created successfully",
|
||||
"Failed to create a child entity"
|
||||
)
|
||||
delete_child_entity = (
|
||||
"Child entity deleted successfully",
|
||||
"Failed to delete child entity"
|
||||
)
|
||||
add_mesh_component = (
|
||||
"Mesh component added successfully",
|
||||
"Failed to add mesh component"
|
||||
)
|
||||
found_component_typeId = (
|
||||
"Found component typeId",
|
||||
"Unable to find component TypeId"
|
||||
)
|
||||
remove_mesh_component = (
|
||||
"Mesh component removed successfully",
|
||||
"Failed to remove mesh component"
|
||||
)
|
||||
|
||||
|
||||
def BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD():
|
||||
"""
|
||||
Performing basic test in editor
|
||||
01. Load exiting level
|
||||
02. create parent entity and set name
|
||||
03. create child entity and set a name
|
||||
04. delete child entity
|
||||
05. add mesh component to parent entity
|
||||
06. delete parent entity
|
||||
"""
|
||||
|
||||
from editor_python_test_tools.utils import Report
|
||||
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||
|
||||
import azlmbr.bus as bus
|
||||
import azlmbr.editor as editor
|
||||
import azlmbr.entity as entity
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.object
|
||||
|
||||
# 01. load an existing level
|
||||
test_level = 'Simple'
|
||||
general.open_level_no_prompt(test_level)
|
||||
Report.result(Tests.load_level, general.get_current_level_name() == test_level)
|
||||
|
||||
# 02. create parent entity and set name
|
||||
# Delete any exiting entity and Create a new Entity at the root level
|
||||
search_filter = azlmbr.entity.SearchFilter()
|
||||
all_entities = entity.SearchBus(azlmbr.bus.Broadcast, "SearchEntities", search_filter)
|
||||
editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntities", all_entities)
|
||||
parent_entity = EditorEntity.create_editor_entity("Parent_1")
|
||||
Report.result(Tests.create_entity, parent_entity.exists())
|
||||
|
||||
# 03. Create child Entity to above created parent entity and set a name
|
||||
child_1_entity = EditorEntity.create_editor_entity("Child_1", parent_entity.id )
|
||||
Report.result(Tests.create_child_entity, child_1_entity.exists())
|
||||
|
||||
# 04. delete_Child_entity
|
||||
child_1_entity.delete()
|
||||
Report.result(Tests.delete_child_entity, not child_1_entity.exists())
|
||||
|
||||
# 05. add mesh component to parent entity
|
||||
parent_entity.add_component("Mesh")
|
||||
Report.result(Tests.add_mesh_component, parent_entity.has_component("Mesh"))
|
||||
|
||||
# 06. delete parent entity
|
||||
parent_entity.delete()
|
||||
Report.result(Tests.delete_entity, not parent_entity.exists())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
|
||||
Report.start_test(BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD)
|
||||
@@ -73,3 +73,7 @@ class TestAutomationAutoTestMode(EditorTestSuite):
|
||||
@pytest.mark.skip(reason="Times out due to dialogs failing to dismiss: LYN-4208")
|
||||
class test_Menus_FileMenuOptions_Work(EditorSharedTest):
|
||||
from .EditorScripts import Menus_FileMenuOptions as test_module
|
||||
|
||||
|
||||
class test_BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD(EditorSharedTest):
|
||||
from .EditorScripts import BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD as test_module
|
||||
|
||||
@@ -279,7 +279,7 @@ void CFolderTreeCtrl::LoadTreeRec(const QString& currentFolder)
|
||||
void CFolderTreeCtrl::AddItem(const QString& path)
|
||||
{
|
||||
AZ::IO::FixedMaxPath folder{ AZ::IO::PathView(path.toUtf8().constData()) };
|
||||
AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Extension();
|
||||
AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Stem();
|
||||
folder = folder.ParentPath();
|
||||
|
||||
auto regex = QRegExp(m_fileNameSpec, Qt::CaseInsensitive, QRegExp::Wildcard);
|
||||
|
||||
@@ -1273,7 +1273,7 @@ bool CCryEditDoc::SaveLevel(const QString& filename)
|
||||
if (savedEntities)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(AzToolsFramework, "CCryEditDoc::SaveLevel Updated PakFile levelEntities.editor_xml");
|
||||
pakFile.UpdateFile("LevelEntities.editor_xml", entitySaveBuffer.begin(), static_cast<int>(entitySaveBuffer.size()));
|
||||
pakFile.UpdateFile("levelentities.editor_xml", entitySaveBuffer.begin(), static_cast<int>(entitySaveBuffer.size()));
|
||||
|
||||
// Save XML archive to pak file.
|
||||
bool bSaved = xmlAr.SaveToPak(Path::GetPath(tempSaveFile), pakFile);
|
||||
@@ -1501,7 +1501,7 @@ bool CCryEditDoc::LoadEntitiesFromLevel(const QString& levelPakFile)
|
||||
bool pakOpened = pakSystem->OpenPack(levelPakFile.toUtf8().data());
|
||||
if (pakOpened)
|
||||
{
|
||||
const QString entityFilename = Path::GetPath(levelPakFile) + "LevelEntities.editor_xml";
|
||||
const QString entityFilename = Path::GetPath(levelPakFile) + "levelentities.editor_xml";
|
||||
|
||||
CCryFile entitiesFile;
|
||||
if (entitiesFile.Open(entityFilename.toUtf8().data(), "rt"))
|
||||
|
||||
@@ -119,7 +119,7 @@ bool CXmlArchive::SaveToPak([[maybe_unused]] const QString& levelPath, CPakFile&
|
||||
_smart_ptr<IXmlStringData> pXmlStrData = root->getXMLData(5000000);
|
||||
|
||||
// Save xml file.
|
||||
QString xmlFilename = "Level.editor_xml";
|
||||
QString xmlFilename = "level.editor_xml";
|
||||
pakFile.UpdateFile(xmlFilename.toUtf8().data(), (void*)pXmlStrData->GetString(), static_cast<int>(pXmlStrData->GetStringLength()));
|
||||
|
||||
if (pakFile.GetArchive())
|
||||
@@ -134,7 +134,7 @@ bool CXmlArchive::SaveToPak([[maybe_unused]] const QString& levelPath, CPakFile&
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CXmlArchive::LoadFromPak(const QString& levelPath, CPakFile& pakFile)
|
||||
{
|
||||
QString xmlFilename = QDir(levelPath).absoluteFilePath("Level.editor_xml");
|
||||
QString xmlFilename = QDir(levelPath).absoluteFilePath("level.editor_xml");
|
||||
root = XmlHelpers::LoadXmlFromFile(xmlFilename.toUtf8().data());
|
||||
if (!root)
|
||||
{
|
||||
|
||||
+13
-1
@@ -11,6 +11,8 @@
|
||||
#include <AzCore/Interface/Interface.h>
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
|
||||
#include <AzFramework/Entity/EntityContextBus.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
//! Outcome object that returns an error message in case of failure to allow caller to handle internal errors.
|
||||
@@ -43,7 +45,7 @@ namespace AzToolsFramework
|
||||
//! @param entityId The entityId whose open state will be set.
|
||||
//! @param open True if the container should be opened, false if it should be closed.
|
||||
//! @return An error message if the operation was invalid, success otherwise.
|
||||
virtual ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) = 0;
|
||||
virtual ContainerEntityOperationResult SetContainerOpen(AZ::EntityId entityId, bool open) = 0;
|
||||
|
||||
//! If the entity id provided is registered as a container, it returns whether it's open.
|
||||
//! @note the default value for non-containers is true, so this function can be called without
|
||||
@@ -56,6 +58,16 @@ namespace AzToolsFramework
|
||||
//! @return The highest closed entity container id if any, or entityId otherwise.
|
||||
virtual AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const = 0;
|
||||
|
||||
//! Clears all open state information for Container Entities for the EntityContextId provided.
|
||||
//! Used when context is switched, for example in the case of a new root prefab being loaded
|
||||
//! in place of an old one.
|
||||
//! @note Clear is meant to be called when no container is registered for the context provided.
|
||||
//! @return An error message if any container was registered for the context, success otherwise.
|
||||
virtual ContainerEntityOperationResult Clear(AzFramework::EntityContextId entityContextId) = 0;
|
||||
|
||||
//! Returns true if one of the ancestors of entityId is a closed container entity.
|
||||
virtual bool IsUnderClosedContainerEntity(AZ::EntityId entityId) const = 0;
|
||||
|
||||
};
|
||||
|
||||
} // namespace AzToolsFramework
|
||||
|
||||
+82
-2
@@ -10,16 +10,19 @@
|
||||
|
||||
#include <AzCore/Component/TransformBus.h>
|
||||
#include <AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h>
|
||||
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
void ContainerEntitySystemComponent::Activate()
|
||||
{
|
||||
AZ::Interface<ContainerEntityInterface>::Register(this);
|
||||
EditorEntityContextNotificationBus::Handler::BusConnect();
|
||||
}
|
||||
|
||||
void ContainerEntitySystemComponent::Deactivate()
|
||||
{
|
||||
EditorEntityContextNotificationBus::Handler::BusDisconnect();
|
||||
AZ::Interface<ContainerEntityInterface>::Unregister(this);
|
||||
}
|
||||
|
||||
@@ -63,7 +66,7 @@ namespace AzToolsFramework
|
||||
return m_containers.contains(entityId);
|
||||
}
|
||||
|
||||
ContainerEntityOperationResult ContainerEntitySystemComponent::SetContainerOpenState(AZ::EntityId entityId, bool open)
|
||||
ContainerEntityOperationResult ContainerEntitySystemComponent::SetContainerOpen(AZ::EntityId entityId, bool open)
|
||||
{
|
||||
if (!IsContainer(entityId))
|
||||
{
|
||||
@@ -87,7 +90,7 @@ namespace AzToolsFramework
|
||||
|
||||
bool ContainerEntitySystemComponent::IsContainerOpen(AZ::EntityId entityId) const
|
||||
{
|
||||
// If the entity is not a container, it should behave as open.
|
||||
// Non-container entities behave the same as open containers. This saves the caller an additional check.
|
||||
if(!m_containers.contains(entityId))
|
||||
{
|
||||
return true;
|
||||
@@ -99,8 +102,17 @@ namespace AzToolsFramework
|
||||
|
||||
AZ::EntityId ContainerEntitySystemComponent::FindHighestSelectableEntity(AZ::EntityId entityId) const
|
||||
{
|
||||
if (!entityId.IsValid())
|
||||
{
|
||||
return entityId;
|
||||
}
|
||||
|
||||
// Return the highest closed container, or the entity if none is found.
|
||||
AZ::EntityId highestSelectableEntityId = entityId;
|
||||
|
||||
// Skip the queried entity, as we only want to check its ancestors.
|
||||
AZ::TransformBus::EventResult(entityId, entityId, &AZ::TransformBus::Events::GetParentId);
|
||||
|
||||
// Go up the hierarchy until you hit the root
|
||||
while (entityId.IsValid())
|
||||
{
|
||||
@@ -117,4 +129,72 @@ namespace AzToolsFramework
|
||||
return highestSelectableEntityId;
|
||||
}
|
||||
|
||||
void ContainerEntitySystemComponent::OnEntityStreamLoadSuccess()
|
||||
{
|
||||
// We don't yet support multiple entity contexts, so just use the default.
|
||||
auto editorEntityContextId = AzFramework::EntityContextId::CreateNull();
|
||||
EditorEntityContextRequestBus::BroadcastResult(editorEntityContextId, &EditorEntityContextRequests::GetEditorEntityContextId);
|
||||
|
||||
Clear(editorEntityContextId);
|
||||
}
|
||||
|
||||
ContainerEntityOperationResult ContainerEntitySystemComponent::Clear(AzFramework::EntityContextId entityContextId)
|
||||
{
|
||||
// We don't yet support multiple entity contexts, so only clear the default.
|
||||
auto editorEntityContextId = AzFramework::EntityContextId::CreateNull();
|
||||
EditorEntityContextRequestBus::BroadcastResult(editorEntityContextId, &EditorEntityContextRequests::GetEditorEntityContextId);
|
||||
|
||||
if (entityContextId != editorEntityContextId)
|
||||
{
|
||||
return AZ::Failure(AZStd::string(
|
||||
"Error in ContainerEntitySystemComponent::Clear - cannot clear non-default Entity Context!"));
|
||||
}
|
||||
|
||||
if (!m_containers.empty())
|
||||
{
|
||||
return AZ::Failure(AZStd::string(
|
||||
"Error in ContainerEntitySystemComponent::Clear - cannot clear container states if entities are still registered!"));
|
||||
}
|
||||
|
||||
m_openContainers.clear();
|
||||
|
||||
return AZ::Success();
|
||||
}
|
||||
|
||||
bool ContainerEntitySystemComponent::IsUnderClosedContainerEntity(AZ::EntityId entityId) const
|
||||
{
|
||||
if (!entityId.IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Skip the queried entity, as we only want to check its ancestors.
|
||||
AZ::TransformBus::EventResult(entityId, entityId, &AZ::TransformBus::Events::GetParentId);
|
||||
|
||||
// Go up the hierarchy until you hit the root.
|
||||
while (entityId.IsValid())
|
||||
{
|
||||
if (!IsContainerOpen(entityId))
|
||||
{
|
||||
// One of the ancestors is a container and it's closed.
|
||||
return true;
|
||||
}
|
||||
|
||||
AZ::EntityId parentId;
|
||||
AZ::TransformBus::EventResult(parentId, entityId, &AZ::TransformBus::Events::GetParentId);
|
||||
|
||||
if (parentId == entityId)
|
||||
{
|
||||
// In some circumstances, querying a root level entity with GetParentId will return
|
||||
// the entity itself instead of an invalid entityId.
|
||||
break;
|
||||
}
|
||||
|
||||
entityId = parentId;
|
||||
}
|
||||
|
||||
// All ancestors are either regular entities or open containers.
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace AzToolsFramework
|
||||
|
||||
+8
-1
@@ -12,6 +12,7 @@
|
||||
#include <AzCore/Memory/SystemAllocator.h>
|
||||
|
||||
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
|
||||
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
@@ -23,6 +24,7 @@ namespace AzToolsFramework
|
||||
class ContainerEntitySystemComponent final
|
||||
: public AZ::Component
|
||||
, private ContainerEntityInterface
|
||||
, private EditorEntityContextNotificationBus::Handler
|
||||
{
|
||||
public:
|
||||
AZ_COMPONENT(ContainerEntitySystemComponent, "{74349759-B36B-44A6-B89F-F45D7111DD11}");
|
||||
@@ -42,9 +44,14 @@ namespace AzToolsFramework
|
||||
ContainerEntityOperationResult RegisterEntityAsContainer(AZ::EntityId entityId) override;
|
||||
ContainerEntityOperationResult UnregisterEntityAsContainer(AZ::EntityId entityId) override;
|
||||
bool IsContainer(AZ::EntityId entityId) const override;
|
||||
ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) override;
|
||||
ContainerEntityOperationResult SetContainerOpen(AZ::EntityId entityId, bool open) override;
|
||||
bool IsContainerOpen(AZ::EntityId entityId) const override;
|
||||
AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const override;
|
||||
ContainerEntityOperationResult Clear(AzFramework::EntityContextId entityContextId) override;
|
||||
bool IsUnderClosedContainerEntity(AZ::EntityId entityId) const override;
|
||||
|
||||
// EditorEntityContextNotificationBus overrides ...
|
||||
void OnEntityStreamLoadSuccess() override;
|
||||
|
||||
private:
|
||||
AZStd::unordered_set<AZ::EntityId> m_containers; //!< All entities in this set are containers.
|
||||
|
||||
@@ -16,9 +16,11 @@
|
||||
#include <AzCore/RTTI/AttributeReader.h>
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzToolsFramework/Commands/EntityStateCommand.h>
|
||||
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
|
||||
#include <AzToolsFramework/Entity/EditorEntityInfoBus.h>
|
||||
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
|
||||
#include <AzToolsFramework/Entity/SliceEditorEntityOwnershipServiceBus.h>
|
||||
#include <AzToolsFramework/FocusMode/FocusModeInterface.h>
|
||||
#include <AzToolsFramework/Slice/SliceMetadataEntityContextBus.h>
|
||||
#include <AzToolsFramework/Slice/SliceUtilities.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorLockComponentBus.h>
|
||||
@@ -588,15 +590,40 @@ namespace AzToolsFramework
|
||||
{
|
||||
AZ_PROFILE_FUNCTION(AzToolsFramework);
|
||||
|
||||
// Detect if the Entity is Visible
|
||||
bool visible = false;
|
||||
EditorEntityInfoRequestBus::EventResult(
|
||||
visible, entityId, &EditorEntityInfoRequestBus::Events::IsVisible);
|
||||
|
||||
bool locked = false;
|
||||
EditorEntityInfoRequestBus::EventResult(
|
||||
locked, entityId, &EditorEntityInfoRequestBus::Events::IsLocked);
|
||||
if (!visible)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return visible && !locked;
|
||||
// Detect if the Entity is Locked
|
||||
bool locked = false;
|
||||
EditorEntityInfoRequestBus::EventResult(locked, entityId, &EditorEntityInfoRequestBus::Events::IsLocked);
|
||||
|
||||
if (locked)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Detect if the Entity is part of the Editor Focus
|
||||
if (auto focusModeInterface = AZ::Interface<FocusModeInterface>::Get();
|
||||
!focusModeInterface->IsInFocusSubTree(entityId))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Detect if the Entity is a descendant of a closed container
|
||||
if (auto containerEntityInterface = AZ::Interface<ContainerEntityInterface>::Get();
|
||||
containerEntityInterface->IsUnderClosedContainerEntity(entityId))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void SetEntityLockStateRecursively(
|
||||
|
||||
@@ -196,6 +196,9 @@ namespace AzToolsFramework::Prefab
|
||||
Initialize();
|
||||
}
|
||||
|
||||
// Clear the old focus vector
|
||||
m_instanceFocusVector.clear();
|
||||
|
||||
// Focus on the root prefab (AZ::EntityId() will default to it)
|
||||
FocusOnOwningPrefab(AZ::EntityId());
|
||||
}
|
||||
@@ -230,7 +233,7 @@ namespace AzToolsFramework::Prefab
|
||||
{
|
||||
if (instance.has_value())
|
||||
{
|
||||
m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), true);
|
||||
m_containerEntityInterface->SetContainerOpen(instance->get().GetContainerEntityId(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -241,7 +244,7 @@ namespace AzToolsFramework::Prefab
|
||||
{
|
||||
if (instance.has_value())
|
||||
{
|
||||
m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), false);
|
||||
m_containerEntityInterface->SetContainerOpen(instance->get().GetContainerEntityId(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-1
@@ -137,6 +137,7 @@ namespace AzToolsFramework
|
||||
}
|
||||
|
||||
EditorContextMenuBus::Handler::BusConnect();
|
||||
EditorEventsBus::Handler::BusConnect();
|
||||
PrefabInstanceContainerNotificationBus::Handler::BusConnect();
|
||||
AZ::Interface<PrefabIntegrationInterface>::Register(this);
|
||||
AssetBrowser::AssetBrowserSourceDropBus::Handler::BusConnect(s_prefabFileExtension);
|
||||
@@ -147,6 +148,7 @@ namespace AzToolsFramework
|
||||
AssetBrowser::AssetBrowserSourceDropBus::Handler::BusDisconnect();
|
||||
AZ::Interface<PrefabIntegrationInterface>::Unregister(this);
|
||||
PrefabInstanceContainerNotificationBus::Handler::BusDisconnect();
|
||||
EditorEventsBus::Handler::BusDisconnect();
|
||||
EditorContextMenuBus::Handler::BusDisconnect();
|
||||
}
|
||||
|
||||
@@ -313,6 +315,11 @@ namespace AzToolsFramework
|
||||
}
|
||||
}
|
||||
|
||||
void PrefabIntegrationManager::OnEscape()
|
||||
{
|
||||
s_prefabFocusInterface->FocusOnOwningPrefab(AZ::EntityId());
|
||||
}
|
||||
|
||||
void PrefabIntegrationManager::HandleSourceFileType(AZStd::string_view sourceFilePath, AZ::EntityId parentId, AZ::Vector3 position) const
|
||||
{
|
||||
auto instantiatePrefabOutcome = s_prefabPublicInterface->InstantiatePrefab(sourceFilePath, parentId, position);
|
||||
@@ -1393,7 +1400,7 @@ namespace AzToolsFramework
|
||||
|
||||
AZStd::unique_ptr<AzQtComponents::Card> PrefabIntegrationManager::ConstructUnsavedPrefabsCard(TemplateId templateId)
|
||||
{
|
||||
FlowLayout* unsavedPrefabsLayout = new FlowLayout(AzToolsFramework::GetActiveWindow());
|
||||
FlowLayout* unsavedPrefabsLayout = new FlowLayout(nullptr);
|
||||
|
||||
AZStd::set<AZ::IO::PathView> dirtyTemplatePaths = s_prefabSystemComponentInterface->GetDirtyTemplatePaths(templateId);
|
||||
|
||||
|
||||
+8
-4
@@ -51,6 +51,7 @@ namespace AzToolsFramework
|
||||
|
||||
class PrefabIntegrationManager final
|
||||
: public EditorContextMenuBus::Handler
|
||||
, public EditorEventsBus::Handler
|
||||
, public AssetBrowser::AssetBrowserSourceDropBus::Handler
|
||||
, public PrefabInstanceContainerNotificationBus::Handler
|
||||
, public PrefabIntegrationInterface
|
||||
@@ -64,19 +65,22 @@ namespace AzToolsFramework
|
||||
|
||||
static void Reflect(AZ::ReflectContext* context);
|
||||
|
||||
// EditorContextMenuBus...
|
||||
// EditorContextMenuBus overrides ...
|
||||
int GetMenuPosition() const override;
|
||||
AZStd::string GetMenuIdentifier() const override;
|
||||
void PopulateEditorGlobalContextMenu(QMenu* menu, const AZ::Vector2& point, int flags) override;
|
||||
|
||||
// EntityOutlinerSourceDropHandlingBus...
|
||||
// EditorEventsBus overrides ...
|
||||
void OnEscape();
|
||||
|
||||
// EntityOutlinerSourceDropHandlingBus overrides ...
|
||||
void HandleSourceFileType(AZStd::string_view sourceFilePath, AZ::EntityId parentId, AZ::Vector3 position) const override;
|
||||
|
||||
// PrefabInstanceContainerNotificationBus...
|
||||
// PrefabInstanceContainerNotificationBus overrides ...
|
||||
void OnPrefabComponentActivate(AZ::EntityId entityId) override;
|
||||
void OnPrefabComponentDeactivate(AZ::EntityId entityId) override;
|
||||
|
||||
// PrefabIntegrationInterface...
|
||||
// PrefabIntegrationInterface overrides ...
|
||||
AZ::EntityId CreateNewEntityAtPosition(const AZ::Vector3& position, AZ::EntityId parentId) override;
|
||||
int ExecuteClosePrefabDialog(TemplateId templateId) override;
|
||||
void ExecuteSavePrefabDialog(TemplateId templateId, bool useSaveAllPrefabsPreference) override;
|
||||
|
||||
+23
-4
@@ -187,15 +187,14 @@ namespace AzToolsFramework
|
||||
}
|
||||
|
||||
// Verify if the entity Id corresponds to an entity that is focused; if not, halt selection.
|
||||
if (!m_focusModeInterface->IsInFocusSubTree(entityIdUnderCursor))
|
||||
if (!IsSelectableAccordingToFocusMode(entityIdUnderCursor))
|
||||
{
|
||||
return AZ::EntityId();
|
||||
}
|
||||
|
||||
// Container Entity support - if the entity that is being selected is part of a closed container,
|
||||
// change the selection to the container instead.
|
||||
ContainerEntityInterface* containerEntityInterface = AZ::Interface<ContainerEntityInterface>::Get();
|
||||
if (containerEntityInterface)
|
||||
if (ContainerEntityInterface* containerEntityInterface = AZ::Interface<ContainerEntityInterface>::Get())
|
||||
{
|
||||
return containerEntityInterface->FindHighestSelectableEntity(entityIdUnderCursor);
|
||||
}
|
||||
@@ -217,7 +216,7 @@ namespace AzToolsFramework
|
||||
{
|
||||
const AZ::EntityId entityId = m_entityDataCache->GetVisibleEntityId(entityCacheIndex);
|
||||
|
||||
if (!m_entityDataCache->IsVisibleEntityVisible(entityCacheIndex))
|
||||
if (!m_entityDataCache->IsVisibleEntityVisible(entityCacheIndex) || !IsSelectableInViewport(entityId))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -263,4 +262,24 @@ namespace AzToolsFramework
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool EditorHelpers::IsSelectableInViewport(AZ::EntityId entityId)
|
||||
{
|
||||
return IsSelectableAccordingToFocusMode(entityId) && IsSelectableAccordingToContainerEntities(entityId);
|
||||
}
|
||||
|
||||
bool EditorHelpers::IsSelectableAccordingToFocusMode(AZ::EntityId entityId)
|
||||
{
|
||||
return m_focusModeInterface->IsInFocusSubTree(entityId);
|
||||
}
|
||||
|
||||
bool EditorHelpers::IsSelectableAccordingToContainerEntities(AZ::EntityId entityId)
|
||||
{
|
||||
if (ContainerEntityInterface* containerEntityInterface = AZ::Interface<ContainerEntityInterface>::Get())
|
||||
{
|
||||
return !containerEntityInterface->IsUnderClosedContainerEntity(entityId);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} // namespace AzToolsFramework
|
||||
|
||||
@@ -58,7 +58,19 @@ namespace AzToolsFramework
|
||||
AzFramework::DebugDisplayRequests& debugDisplay,
|
||||
const AZStd::function<bool(AZ::EntityId)>& showIconCheck);
|
||||
|
||||
//! Returns whether the entityId can be selected in the viewport according
|
||||
//! to the current Editor Focus Mode and Container Entity setup.
|
||||
bool IsSelectableInViewport(AZ::EntityId entityId);
|
||||
|
||||
private:
|
||||
//! Returns whether the entityId can be selected in the viewport according
|
||||
//! to the current Editor Focus Mode setup.
|
||||
bool IsSelectableAccordingToFocusMode(AZ::EntityId entityId);
|
||||
|
||||
//! Returns whether the entityId can be selected in the viewport according
|
||||
//! to the current Container Entityu setup.
|
||||
bool IsSelectableAccordingToContainerEntities(AZ::EntityId entityId);
|
||||
|
||||
const EditorVisibleEntityDataCache* m_entityDataCache = nullptr; //!< Entity Data queried by the EditorHelpers.
|
||||
const FocusModeInterface* m_focusModeInterface = nullptr;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Tests/FocusMode/EditorFocusModeSelectionFixture.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
TEST_F(EditorFocusModeSelectionFixture, ContainerEntitySelectionTests_FindHighestSelectableEntityWithNoContainers)
|
||||
{
|
||||
// When no containers are in the way, the function will just return the entityId of the entity that was clicked.
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify the correct entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, ContainerEntitySelectionTests_FindHighestSelectableEntityWithClosedContainer)
|
||||
{
|
||||
// If a closed container is an ancestor of the queried entity, the closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]); // Containers are closed by default
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify the correct entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[StreetEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, ContainerEntitySelectionTests_FindHighestSelectableEntityWithOpenContainer)
|
||||
{
|
||||
// If a closed container is an ancestor of the queried entity, the closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify the correct entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, ContainerEntitySelectionTests_FindHighestSelectableEntityWithMultipleClosedContainers)
|
||||
{
|
||||
// If multiple closed containers are ancestors of the queried entity, the highest closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify the correct entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CityEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, ContainerEntitySelectionTests_FindHighestSelectableEntityWithMultipleContainers)
|
||||
{
|
||||
// If multiple containers are ancestors of the queried entity, the highest closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[CityEntityName], true);
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify the correct entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[StreetEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Tests/FocusMode/EditorFocusModeFixture.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_Register)
|
||||
{
|
||||
// Registering an entity is successful.
|
||||
auto outcome = m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_RegisterTwice)
|
||||
{
|
||||
// Registering an entity twice fails.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
auto outcome = m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
EXPECT_FALSE(outcome.IsSuccess());
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_Unregister)
|
||||
{
|
||||
// Unregistering a container entity is successful.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
auto outcome = m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_UnregisterRegularEntity)
|
||||
{
|
||||
// Unregistering an entity that was not previously registered fails.
|
||||
auto outcome = m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
EXPECT_FALSE(outcome.IsSuccess());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_UnregisterTwice)
|
||||
{
|
||||
// Unregistering a container entity twice fails.
|
||||
auto outcome = m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CarEntityName]);
|
||||
EXPECT_FALSE(outcome.IsSuccess());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOnRegularEntity)
|
||||
{
|
||||
// If a regular entity is passed, IsContainer returns false.
|
||||
// Note that we use a different entity than the tests above to validate a completely new EntityId.
|
||||
bool isContainer = m_containerEntityInterface->IsContainer(m_entityMap[SportsCarEntityName]);
|
||||
EXPECT_FALSE(isContainer);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOnRegisteredContainer)
|
||||
{
|
||||
// If a container entity is passed, IsContainer returns true.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
bool isContainer = m_containerEntityInterface->IsContainer(m_entityMap[SportsCarEntityName]);
|
||||
EXPECT_TRUE(isContainer);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOnUnRegisteredContainer)
|
||||
{
|
||||
// If an entity that was previously a container but was then unregistered is passed, IsContainer returns false.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
|
||||
bool isContainer = m_containerEntityInterface->IsContainer(m_entityMap[SportsCarEntityName]);
|
||||
EXPECT_FALSE(isContainer);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_SetContainerOpenOnRegularEntity)
|
||||
{
|
||||
// Setting a regular entity to open should return a failure.
|
||||
auto outcome = m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
EXPECT_FALSE(outcome.IsSuccess());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_SetContainerOpen)
|
||||
{
|
||||
// Set a container entity to open, and verify the operation was successful.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
auto outcome = m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_SetContainerOpenTwice)
|
||||
{
|
||||
// Set a container entity to open twice, and verify that does not cause a failure (as intended).
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
auto outcome = m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_SetContainerClosed)
|
||||
{
|
||||
// Set a container entity to closed, and verify the operation was successful.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
auto outcome = m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOpenOnRegularEntity)
|
||||
{
|
||||
// Query open state on a regular entity, and verify it returns true.
|
||||
// Open containers behave exactly as regular entities, so this is the expected return value.
|
||||
bool isOpen = m_containerEntityInterface->IsContainerOpen(m_entityMap[CityEntityName]);
|
||||
EXPECT_TRUE(isOpen);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOpenOnDefaultContainerEntity)
|
||||
{
|
||||
// Query open state on a newly registered container entity, and verify it returns false.
|
||||
// Containers are registered closed by default.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
bool isOpen = m_containerEntityInterface->IsContainerOpen(m_entityMap[CityEntityName]);
|
||||
EXPECT_FALSE(isOpen);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOpenOnOpenContainerEntity)
|
||||
{
|
||||
// Query open state on a container entity that was opened, and verify it returns true.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[CityEntityName], true);
|
||||
bool isOpen = m_containerEntityInterface->IsContainerOpen(m_entityMap[CityEntityName]);
|
||||
EXPECT_TRUE(isOpen);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_IsContainerOpenOnClosedContainerEntity)
|
||||
{
|
||||
// Query open state on a container entity that was opened and then closed, and verify it returns false.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[CityEntityName], true);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[CityEntityName], false);
|
||||
bool isOpen = m_containerEntityInterface->IsContainerOpen(m_entityMap[CityEntityName]);
|
||||
EXPECT_FALSE(isOpen);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_ContainerOpenStateIsPreserved)
|
||||
{
|
||||
// Register an entity as container, open it, then unregister it.
|
||||
// When the entity is registered again, the open state should be preserved.
|
||||
// This behavior is necessary for the system to work alongside Prefab propagation refreshes.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[CityEntityName], true);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
bool isOpen = m_containerEntityInterface->IsContainerOpen(m_entityMap[CityEntityName]);
|
||||
EXPECT_TRUE(isOpen);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[CityEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_ClearSucceeds)
|
||||
{
|
||||
// The Clear function works if no container is registered.
|
||||
auto outcome = m_containerEntityInterface->Clear(m_editorEntityContextId);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_ClearFailsIfContainersAreStillRegistered)
|
||||
{
|
||||
// The Clear function fails if a container is registered.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
auto outcome = m_containerEntityInterface->Clear(m_editorEntityContextId);
|
||||
EXPECT_FALSE(outcome.IsSuccess());
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_ClearSucceedsIfContainersAreUnregistered)
|
||||
{
|
||||
// The Clear function fails if a container is registered.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
auto outcome = m_containerEntityInterface->Clear(m_editorEntityContextId);
|
||||
EXPECT_TRUE(outcome.IsSuccess());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_ClearDeletesPreservedOpenStates)
|
||||
{
|
||||
// Register an entity as container, open it, unregister it, then call clear.
|
||||
// When the entity is registered again, the open state should not be preserved.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[Passenger1EntityName], true);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
|
||||
m_containerEntityInterface->Clear(m_editorEntityContextId);
|
||||
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
bool isOpen = m_containerEntityInterface->IsContainerOpen(m_entityMap[Passenger1EntityName]);
|
||||
EXPECT_FALSE(isOpen);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[Passenger1EntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_FindHighestSelectableEntityWithNoContainers)
|
||||
{
|
||||
// When no containers are in the way, the function will just return the entityId that was passed to it.
|
||||
AZ::EntityId selectedEntityId = m_containerEntityInterface->FindHighestSelectableEntity(m_entityMap[Passenger2EntityName]);
|
||||
EXPECT_EQ(selectedEntityId, m_entityMap[Passenger2EntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_FindHighestSelectableEntityWithClosedContainer)
|
||||
{
|
||||
// If a closed container is an ancestor of the queried entity, the closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[SportsCarEntityName]); // Containers are closed by default
|
||||
AZ::EntityId selectedEntityId = m_containerEntityInterface->FindHighestSelectableEntity(m_entityMap[Passenger2EntityName]);
|
||||
EXPECT_EQ(selectedEntityId, m_entityMap[SportsCarEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_FindHighestSelectableEntityWithOpenContainer)
|
||||
{
|
||||
// If an open container is an ancestor of the queried entity, it is ignored.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[SportsCarEntityName], true);
|
||||
|
||||
AZ::EntityId selectedEntityId = m_containerEntityInterface->FindHighestSelectableEntity(m_entityMap[Passenger2EntityName]);
|
||||
EXPECT_EQ(selectedEntityId, m_entityMap[Passenger2EntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_FindHighestSelectableEntityWithMultipleClosedContainers)
|
||||
{
|
||||
// If multiple closed containers are ancestors of the queried entity, the highest closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
|
||||
AZ::EntityId selectedEntityId = m_containerEntityInterface->FindHighestSelectableEntity(m_entityMap[Passenger2EntityName]);
|
||||
EXPECT_EQ(selectedEntityId, m_entityMap[StreetEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, ContainerEntityTests_FindHighestSelectableEntityWithMultipleContainers)
|
||||
{
|
||||
// If multiple containers are ancestors of the queried entity, the highest closed container is selected.
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->RegisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
m_containerEntityInterface->SetContainerOpen(m_entityMap[StreetEntityName], true);
|
||||
|
||||
AZ::EntityId selectedEntityId = m_containerEntityInterface->FindHighestSelectableEntity(m_entityMap[Passenger2EntityName]);
|
||||
EXPECT_EQ(selectedEntityId, m_entityMap[SportsCarEntityName]);
|
||||
|
||||
// Restore default state for other tests.
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[StreetEntityName]);
|
||||
m_containerEntityInterface->UnregisterEntityAsContainer(m_entityMap[SportsCarEntityName]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,6 +14,20 @@
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
void ClearSelectedEntities()
|
||||
{
|
||||
AzToolsFramework::ToolsApplicationRequestBus::Broadcast(
|
||||
&AzToolsFramework::ToolsApplicationRequestBus::Events::SetSelectedEntities, AzToolsFramework::EntityIdList());
|
||||
}
|
||||
|
||||
AzToolsFramework::EntityIdList EditorFocusModeFixture::GetSelectedEntities()
|
||||
{
|
||||
AzToolsFramework::EntityIdList selectedEntities;
|
||||
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(
|
||||
selectedEntities, &AzToolsFramework::ToolsApplicationRequestBus::Events::GetSelectedEntities);
|
||||
return selectedEntities;
|
||||
}
|
||||
|
||||
void EditorFocusModeFixture::SetUpEditorFixtureImpl()
|
||||
{
|
||||
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
|
||||
@@ -21,6 +35,9 @@ namespace AzToolsFramework
|
||||
// in the unit tests.
|
||||
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
|
||||
|
||||
m_containerEntityInterface = AZ::Interface<ContainerEntityInterface>::Get();
|
||||
ASSERT_TRUE(m_containerEntityInterface != nullptr);
|
||||
|
||||
m_focusModeInterface = AZ::Interface<FocusModeInterface>::Get();
|
||||
ASSERT_TRUE(m_focusModeInterface != nullptr);
|
||||
|
||||
@@ -31,6 +48,24 @@ namespace AzToolsFramework
|
||||
m_editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId);
|
||||
|
||||
GenerateTestHierarchy();
|
||||
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
}
|
||||
|
||||
void EditorFocusModeFixture::TearDownEditorFixtureImpl()
|
||||
{
|
||||
// Clear Container Entity preserved open states
|
||||
m_containerEntityInterface->Clear(m_editorEntityContextId);
|
||||
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
}
|
||||
|
||||
void EditorFocusModeFixture::GenerateTestHierarchy()
|
||||
@@ -59,7 +94,7 @@ namespace AzToolsFramework
|
||||
entity->Activate();
|
||||
|
||||
// Move the CarEntity so it's out of the way.
|
||||
AZ::TransformBus::Event(m_entityMap[CarEntityName], &AZ::TransformBus::Events::SetWorldTranslation, CarEntityPosition);
|
||||
AZ::TransformBus::Event(m_entityMap[CarEntityName], &AZ::TransformBus::Events::SetWorldTranslation, WorldCarEntityPosition);
|
||||
|
||||
// Setup the camera so the Car entity is in view.
|
||||
AzFramework::SetCameraTransform(
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include <AzTest/AzTest.h>
|
||||
|
||||
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
|
||||
#include <AzToolsFramework/FocusMode/FocusModeInterface.h>
|
||||
#include <AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h>
|
||||
|
||||
@@ -24,16 +25,20 @@ namespace AzToolsFramework
|
||||
{
|
||||
protected:
|
||||
void SetUpEditorFixtureImpl() override;
|
||||
void TearDownEditorFixtureImpl() override;
|
||||
|
||||
void GenerateTestHierarchy();
|
||||
AZ::EntityId CreateEditorEntity(const char* name, AZ::EntityId parentId);
|
||||
|
||||
AZStd::unordered_map<AZStd::string, AZ::EntityId> m_entityMap;
|
||||
|
||||
ContainerEntityInterface* m_containerEntityInterface = nullptr;
|
||||
FocusModeInterface* m_focusModeInterface = nullptr;
|
||||
|
||||
public:
|
||||
AzFramework::EntityContextId m_editorEntityContextId = AzFramework::EntityContextId::CreateNull();
|
||||
AzToolsFramework::EntityIdList GetSelectedEntities();
|
||||
|
||||
AzFramework::EntityContextId m_editorEntityContextId = AzFramework::EntityContextId::CreateNull();
|
||||
AzFramework::CameraState m_cameraState;
|
||||
|
||||
inline static const AZ::Vector3 CameraPosition = AZ::Vector3(10.0f, 15.0f, 10.0f);
|
||||
@@ -45,6 +50,7 @@ namespace AzToolsFramework
|
||||
inline static const char* Passenger1EntityName = "Passenger1";
|
||||
inline static const char* Passenger2EntityName = "Passenger2";
|
||||
|
||||
inline static AZ::Vector3 CarEntityPosition = AZ::Vector3(5.0f, 15.0f, 0.0f);
|
||||
inline static AZ::Vector3 WorldCarEntityPosition = AZ::Vector3(5.0f, 15.0f, 0.0f);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Tests/FocusMode/EditorFocusModeFixture.h>
|
||||
|
||||
#include <AzCore/Component/TransformBus.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
|
||||
#include <AzFramework/Viewport/ViewportScreen.h>
|
||||
|
||||
#include <AzManipulatorTestFramework/AzManipulatorTestFramework.h>
|
||||
#include <AzManipulatorTestFramework/AzManipulatorTestFrameworkTestHelpers.h>
|
||||
#include <AzManipulatorTestFramework/DirectManipulatorViewportInteraction.h>
|
||||
#include <AzManipulatorTestFramework/ImmediateModeActionDispatcher.h>
|
||||
#include <AzManipulatorTestFramework/IndirectManipulatorViewportInteraction.h>
|
||||
|
||||
#include <AzToolsFramework/Component/EditorComponentAPIBus.h>
|
||||
#include <AzToolsFramework/Manipulators/LinearManipulator.h>
|
||||
#include <AzToolsFramework/Manipulators/ManipulatorManager.h>
|
||||
#include <AzToolsFramework/ViewportSelection/EditorVisibleEntityDataCache.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
class EditorFocusModeSelectionFixture : public UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin<EditorFocusModeFixture>
|
||||
{
|
||||
public:
|
||||
void ClickAtWorldPositionOnViewport(const AZ::Vector3& worldPosition)
|
||||
{
|
||||
// Calculate the world position in screen space
|
||||
const auto carScreenPosition = AzFramework::WorldToScreen(worldPosition, m_cameraState);
|
||||
|
||||
// Click the entity in the viewport
|
||||
m_actionDispatcher->CameraState(m_cameraState)->MousePosition(carScreenPosition)->MouseLButtonDown()->MouseLButtonUp();
|
||||
}
|
||||
};
|
||||
} // namespace AzToolsFramework
|
||||
@@ -6,64 +6,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Tests/FocusMode/EditorFocusModeFixture.h>
|
||||
|
||||
#include <AzCore/Component/TransformBus.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
|
||||
#include <AzFramework/Viewport/ViewportScreen.h>
|
||||
|
||||
#include <AzManipulatorTestFramework/AzManipulatorTestFramework.h>
|
||||
#include <AzManipulatorTestFramework/AzManipulatorTestFrameworkTestHelpers.h>
|
||||
#include <AzManipulatorTestFramework/DirectManipulatorViewportInteraction.h>
|
||||
#include <AzManipulatorTestFramework/ImmediateModeActionDispatcher.h>
|
||||
#include <AzManipulatorTestFramework/IndirectManipulatorViewportInteraction.h>
|
||||
|
||||
#include <AzToolsFramework/Component/EditorComponentAPIBus.h>
|
||||
#include <AzToolsFramework/Manipulators/LinearManipulator.h>
|
||||
#include <AzToolsFramework/Manipulators/ManipulatorManager.h>
|
||||
#include <AzToolsFramework/ViewportSelection/EditorVisibleEntityDataCache.h>
|
||||
|
||||
#include <Tests/FocusMode/EditorFocusModeSelectionFixture.h>
|
||||
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
class EditorFocusModeSelectionFixture
|
||||
: public UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin<EditorFocusModeFixture>
|
||||
{
|
||||
public:
|
||||
void ClickAtWorldPositionOnViewport(const AZ::Vector3& worldPosition)
|
||||
{
|
||||
// Calculate the world position in screen space
|
||||
const auto carScreenPosition = AzFramework::WorldToScreen(worldPosition, m_cameraState);
|
||||
|
||||
// Click the entity in the viewport
|
||||
m_actionDispatcher->CameraState(m_cameraState)->MousePosition(carScreenPosition)->MouseLButtonDown()->MouseLButtonUp();
|
||||
}
|
||||
};
|
||||
|
||||
void ClearSelectedEntities()
|
||||
{
|
||||
AzToolsFramework::ToolsApplicationRequestBus::Broadcast(
|
||||
&AzToolsFramework::ToolsApplicationRequestBus::Events::SetSelectedEntities, AzToolsFramework::EntityIdList());
|
||||
}
|
||||
|
||||
AzToolsFramework::EntityIdList GetSelectedEntities()
|
||||
{
|
||||
AzToolsFramework::EntityIdList selectedEntities;
|
||||
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(
|
||||
selectedEntities, &AzToolsFramework::ToolsApplicationRequestBus::Events::GetSelectedEntities);
|
||||
return selectedEntities;
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnLevel)
|
||||
{
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull());
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(CarEntityPosition);
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
@@ -75,73 +25,53 @@ namespace AzToolsFramework
|
||||
{
|
||||
// Set the focus on the Street Entity (parent of the test entity)
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(CarEntityPosition);
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]);
|
||||
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnItself)
|
||||
{
|
||||
// Set the focus on the Car Entity (test entity)
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]);
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(CarEntityPosition);
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 1);
|
||||
EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]);
|
||||
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnSibling)
|
||||
{
|
||||
// Set the focus on the SportsCar Entity (sibling of the test entity)
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]);
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(CarEntityPosition);
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 0);
|
||||
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull());
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnDescendant)
|
||||
{
|
||||
// Set the focus on the Passenger1 Entity (child of the entity)
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[Passenger1EntityName]);
|
||||
// Clear selection
|
||||
ClearSelectedEntities();
|
||||
|
||||
// Click on Car Entity
|
||||
ClickAtWorldPositionOnViewport(CarEntityPosition);
|
||||
ClickAtWorldPositionOnViewport(WorldCarEntityPosition);
|
||||
|
||||
// Verify entity is selected
|
||||
auto selectedEntitiesAfter = GetSelectedEntities();
|
||||
EXPECT_EQ(selectedEntitiesAfter.size(), 0);
|
||||
|
||||
// Clear the focus, disabling focus mode
|
||||
m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,55 +33,40 @@ namespace AzToolsFramework
|
||||
TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_AncestorsDescendants)
|
||||
{
|
||||
// When the focus is set to an entity, all its descendants are in the focus subtree while the ancestors aren't.
|
||||
{
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
|
||||
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
|
||||
}
|
||||
|
||||
// Restore default expected focus.
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_Siblings)
|
||||
{
|
||||
// If the root entity has siblings, they are also outside of the focus subtree.
|
||||
{
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]);
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]);
|
||||
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), false);
|
||||
}
|
||||
|
||||
// Restore default expected focus.
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), false);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_Leaf)
|
||||
{
|
||||
// If the root is a leaf, then the focus subtree will consists of just that entity.
|
||||
{
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[Passenger2EntityName]);
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[Passenger2EntityName]);
|
||||
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
|
||||
}
|
||||
|
||||
// Restore default expected focus.
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
|
||||
}
|
||||
|
||||
TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_Clear)
|
||||
@@ -90,15 +75,13 @@ namespace AzToolsFramework
|
||||
m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
|
||||
|
||||
// When the focus is cleared, the whole level is in the focus subtree; so we expect all entities to return true.
|
||||
{
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
|
||||
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
|
||||
}
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true);
|
||||
EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,8 +37,11 @@ set(FILES
|
||||
EntityTestbed.h
|
||||
FileFunc.cpp
|
||||
FingerprintingTests.cpp
|
||||
FocusMode/ContainerEntitySelectionTests.cpp
|
||||
FocusMode/ContainerEntityTests.cpp
|
||||
FocusMode/EditorFocusModeFixture.cpp
|
||||
FocusMode/EditorFocusModeFixture.h
|
||||
FocusMode/EditorFocusModeSelectionFixture.h
|
||||
FocusMode/EditorFocusModeSelectionTests.cpp
|
||||
FocusMode/EditorFocusModeTests.cpp
|
||||
GenericComponentWrapperTest.cpp
|
||||
|
||||
@@ -1273,17 +1273,6 @@ AZ_POP_DISABLE_WARNING
|
||||
//Load config files
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int curSpecVal = 0;
|
||||
ICVar* pSysSpecCVar = gEnv->pConsole->GetCVar("r_GraphicsQuality");
|
||||
if (gEnv->pSystem->IsDevMode())
|
||||
{
|
||||
if (pSysSpecCVar && pSysSpecCVar->GetFlags() & VF_WASINCONFIG)
|
||||
{
|
||||
curSpecVal = pSysSpecCVar->GetIVal();
|
||||
pSysSpecCVar->SetFlags(pSysSpecCVar->GetFlags() | VF_SYSSPEC_OVERWRITE);
|
||||
}
|
||||
}
|
||||
|
||||
// tools may not interact with @user@
|
||||
if (!gEnv->IsInToolMode())
|
||||
{
|
||||
@@ -1293,16 +1282,6 @@ AZ_POP_DISABLE_WARNING
|
||||
}
|
||||
}
|
||||
|
||||
// If sys spec variable was specified, is not 0, and we are in devmode restore the value from before loading game.cfg
|
||||
// This enables setting of a specific sys_spec outside menu and game.cfg
|
||||
if (gEnv->pSystem->IsDevMode())
|
||||
{
|
||||
if (pSysSpecCVar && curSpecVal && curSpecVal != pSysSpecCVar->GetIVal())
|
||||
{
|
||||
pSysSpecCVar->Set(curSpecVal);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// We have to load this file again since first time we did it without devmode
|
||||
LoadConfiguration(m_systemConfigName.c_str());
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace O3DE::ProjectManager
|
||||
bool operator<(const GemRepoInfo& gemRepoInfo) const;
|
||||
|
||||
QString m_path = "";
|
||||
QString m_name = "Unknown Gem Repo Name";
|
||||
QString m_name = "Unknown Repo Name";
|
||||
QString m_creator = "Unknown Creator";
|
||||
bool m_isEnabled = false; //! Is the repo currently enabled for this engine?
|
||||
QString m_summary = "No summary provided.";
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <GemRepo/GemRepoItemDelegate.h>
|
||||
#include <GemRepo/GemRepoModel.h>
|
||||
#include <ProjectManagerDefs.h>
|
||||
|
||||
#include <QEvent>
|
||||
#include <QPainter>
|
||||
@@ -95,7 +96,7 @@ namespace O3DE::ProjectManager
|
||||
painter->drawText(repoCreatorRect, Qt::TextSingleLine, repoCreator);
|
||||
|
||||
// Repo update
|
||||
QString repoUpdatedDate = GemRepoModel::GetLastUpdated(modelIndex).toString("dd/MM/yyyy hh:mmap");
|
||||
QString repoUpdatedDate = GemRepoModel::GetLastUpdated(modelIndex).toString(RepoTimeFormat);
|
||||
repoUpdatedDate = standardFontMetrics.elidedText(repoUpdatedDate, Qt::TextElideMode::ElideRight, s_updatedMaxWidth);
|
||||
|
||||
QRect repoUpdatedDateRect = GetTextRect(standardFont, repoUpdatedDate, s_fontSize);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <GemRepo/GemRepoAddDialog.h>
|
||||
#include <GemRepo/GemRepoInspector.h>
|
||||
#include <PythonBindingsInterface.h>
|
||||
#include <ProjectManagerDefs.h>
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
@@ -104,9 +105,29 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
// Add all available repos to the model
|
||||
const QVector<GemRepoInfo> allGemRepoInfos = allGemRepoInfosResult.GetValue();
|
||||
QDateTime oldestRepoUpdate;
|
||||
if (!allGemRepoInfos.isEmpty())
|
||||
{
|
||||
oldestRepoUpdate = allGemRepoInfos[0].m_lastUpdated;
|
||||
}
|
||||
for (const GemRepoInfo& gemRepoInfo : allGemRepoInfos)
|
||||
{
|
||||
m_gemRepoModel->AddGemRepo(gemRepoInfo);
|
||||
|
||||
// Find least recently updated repo
|
||||
if (gemRepoInfo.m_lastUpdated < oldestRepoUpdate)
|
||||
{
|
||||
oldestRepoUpdate = gemRepoInfo.m_lastUpdated;
|
||||
}
|
||||
}
|
||||
|
||||
if (!allGemRepoInfos.isEmpty())
|
||||
{
|
||||
m_lastAllUpdateLabel->setText(tr("Last Updated: %1").arg(oldestRepoUpdate.toString(RepoTimeFormat)));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lastAllUpdateLabel->setText(tr("Last Updated: Never"));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -27,4 +27,6 @@ namespace O3DE::ProjectManager
|
||||
static const QString ProjectCMakeCommand = "cmake";
|
||||
static const QString ProjectCMakeBuildTargetEditor = "Editor";
|
||||
|
||||
static const QString RepoTimeFormat = "dd/MM/yyyy hh:mmap";
|
||||
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -932,13 +932,55 @@ namespace O3DE::ProjectManager
|
||||
return AZ::Failure<AZStd::string>("Adding Gem Repo not implemented yet in o3de scripts.");
|
||||
}
|
||||
|
||||
GemRepoInfo PythonBindings::GemRepoInfoFromPath(pybind11::handle path, pybind11::handle pyEnginePath)
|
||||
GemRepoInfo PythonBindings::GetGemRepoInfo(pybind11::handle repoUri)
|
||||
{
|
||||
/* Placeholder Logic */
|
||||
(void)path;
|
||||
(void)pyEnginePath;
|
||||
GemRepoInfo gemRepoInfo;
|
||||
gemRepoInfo.m_repoLink = Py_To_String(repoUri);
|
||||
|
||||
return GemRepoInfo();
|
||||
auto data = m_manifest.attr("get_repo_json_data")(repoUri);
|
||||
if (pybind11::isinstance<pybind11::dict>(data))
|
||||
{
|
||||
try
|
||||
{
|
||||
// required
|
||||
gemRepoInfo.m_repoLink = Py_To_String(data["repo_uri"]);
|
||||
gemRepoInfo.m_name = Py_To_String(data["repo_name"]);
|
||||
gemRepoInfo.m_creator = Py_To_String(data["origin"]);
|
||||
|
||||
// optional
|
||||
gemRepoInfo.m_summary = Py_To_String_Optional(data, "summary", "No summary provided.");
|
||||
gemRepoInfo.m_additionalInfo = Py_To_String_Optional(data, "additional_info", "");
|
||||
|
||||
auto repoPath = m_manifest.attr("get_repo_path")(repoUri);
|
||||
gemRepoInfo.m_path = gemRepoInfo.m_directoryLink = Py_To_String(repoPath);
|
||||
|
||||
QString lastUpdated = Py_To_String_Optional(data, "last_updated", "");
|
||||
gemRepoInfo.m_lastUpdated = QDateTime::fromString(lastUpdated, RepoTimeFormat);
|
||||
|
||||
if (data.contains("enabled"))
|
||||
{
|
||||
gemRepoInfo.m_isEnabled = data["enabled"].cast<bool>();
|
||||
}
|
||||
else
|
||||
{
|
||||
gemRepoInfo.m_isEnabled = false;
|
||||
}
|
||||
|
||||
if (data.contains("gem_paths"))
|
||||
{
|
||||
for (auto gemPath : data["gem_paths"])
|
||||
{
|
||||
gemRepoInfo.m_includedGemPaths.push_back(Py_To_String(gemPath));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch ([[maybe_unused]] const std::exception& e)
|
||||
{
|
||||
AZ_Warning("PythonBindings", false, "Failed to get GemRepoInfo for repo %s", Py_To_String(repoUri));
|
||||
}
|
||||
}
|
||||
|
||||
return gemRepoInfo;
|
||||
}
|
||||
|
||||
//#define MOCK_GEM_REPO_INFO true
|
||||
@@ -951,14 +993,10 @@ namespace O3DE::ProjectManager
|
||||
auto result = ExecuteWithLockErrorHandling(
|
||||
[&]
|
||||
{
|
||||
/* Placeholder Logic, o3de scripts need method added
|
||||
*
|
||||
for (auto path : m_manifest.attr("get_gem_repos")())
|
||||
for (auto repoUri : m_manifest.attr("get_repos")())
|
||||
{
|
||||
gemRepos.push_back(GemRepoInfoFromPath(path, pybind11::none()));
|
||||
gemRepos.push_back(GetGemRepoInfo(repoUri));
|
||||
}
|
||||
*
|
||||
*/
|
||||
});
|
||||
if (!result.IsSuccess())
|
||||
{
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace O3DE::ProjectManager
|
||||
AZ::Outcome<void, AZStd::string> ExecuteWithLockErrorHandling(AZStd::function<void()> executionCallback);
|
||||
bool ExecuteWithLock(AZStd::function<void()> executionCallback);
|
||||
GemInfo GemInfoFromPath(pybind11::handle path, pybind11::handle pyProjectPath);
|
||||
GemRepoInfo GemRepoInfoFromPath(pybind11::handle path, pybind11::handle pyEnginePath);
|
||||
GemRepoInfo GetGemRepoInfo(pybind11::handle repoUri);
|
||||
ProjectInfo ProjectInfoFromPath(pybind11::handle path);
|
||||
ProjectTemplateInfo ProjectTemplateInfoFromPath(pybind11::handle path, pybind11::handle pyProjectPath);
|
||||
bool RegisterThisEngine();
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace ImageProcessingAtom
|
||||
const static AZ::u32 EIF_UNUSED_BIT = 0x40; // Free to use
|
||||
const static AZ::u32 EIF_AttachedAlpha = 0x400; // info for the engine: it's a texture with attached alpha channel
|
||||
const static AZ::u32 EIF_SRGBRead = 0x800; // info for the engine: if gamma corrected rendering is on, this texture requires SRGBRead (it's not stored in linear)
|
||||
const static AZ::u32 EIF_DontResize = 0x8000; // info for the engine: for dds textures that shouldn't be resized with r_TexResolution
|
||||
const static AZ::u32 EIF_DontResize = 0x8000; // info for the engine: for dds textures that shouldn't be resized
|
||||
const static AZ::u32 EIF_RenormalizedTexture = 0x10000; // info for the engine: for dds textures that have renormalized color range
|
||||
const static AZ::u32 EIF_CafeNative = 0x20000; // info for the engine: native Cafe texture format
|
||||
const static AZ::u32 EIF_RestrictedPlatformONative = 0x40000; // native tiled texture for restrict platform O
|
||||
|
||||
@@ -185,7 +185,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float
|
||||
float2 normalUv = IN.m_uv[MaterialSrg::m_normalMapUvIndex];
|
||||
float3x3 uvMatrix = MaterialSrg::m_normalMapUvIndex == 0 ? MaterialSrg::m_uvMatrix : CreateIdentity3x3(); // By design, only UV0 is allowed to apply transforms.
|
||||
float detailLayerNormalFactor = MaterialSrg::m_detail_normal_factor * detailLayerBlendFactor;
|
||||
|
||||
surface.vertexNormal = normalize(IN.m_normal);
|
||||
surface.normal = GetDetailedNormalInputWS(
|
||||
isFrontFace, IN.m_normal,
|
||||
tangents[MaterialSrg::m_normalMapUvIndex], bitangents[MaterialSrg::m_normalMapUvIndex], MaterialSrg::m_normalMap, MaterialSrg::m_sampler, normalUv, MaterialSrg::m_normalFactor, MaterialSrg::m_flipNormalX, MaterialSrg::m_flipNormalY, uvMatrix, o_normal_useTexture,
|
||||
|
||||
@@ -237,6 +237,7 @@ PbrLightingOutput SkinPS_Common(VSOutput IN)
|
||||
normalMapSample = ApplyNormalWrinkleMap(o_wrinkleLayers_normal_useTexture4, normalMapSample, MaterialSrg::m_wrinkle_normal_texture4, MaterialSrg::m_sampler, normalUv, MaterialSrg::m_flipNormalX, MaterialSrg::m_flipNormalY, IN.m_wrinkleBlendFactors.a);
|
||||
}
|
||||
|
||||
surface.vertexNormal = normalize(IN.m_normal);
|
||||
if(o_detail_normal_useTexture)
|
||||
{
|
||||
float3 normalTS = GetTangentSpaceNormal(normalMapSample, uvMatrix, MaterialSrg::m_normalFactor);
|
||||
|
||||
@@ -445,6 +445,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float
|
||||
normalTS = ReorientTangentSpaceNormal(normalTS, lightingInputLayer3.m_normalTS);
|
||||
}
|
||||
// [GFX TODO][ATOM-14591]: This will only work if the normal maps all use the same UV stream. We would need to add support for having them in different UV streams.
|
||||
surface.vertexNormal = normalize(IN.m_normal);
|
||||
surface.normal = normalize(TangentSpaceToWorld(normalTS, IN.m_normal, tangents[MaterialSrg::m_parallaxUvIndex], bitangents[MaterialSrg::m_parallaxUvIndex]));
|
||||
|
||||
// ------- Combine Albedo, roughness, specular, roughness ---------
|
||||
|
||||
@@ -146,7 +146,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float
|
||||
|
||||
float2 normalUv = IN.m_uv[MaterialSrg::m_normalMapUvIndex];
|
||||
float3x3 uvMatrix = MaterialSrg::m_normalMapUvIndex == 0 ? MaterialSrg::m_uvMatrix : CreateIdentity3x3(); // By design, only UV0 is allowed to apply transforms.
|
||||
|
||||
surface.vertexNormal = normalize(IN.m_normal);
|
||||
surface.normal = GetNormalInputWS(MaterialSrg::m_normalMap, MaterialSrg::m_sampler, normalUv, MaterialSrg::m_flipNormalX, MaterialSrg::m_flipNormalY, isFrontFace, IN.m_normal,
|
||||
tangents[MaterialSrg::m_normalMapUvIndex], bitangents[MaterialSrg::m_normalMapUvIndex], uvMatrix, o_normal_useTexture, MaterialSrg::m_normalFactor);
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
|
||||
litRatio = DirectionalLightShadow::GetVisibility(
|
||||
shadowIndex,
|
||||
lightingData.shadowCoords,
|
||||
surface.normal,
|
||||
surface.vertexNormal,
|
||||
debugInfo);
|
||||
|
||||
if (o_transmission_mode == TransmissionMode::ThickObject)
|
||||
|
||||
@@ -86,7 +86,7 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
|
||||
light.m_position,
|
||||
surface.position,
|
||||
-dirToConeTip,
|
||||
surface.normal);
|
||||
surface.vertexNormal);
|
||||
|
||||
// Use backShadowRatio to carry thickness from shadow map for thick mode
|
||||
backShadowRatio = 1.0 - litRatio;
|
||||
|
||||
@@ -83,7 +83,7 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
|
||||
light.m_position,
|
||||
surface.position,
|
||||
lightDir,
|
||||
surface.normal);
|
||||
surface.vertexNormal);
|
||||
|
||||
// Use backShadowRatio to carry thickness from shadow map for thick mode
|
||||
backShadowRatio = 1.0 - litRatio;
|
||||
|
||||
+1
@@ -23,6 +23,7 @@ class Surface
|
||||
|
||||
float3 position; //!< Position in world-space
|
||||
float3 normal; //!< Normal in world-space
|
||||
float3 vertexNormal; //!< Vertex normal in world-space
|
||||
float3 albedo; //!< Albedo color of the non-metallic material, will be multiplied against the diffuse lighting value
|
||||
float3 specularF0; //!< Fresnel f0 spectral value of the surface
|
||||
float roughnessLinear; //!< Perceptually linear roughness value authored by artists. Must be remapped to roughnessA before use
|
||||
|
||||
@@ -22,6 +22,7 @@ class Surface
|
||||
|
||||
float3 position; //!< Position in world-space
|
||||
float3 normal; //!< Normal in world-space
|
||||
float3 vertexNormal; //!< Vertex normal in world-space
|
||||
float3 albedo; //!< Albedo color of the non-metallic material, will be multiplied against the diffuse lighting value
|
||||
float3 specularF0; //!< Fresnel f0 spectral value of the surface
|
||||
float roughnessLinear; //!< Perceptually linear roughness value authored by artists. Must be remapped to roughnessA before use
|
||||
|
||||
+1
@@ -22,6 +22,7 @@ class Surface
|
||||
|
||||
float3 position; //!< Position in world-space
|
||||
float3 normal; //!< Normal in world-space
|
||||
float3 vertexNormal; //!< Vertex normal in world-space
|
||||
float3 albedo; //!< Albedo color of the non-metallic material, will be multiplied against the diffuse lighting value
|
||||
float3 specularF0; //!< Fresnel f0 spectral value of the surface
|
||||
float roughnessLinear; //!< Perceptually linear roughness value authored by artists. Must be remapped to roughnessA before use
|
||||
|
||||
@@ -507,8 +507,13 @@ namespace AZ
|
||||
}
|
||||
}
|
||||
|
||||
RHI::ShaderInputBufferUnboundedArrayIndex bufferUnboundedArrayIndex = srgLayout->FindShaderInputBufferUnboundedArrayIndex(AZ::Name("m_meshBuffers"));
|
||||
m_rayTracingSceneSrg->SetBufferViewUnboundedArray(bufferUnboundedArrayIndex, meshBuffers);
|
||||
//Check if buffer view data changed from previous frame.
|
||||
if (m_meshBuffers.size() != meshBuffers.size() || m_meshBuffers != meshBuffers)
|
||||
{
|
||||
m_meshBuffers = meshBuffers;
|
||||
RHI::ShaderInputBufferUnboundedArrayIndex bufferUnboundedArrayIndex = srgLayout->FindShaderInputBufferUnboundedArrayIndex(AZ::Name("m_meshBuffers"));
|
||||
m_rayTracingSceneSrg->SetBufferViewUnboundedArray(bufferUnboundedArrayIndex, m_meshBuffers);
|
||||
}
|
||||
}
|
||||
|
||||
m_rayTracingSceneSrg->Compile();
|
||||
@@ -554,8 +559,13 @@ namespace AZ
|
||||
}
|
||||
}
|
||||
|
||||
RHI::ShaderInputImageUnboundedArrayIndex textureUnboundedArrayIndex = srgLayout->FindShaderInputImageUnboundedArrayIndex(AZ::Name("m_materialTextures"));
|
||||
m_rayTracingMaterialSrg->SetImageViewUnboundedArray(textureUnboundedArrayIndex, materialTextures);
|
||||
// Check if image view data changed from previous frame.
|
||||
if (m_materialTextures.size() != materialTextures.size() || m_materialTextures != materialTextures)
|
||||
{
|
||||
m_materialTextures = materialTextures;
|
||||
RHI::ShaderInputImageUnboundedArrayIndex textureUnboundedArrayIndex = srgLayout->FindShaderInputImageUnboundedArrayIndex(AZ::Name("m_materialTextures"));
|
||||
m_rayTracingMaterialSrg->SetImageViewUnboundedArray(textureUnboundedArrayIndex, materialTextures);
|
||||
}
|
||||
}
|
||||
|
||||
m_rayTracingMaterialSrg->Compile();
|
||||
|
||||
@@ -281,6 +281,10 @@ namespace AZ
|
||||
|
||||
using BlasInstanceMap = AZStd::unordered_map<AZ::Data::AssetId, MeshBlasInstance>;
|
||||
BlasInstanceMap m_blasInstanceMap;
|
||||
|
||||
// Cache view pointers so we dont need to update them if none changed from frame to frame.
|
||||
AZStd::vector<const RHI::BufferView*> m_meshBuffers;
|
||||
AZStd::vector<const RHI::ImageView*> m_materialTextures;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,6 +183,42 @@ namespace AZ
|
||||
//! Returns the shader resource layout for this group.
|
||||
const ShaderResourceGroupLayout* GetLayout() const;
|
||||
|
||||
enum class ResourceType : uint32_t
|
||||
{
|
||||
ConstantData,
|
||||
BufferView,
|
||||
ImageView,
|
||||
BufferViewUnboundedArray,
|
||||
ImageViewUnboundedArray,
|
||||
Sampler,
|
||||
Count
|
||||
};
|
||||
|
||||
enum class ResourceTypeMask : uint32_t
|
||||
{
|
||||
None = 0,
|
||||
ConstantDataMask = AZ_BIT(static_cast<uint32_t>(ResourceType::ConstantData)),
|
||||
BufferViewMask = AZ_BIT(static_cast<uint32_t>(ResourceType::BufferView)),
|
||||
ImageViewMask = AZ_BIT(static_cast<uint32_t>(ResourceType::ImageView)),
|
||||
BufferViewUnboundedArrayMask = AZ_BIT(static_cast<uint32_t>(ResourceType::BufferViewUnboundedArray)),
|
||||
ImageViewUnboundedArrayMask = AZ_BIT(static_cast<uint32_t>(ResourceType::ImageViewUnboundedArray)),
|
||||
SamplerMask = AZ_BIT(static_cast<uint32_t>(ResourceType::Sampler))
|
||||
};
|
||||
|
||||
//! Returns true if a resource type specified by resourceTypeMask is enabled for compilation
|
||||
bool IsResourceTypeEnabledForCompilation(uint32_t resourceTypeMask) const;
|
||||
|
||||
//! Disables all resource types for compilation after m_updateMaskResetLatency number of compiles
|
||||
//! This allows higher level code to ensure that if SRG is multi-buffered it can compile multiple
|
||||
//! times in order to ensure all SRG buffers are updated.
|
||||
void DisableCompilationForAllResourceTypes();
|
||||
|
||||
//! Returns true if any of the resource type has been enabled for compilation.
|
||||
bool IsAnyResourceTypeUpdated() const;
|
||||
|
||||
//! Enable compilation for a resourceType specified by resourceType/resourceTypeMask
|
||||
void EnableResourceTypeCompilation(ResourceTypeMask resourceTypeMask, ResourceType resourceType);
|
||||
|
||||
private:
|
||||
static const ConstPtr<ImageView> s_nullImageView;
|
||||
static const ConstPtr<BufferView> s_nullBufferView;
|
||||
@@ -207,23 +243,43 @@ namespace AZ
|
||||
|
||||
//! The backing data store of constants for the shader resource group.
|
||||
ConstantsData m_constantsData;
|
||||
|
||||
//! Mask used to check whether to compile a specific resource type
|
||||
uint32_t m_updateMask = 0;
|
||||
|
||||
//! Track iteration for each resource type in order to keep compiling it for m_updateMaskResetLatency number of times
|
||||
uint32_t m_resourceTypeIteration[static_cast<uint32_t>(ResourceType::Count)] = { 0 };
|
||||
uint32_t m_updateMaskResetLatency = RHI::Limits::Device::FrameCountMax;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
bool ShaderResourceGroupData::SetConstant(ShaderInputConstantIndex inputIndex, const T& value)
|
||||
{
|
||||
EnableResourceTypeCompilation(ResourceTypeMask::ConstantDataMask, ResourceType::ConstantData);
|
||||
return m_constantsData.SetConstant(inputIndex, value);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool ShaderResourceGroupData::SetConstant(ShaderInputConstantIndex inputIndex, const T& value, uint32_t arrayIndex)
|
||||
{
|
||||
EnableResourceTypeCompilation(ResourceTypeMask::ConstantDataMask, ResourceType::ConstantData);
|
||||
return m_constantsData.SetConstant(inputIndex, value, arrayIndex);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool ShaderResourceGroupData::SetConstantMatrixRows(ShaderInputConstantIndex inputIndex, const T& value, uint32_t rowCount)
|
||||
{
|
||||
EnableResourceTypeCompilation(ResourceTypeMask::ConstantDataMask, ResourceType::ConstantData);
|
||||
return m_constantsData.SetConstantMatrixRows(inputIndex, value, rowCount);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool ShaderResourceGroupData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view<T> values)
|
||||
{
|
||||
if (!values.empty())
|
||||
{
|
||||
EnableResourceTypeCompilation(ResourceTypeMask::ConstantDataMask, ResourceType::ConstantData);
|
||||
}
|
||||
return m_constantsData.SetConstantArray(inputIndex, values);
|
||||
}
|
||||
|
||||
@@ -245,12 +301,6 @@ namespace AZ
|
||||
return m_constantsData.GetConstant<T>(inputIndex, arrayIndex);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool ShaderResourceGroupData::SetConstantMatrixRows(ShaderInputConstantIndex inputIndex, const T& value, uint32_t rowCount)
|
||||
{
|
||||
return m_constantsData.SetConstantMatrixRows(inputIndex, value, rowCount);
|
||||
}
|
||||
|
||||
template<typename TShaderInput, typename TShaderInputDescriptor>
|
||||
bool ShaderResourceGroupData::ValidateImageViewAccess(TShaderInput inputIndex, const ImageView* imageView, [[maybe_unused]] uint32_t arrayIndex) const
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user