Merge branch 'development' into Atom/mriegger/directionallightbias
Signed-off-by: mrieggeramzn <mriegger@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}"/>
|
||||
|
||||
@@ -74,6 +74,7 @@ def update_manifest(scene):
|
||||
source_filename_only = os.path.basename(clean_filename)
|
||||
|
||||
created_entities = []
|
||||
previous_entity_id = azlmbr.entity.InvalidEntityId
|
||||
|
||||
# Loop every mesh node in the scene
|
||||
for activeMeshIndex in range(len(mesh_name_list)):
|
||||
@@ -102,14 +103,33 @@ def update_manifest(scene):
|
||||
# The MeshGroup we created will be output as a product in the asset's path named mesh_group_name.azmodel
|
||||
# The assetHint will be converted to an AssetId later during prefab loading
|
||||
json_update = json.dumps({
|
||||
"Controller": { "Configuration": { "ModelAsset": {
|
||||
"assetHint": os.path.join(source_relative_path, mesh_group_name) + ".azmodel" }}}
|
||||
});
|
||||
"Controller": { "Configuration": { "ModelAsset": {
|
||||
"assetHint": os.path.join(source_relative_path, mesh_group_name) + ".azmodel" }}}
|
||||
});
|
||||
# Apply the JSON above to the component we created
|
||||
result = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "UpdateComponentForEntity", entity_id, editor_mesh_component, json_update)
|
||||
|
||||
if not result:
|
||||
raise RuntimeError("UpdateComponentForEntity failed")
|
||||
raise RuntimeError("UpdateComponentForEntity failed for Mesh component")
|
||||
|
||||
# Get the transform component
|
||||
transform_component = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "GetOrAddComponentByTypeName", entity_id, "27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0")
|
||||
|
||||
# Set this entity to be a child of the last entity we created
|
||||
# This is just an example of how to do parenting and isn't necessarily useful to parent everything like this
|
||||
if previous_entity_id is not None:
|
||||
transform_json = json.dumps({
|
||||
"Parent Entity" : previous_entity_id.to_json()
|
||||
});
|
||||
|
||||
# Apply the JSON update
|
||||
result = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "UpdateComponentForEntity", entity_id, transform_component, transform_json)
|
||||
|
||||
if not result:
|
||||
raise RuntimeError("UpdateComponentForEntity failed for Transform component")
|
||||
|
||||
# Update the last entity id for next time
|
||||
previous_entity_id = entity_id
|
||||
|
||||
# Keep track of the entity we set up, we'll add them all to the prefab we're creating later
|
||||
created_entities.append(entity_id)
|
||||
@@ -147,6 +167,8 @@ def on_update_manifest(args):
|
||||
except RuntimeError as err:
|
||||
print (f'ERROR - {err}')
|
||||
log_exception_traceback()
|
||||
except:
|
||||
log_exception_traceback()
|
||||
|
||||
global sceneJobHandler
|
||||
sceneJobHandler = None
|
||||
|
||||
@@ -23,20 +23,20 @@ TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
|
||||
class TestAtomEditorComponentsMain(object):
|
||||
"""Holds tests for Atom components."""
|
||||
|
||||
@pytest.mark.test_case_id("C32078118") # Decal
|
||||
@pytest.mark.test_case_id("C32078119") # DepthOfField
|
||||
@pytest.mark.test_case_id("C32078120") # Directional Light
|
||||
@pytest.mark.test_case_id("C32078121") # Exposure Control
|
||||
@pytest.mark.test_case_id("C32078115") # Global Skylight (IBL)
|
||||
@pytest.mark.test_case_id("C32078125") # Physical Sky
|
||||
@pytest.mark.test_case_id("C32078127") # PostFX Layer
|
||||
@pytest.mark.test_case_id("C32078131") # PostFX Radius Weight Modifier
|
||||
@pytest.mark.test_case_id("C32078117") # Light
|
||||
@pytest.mark.test_case_id("C36525660") # Display Mapper
|
||||
def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform):
|
||||
"""
|
||||
Please review the hydra script run by this test for more specific test info.
|
||||
Tests the following Atom components and verifies all "expected_lines" appear in Editor.log:
|
||||
1. Display Mapper
|
||||
2. Light
|
||||
3. PostFX Radius Weight Modifier
|
||||
4. PostFX Layer
|
||||
5. Physical Sky
|
||||
6. Global Skylight (IBL)
|
||||
7. Exposure Control
|
||||
8. Directional Light
|
||||
9. DepthOfField
|
||||
10. Decal
|
||||
Tests the Atom components & verifies all "expected_lines" appear in Editor.log
|
||||
"""
|
||||
cfg_args = [level]
|
||||
|
||||
@@ -69,6 +69,18 @@ class TestAtomEditorComponentsMain(object):
|
||||
"DepthOfField_test: Entity deleted: True",
|
||||
"DepthOfField_test: UNDO entity deletion works: True",
|
||||
"DepthOfField_test: REDO entity deletion works: True",
|
||||
# Directional Light Component
|
||||
"Directional Light Entity successfully created",
|
||||
"Directional Light_test: Component added to the entity: True",
|
||||
"Directional Light_test: Component removed after UNDO: True",
|
||||
"Directional Light_test: Component added after REDO: True",
|
||||
"Directional Light_test: Entered game mode: True",
|
||||
"Directional Light_test: Exit game mode: True",
|
||||
"Directional Light_test: Entity is hidden: True",
|
||||
"Directional Light_test: Entity is shown: True",
|
||||
"Directional Light_test: Entity deleted: True",
|
||||
"Directional Light_test: UNDO entity deletion works: True",
|
||||
"Directional Light_test: REDO entity deletion works: True",
|
||||
# Exposure Control Component
|
||||
"Exposure Control Entity successfully created",
|
||||
"Exposure Control_test: Component added to the entity: True",
|
||||
@@ -180,6 +192,7 @@ class TestAtomEditorComponentsMain(object):
|
||||
cfg_args=cfg_args,
|
||||
)
|
||||
|
||||
@pytest.mark.test_case_id("C34525095")
|
||||
def test_AtomEditorComponents_LightComponent(
|
||||
self, request, editor, workspace, project, launcher_platform, level):
|
||||
"""
|
||||
@@ -266,6 +279,15 @@ class TestMaterialEditorBasicTests(object):
|
||||
request.addfinalizer(teardown)
|
||||
|
||||
@pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
|
||||
@pytest.mark.test_case_id("C34448113") # Creating a New Asset.
|
||||
@pytest.mark.test_case_id("C34448114") # Opening an Existing Asset.
|
||||
@pytest.mark.test_case_id("C34448115") # Closing Selected Material.
|
||||
@pytest.mark.test_case_id("C34448116") # Closing All Materials.
|
||||
@pytest.mark.test_case_id("C34448117") # Closing all but Selected Material.
|
||||
@pytest.mark.test_case_id("C34448118") # Saving Material.
|
||||
@pytest.mark.test_case_id("C34448119") # Saving as a New Material.
|
||||
@pytest.mark.test_case_id("C34448120") # Saving as a Child Material.
|
||||
@pytest.mark.test_case_id("C34448121") # Saving all Open Materials.
|
||||
def test_MaterialEditorBasicTests(
|
||||
self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ def create_screenshots_archive(screenshot_path):
|
||||
class TestAllComponentsIndepthTests(object):
|
||||
|
||||
@pytest.mark.parametrize("screenshot_name", ["AtomBasicLevelSetup.ppm"])
|
||||
@pytest.mark.test_case_id("C34603773")
|
||||
def test_BasicLevelSetup_SetsUpLevel(
|
||||
self, request, editor, workspace, project, launcher_platform, level, screenshot_name):
|
||||
"""
|
||||
@@ -115,6 +116,7 @@ class TestAllComponentsIndepthTests(object):
|
||||
|
||||
create_screenshots_archive(screenshot_directory)
|
||||
|
||||
@pytest.mark.test_case_id("C34525095")
|
||||
def test_LightComponent_ScreenshotMatchesGoldenImage(
|
||||
self, request, editor, workspace, project, launcher_platform, level):
|
||||
"""
|
||||
@@ -146,7 +148,7 @@ class TestAllComponentsIndepthTests(object):
|
||||
golden_image_path = os.path.join(golden_images_directory(), golden_image)
|
||||
golden_images.append(golden_image_path)
|
||||
|
||||
expected_lines = ["Light component tests completed."]
|
||||
expected_lines = ["spot_light Controller|Configuration|Shadows|Shadowmap size: SUCCESS"]
|
||||
unexpected_lines = [
|
||||
"Trace::Assert",
|
||||
"Trace::Error",
|
||||
@@ -225,6 +227,8 @@ class TestMaterialEditor(object):
|
||||
pytest.param("-rhi=Vulkan", ["Registering vulkan RHI"])
|
||||
])
|
||||
@pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
|
||||
@pytest.mark.test_case_id("C30973986") # Material Editor Launching in Dx12
|
||||
@pytest.mark.test_case_id("C30973987") # Material Editor Launching in Vulkan
|
||||
def test_MaterialEditorLaunch_AllRHIOptionsSucceed(
|
||||
self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name, cfg_args,
|
||||
expected_lines):
|
||||
|
||||
@@ -23,6 +23,7 @@ class TestAutomation(EditorTestSuite):
|
||||
# Remove -autotest_mode from global_extra_cmdline_args since we need rendering for these tests.
|
||||
global_extra_cmdline_args = ["-BatchMode"] # Default is ["-BatchMode", "-autotest_mode"]
|
||||
|
||||
@pytest.mark.test_case_id("C34603773")
|
||||
class AtomGPU_BasicLevelSetup_SetsUpLevel(EditorSharedTest):
|
||||
use_null_renderer = False # Default is True
|
||||
screenshot_name = "AtomBasicLevelSetup.ppm"
|
||||
|
||||
@@ -67,5 +67,13 @@ class TestAutomation(EditorTestSuite):
|
||||
class AtomEditorComponents_PostFXLayerAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PostFXLayerAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C36525665")
|
||||
class AtomEditorComponents_PostFXShapeWeightModifierAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PostFxShapeWeightModifierAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C36525664")
|
||||
class AtomEditorComponents_PostFXGradientWeightModifierAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded as test_module
|
||||
|
||||
class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest):
|
||||
from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module
|
||||
|
||||
@@ -30,6 +30,7 @@ class TestAtomEditorComponentsSandbox(object):
|
||||
class TestAtomEditorComponentsMain(object):
|
||||
"""Holds tests for Atom components."""
|
||||
|
||||
@pytest.mark.test_case_id("C32078128")
|
||||
def test_AtomEditorComponents_ReflectionProbeAddedToEntity(
|
||||
self, request, editor, level, workspace, project, launcher_platform):
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
|
||||
+179
@@ -0,0 +1,179 @@
|
||||
"""
|
||||
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:
|
||||
creation_undo = (
|
||||
"UNDO Entity creation success",
|
||||
"UNDO Entity creation failed")
|
||||
creation_redo = (
|
||||
"REDO Entity creation success",
|
||||
"REDO Entity creation failed")
|
||||
postfx_gradient_weight_creation = (
|
||||
"PostFX Gradient Weight Modifier Entity successfully created",
|
||||
"PostFX Gradient Weight Modifier Entity failed to be created")
|
||||
postfx_gradient_weight_component = (
|
||||
"Entity has a PostFX Gradient Weight Modifier component",
|
||||
"Entity failed to find PostFX Gradient Weight Modifier component")
|
||||
postfx_gradient_weight_disabled = (
|
||||
"PostFX Gradient Weight Modifier component disabled",
|
||||
"PostFX Gradient Weight Modifier component was not disabled.")
|
||||
postfx_layer_component = (
|
||||
"Entity has a PostFX Layer component",
|
||||
"Entity did not have an PostFX Layer component")
|
||||
postfx_gradient_weight_enabled = (
|
||||
"PostFX Gradient Weight Modifier component enabled",
|
||||
"PostFX Gradient Weight Modifier component was not enabled.")
|
||||
enter_game_mode = (
|
||||
"Entered game mode",
|
||||
"Failed to enter game mode")
|
||||
exit_game_mode = (
|
||||
"Exited game mode",
|
||||
"Couldn't exit game mode")
|
||||
is_visible = (
|
||||
"Entity is visible",
|
||||
"Entity was not visible")
|
||||
is_hidden = (
|
||||
"Entity is hidden",
|
||||
"Entity was not hidden")
|
||||
entity_deleted = (
|
||||
"Entity deleted",
|
||||
"Entity was not deleted")
|
||||
deletion_undo = (
|
||||
"UNDO deletion success",
|
||||
"UNDO deletion failed")
|
||||
deletion_redo = (
|
||||
"REDO deletion success",
|
||||
"REDO deletion failed")
|
||||
|
||||
|
||||
def AtomEditorComponents_PostFXGradientWeightModifier_AddedToEntity():
|
||||
"""
|
||||
Summary:
|
||||
Tests the PostFX Gradient Weight Modifier component can be added to an entity and has the expected functionality.
|
||||
|
||||
Test setup:
|
||||
- Wait for Editor idle loop.
|
||||
- Open the "Base" level.
|
||||
|
||||
Expected Behavior:
|
||||
The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components.
|
||||
Creation and deletion undo/redo should also work.
|
||||
|
||||
Test Steps:
|
||||
1) Create a PostFX Gradient Weight Modifier entity with no components.
|
||||
2) Add a PostFX Gradient Weight Modifier component to PostFX Gradient Weight Modifier entity.
|
||||
3) UNDO the entity creation and component addition.
|
||||
4) REDO the entity creation and component addition.
|
||||
5) Verify PostFX Gradient Weight Modifier component not enabled.
|
||||
6) Add PostFX Layer component since it is required by the PostFX Gradient Weight Modifier component.
|
||||
7) Verify PostFX Gradient Weight Modifier component is enabled.
|
||||
8) Enter/Exit game mode.
|
||||
9) Test IsHidden.
|
||||
10) Test IsVisible.
|
||||
11) Delete PostFX Gradient Weight Modifier entity.
|
||||
12) UNDO deletion.
|
||||
13) REDO deletion.
|
||||
14) Look for errors.
|
||||
|
||||
:return: None
|
||||
"""
|
||||
|
||||
import azlmbr.legacy.general as general
|
||||
|
||||
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||
from editor_python_test_tools.utils import Report, Tracer, TestHelper
|
||||
|
||||
with Tracer() as error_tracer:
|
||||
# Test setup begins.
|
||||
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
|
||||
TestHelper.init_idle()
|
||||
TestHelper.open_level("", "Base")
|
||||
|
||||
# Test steps begin.
|
||||
# 1. Create a PostFX Gradient Weight Modifier entity with no components.
|
||||
postfx_gradient_weight_name = "PostFX Gradient Weight Modifier"
|
||||
postfx_gradient_weight_entity = EditorEntity.create_editor_entity(postfx_gradient_weight_name)
|
||||
Report.critical_result(Tests.postfx_gradient_weight_creation, postfx_gradient_weight_entity.exists())
|
||||
|
||||
# 2. Add a PostFX Gradient Weight Modifier component to PostFX Gradient Weight Modifier entity.
|
||||
postfx_gradient_weight_component = postfx_gradient_weight_entity.add_component(postfx_gradient_weight_name)
|
||||
Report.critical_result(
|
||||
Tests.postfx_gradient_weight_component,
|
||||
postfx_gradient_weight_entity.has_component(postfx_gradient_weight_name))
|
||||
|
||||
# 3. UNDO the entity creation and component addition.
|
||||
# -> UNDO component addition.
|
||||
general.undo()
|
||||
# -> UNDO naming entity.
|
||||
general.undo()
|
||||
# -> UNDO selecting entity.
|
||||
general.undo()
|
||||
# -> UNDO entity creation.
|
||||
general.undo()
|
||||
general.idle_wait_frames(1)
|
||||
Report.result(Tests.creation_undo, not postfx_gradient_weight_entity.exists())
|
||||
|
||||
# 4. REDO the entity creation and component addition.
|
||||
# -> REDO entity creation.
|
||||
general.redo()
|
||||
# -> REDO selecting entity.
|
||||
general.redo()
|
||||
# -> REDO naming entity.
|
||||
general.redo()
|
||||
# -> REDO component addition.
|
||||
general.redo()
|
||||
general.idle_wait_frames(1)
|
||||
Report.result(Tests.creation_redo, postfx_gradient_weight_entity.exists())
|
||||
|
||||
# 5. Verify PostFX Gradient Weight Modifier component not enabled.
|
||||
Report.result(Tests.postfx_gradient_weight_disabled, not postfx_gradient_weight_component.is_enabled())
|
||||
|
||||
# 6. Add PostFX Layer component since it is required by the PostFX Gradient Weight Modifier component.
|
||||
postfx_layer_name = "PostFX Layer"
|
||||
postfx_gradient_weight_entity.add_component(postfx_layer_name)
|
||||
Report.result(Tests.postfx_layer_component, postfx_gradient_weight_entity.has_component(postfx_layer_name))
|
||||
|
||||
# 7. Verify PostFX Gradient Weight Modifier component is enabled.
|
||||
Report.result(Tests.postfx_gradient_weight_enabled, postfx_gradient_weight_component.is_enabled())
|
||||
|
||||
# 8. Enter/Exit game mode.
|
||||
TestHelper.enter_game_mode(Tests.enter_game_mode)
|
||||
general.idle_wait_frames(1)
|
||||
TestHelper.exit_game_mode(Tests.exit_game_mode)
|
||||
|
||||
# 9. Test IsHidden.
|
||||
postfx_gradient_weight_entity.set_visibility_state(False)
|
||||
Report.result(Tests.is_hidden, postfx_gradient_weight_entity.is_hidden() is True)
|
||||
|
||||
# 10. Test IsVisible.
|
||||
postfx_gradient_weight_entity.set_visibility_state(True)
|
||||
general.idle_wait_frames(1)
|
||||
Report.result(Tests.is_visible, postfx_gradient_weight_entity.is_visible() is True)
|
||||
|
||||
# 11. Delete PostFX Gradient Weight Modifier entity.
|
||||
postfx_gradient_weight_entity.delete()
|
||||
Report.result(Tests.entity_deleted, not postfx_gradient_weight_entity.exists())
|
||||
|
||||
# 12. UNDO deletion.
|
||||
general.undo()
|
||||
Report.result(Tests.deletion_undo, postfx_gradient_weight_entity.exists())
|
||||
|
||||
# 13. REDO deletion.
|
||||
general.redo()
|
||||
Report.result(Tests.deletion_redo, not postfx_gradient_weight_entity.exists())
|
||||
|
||||
# 14. Look for errors or asserts.
|
||||
TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
|
||||
for error_info in error_tracer.errors:
|
||||
Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
|
||||
for assert_info in error_tracer.asserts:
|
||||
Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(AtomEditorComponents_PostFXGradientWeightModifier_AddedToEntity)
|
||||
+207
@@ -0,0 +1,207 @@
|
||||
"""
|
||||
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:
|
||||
creation_undo = (
|
||||
"UNDO Entity creation success",
|
||||
"UNDO Entity creation failed")
|
||||
creation_redo = (
|
||||
"REDO Entity creation success",
|
||||
"REDO Entity creation failed")
|
||||
postfx_shape_weight_creation = (
|
||||
"PostFx Shape Weight Modifier Entity successfully created",
|
||||
"PostFx Shape Weight Modifier Entity failed to be created")
|
||||
postfx_shape_weight_component = (
|
||||
"Entity has a PostFx Shape Weight Modifier component",
|
||||
"Entity failed to find PostFx Shape Weight Modifier component")
|
||||
postfx_shape_weight_disabled = (
|
||||
"PostFx Shape Weight Modifier component disabled",
|
||||
"PostFx Shape Weight Modifier component was not disabled.")
|
||||
postfx_layer_component = (
|
||||
"Entity has a PostFX Layer component",
|
||||
"Entity did not have an PostFX Layer component")
|
||||
tube_shape_component = (
|
||||
"Entity has a Tube Shape component",
|
||||
"Entity did not have a Tube Shape component")
|
||||
postfx_shape_weight_enabled = (
|
||||
"PostFx Shape Weight Modifier component enabled",
|
||||
"PostFx Shape Weight Modifier component was not enabled.")
|
||||
enter_game_mode = (
|
||||
"Entered game mode",
|
||||
"Failed to enter game mode")
|
||||
exit_game_mode = (
|
||||
"Exited game mode",
|
||||
"Couldn't exit game mode")
|
||||
is_visible = (
|
||||
"Entity is visible",
|
||||
"Entity was not visible")
|
||||
is_hidden = (
|
||||
"Entity is hidden",
|
||||
"Entity was not hidden")
|
||||
entity_deleted = (
|
||||
"Entity deleted",
|
||||
"Entity was not deleted")
|
||||
deletion_undo = (
|
||||
"UNDO deletion success",
|
||||
"UNDO deletion failed")
|
||||
deletion_redo = (
|
||||
"REDO deletion success",
|
||||
"REDO deletion failed")
|
||||
|
||||
|
||||
def AtomEditorComponents_postfx_shape_weight_AddedToEntity():
|
||||
"""
|
||||
Summary:
|
||||
Tests the PostFx Shape Weight Modifier component can be added to an entity and has the expected functionality.
|
||||
|
||||
Test setup:
|
||||
- Wait for Editor idle loop.
|
||||
- Open the "Base" level.
|
||||
|
||||
Expected Behavior:
|
||||
The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components.
|
||||
Creation and deletion undo/redo should also work.
|
||||
|
||||
Test Steps:
|
||||
1) Create a PostFx Shape Weight Modifier entity with no components.
|
||||
2) Add a PostFx Shape Weight Modifier component to PostFx Shape Weight Modifier entity.
|
||||
3) UNDO the entity creation and component addition.
|
||||
4) REDO the entity creation and component addition.
|
||||
5) Verify PostFx Shape Weight Modifier component not enabled.
|
||||
6) Add PostFX Layer component since it is required by the PostFx Shape Weight Modifier component.
|
||||
7) Verify PostFx Shape Weight Modifier component is NOT enabled since it also requires a shape.
|
||||
8) Add a required shape looping over a list and checking if it enables PostFX Shape Weight Modifier.
|
||||
9) Undo to remove each added shape and verify PostFX Shape Weight Modifier is not enabled.
|
||||
10) Verify PostFx Shape Weight Modifier component is enabled by adding Spline and Tube Shape component.
|
||||
11) Enter/Exit game mode.
|
||||
12) Test IsHidden.
|
||||
13) Test IsVisible.
|
||||
14) Delete PostFx Shape Weight Modifier entity.
|
||||
15) UNDO deletion.
|
||||
16) REDO deletion.
|
||||
17) Look for errors.
|
||||
|
||||
:return: None
|
||||
"""
|
||||
|
||||
import azlmbr.legacy.general as general
|
||||
|
||||
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||
from editor_python_test_tools.utils import Report, Tracer, TestHelper
|
||||
|
||||
with Tracer() as error_tracer:
|
||||
# Test setup begins.
|
||||
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
|
||||
TestHelper.init_idle()
|
||||
TestHelper.open_level("", "Base")
|
||||
|
||||
# Test steps begin.
|
||||
# 1. Create a PostFx Shape Weight Modifier entity with no components.
|
||||
postfx_shape_weight_name = "PostFX Shape Weight Modifier"
|
||||
postfx_shape_weight_entity = EditorEntity.create_editor_entity(postfx_shape_weight_name)
|
||||
Report.critical_result(Tests.postfx_shape_weight_creation, postfx_shape_weight_entity.exists())
|
||||
|
||||
# 2. Add a PostFx Shape Weight Modifier component to PostFx Shape Weight Modifier entity.
|
||||
postfx_shape_weight_component = postfx_shape_weight_entity.add_component(postfx_shape_weight_name)
|
||||
Report.critical_result(
|
||||
Tests.postfx_shape_weight_component,
|
||||
postfx_shape_weight_entity.has_component(postfx_shape_weight_name))
|
||||
|
||||
# 3. UNDO the entity creation and component addition.
|
||||
# -> UNDO component addition.
|
||||
general.undo()
|
||||
# -> UNDO naming entity.
|
||||
general.undo()
|
||||
# -> UNDO selecting entity.
|
||||
general.undo()
|
||||
# -> UNDO entity creation.
|
||||
general.undo()
|
||||
general.idle_wait_frames(1)
|
||||
Report.result(Tests.creation_undo, not postfx_shape_weight_entity.exists())
|
||||
|
||||
# 4. REDO the entity creation and component addition.
|
||||
# -> REDO entity creation.
|
||||
general.redo()
|
||||
# -> REDO selecting entity.
|
||||
general.redo()
|
||||
# -> REDO naming entity.
|
||||
general.redo()
|
||||
# -> REDO component addition.
|
||||
general.redo()
|
||||
general.idle_wait_frames(1)
|
||||
Report.result(Tests.creation_redo, postfx_shape_weight_entity.exists())
|
||||
|
||||
# 5. Verify PostFx Shape Weight Modifier component not enabled.
|
||||
Report.result(Tests.postfx_shape_weight_disabled, not postfx_shape_weight_component.is_enabled())
|
||||
|
||||
# 6. Add PostFX Layer component since it is required by the PostFx Shape Weight Modifier component.
|
||||
postfx_layer_name = "PostFX Layer"
|
||||
postfx_shape_weight_entity.add_component(postfx_layer_name)
|
||||
Report.result(Tests.postfx_layer_component, postfx_shape_weight_entity.has_component(postfx_layer_name))
|
||||
|
||||
# 7. Verify PostFx Shape Weight Modifier component is NOT enabled since it also requires a shape.
|
||||
Report.result(Tests.postfx_shape_weight_disabled, not postfx_shape_weight_component.is_enabled())
|
||||
|
||||
# 8. Add a required shape looping over a list and checking if it enables PostFX Shape Weight Modifier.
|
||||
for shape in ['Axis Aligned Box Shape', 'Box Shape', 'Capsule Shape', 'Compound Shape', 'Cylinder Shape',
|
||||
'Disk Shape', 'Polygon Prism Shape', 'Quad Shape', 'Sphere Shape', 'Vegetation Reference Shape']:
|
||||
postfx_shape_weight_entity.add_component(shape)
|
||||
test_shape = (
|
||||
f"Entity has a {shape} component",
|
||||
f"Entity did not have a {shape} component")
|
||||
Report.result(test_shape, postfx_shape_weight_entity.has_component(shape))
|
||||
|
||||
# Check if required shape allows PostFX Shape Weight Modifier to be enabled
|
||||
Report.result(Tests.postfx_shape_weight_enabled, postfx_shape_weight_component.is_enabled())
|
||||
|
||||
# 9. Undo to remove each added shape and verify PostFX Shape Weight Modifier is not enabled.
|
||||
general.undo()
|
||||
TestHelper.wait_for_condition(lambda: not postfx_shape_weight_entity.has_component(shape), 1.0)
|
||||
Report.result(Tests.postfx_shape_weight_disabled, not postfx_shape_weight_component.is_enabled())
|
||||
|
||||
# 10. Verify PostFx Shape Weight Modifier component is enabled by adding Spline and Tube Shape component.
|
||||
postfx_shape_weight_entity.add_components(['Spline', 'Tube Shape'])
|
||||
Report.result(Tests.tube_shape_component, postfx_shape_weight_entity.has_component('Tube Shape'))
|
||||
Report.result(Tests.postfx_shape_weight_enabled, postfx_shape_weight_component.is_enabled())
|
||||
|
||||
# 11. Enter/Exit game mode.
|
||||
TestHelper.enter_game_mode(Tests.enter_game_mode)
|
||||
general.idle_wait_frames(1)
|
||||
TestHelper.exit_game_mode(Tests.exit_game_mode)
|
||||
|
||||
# 12. Test IsHidden.
|
||||
postfx_shape_weight_entity.set_visibility_state(False)
|
||||
Report.result(Tests.is_hidden, postfx_shape_weight_entity.is_hidden() is True)
|
||||
|
||||
# 13. Test IsVisible.
|
||||
postfx_shape_weight_entity.set_visibility_state(True)
|
||||
general.idle_wait_frames(1)
|
||||
Report.result(Tests.is_visible, postfx_shape_weight_entity.is_visible() is True)
|
||||
|
||||
# 14. Delete PostFx Shape Weight Modifier entity.
|
||||
postfx_shape_weight_entity.delete()
|
||||
Report.result(Tests.entity_deleted, not postfx_shape_weight_entity.exists())
|
||||
|
||||
# 15. UNDO deletion.
|
||||
general.undo()
|
||||
Report.result(Tests.deletion_undo, postfx_shape_weight_entity.exists())
|
||||
|
||||
# 16. REDO deletion.
|
||||
general.redo()
|
||||
Report.result(Tests.deletion_redo, not postfx_shape_weight_entity.exists())
|
||||
|
||||
# 17. Look for errors or asserts.
|
||||
TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
|
||||
for error_info in error_tracer.errors:
|
||||
Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
|
||||
for assert_info in error_tracer.asserts:
|
||||
Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(AtomEditorComponents_postfx_shape_weight_AddedToEntity)
|
||||
-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)
|
||||
|
||||
|
||||
|
||||
+3
-11
@@ -52,9 +52,6 @@ def Joints_BallLeadFollowerCollide():
|
||||
from editor_python_test_tools.utils import Report
|
||||
from editor_python_test_tools.utils import TestHelper as helper
|
||||
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.bus
|
||||
|
||||
from JointsHelper import JointEntityCollisionAware
|
||||
|
||||
# Helper Entity class - self.collided flag is set when instance receives collision event.
|
||||
@@ -75,17 +72,12 @@ def Joints_BallLeadFollowerCollide():
|
||||
lead = Entity("lead")
|
||||
follower = Entity("follower")
|
||||
|
||||
# 4) Wait for several seconds
|
||||
general.idle_wait(2.0) # wait for lead and follower to move
|
||||
# 4) Wait for collision between lead and follower or timeout
|
||||
Report.critical_result(Tests.check_collision_happened, helper.wait_for_condition(lambda: lead.collided and follower.collided, 10.0))
|
||||
|
||||
# 5) Check to see if lead and follower behaved as expected
|
||||
Report.critical_result(Tests.check_collision_happened, lead.collided and follower.collided)
|
||||
|
||||
# 6) Exit Game Mode
|
||||
# 5) Exit Game Mode
|
||||
helper.exit_game_mode(Tests.exit_game_mode)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(Joints_BallLeadFollowerCollide)
|
||||
|
||||
+49
-10
@@ -52,11 +52,13 @@ def Joints_HingeNoLimitsConstrained():
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import math
|
||||
from editor_python_test_tools.utils import Report
|
||||
from editor_python_test_tools.utils import TestHelper as helper
|
||||
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.bus
|
||||
import azlmbr.math as azmath
|
||||
|
||||
import JointsHelper
|
||||
from JointsHelper import JointEntity
|
||||
@@ -84,28 +86,65 @@ def Joints_HingeNoLimitsConstrained():
|
||||
Report.info_vector3(lead.position, "lead initial position:")
|
||||
Report.info_vector3(follower.position, "follower initial position:")
|
||||
leadInitialPosition = lead.position
|
||||
followerInitialPosition = follower.position
|
||||
|
||||
# 4) Wait for several seconds
|
||||
general.idle_wait(4.0) # wait for lead and follower to move
|
||||
# 4) Wait for the follower to move above and over the lead or Timeout
|
||||
normalizedStartPos = JointsHelper.getRelativeVector(lead.position, follower.position)
|
||||
normalizedStartPos = normalizedStartPos.GetNormalizedSafe()
|
||||
|
||||
class WaitCondition:
|
||||
ANGLE_CHECKPOINT_1 = math.radians(90)
|
||||
ANGLE_CHECKPOINT_2 = math.radians(200)
|
||||
|
||||
angleAchieved = 0.0
|
||||
followerMovedAbove90Deg = False #this is expected to be true to pass the test
|
||||
followerMovedAbove200Deg = False #this is expected to be true to pass the test
|
||||
|
||||
jointNormal = azmath.Vector3(0.0, -1.0, 0.0) # the joint rotates around the y axis
|
||||
def checkConditionMet(self):
|
||||
#calculate the current follower-lead vector
|
||||
normalVec = JointsHelper.getRelativeVector(lead.position, follower.position)
|
||||
normalVec = normalVec.GetNormalizedSafe()
|
||||
|
||||
#triple product and get the angle
|
||||
tripleProduct = normalizedStartPos.dot(normalVec.cross(self.jointNormal))
|
||||
currentAngle = math.acos(normalizedStartPos.Dot(normalVec))
|
||||
if tripleProduct < 0:
|
||||
currentAngle = (2*math.pi) - currentAngle
|
||||
|
||||
#if the angle is now less then last time, it is no longer rising, so end the test.
|
||||
if currentAngle < self.angleAchieved:
|
||||
return True
|
||||
|
||||
#once we're passed the final check point, end the test
|
||||
if currentAngle > self.ANGLE_CHECKPOINT_2:
|
||||
self.followerMovedAbove200Deg = True
|
||||
return True
|
||||
|
||||
self.angleAchieved = currentAngle
|
||||
self.followerMovedAbove90Deg = currentAngle > self.ANGLE_CHECKPOINT_1
|
||||
return False
|
||||
|
||||
def isFollowerPositionCorrect(self):
|
||||
return self.followerMovedAbove90Deg and self.followerMovedAbove200Deg
|
||||
|
||||
waitCondition = WaitCondition()
|
||||
|
||||
MAX_WAIT_TIME = 10.0 #seconds
|
||||
conditionMet = helper.wait_for_condition(lambda: waitCondition.checkConditionMet(), MAX_WAIT_TIME)
|
||||
|
||||
# 5) Check to see if lead and follower behaved as expected
|
||||
Report.info_vector3(lead.position, "lead position after 1 second:")
|
||||
Report.info_vector3(follower.position, "follower position after 1 second:")
|
||||
Report.info_vector3(lead.position, "lead position after test run:")
|
||||
Report.info_vector3(follower.position, "follower position after test run:")
|
||||
|
||||
leadPositionDelta = lead.position.Subtract(leadInitialPosition)
|
||||
leadRemainedStill = JointsHelper.vector3SmallerThanScalar(leadPositionDelta, FLOAT_EPSILON)
|
||||
Report.critical_result(Tests.check_lead_position, leadRemainedStill)
|
||||
|
||||
followerSwingedOverLead = (follower.position.x < leadInitialPosition.x and
|
||||
follower.position.z > leadInitialPosition.z)
|
||||
Report.critical_result(Tests.check_follower_position, followerSwingedOverLead)
|
||||
Report.critical_result(Tests.check_follower_position, conditionMet and waitCondition.isFollowerPositionCorrect())
|
||||
|
||||
# 6) Exit Game Mode
|
||||
helper.exit_game_mode(Tests.exit_game_mode)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(Joints_HingeNoLimitsConstrained)
|
||||
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:817bd8dd22e185136418b60fba5b3552993687515d3d5ae96791f2c3be907b92
|
||||
size 7233
|
||||
oid sha256:60276c07b45a734e4f71d695278167ea61e884f8b513906168c9642078ad5954
|
||||
size 6045
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/Skin.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"properties": {
|
||||
"wrinkleLayers": {
|
||||
"count": 3,
|
||||
"enable": true,
|
||||
"showBlendValues": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:53e17ec8155911c8b42e85436130f600bd6dddd8931a8ccb1b2f8a9f8674cc85
|
||||
size 45104
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0da56a05daa0ec1c476cfe25ca6d3b65267c98886cf33408f6e852fb325a8e2c
|
||||
size 198084
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e3537fbe9205731a242251c525a67bbb5f3b8f5307537f1dc0c318b5b885ce52
|
||||
size 198112
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bd794d5dd4b749c3275bfab79b9b5ae3f8e007d3e6741c0566c9c2d3931123bf
|
||||
size 198112
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:45ded862987a64061deffd8e4c9aa1dff4eec3bcff5f7b505679f1959e8ae137
|
||||
size 51440
|
||||
@@ -102,7 +102,7 @@ ly_add_target(
|
||||
3rdParty::Qt::Gui
|
||||
3rdParty::Qt::Widgets
|
||||
3rdParty::Qt::Concurrent
|
||||
3rdParty::tiff
|
||||
3rdParty::TIFF
|
||||
3rdParty::squish-ccr
|
||||
3rdParty::AWSNativeSDK::STS
|
||||
Legacy::CryCommon
|
||||
|
||||
@@ -57,6 +57,7 @@ AZ_POP_DISABLE_WARNING
|
||||
#include <AzFramework/StringFunc/StringFunc.h>
|
||||
#include <AzFramework/Terrain/TerrainDataRequestBus.h>
|
||||
#include <AzFramework/ProjectManager/ProjectManager.h>
|
||||
#include <AzFramework/Spawnable/RootSpawnableInterface.h>
|
||||
|
||||
// AzToolsFramework
|
||||
#include <AzToolsFramework/Component/EditorComponentAPIBus.h>
|
||||
@@ -3021,6 +3022,15 @@ CCryEditApp::ECreateLevelResult CCryEditApp::CreateLevel(const QString& levelNam
|
||||
bool bIsDocModified = GetIEditor()->GetDocument()->IsModified();
|
||||
OnSwitchPhysics();
|
||||
GetIEditor()->GetDocument()->SetModifiedFlag(bIsDocModified);
|
||||
|
||||
if (usePrefabSystemForLevels)
|
||||
{
|
||||
auto* rootSpawnableInterface = AzFramework::RootSpawnableInterface::Get();
|
||||
if (rootSpawnableInterface)
|
||||
{
|
||||
rootSpawnableInterface->ProcessSpawnableQueue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const QScopedValueRollback<bool> rollback(m_creatingNewLevel);
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -264,6 +264,9 @@ void EditorPreferencesDialog::SetFilter(const QString& filter)
|
||||
else if (m_currentPageItem)
|
||||
{
|
||||
m_currentPageItem->UpdateEditorFilter(ui->propertyEditor, m_filter);
|
||||
|
||||
// Refresh the Stylesheet - when using search functionality.
|
||||
AzQtComponents::StyleManager::repolishStyleSheet(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
// Editor
|
||||
#include "Settings.h"
|
||||
#include "EditorViewportSettings.h"
|
||||
|
||||
|
||||
|
||||
@@ -43,17 +44,16 @@ void CEditorPreferencesPage_Files::Reflect(AZ::SerializeContext& serialize)
|
||||
->Field("MaxCount", &AutoBackup::m_maxCount)
|
||||
->Field("RemindTime", &AutoBackup::m_remindTime);
|
||||
|
||||
serialize.Class<AssetBrowserSearch>()
|
||||
serialize.Class<AssetBrowserSettings>()
|
||||
->Version(1)
|
||||
->Field("Max number of items displayed", &AssetBrowserSearch::m_maxNumberOfItemsShownInSearch);
|
||||
->Field("MaxEntriesShownCount", &AssetBrowserSettings::m_maxNumberOfItemsShownInSearch);
|
||||
|
||||
serialize.Class<CEditorPreferencesPage_Files>()
|
||||
->Version(1)
|
||||
->Field("Files", &CEditorPreferencesPage_Files::m_files)
|
||||
->Field("Editors", &CEditorPreferencesPage_Files::m_editors)
|
||||
->Field("AutoBackup", &CEditorPreferencesPage_Files::m_autoBackup)
|
||||
->Field("AssetBrowserSearch", &CEditorPreferencesPage_Files::m_assetBrowserSearch);
|
||||
|
||||
->Field("AssetBrowserSettings", &CEditorPreferencesPage_Files::m_assetBrowserSettings);
|
||||
|
||||
AZ::EditContext* editContext = serialize.GetEditContext();
|
||||
if (editContext)
|
||||
@@ -85,9 +85,10 @@ void CEditorPreferencesPage_Files::Reflect(AZ::SerializeContext& serialize)
|
||||
->Attribute(AZ::Edit::Attributes::Max, 100)
|
||||
->DataElement(AZ::Edit::UIHandlers::SpinBox, &AutoBackup::m_remindTime, "Remind Time", "Auto Remind Every (Minutes)");
|
||||
|
||||
editContext->Class<AssetBrowserSearch>("Asset Browser Search View", "Asset Browser Search View")
|
||||
->DataElement(AZ::Edit::UIHandlers::SpinBox, &AssetBrowserSearch::m_maxNumberOfItemsShownInSearch, "Maximum number of displayed items",
|
||||
"Maximum number of displayed items displayed in the Search View")
|
||||
editContext->Class<AssetBrowserSettings>("Asset Browser Settings", "Asset Browser Settings")
|
||||
->DataElement(
|
||||
AZ::Edit::UIHandlers::SpinBox, &AssetBrowserSettings::m_maxNumberOfItemsShownInSearch, "Maximum number of displayed items",
|
||||
"Maximum number of items to display in the Search View.")
|
||||
->Attribute(AZ::Edit::Attributes::Min, 50)
|
||||
->Attribute(AZ::Edit::Attributes::Max, 5000);
|
||||
|
||||
@@ -97,7 +98,7 @@ void CEditorPreferencesPage_Files::Reflect(AZ::SerializeContext& serialize)
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_files, "Files", "File Preferences")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_editors, "External Editors", "External Editors")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_autoBackup, "Auto Backup", "Auto Backup")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_assetBrowserSearch, "Asset Browser Search", "Asset Browser Search");
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_assetBrowserSettings, "Asset Browser Settings","Asset Browser Settings");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,6 +118,7 @@ QIcon& CEditorPreferencesPage_Files::GetIcon()
|
||||
void CEditorPreferencesPage_Files::OnApply()
|
||||
{
|
||||
using namespace AzToolsFramework::SliceUtilities;
|
||||
|
||||
auto sliceSettings = AZ::UserSettings::CreateFind<SliceUserSettings>(AZ_CRC("SliceUserSettings", 0x055b32eb), AZ::UserSettings::CT_LOCAL);
|
||||
sliceSettings->m_autoNumber = m_files.m_autoNumberSlices;
|
||||
sliceSettings->m_saveLocation = m_files.m_saveLocation;
|
||||
@@ -137,7 +139,7 @@ void CEditorPreferencesPage_Files::OnApply()
|
||||
gSettings.autoBackupMaxCount = m_autoBackup.m_maxCount;
|
||||
gSettings.autoRemindTime = m_autoBackup.m_remindTime;
|
||||
|
||||
gSettings.maxNumberOfItemsShownInSearch = m_assetBrowserSearch.m_maxNumberOfItemsShownInSearch;
|
||||
SandboxEditor::SetMaxItemsShownInAssetBrowserSearch(m_assetBrowserSettings.m_maxNumberOfItemsShownInSearch);
|
||||
}
|
||||
|
||||
void CEditorPreferencesPage_Files::InitializeSettings()
|
||||
@@ -163,5 +165,5 @@ void CEditorPreferencesPage_Files::InitializeSettings()
|
||||
m_autoBackup.m_maxCount = gSettings.autoBackupMaxCount;
|
||||
m_autoBackup.m_remindTime = gSettings.autoRemindTime;
|
||||
|
||||
m_assetBrowserSearch.m_maxNumberOfItemsShownInSearch = gSettings.maxNumberOfItemsShownInSearch;
|
||||
m_assetBrowserSettings.m_maxNumberOfItemsShownInSearch = SandboxEditor::MaxItemsShownInAssetBrowserSearch();
|
||||
}
|
||||
|
||||
@@ -69,18 +69,15 @@ private:
|
||||
int m_remindTime;
|
||||
};
|
||||
|
||||
struct AssetBrowserSearch
|
||||
struct AssetBrowserSettings
|
||||
{
|
||||
AZ_TYPE_INFO(AssetBrowserSearch, "{9FBFCD24-9452-49DF-99F4-2711443CEAAE}")
|
||||
|
||||
int m_maxNumberOfItemsShownInSearch;
|
||||
AZ_TYPE_INFO(AssetBrowserSettings, "{5F407EC4-BBD1-4A87-92DB-D938D7127BB0}")
|
||||
AZ::u64 m_maxNumberOfItemsShownInSearch;
|
||||
};
|
||||
|
||||
Files m_files;
|
||||
ExternalEditors m_editors;
|
||||
AutoBackup m_autoBackup;
|
||||
AssetBrowserSearch m_assetBrowserSearch;
|
||||
AssetBrowserSettings m_assetBrowserSettings;
|
||||
QIcon m_icon;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
namespace SandboxEditor
|
||||
{
|
||||
constexpr AZStd::string_view AssetBrowserMaxItemsShownInSearchSetting = "/Amazon/Preferences/Editor/AssetBrowser/MaxItemsShowInSearch";
|
||||
constexpr AZStd::string_view GridSnappingSetting = "/Amazon/Preferences/Editor/GridSnapping";
|
||||
constexpr AZStd::string_view GridSizeSetting = "/Amazon/Preferences/Editor/GridSize";
|
||||
constexpr AZStd::string_view AngleSnappingSetting = "/Amazon/Preferences/Editor/AngleSnapping";
|
||||
@@ -110,6 +111,16 @@ namespace SandboxEditor
|
||||
return AZStd::make_unique<EditorViewportSettingsCallbacksImpl>();
|
||||
}
|
||||
|
||||
AZ::u64 MaxItemsShownInAssetBrowserSearch()
|
||||
{
|
||||
return GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast<AZ::u64>(50));
|
||||
}
|
||||
|
||||
void SetMaxItemsShownInAssetBrowserSearch(const AZ::u64 numberOfItemsShown)
|
||||
{
|
||||
SetRegistry(AssetBrowserMaxItemsShownInSearchSetting, numberOfItemsShown);
|
||||
}
|
||||
|
||||
bool GridSnappingEnabled()
|
||||
{
|
||||
return GetRegistry(GridSnappingSetting, false);
|
||||
|
||||
@@ -32,6 +32,9 @@ namespace SandboxEditor
|
||||
//! event will fire when a value in the settings registry (editorpreferences.setreg) is modified.
|
||||
SANDBOX_API AZStd::unique_ptr<EditorViewportSettingsCallbacks> CreateEditorViewportSettingsCallbacks();
|
||||
|
||||
SANDBOX_API AZ::u64 MaxItemsShownInAssetBrowserSearch();
|
||||
SANDBOX_API void SetMaxItemsShownInAssetBrowserSearch(AZ::u64 numberOfItemsShown);
|
||||
|
||||
SANDBOX_API bool GridSnappingEnabled();
|
||||
SANDBOX_API void SetGridSnapping(bool enabled);
|
||||
|
||||
|
||||
@@ -108,15 +108,11 @@ CObjectManager::CObjectManager()
|
||||
|
||||
m_objectsByName.reserve(1024);
|
||||
LoadRegistry();
|
||||
|
||||
AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(AzToolsFramework::GetEntityContextId());
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CObjectManager::~CObjectManager()
|
||||
{
|
||||
AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusDisconnect();
|
||||
|
||||
m_bExiting = true;
|
||||
SaveRegistry();
|
||||
DeleteAllObjects();
|
||||
@@ -2307,37 +2303,6 @@ void CObjectManager::SelectObjectInRect(CBaseObject* pObj, CViewport* view, HitC
|
||||
}
|
||||
}
|
||||
|
||||
void CObjectManager::OnEditorModeActivated(
|
||||
[[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode)
|
||||
{
|
||||
if (mode == AzToolsFramework::ViewportEditorMode::Component)
|
||||
{
|
||||
// hide current gizmo for entity (translate/rotate/scale)
|
||||
IGizmoManager* gizmoManager = GetGizmoManager();
|
||||
const size_t gizmoCount = static_cast<size_t>(gizmoManager->GetGizmoCount());
|
||||
for (size_t i = 0; i < gizmoCount; ++i)
|
||||
{
|
||||
gizmoManager->RemoveGizmo(gizmoManager->GetGizmoByIndex(static_cast<int>(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CObjectManager::OnEditorModeDeactivated(
|
||||
[[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode)
|
||||
{
|
||||
if (mode == AzToolsFramework::ViewportEditorMode::Component)
|
||||
{
|
||||
// show translate/rotate/scale gizmo again
|
||||
if (IGizmoManager* gizmoManager = GetGizmoManager())
|
||||
{
|
||||
if (CBaseObject* selectedObject = GetIEditor()->GetSelectedObject())
|
||||
{
|
||||
gizmoManager->AddGizmo(new CAxisGizmo(selectedObject));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
namespace
|
||||
{
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include "ObjectManagerEventBus.h"
|
||||
|
||||
#include <AzCore/std/smart_ptr/unique_ptr.h>
|
||||
#include <AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h>
|
||||
#include <AzCore/EBus/EBus.h>
|
||||
#include <AzCore/Component/Component.h>
|
||||
#include <Include/SandboxAPI.h>
|
||||
@@ -59,7 +58,6 @@ public:
|
||||
*/
|
||||
class CObjectManager
|
||||
: public IObjectManager
|
||||
, private AzToolsFramework::ViewportEditorModeNotificationsBus::Handler
|
||||
{
|
||||
public:
|
||||
//! Selection functor callback.
|
||||
@@ -330,12 +328,6 @@ private:
|
||||
|
||||
void FindDisplayableObjects(DisplayContext& dc, bool bDisplay);
|
||||
|
||||
// ViewportEditorModeNotificationsBus overrides ...
|
||||
void OnEditorModeActivated(
|
||||
const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override;
|
||||
void OnEditorModeDeactivated(
|
||||
const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override;
|
||||
|
||||
private:
|
||||
typedef std::map<GUID, CBaseObjectPtr, guid_less_predicate> Objects;
|
||||
Objects m_objects;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "EditorDefs.h"
|
||||
|
||||
#include "Settings.h"
|
||||
#include "EditorViewportSettings.h"
|
||||
|
||||
// Qt
|
||||
#include <QGuiApplication>
|
||||
@@ -487,7 +488,6 @@ void SEditorSettings::Save()
|
||||
SaveValue("Settings", "AutoBackupTime", autoBackupTime);
|
||||
SaveValue("Settings", "AutoBackupMaxCount", autoBackupMaxCount);
|
||||
SaveValue("Settings", "AutoRemindTime", autoRemindTime);
|
||||
SaveValue("Settings", "MaxDisplayedItemsNumInSearch", maxNumberOfItemsShownInSearch);
|
||||
SaveValue("Settings", "CameraMoveSpeed", cameraMoveSpeed);
|
||||
SaveValue("Settings", "CameraRotateSpeed", cameraRotateSpeed);
|
||||
SaveValue("Settings", "StylusMode", stylusMode);
|
||||
@@ -682,7 +682,6 @@ void SEditorSettings::Load()
|
||||
LoadValue("Settings", "AutoBackupTime", autoBackupTime);
|
||||
LoadValue("Settings", "AutoBackupMaxCount", autoBackupMaxCount);
|
||||
LoadValue("Settings", "AutoRemindTime", autoRemindTime);
|
||||
LoadValue("Settings", "MaxDisplayedItemsNumInSearch", maxNumberOfItemsShownInSearch);
|
||||
LoadValue("Settings", "CameraMoveSpeed", cameraMoveSpeed);
|
||||
LoadValue("Settings", "CameraRotateSpeed", cameraRotateSpeed);
|
||||
LoadValue("Settings", "StylusMode", stylusMode);
|
||||
@@ -1174,7 +1173,7 @@ AzToolsFramework::ConsoleColorTheme SEditorSettings::GetConsoleColorTheme() cons
|
||||
return consoleBackgroundColorTheme;
|
||||
}
|
||||
|
||||
int SEditorSettings::GetMaxNumberOfItemsShownInSearchView() const
|
||||
AZ::u64 SEditorSettings::GetMaxNumberOfItemsShownInSearchView() const
|
||||
{
|
||||
return SEditorSettings::maxNumberOfItemsShownInSearch;
|
||||
return SandboxEditor::MaxItemsShownInAssetBrowserSearch();
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@ AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING
|
||||
SettingOutcome GetValue(const AZStd::string_view path) override;
|
||||
SettingOutcome SetValue(const AZStd::string_view path, const AZStd::any& value) override;
|
||||
AzToolsFramework::ConsoleColorTheme GetConsoleColorTheme() const override;
|
||||
int GetMaxNumberOfItemsShownInSearchView() const override;
|
||||
AZ::u64 GetMaxNumberOfItemsShownInSearchView() const override;
|
||||
|
||||
void ConvertPath(const AZStd::string_view sourcePath, AZStd::string& category, AZStd::string& attribute);
|
||||
|
||||
@@ -353,14 +353,6 @@ AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING
|
||||
int autoRemindTime;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Asset Browser Search View.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Current maximum number of items that can be displayed in the AssetBrowser Search View.
|
||||
int maxNumberOfItemsShownInSearch;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//! If true preview windows is displayed when browsing geometries.
|
||||
bool bPreviewGeometryWindow;
|
||||
|
||||
|
||||
@@ -1195,7 +1195,7 @@ bool CFileUtil::IsFileExclusivelyAccessable(const QString& strFilePath)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CFileUtil::CreatePath(const QString& strPath)
|
||||
{
|
||||
#if defined(AZ_PLATFORM_MAC)
|
||||
#if !AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS
|
||||
bool pathCreated = true;
|
||||
|
||||
QString cleanPath = QDir::cleanPath(strPath);
|
||||
@@ -1252,7 +1252,7 @@ bool CFileUtil::CreatePath(const QString& strPath)
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
#endif // !AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -225,8 +225,16 @@ namespace AZ
|
||||
|
||||
ConsoleCommandContainer commandSubset;
|
||||
|
||||
for (ConsoleFunctorBase* curr = m_head; curr != nullptr; curr = curr->m_next)
|
||||
for (const auto& functor : m_commands)
|
||||
{
|
||||
if (functor.second.empty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Filter functors registered with the same name
|
||||
const ConsoleFunctorBase* curr = functor.second.front();
|
||||
|
||||
if ((curr->GetFlags() & ConsoleFunctorFlags::IsInvisible) == ConsoleFunctorFlags::IsInvisible)
|
||||
{
|
||||
// Filter functors marked as invisible
|
||||
@@ -236,7 +244,12 @@ namespace AZ
|
||||
if (StringFunc::StartsWith(curr->m_name, command, false))
|
||||
{
|
||||
AZLOG_INFO("- %s : %s\n", curr->m_name, curr->m_desc);
|
||||
commandSubset.push_back(curr->m_name);
|
||||
|
||||
if (commandSubset.size() < MaxConsoleCommandPlusArgsLength)
|
||||
{
|
||||
commandSubset.push_back(curr->m_name);
|
||||
}
|
||||
|
||||
if (matches)
|
||||
{
|
||||
matches->push_back(curr->m_name);
|
||||
@@ -271,7 +284,10 @@ namespace AZ
|
||||
{
|
||||
for (auto& curr : m_commands)
|
||||
{
|
||||
visitor(curr.second.front());
|
||||
if (!curr.second.empty())
|
||||
{
|
||||
visitor(curr.second.front());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,6 +352,11 @@ namespace AZ
|
||||
{
|
||||
iter->second.erase(iter2);
|
||||
}
|
||||
|
||||
if (iter->second.empty())
|
||||
{
|
||||
m_commands.erase(iter);
|
||||
}
|
||||
}
|
||||
functor->Unlink(m_head);
|
||||
functor->m_console = nullptr;
|
||||
|
||||
@@ -40,6 +40,12 @@ namespace AZ
|
||||
static unsigned int Record(StackFrame* frames, unsigned int maxNumOfFrames, unsigned int suppressCount = 0, void* nativeThread = 0);
|
||||
};
|
||||
|
||||
class StackConverter
|
||||
{
|
||||
public:
|
||||
static unsigned int FromNative(StackFrame* frames, unsigned int maxNumOfFrames, void* nativeContext);
|
||||
};
|
||||
|
||||
class SymbolStorage
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -31,6 +31,8 @@ namespace AZ
|
||||
{
|
||||
namespace Debug
|
||||
{
|
||||
struct StackFrame;
|
||||
|
||||
namespace Platform
|
||||
{
|
||||
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
||||
@@ -551,17 +553,19 @@ namespace AZ
|
||||
{
|
||||
StackFrame frames[25];
|
||||
|
||||
// Without StackFrame explicit alignment frames array is aligned to 4 bytes
|
||||
// which causes the stack tracing to fail.
|
||||
//size_t bla = AZStd::alignment_of<StackFrame>::value;
|
||||
//printf("Alignment value %d address 0x%08x : 0x%08x\n",bla,frames);
|
||||
SymbolStorage::StackLine lines[AZ_ARRAY_SIZE(frames)];
|
||||
unsigned int numFrames = 0;
|
||||
|
||||
if (!nativeContext)
|
||||
{
|
||||
suppressCount += 1; /// If we don't provide a context we will capture in the RecordFunction, so skip us (Trace::PrinCallstack).
|
||||
suppressCount += 1; /// If we don't provide a context we will capture in the RecordFunction, so skip us (Trace::PrintCallstack).
|
||||
numFrames = StackRecorder::Record(frames, AZ_ARRAY_SIZE(frames), suppressCount);
|
||||
}
|
||||
unsigned int numFrames = StackRecorder::Record(frames, AZ_ARRAY_SIZE(frames), suppressCount, nativeContext);
|
||||
else
|
||||
{
|
||||
numFrames = StackConverter::FromNative(frames, AZ_ARRAY_SIZE(frames), nativeContext);
|
||||
}
|
||||
|
||||
if (numFrames)
|
||||
{
|
||||
SymbolStorage::DecodeFrames(frames, numFrames, lines);
|
||||
|
||||
@@ -77,9 +77,11 @@ namespace AZ
|
||||
public:
|
||||
/**
|
||||
* Allocator used by the EBus.
|
||||
* The default setting is AZStd::allocator, which uses AZ::SystemAllocator.
|
||||
* The default setting is Internal EBusEnvironmentAllocator
|
||||
* EBus code stores their Context instances in static memory
|
||||
* Therfore the configured allocator must last as long as the EBus in a module
|
||||
*/
|
||||
using AllocatorType = AZStd::allocator;
|
||||
using AllocatorType = AZ::Internal::EBusEnvironmentAllocator;
|
||||
|
||||
/**
|
||||
* Defines how many handlers can connect to an address on the EBus
|
||||
|
||||
@@ -15,7 +15,7 @@ using namespace Intersect;
|
||||
// IntersectSegmentTriangleCCW
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int Intersect::IntersectSegmentTriangleCCW(
|
||||
bool Intersect::IntersectSegmentTriangleCCW(
|
||||
const Vector3& p, const Vector3& q, const Vector3& a, const Vector3& b, const Vector3& c,
|
||||
/*float &u, float &v, float &w,*/ Vector3& normal, float& t)
|
||||
{
|
||||
@@ -34,7 +34,7 @@ int Intersect::IntersectSegmentTriangleCCW(
|
||||
float d = qp.Dot(normal);
|
||||
if (d <= 0.0f)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Compute intersection t value of pq with plane of triangle. A ray
|
||||
@@ -46,7 +46,7 @@ int Intersect::IntersectSegmentTriangleCCW(
|
||||
// range segment check t[0,1] (it this case [0,d])
|
||||
if (t < 0.0f || t > d)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Compute barycentric coordinate components and test if within bounds
|
||||
@@ -54,12 +54,12 @@ int Intersect::IntersectSegmentTriangleCCW(
|
||||
v = ac.Dot(e);
|
||||
if (v < 0.0f || v > d)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
w = -ab.Dot(e);
|
||||
if (w < 0.0f || v + w > d)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Segment/ray intersects triangle. Perform delayed division and
|
||||
@@ -72,14 +72,14 @@ int Intersect::IntersectSegmentTriangleCCW(
|
||||
|
||||
normal.Normalize();
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
// IntersectSegmentTriangle
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int
|
||||
bool
|
||||
Intersect::IntersectSegmentTriangle(
|
||||
const Vector3& p, const Vector3& q, const Vector3& a, const Vector3& b, const Vector3& c,
|
||||
/*float &u, float &v, float &w,*/ Vector3& normal, float& t)
|
||||
@@ -111,7 +111,7 @@ Intersect::IntersectSegmentTriangle(
|
||||
// so either have a parallel ray or our normal is flipped
|
||||
if (d >= -Constants::FloatEpsilon)
|
||||
{
|
||||
return 0; // parallel
|
||||
return false; // parallel
|
||||
}
|
||||
d = -d;
|
||||
e = ap.Cross(qp);
|
||||
@@ -125,19 +125,19 @@ Intersect::IntersectSegmentTriangle(
|
||||
// range segment check t[0,1] (it this case [0,d])
|
||||
if (t < 0.0f || t > d)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Compute barycentric coordinate components and test if within bounds
|
||||
v = ac.Dot(e);
|
||||
if (v < 0.0f || v > d)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
w = -ab.Dot(e);
|
||||
if (w < 0.0f || v + w > d)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Segment/ray intersects the triangle. Perform delayed division and
|
||||
@@ -150,14 +150,14 @@ Intersect::IntersectSegmentTriangle(
|
||||
|
||||
normal.Normalize();
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
// TestSegmentAABBOrigin
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int
|
||||
bool
|
||||
AZ::Intersect::TestSegmentAABBOrigin(const Vector3& midPoint, const Vector3& halfVector, const Vector3& aabbExtends)
|
||||
{
|
||||
const Vector3 EPSILON(0.001f); // \todo this is slow load move to a const
|
||||
@@ -168,7 +168,7 @@ AZ::Intersect::TestSegmentAABBOrigin(const Vector3& midPoint, const Vector3& hal
|
||||
// Try world coordinate axes as separating axes
|
||||
if (!absMidpoint.IsLessEqualThan(absHalfMidpoint))
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add in an epsilon term to counteract arithmetic errors when segment is
|
||||
@@ -188,11 +188,11 @@ AZ::Intersect::TestSegmentAABBOrigin(const Vector3& midPoint, const Vector3& hal
|
||||
Vector3 ead(ey * adz + ez * ady, ex * adz + ez * adx, ex * ady + ey * adx);
|
||||
if (!absMDCross.IsLessEqualThan(ead))
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// No separating axis found; segment must be overlapping AABB
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@ AZ::Intersect::TestSegmentAABBOrigin(const Vector3& midPoint, const Vector3& hal
|
||||
// IntersectRayAABB
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int
|
||||
RayAABBIsectTypes
|
||||
AZ::Intersect::IntersectRayAABB(
|
||||
const Vector3& rayStart, const Vector3& dir, const Vector3& dirRCP, const Aabb& aabb,
|
||||
float& tStart, float& tEnd, Vector3& startNormal /*, Vector3& inter*/)
|
||||
@@ -356,7 +356,7 @@ AZ::Intersect::IntersectRayAABB(
|
||||
// IntersectRayAABB2
|
||||
// [2/18/2011]
|
||||
//=========================================================================
|
||||
int
|
||||
RayAABBIsectTypes
|
||||
AZ::Intersect::IntersectRayAABB2(const Vector3& rayStart, const Vector3& dirRCP, const Aabb& aabb, float& start, float& end)
|
||||
{
|
||||
float tmin, tmax, tymin, tymax, tzmin, tzmax;
|
||||
@@ -408,7 +408,7 @@ AZ::Intersect::IntersectRayAABB2(const Vector3& rayStart, const Vector3& dirRCP,
|
||||
return ISECT_RAY_AABB_ISECT;
|
||||
}
|
||||
|
||||
int AZ::Intersect::IntersectRayDisk(
|
||||
bool AZ::Intersect::IntersectRayDisk(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& diskCenter, const float diskRadius, const Vector3& diskNormal, float& t)
|
||||
{
|
||||
// First intersect with the plane of the disk
|
||||
@@ -421,10 +421,10 @@ int AZ::Intersect::IntersectRayDisk(
|
||||
if (pointOnPlane.GetDistance(diskCenter) < diskRadius)
|
||||
{
|
||||
t = planeIntersectionDistance;
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Reference: Real-Time Collision Detection - 5.3.7 Intersecting Ray or Segment Against Cylinder, and the book's errata.
|
||||
@@ -1012,7 +1012,7 @@ int AZ::Intersect::IntersectRayQuad(
|
||||
}
|
||||
|
||||
// reference: Real-Time Collision Detection, 5.3.3 Intersecting Ray or Segment Against Box
|
||||
int AZ::Intersect::IntersectRayBox(
|
||||
bool AZ::Intersect::IntersectRayBox(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& boxCenter, const Vector3& boxAxis1,
|
||||
const Vector3& boxAxis2, const Vector3& boxAxis3, float boxHalfExtent1, float boxHalfExtent2, float boxHalfExtent3, float& t)
|
||||
{
|
||||
@@ -1044,7 +1044,7 @@ int AZ::Intersect::IntersectRayBox(
|
||||
// If the ray is parallel to the slab and the ray origin is outside, return no intersection.
|
||||
if (tp < 0.0f || tn < 0.0f)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1065,7 +1065,7 @@ int AZ::Intersect::IntersectRayBox(
|
||||
tmax = AZ::GetMin(tmax, t2);
|
||||
if (tmin > tmax)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1085,7 +1085,7 @@ int AZ::Intersect::IntersectRayBox(
|
||||
// If the ray is parallel to the slab and the ray origin is outside, return no intersection.
|
||||
if (tp < 0.0f || tn < 0.0f)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1106,7 +1106,7 @@ int AZ::Intersect::IntersectRayBox(
|
||||
tmax = AZ::GetMin(tmax, t2);
|
||||
if (tmin > tmax)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1126,7 +1126,7 @@ int AZ::Intersect::IntersectRayBox(
|
||||
// If the ray is parallel to the slab and the ray origin is outside, return no intersection.
|
||||
if (tp < 0.0f || tn < 0.0f)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1147,15 +1147,15 @@ int AZ::Intersect::IntersectRayBox(
|
||||
tmax = AZ::GetMin(tmax, t2);
|
||||
if (tmin > tmax)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
t = (isRayOriginInsideBox ? tmax : tmin);
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
int AZ::Intersect::IntersectRayObb(const Vector3& rayOrigin, const Vector3& rayDir, const Obb& obb, float& t)
|
||||
bool AZ::Intersect::IntersectRayObb(const Vector3& rayOrigin, const Vector3& rayDir, const Obb& obb, float& t)
|
||||
{
|
||||
return AZ::Intersect::IntersectRayBox(rayOrigin, rayDir, obb.GetPosition(),
|
||||
obb.GetAxisX(), obb.GetAxisY(), obb.GetAxisZ(),
|
||||
@@ -1166,7 +1166,7 @@ int AZ::Intersect::IntersectRayObb(const Vector3& rayOrigin, const Vector3& rayD
|
||||
// IntersectSegmentCylinder
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int
|
||||
CylinderIsectTypes
|
||||
AZ::Intersect::IntersectSegmentCylinder(
|
||||
const Vector3& sa, const Vector3& dir, const Vector3& p, const Vector3& q, const float r, float& t)
|
||||
{
|
||||
@@ -1225,7 +1225,7 @@ AZ::Intersect::IntersectSegmentCylinder(
|
||||
return RR_ISECT_RAY_CYL_NONE; // No real roots; no intersection
|
||||
}
|
||||
t = (-b - Sqrt(discr)) / a;
|
||||
int result = RR_ISECT_RAY_CYL_PQ; // default along the PQ segment
|
||||
CylinderIsectTypes result = RR_ISECT_RAY_CYL_PQ; // default along the PQ segment
|
||||
|
||||
if (md + t * nd < 0.0f)
|
||||
{
|
||||
@@ -1294,7 +1294,7 @@ AZ::Intersect::IntersectSegmentCylinder(
|
||||
// IntersectSegmentCapsule
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int
|
||||
CapsuleIsectTypes
|
||||
AZ::Intersect::IntersectSegmentCapsule(const Vector3& sa, const Vector3& dir, const Vector3& p, const Vector3& q, const float r, float& t)
|
||||
{
|
||||
int result = IntersectSegmentCylinder(sa, dir, p, q, r, t);
|
||||
@@ -1361,13 +1361,13 @@ AZ::Intersect::IntersectSegmentCapsule(const Vector3& sa, const Vector3& dir, co
|
||||
// IntersectSegmentPolyhedron
|
||||
// [10/21/2009]
|
||||
//=========================================================================
|
||||
int
|
||||
bool
|
||||
AZ::Intersect::IntersectSegmentPolyhedron(
|
||||
const Vector3& sa, const Vector3& sBA, const Plane p[], int numPlanes,
|
||||
const Vector3& sa, const Vector3& dir, const Plane p[], int numPlanes,
|
||||
float& tfirst, float& tlast, int& iFirstPlane, int& iLastPlane)
|
||||
{
|
||||
// Compute direction vector for the segment
|
||||
Vector3 d = /*b - a*/ sBA;
|
||||
Vector3 d = /*b - a*/ dir;
|
||||
// Set initial interval to being the whole segment. For a ray, tlast should be
|
||||
// set to +RR_FLT_MAX. For a line, additionally tfirst should be set to -RR_FLT_MAX
|
||||
tfirst = 0.0f;
|
||||
@@ -1388,7 +1388,7 @@ AZ::Intersect::IntersectSegmentPolyhedron(
|
||||
// If so, return "no intersection" if segment lies outside plane
|
||||
if (dist < 0.0f)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1417,7 +1417,7 @@ AZ::Intersect::IntersectSegmentPolyhedron(
|
||||
// Exit with "no intersection" if intersection becomes empty
|
||||
if (tfirst > tlast)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1425,11 +1425,11 @@ AZ::Intersect::IntersectSegmentPolyhedron(
|
||||
//DBG_Assert(iFirstPlane!=-1&&iLastPlane!=-1,("We have some bad border case to have only one plane, fix this function!"));
|
||||
if (iFirstPlane == -1 && iLastPlane == -1)
|
||||
{
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// A nonzero logical intersection, so the segment intersects the polyhedron
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
@@ -1442,7 +1442,7 @@ AZ::Intersect::ClosestSegmentSegment(
|
||||
const Vector3& segment2Start, const Vector3& segment2End,
|
||||
float& segment1Proportion, float& segment2Proportion,
|
||||
Vector3& closestPointSegment1, Vector3& closestPointSegment2,
|
||||
float epsilon /*= 1e-4f*/ )
|
||||
float epsilon)
|
||||
{
|
||||
const Vector3 segment1 = segment1End - segment1Start;
|
||||
const Vector3 segment2 = segment2End - segment2Start;
|
||||
|
||||
@@ -5,363 +5,398 @@
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
#ifndef AZCORE_MATH_SEGMENT_INTERSECTION_H
|
||||
#define AZCORE_MATH_SEGMENT_INTERSECTION_H
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/Math/Vector3.h>
|
||||
#include <AzCore/Math/Aabb.h>
|
||||
#include <AzCore/Math/Obb.h>
|
||||
#include <AzCore/Math/Plane.h>
|
||||
|
||||
/// \file isect_segment.h
|
||||
#include <AzCore/Math/Vector3.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
namespace Intersect
|
||||
{
|
||||
//! LineToPointDistanceTime computes the time of the shortest distance from point 'p' to segment (s1,s2).
|
||||
//! To calculate the point of intersection:
|
||||
//! P = s1 + u (s2 - s1)
|
||||
//! @param s1 segment start point
|
||||
//! @param s2 segment end point
|
||||
//! @param p point to find the closest time to.
|
||||
//! @return time (on the segment) for the shortest distance from 'p' to (s1,s2) [0.0f (s1),1.0f (s2)]
|
||||
inline float LineToPointDistanceTime(const Vector3& s1, const Vector3& s21, const Vector3& p)
|
||||
{
|
||||
// so u = (p.x - s1.x)*(s2.x - s1.x) + (p.y - s1.y)*(s2.y - s1.y) + (p.z-s1.z)*(s2.z-s1.z) / |s2-s1|^2
|
||||
return s21.Dot(p - s1) / s21.Dot(s21);
|
||||
}
|
||||
//! To calculate the point of intersection: P = s1 + u (s2 - s1)
|
||||
//! @param s1 Segment start point.
|
||||
//! @param s2 Segment end point.
|
||||
//! @param p Point to find the closest time to.
|
||||
//! @return Time (on the segment) for the shortest distance from 'p' to (s1,s2) [0.0f (s1),1.0f (s2)]
|
||||
float LineToPointDistanceTime(const Vector3& s1, const Vector3& s21, const Vector3& p);
|
||||
|
||||
//! LineToPointDistance computes the closest point to 'p' from a segment (s1,s2).
|
||||
//! @param s1 segment start point
|
||||
//! @param s2 segment end point
|
||||
//! @param p point to find the closest time to.
|
||||
//! @param u time (on the segment) for the shortest distance from 'p' to (s1,s2) [0.0f (s1),1.0f (s2)]
|
||||
//! @return the closest point
|
||||
inline Vector3 LineToPointDistance(const Vector3& s1, const Vector3& s2, const Vector3& p, float& u)
|
||||
{
|
||||
const Vector3 s21 = s2 - s1;
|
||||
// we assume seg1 and seg2 are NOT coincident
|
||||
AZ_MATH_ASSERT(!s21.IsClose(Vector3(0.0f), 1e-4f), "OK we agreed that we will pass valid segments! (s1 != s2)");
|
||||
|
||||
u = LineToPointDistanceTime(s1, s21, p);
|
||||
|
||||
return s1 + u * s21;
|
||||
}
|
||||
//! @param s1 Segment start point
|
||||
//! @param s2 Segment end point
|
||||
//! @param p Point to find the closest time to.
|
||||
//! @param u Time (on the segment) for the shortest distance from 'p' to (s1,s2) [0.0f (s1),1.0f (s2)]
|
||||
//! @return The closest point
|
||||
Vector3 LineToPointDistance(const Vector3& s1, const Vector3& s2, const Vector3& p, float& u);
|
||||
|
||||
//! Given segment pq and triangle abc (CCW), returns whether segment intersects
|
||||
//! triangle and if so, also returns the barycentric coordinates (u,v,w)
|
||||
//! of the intersection point.
|
||||
//! @param p segment start point
|
||||
//! @param q segment end point
|
||||
//! @param a triangle point 1
|
||||
//! @param b triangle point 2
|
||||
//! @param c triangle point 3
|
||||
//! @param normal at the intersection point.
|
||||
//! @param t time of intersection along the segment [0.0 (p), 1.0 (q)]
|
||||
//! @return 1 if the segment intersects the triangle otherwise 0
|
||||
int IntersectSegmentTriangleCCW(
|
||||
const Vector3& p, const Vector3& q, const Vector3& a, const Vector3& b, const Vector3& c,
|
||||
/*float &u, float &v, float &w,*/ Vector3& normal, float& t);
|
||||
//! @param p Segment start point.
|
||||
//! @param q Segment end point.
|
||||
//! @param a Triangle point 1.
|
||||
//! @param b Triangle point 2.
|
||||
//! @param c Triangle point 3.
|
||||
//! @param normal At the intersection point.
|
||||
//! @param t Time of intersection along the segment [0.0 (p), 1.0 (q)].
|
||||
//! @return true if the segments intersects the triangle otherwise false.
|
||||
bool IntersectSegmentTriangleCCW(
|
||||
const Vector3& p, const Vector3& q, const Vector3& a, const Vector3& b, const Vector3& c, Vector3& normal, float& t);
|
||||
|
||||
//! Same as \ref IntersectSegmentTriangleCCW without respecting the triangle (a,b,c) vertex order (double sided).
|
||||
int IntersectSegmentTriangle(
|
||||
const Vector3& p, const Vector3& q, const Vector3& a, const Vector3& b, const Vector3& c,
|
||||
/*float &u, float &v, float &w,*/ Vector3& normal, float& t);
|
||||
//! @param p Segment start point.
|
||||
//! @param q Segment end point.
|
||||
//! @param a Triangle point 1.
|
||||
//! @param b Triangle point 2.
|
||||
//! @param c Triangle point 3.
|
||||
//! @param normal At the intersection point.
|
||||
//! @param t Time of intersection along the segment [0.0 (p), 1.0 (q)].
|
||||
//! @return True if the segments intersects the triangle otherwise false.
|
||||
bool IntersectSegmentTriangle(
|
||||
const Vector3& p, const Vector3& q, const Vector3& a, const Vector3& b, const Vector3& c, Vector3& normal, float& t);
|
||||
|
||||
//! Ray aabb intersection result types.
|
||||
enum RayAABBIsectTypes
|
||||
enum RayAABBIsectTypes : AZ::s32
|
||||
{
|
||||
ISECT_RAY_AABB_NONE = 0, ///< no intersection
|
||||
ISECT_RAY_AABB_SA_INSIDE, ///< the ray starts inside the aabb
|
||||
ISECT_RAY_AABB_ISECT, ///< intersects along the PQ segment
|
||||
ISECT_RAY_AABB_NONE = 0, ///< no intersection
|
||||
ISECT_RAY_AABB_SA_INSIDE, ///< the ray starts inside the aabb
|
||||
ISECT_RAY_AABB_ISECT, ///< intersects along the PQ segment
|
||||
};
|
||||
|
||||
//! Intersect ray R(t) = rayStart + t*d against AABB a. When intersecting,
|
||||
//! return intersection distance tmin and point q of intersection.
|
||||
//! @param rayStart ray starting point
|
||||
//! @param dir ray direction and length (dir = rayEnd - rayStart)
|
||||
//! @param dirRCP 1/dir (reciprocal direction - we cache this result very often so we don't need to compute it multiple times, otherwise just use dir.GetReciprocal())
|
||||
//! @param rayStart Ray starting point
|
||||
//! @param dir Ray direction and length (dir = rayEnd - rayStart)
|
||||
//! @param dirRCP 1/dir (reciprocal direction - we cache this result very often so we don't need to compute it multiple times,
|
||||
//! otherwise just use dir.GetReciprocal())
|
||||
//! @param aabb Axis aligned bounding box to intersect against
|
||||
//! @param tStart time on ray of the first intersection [0,1] or 0 if the ray starts inside the aabb - check the return value
|
||||
//! @param tEnd time of the of the second intersection [0,1] (it can be > 1 if intersects after the rayEnd)
|
||||
//! @param startNormal normal at the start point.
|
||||
//! @param tStart Time on ray of the first intersection [0,1] or 0 if the ray starts inside the aabb - check the return value
|
||||
//! @param tEnd Time of the of the second intersection [0,1] (it can be > 1 if intersects after the rayEnd)
|
||||
//! @param startNormal Normal at the start point.
|
||||
//! @return \ref RayAABBIsectTypes
|
||||
int IntersectRayAABB(
|
||||
const Vector3& rayStart, const Vector3& dir, const Vector3& dirRCP, const Aabb& aabb,
|
||||
float& tStart, float& tEnd, Vector3& startNormal /*, Vector3& inter*/);
|
||||
RayAABBIsectTypes IntersectRayAABB(
|
||||
const Vector3& rayStart,
|
||||
const Vector3& dir,
|
||||
const Vector3& dirRCP,
|
||||
const Aabb& aabb,
|
||||
float& tStart,
|
||||
float& tEnd,
|
||||
Vector3& startNormal);
|
||||
|
||||
//! Intersect ray against AABB.
|
||||
//! @param rayStart ray starting point.
|
||||
//! @param dir ray reciprocal direction.
|
||||
//! @param rayStart Ray starting point.
|
||||
//! @param dir Ray reciprocal direction.
|
||||
//! @param aabb Axis aligned bounding box to intersect against.
|
||||
//! @param start length on ray of the first intersection.
|
||||
//! @param end length of the of the second intersection.
|
||||
//! @return \ref RayAABBIsectTypes In this faster version than IntersectRayAABB we return only ISECT_RAY_AABB_NONE and ISECT_RAY_AABB_ISECT.
|
||||
//! You can check yourself for that case.
|
||||
int IntersectRayAABB2(
|
||||
const Vector3& rayStart, const Vector3& dirRCP, const Aabb& aabb,
|
||||
float& start, float& end);
|
||||
//! @param start Length on ray of the first intersection.
|
||||
//! @param end Length of the of the second intersection.
|
||||
//! @return \ref RayAABBIsectTypes In this faster version than IntersectRayAABB we return only ISECT_RAY_AABB_NONE and
|
||||
//! ISECT_RAY_AABB_ISECT. You can check yourself for that case.
|
||||
RayAABBIsectTypes IntersectRayAABB2(const Vector3& rayStart, const Vector3& dirRCP, const Aabb& aabb, float& start, float& end);
|
||||
|
||||
//! Clip a ray to an aabb. return true if ray was clipped. The ray
|
||||
//! can be inside so don't use the result if the ray intersect the box.
|
||||
inline int ClipRayWithAabb(
|
||||
const Aabb& aabb, Vector3& rayStart, Vector3& rayEnd, float& tClipStart, float& tClipEnd)
|
||||
{
|
||||
Vector3 startNormal;
|
||||
float tStart, tEnd;
|
||||
Vector3 dirLen = rayEnd - rayStart;
|
||||
if (IntersectRayAABB(rayStart, dirLen, dirLen.GetReciprocal(), aabb, tStart, tEnd, startNormal) != ISECT_RAY_AABB_NONE)
|
||||
{
|
||||
// clip the ray with the box
|
||||
if (tStart > 0.0f)
|
||||
{
|
||||
rayStart = rayStart + tStart * dirLen;
|
||||
tClipStart = tStart;
|
||||
}
|
||||
if (tEnd < 1.0f)
|
||||
{
|
||||
rayEnd = rayStart + tEnd * dirLen;
|
||||
tClipEnd = tEnd;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! @param aabb Bounds to test against.
|
||||
//! @param rayStart The start of the ray.
|
||||
//! @param rayEnd The end of the ray.
|
||||
//! @param[out] tClipStart The proportion where the ray enters the \ref Aabb.
|
||||
//! @param[out] tClipEnd The proportion where the ray exits the \ref Aabb.
|
||||
//! @return True if the ray was clipped, otherwise false.
|
||||
bool ClipRayWithAabb(const Aabb& aabb, Vector3& rayStart, Vector3& rayEnd, float& tClipStart, float& tClipEnd);
|
||||
|
||||
//! Test segment and aabb where the segment is defined by midpoint
|
||||
//! midPoint = (p1-p0) * 0.5f and half vector halfVector = p1 - midPoint.
|
||||
//! the aabb is at the origin and defined by half extents only.
|
||||
//! @return 1 if the intersect, otherwise 0.
|
||||
int TestSegmentAABBOrigin(const Vector3& midPoint, const Vector3& halfVector, const Vector3& aabbExtends);
|
||||
//! @param midPoint Midpoint of a line segment.
|
||||
//! @param halfVector Half vector of an aabb.
|
||||
//! @param aabbExtends The extends of a bounded box.
|
||||
//! @return True if the segment and AABB intersect, otherwise false
|
||||
bool TestSegmentAABBOrigin(const Vector3& midPoint, const Vector3& halfVector, const Vector3& aabbExtends);
|
||||
|
||||
//! Test if segment specified by points p0 and p1 intersects AABB. \ref TestSegmentAABBOrigin
|
||||
//! @return 1 if the segment and AABB intersect, otherwise 0.
|
||||
inline int TestSegmentAABB(const Vector3& p0, const Vector3& p1, const Aabb& aabb)
|
||||
{
|
||||
Vector3 e = aabb.GetExtents();
|
||||
Vector3 d = p1 - p0;
|
||||
Vector3 m = p0 + p1 - aabb.GetMin() - aabb.GetMax();
|
||||
|
||||
return TestSegmentAABBOrigin(m, d, e);
|
||||
}
|
||||
//! Test if segment specified by points p0 and p1 intersects AABB. \ref TestSegmentAABBOrigin.
|
||||
//! @param p0 Segment start point.
|
||||
//! @param p1 Segment end point.
|
||||
//! @param aabb Bounded box to test against.
|
||||
//! @return True if the segment and AABB intersect, otherwise false.
|
||||
bool TestSegmentAABB(const Vector3& p0, const Vector3& p1, const Aabb& aabb);
|
||||
|
||||
//! Ray sphere intersection result types.
|
||||
enum SphereIsectTypes
|
||||
enum SphereIsectTypes : AZ::s32
|
||||
{
|
||||
ISECT_RAY_SPHERE_SA_INSIDE = -1, // the ray starts inside the cylinder
|
||||
ISECT_RAY_SPHERE_NONE, // no intersection
|
||||
ISECT_RAY_SPHERE_ISECT, // along the PQ segment
|
||||
ISECT_RAY_SPHERE_SA_INSIDE = -1, //!< The ray starts inside the cylinder
|
||||
ISECT_RAY_SPHERE_NONE, //!< No intersection
|
||||
ISECT_RAY_SPHERE_ISECT, //!< Along the PQ segment
|
||||
};
|
||||
|
||||
//! IntersectRaySphereOrigin
|
||||
//! return time t>=0 but not limited, so if you check a segment make sure
|
||||
//! t <= segmentLen
|
||||
//! @param rayStart ray start point
|
||||
//! t <= segmentLen.
|
||||
//! @param rayStart ray start point.
|
||||
//! @param rayDirNormalized ray direction normalized.
|
||||
//! @param shereRadius sphere radius
|
||||
//! @param shereRadius Radius of sphere at origin.
|
||||
//! @param time of closest intersection [0,+INF] in relation to the normalized direction.
|
||||
//! @return \ref SphereIsectTypes
|
||||
AZ_INLINE int IntersectRaySphereOrigin(
|
||||
const Vector3& rayStart, const Vector3& rayDirNormalized,
|
||||
const float sphereRadius, float& t)
|
||||
{
|
||||
Vector3 m = rayStart;
|
||||
float b = m.Dot(rayDirNormalized);
|
||||
float c = m.Dot(m) - sphereRadius * sphereRadius;
|
||||
|
||||
// Exit if r's origin outside s (c > 0)and r pointing away from s (b > 0)
|
||||
if (c > 0.0f && b > 0.0f)
|
||||
{
|
||||
return ISECT_RAY_SPHERE_NONE;
|
||||
}
|
||||
float discr = b * b - c;
|
||||
// A negative discriminant corresponds to ray missing sphere
|
||||
if (discr < 0.0f)
|
||||
{
|
||||
return ISECT_RAY_SPHERE_NONE;
|
||||
}
|
||||
|
||||
// Ray now found to intersect sphere, compute smallest t value of intersection
|
||||
t = -b - Sqrt(discr);
|
||||
|
||||
// If t is negative, ray started inside sphere so clamp t to zero
|
||||
if (t < 0.0f)
|
||||
{
|
||||
// t = 0.0f;
|
||||
return ISECT_RAY_SPHERE_SA_INSIDE; // no hit if inside
|
||||
}
|
||||
//q = p + t * d;
|
||||
return ISECT_RAY_SPHERE_ISECT;
|
||||
}
|
||||
//! @return \ref SphereIsectTypes.
|
||||
SphereIsectTypes IntersectRaySphereOrigin(
|
||||
const Vector3& rayStart, const Vector3& rayDirNormalized, const float sphereRadius, float& t);
|
||||
|
||||
//! Intersect ray (rayStart,rayDirNormalized) and sphere (sphereCenter,sphereRadius) \ref IntersectRaySphereOrigin
|
||||
inline int IntersectRaySphere(
|
||||
const Vector3& rayStart, const Vector3& rayDirNormalized, const Vector3& sphereCenter, const float sphereRadius, float& t)
|
||||
{
|
||||
return IntersectRaySphereOrigin(rayStart - sphereCenter, rayDirNormalized, sphereRadius, t);
|
||||
}
|
||||
//! @param rayStart The start of the ray.
|
||||
//! @param rayDirNormalized The direction of the ray normalized.
|
||||
//! @param sphereCenter The center of the sphere.
|
||||
//! @param sphereRadius Radius of the sphere.
|
||||
//! @param[out] t Coefficient in the ray's explicit equation from which an
|
||||
//! intersecting point is calculated as "rayOrigin + t1 * rayDir".
|
||||
//! @return SphereIsectTypes
|
||||
SphereIsectTypes IntersectRaySphere(
|
||||
const Vector3& rayStart, const Vector3& rayDirNormalized, const Vector3& sphereCenter, const float sphereRadius, float& t);
|
||||
|
||||
//! @param rayOrigin The origin of the ray to test.
|
||||
//! @param rayDir The direction of the ray to test. It has to be unit length.
|
||||
//! @param diskCenter Center point of the disk
|
||||
//! @param diskRadius Radius of the disk
|
||||
//! @param diskNormal A normal perpendicular to the disk
|
||||
//! @param[out] t If returning 1 (indicating a hit), this contains distance from rayOrigin along the normalized rayDir that the hit occured at.
|
||||
//! @return The number of intersecting points.
|
||||
int IntersectRayDisk(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& diskCenter, const float diskRadius, const AZ::Vector3& diskNormal, float& t);
|
||||
//! Intersect ray (rayStarty, rayDirNormalized) and disk (center, radius, normal)
|
||||
//! @param rayOrigin The origin of the ray to test.
|
||||
//! @param rayDir The direction of the ray to test. It has to be unit length.
|
||||
//! @param diskCenter Center point of the disk.
|
||||
//! @param diskRadius Radius of the disk.
|
||||
//! @param diskNormal A normal perpendicular to the disk.
|
||||
//! @param[out] t If returning 1 (indicating a hit), this contains distance from rayOrigin along the normalized rayDir
|
||||
//! that the hit occured at.
|
||||
//! @return False if not interesecting and true if intersecting
|
||||
bool IntersectRayDisk(
|
||||
const Vector3& rayOrigin,
|
||||
const Vector3& rayDir,
|
||||
const Vector3& diskCenter,
|
||||
const float diskRadius,
|
||||
const AZ::Vector3& diskNormal,
|
||||
float& t);
|
||||
|
||||
//! If there is only one intersecting point, the coefficient is stored in \ref t1.
|
||||
//! @param rayOrigin The origin of the ray to test.
|
||||
//! @param rayDir The direction of the ray to test. It has to be unit length.
|
||||
//! @param cylinderEnd1 The center of the circle on one end of the cylinder.
|
||||
//! @param cylinderDir The direction pointing from \ref cylinderEnd1 to the other end of the cylinder. It has to be unit length.
|
||||
//! @param cylinderHeight The distance between two centers of the circles on two ends of the cylinder respectively.
|
||||
//! @param[out] t1 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t1 * rayDir".
|
||||
//! @param[out] t2 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t2 * rayDir".
|
||||
//! @return The number of intersecting points.
|
||||
//! @param rayOrigin The origin of the ray to test.
|
||||
//! @param rayDir The direction of the ray to test. It has to be unit length.
|
||||
//! @param cylinderEnd1 The center of the circle on one end of the cylinder.
|
||||
//! @param cylinderDir The direction pointing from \ref cylinderEnd1 to the other end of the cylinder. It has to be unit length.
|
||||
//! @param cylinderHeight The distance between two centers of the circles on two ends of the cylinder respectively.
|
||||
//! @param[out] t1 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t1 * rayDir".
|
||||
//! @param[out] t2 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t2 * rayDir".
|
||||
//! @return The number of intersecting points.
|
||||
int IntersectRayCappedCylinder(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir,
|
||||
const Vector3& cylinderEnd1, const Vector3& cylinderDir, float cylinderHeight, float cylinderRadius,
|
||||
float& t1, float& t2);
|
||||
const Vector3& rayOrigin,
|
||||
const Vector3& rayDir,
|
||||
const Vector3& cylinderEnd1,
|
||||
const Vector3& cylinderDir,
|
||||
float cylinderHeight,
|
||||
float cylinderRadius,
|
||||
float& t1,
|
||||
float& t2);
|
||||
|
||||
//! If there is only one intersecting point, the coefficient is stored in \ref t1.
|
||||
//! @param rayOrigin The origin of the ray to test.
|
||||
//! @param rayDir The direction of the ray to test. It has to be unit length.
|
||||
//! @param coneApex The apex of the cone.
|
||||
//! @param coneDir The unit-length direction from the apex to the base.
|
||||
//! @param coneHeight The height of the cone, from the apex to the base.
|
||||
//! @param coneBaseRadius The radius of the cone base circle.
|
||||
//! @param[out] t1 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t1 * rayDir".
|
||||
//! @param[out] t2 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t2 * rayDir".
|
||||
//! @return The number of intersecting points.
|
||||
//! @param rayOrigin The origin of the ray to test.
|
||||
//! @param rayDir The direction of the ray to test. It has to be unit length.
|
||||
//! @param coneApex The apex of the cone.
|
||||
//! @param coneDir The unit-length direction from the apex to the base.
|
||||
//! @param coneHeight The height of the cone, from the apex to the base.
|
||||
//! @param coneBaseRadius The radius of the cone base circle.
|
||||
//! @param[out] t1 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t1 * rayDir".
|
||||
//! @param[out] t2 A possible coefficient in the ray's explicit equation from which an intersecting point is calculated as "rayOrigin + t2 * rayDir".
|
||||
//! @return The number of intersecting points.
|
||||
int IntersectRayCone(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir,
|
||||
const Vector3& coneApex, const Vector3& coneDir, float coneHeight, float coneBaseRadius,
|
||||
float& t1, float& t2);
|
||||
const Vector3& rayOrigin,
|
||||
const Vector3& rayDir,
|
||||
const Vector3& coneApex,
|
||||
const Vector3& coneDir,
|
||||
float coneHeight,
|
||||
float coneBaseRadius,
|
||||
float& t1,
|
||||
float& t2);
|
||||
|
||||
//! Test intersection between a ray and a plane in 3D.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param planePos A point on the plane to test intersection with.
|
||||
//! @param planeNormal The normal of the plane to test intersection with.
|
||||
//! @param t[out] The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return The number of intersection point.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param planePos A point on the plane to test intersection with.
|
||||
//! @param planeNormal The normal of the plane to test intersection with.
|
||||
//! @param[out] t The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return The number of intersection point.
|
||||
int IntersectRayPlane(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& planePos,
|
||||
const Vector3& planeNormal, float& t);
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& planePos, const Vector3& planeNormal, float& t);
|
||||
|
||||
//! Test intersection between a ray and a two-sided quadrilateral defined by four points in 3D.
|
||||
//! The four points that define the quadrilateral could be passed in with either counter clock-wise
|
||||
//! The four points that define the quadrilateral could be passed in with either counter clock-wise
|
||||
//! winding or clock-wise winding.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param vertexA One of the four points that define the quadrilateral.
|
||||
//! @param vertexB One of the four points that define the quadrilateral.
|
||||
//! @param vertexC One of the four points that define the quadrilateral.
|
||||
//! @param vertexD One of the four points that define the quadrilateral.
|
||||
//! @param t[out] The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return The number of intersection point.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param vertexA One of the four points that define the quadrilateral.
|
||||
//! @param vertexB One of the four points that define the quadrilateral.
|
||||
//! @param vertexC One of the four points that define the quadrilateral.
|
||||
//! @param vertexD One of the four points that define the quadrilateral.
|
||||
//! @param[out] t The coefficient in the ray's explicit equation from which the
|
||||
//! intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return The number of intersection point.
|
||||
int IntersectRayQuad(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& vertexA,
|
||||
const Vector3& vertexB, const Vector3& vertexC, const Vector3& vertexD, float& t);
|
||||
const Vector3& rayOrigin,
|
||||
const Vector3& rayDir,
|
||||
const Vector3& vertexA,
|
||||
const Vector3& vertexB,
|
||||
const Vector3& vertexC,
|
||||
const Vector3& vertexD,
|
||||
float& t);
|
||||
|
||||
//! Test intersection between a ray and an oriented box in 3D.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param boxCenter The position of the center of the box.
|
||||
//! @param boxAxis1 An axis along one dimension of the oriented box.
|
||||
//! @param boxAxis2 An axis along one dimension of the oriented box.
|
||||
//! @param boxAxis3 An axis along one dimension of the oriented box.
|
||||
//! @param boxHalfExtent1 The half extent of the box on the dimension of \ref boxAxis1.
|
||||
//! @param boxHalfExtent2 The half extent of the box on the dimension of \ref boxAxis2.
|
||||
//! @param boxHalfExtent3 The half extent of the box on the dimension of \ref boxAxis3.
|
||||
//! @param t[out] The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return 1 if there is an intersection, 0 otherwise.
|
||||
int IntersectRayBox(
|
||||
const Vector3& rayOrigin, const Vector3& rayDir, const Vector3& boxCenter, const Vector3& boxAxis1,
|
||||
const Vector3& boxAxis2, const Vector3& boxAxis3, float boxHalfExtent1, float boxHalfExtent2, float boxHalfExtent3,
|
||||
//! Test intersection between a ray and an oriented box in 3D.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param boxCenter The position of the center of the box.
|
||||
//! @param boxAxis1 An axis along one dimension of the oriented box.
|
||||
//! @param boxAxis2 An axis along one dimension of the oriented box.
|
||||
//! @param boxAxis3 An axis along one dimension of the oriented box.
|
||||
//! @param boxHalfExtent1 The half extent of the box on the dimension of \ref boxAxis1.
|
||||
//! @param boxHalfExtent2 The half extent of the box on the dimension of \ref boxAxis2.
|
||||
//! @param boxHalfExtent3 The half extent of the box on the dimension of \ref boxAxis3.
|
||||
//! @param[out] t The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return true if there is an intersection, false otherwise.
|
||||
bool IntersectRayBox(
|
||||
const Vector3& rayOrigin,
|
||||
const Vector3& rayDir,
|
||||
const Vector3& boxCenter,
|
||||
const Vector3& boxAxis1,
|
||||
const Vector3& boxAxis2,
|
||||
const Vector3& boxAxis3,
|
||||
float boxHalfExtent1,
|
||||
float boxHalfExtent2,
|
||||
float boxHalfExtent3,
|
||||
float& t);
|
||||
|
||||
//! Test intersection between a ray and an OBB.
|
||||
//! @param rayOrigin The origin of the ray to test intersection with.
|
||||
//! @param rayDir The direction of the ray to test intersection with.
|
||||
//! @param obb The OBB to test for intersection with the ray.
|
||||
//! @param t[out] The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return 1 if there is an intersection, 0 otherwise.
|
||||
int IntersectRayObb(const Vector3& rayOrigin, const Vector3& rayDir, const Obb& obb, float& t);
|
||||
//! @param[out] t The coefficient in the ray's explicit equation from which the intersecting point is calculated as "rayOrigin + t * rayDirection".
|
||||
//! @return True if there is an intersection, false otherwise.
|
||||
bool IntersectRayObb(const Vector3& rayOrigin, const Vector3& rayDir, const Obb& obb, float& t);
|
||||
|
||||
//! Ray cylinder intersection types.
|
||||
enum CylinderIsectTypes
|
||||
enum CylinderIsectTypes : AZ::s32
|
||||
{
|
||||
RR_ISECT_RAY_CYL_SA_INSIDE = -1, // the ray starts inside the cylinder
|
||||
RR_ISECT_RAY_CYL_NONE, // no intersection
|
||||
RR_ISECT_RAY_CYL_PQ, // along the PQ segment
|
||||
RR_ISECT_RAY_CYL_P_SIDE, // on the P side
|
||||
RR_ISECT_RAY_CYL_Q_SIDE, // on the Q side
|
||||
RR_ISECT_RAY_CYL_SA_INSIDE = -1, //!< the ray starts inside the cylinder
|
||||
RR_ISECT_RAY_CYL_NONE, //!< no intersection
|
||||
RR_ISECT_RAY_CYL_PQ, //!< along the PQ segment
|
||||
RR_ISECT_RAY_CYL_P_SIDE, //!< on the P side
|
||||
RR_ISECT_RAY_CYL_Q_SIDE, //!< on the Q side
|
||||
};
|
||||
|
||||
//! Reference: Real-Time Collision Detection - 5.3.7 Intersecting Ray or Segment Against Cylinder
|
||||
//! Intersect segment S(t)=sa+t(dir), 0<=t<=1 against cylinder specified by p, q and r.
|
||||
int IntersectSegmentCylinder(
|
||||
const Vector3& sa, const Vector3& dir, const Vector3& p, const Vector3& q,
|
||||
const float r, float& t);
|
||||
//! @param sa The initial point.
|
||||
//! @param dir Magnitude and direction for sa.
|
||||
//! @param p Center point of side 1 cylinder.
|
||||
//! @param q Center point of side 2 cylinder.
|
||||
//! @param r Radius of cylinder.
|
||||
//! @param[out] t Proporition along line segment.
|
||||
//! @return CylinderIsectTypes
|
||||
CylinderIsectTypes IntersectSegmentCylinder(
|
||||
const Vector3& sa, const Vector3& dir, const Vector3& p, const Vector3& q, const float r, float& t);
|
||||
|
||||
//! Capsule ray intersect types.
|
||||
enum CapsuleIsectTypes
|
||||
{
|
||||
ISECT_RAY_CAPSULE_SA_INSIDE = -1, // the ray starts inside the cylinder
|
||||
ISECT_RAY_CAPSULE_NONE, // no intersection
|
||||
ISECT_RAY_CAPSULE_PQ, // along the PQ segment
|
||||
ISECT_RAY_CAPSULE_P_SIDE, // on the P side
|
||||
ISECT_RAY_CAPSULE_Q_SIDE, // on the Q side
|
||||
ISECT_RAY_CAPSULE_SA_INSIDE = -1, //!< The ray starts inside the cylinder
|
||||
ISECT_RAY_CAPSULE_NONE, //!< No intersection
|
||||
ISECT_RAY_CAPSULE_PQ, //!< Along the PQ segment
|
||||
ISECT_RAY_CAPSULE_P_SIDE, //!< On the P side
|
||||
ISECT_RAY_CAPSULE_Q_SIDE, //!< On the Q side
|
||||
};
|
||||
|
||||
//! This is a quick implementation of segment capsule based on segment cylinder \ref IntersectSegmentCylinder
|
||||
//! segment sphere intersection. We can optimize it a lot once we fix the ray
|
||||
//! cylinder intersection.
|
||||
int IntersectSegmentCapsule(
|
||||
const Vector3& sa, const Vector3& dir, const Vector3& p,
|
||||
const Vector3& q, const float r, float& t);
|
||||
//! @param sa The beginning of the line segment.
|
||||
//! @param dir The direction and length of the segment.
|
||||
//! @param p Center point of side 1 capsule.
|
||||
//! @param q Center point of side 1 capsule.
|
||||
//! @param r The radius of the capsule.
|
||||
//! @param[out] t Proporition along line segment.
|
||||
//! @return CapsuleIsectTypes
|
||||
CapsuleIsectTypes IntersectSegmentCapsule(
|
||||
const Vector3& sa, const Vector3& dir, const Vector3& p, const Vector3& q, const float r, float& t);
|
||||
|
||||
//! Intersect segment S(t)=A+t(B-A), 0<=t<=1 against convex polyhedron specified
|
||||
//! by the n halfspaces defined by the planes p[]. On exit tfirst and tlast
|
||||
//! define the intersection, if any.
|
||||
int IntersectSegmentPolyhedron(
|
||||
const Vector3& sa, const Vector3& sBA, const Plane p[], int numPlanes,
|
||||
float& tfirst, float& tlast, int& iFirstPlane, int& iLastPlane);
|
||||
//! @param sa The beggining of the line segment.
|
||||
//! @param dir The direction and length of the segment.
|
||||
//! @param p Planes that compose a convex ponvex polyhedron.
|
||||
//! @param numPlanes number of planes.
|
||||
//! @param[out] tfirst Proportion along the line segment where the line enters.
|
||||
//! @param[out] tlast Proportion along the line segment where the line exits.
|
||||
//! @param[out] iFirstPlane The plane where the line enters.
|
||||
//! @param[out] iLastPlane The plane where the line exits.
|
||||
//! @return True if intersects else false.
|
||||
bool IntersectSegmentPolyhedron(
|
||||
const Vector3& sa,
|
||||
const Vector3& dir,
|
||||
const Plane p[],
|
||||
int numPlanes,
|
||||
float& tfirst,
|
||||
float& tlast,
|
||||
int& iFirstPlane,
|
||||
int& iLastPlane);
|
||||
|
||||
//! Calculate the line segment closestPointSegment1<->closestPointSegment2 that is the shortest route between
|
||||
//! two segments segment1Start<->segment1End and segment2Start<->segment2End. Also calculate the values of segment1Proportion and segment2Proportion where
|
||||
//! closestPointSegment1 = segment1Start + (segment1Proportion * (segment1End - segment1Start))
|
||||
//! two segments segment1Start<->segment1End and segment2Start<->segment2End. Also calculate the values of segment1Proportion and
|
||||
//! segment2Proportion where closestPointSegment1 = segment1Start + (segment1Proportion * (segment1End - segment1Start))
|
||||
//! closestPointSegment2 = segment2Start + (segment2Proportion * (segment2End - segment2Start))
|
||||
//! If segments are parallel returns a solution.
|
||||
//! @param segment1Start Start of segment 1.
|
||||
//! @param segment1End End of segment 1.
|
||||
//! @param segment2Start Start of segment 2.
|
||||
//! @param segment2End End of segment 2.
|
||||
//! @param[out] segment1Proportion The proporition along segment 1 [0..1]
|
||||
//! @param[out] segment2Proportion The proporition along segment 2 [0..1]
|
||||
//! @param[out] closestPointSegment1 Closest point on segment 1.
|
||||
//! @param[out] closestPointSegment2 Closest point on segment 2.
|
||||
//! @param epsilon The minimum square distance where a line segment can be treated as a single point.
|
||||
void ClosestSegmentSegment(
|
||||
const Vector3& segment1Start, const Vector3& segment1End,
|
||||
const Vector3& segment2Start, const Vector3& segment2End,
|
||||
float& segment1Proportion, float& segment2Proportion,
|
||||
Vector3& closestPointSegment1, Vector3& closestPointSegment2,
|
||||
const Vector3& segment1Start,
|
||||
const Vector3& segment1End,
|
||||
const Vector3& segment2Start,
|
||||
const Vector3& segment2End,
|
||||
float& segment1Proportion,
|
||||
float& segment2Proportion,
|
||||
Vector3& closestPointSegment1,
|
||||
Vector3& closestPointSegment2,
|
||||
float epsilon = 1e-4f);
|
||||
|
||||
//! Calculate the line segment closestPointSegment1<->closestPointSegment2 that is the shortest route between
|
||||
//! two segments segment1Start<->segment1End and segment2Start<->segment2End.
|
||||
//! If segments are parallel returns a solution.
|
||||
//! @param segment1Start Start of segment 1.
|
||||
//! @param segment1End End of segment 1.
|
||||
//! @param segment2Start Start of segment 2.
|
||||
//! @param segment2End End of segment 2.
|
||||
//! @param[out] closestPointSegment1 Closest point on segment 1.
|
||||
//! @param[out] closestPointSegment2 Closest point on segment 2.
|
||||
//! @param epsilon The minimum square distance where a line segment can be treated as a single point.
|
||||
void ClosestSegmentSegment(
|
||||
const Vector3& segment1Start, const Vector3& segment1End,
|
||||
const Vector3& segment2Start, const Vector3& segment2End,
|
||||
Vector3& closestPointSegment1, Vector3& closestPointSegment2,
|
||||
const Vector3& segment1Start,
|
||||
const Vector3& segment1End,
|
||||
const Vector3& segment2Start,
|
||||
const Vector3& segment2End,
|
||||
Vector3& closestPointSegment1,
|
||||
Vector3& closestPointSegment2,
|
||||
float epsilon = 1e-4f);
|
||||
|
||||
//! Calculate the point (closestPointOnSegment) that is the closest point on
|
||||
//! segment segmentStart/segmentEnd to point. Also calculate the value of proportion where
|
||||
//! closestPointOnSegment = segmentStart + (proportion * (segmentEnd - segmentStart))
|
||||
//! @param point The point to test
|
||||
//! @param segmentStart The start of the segment
|
||||
//! @param segmentEnd The end of the segment
|
||||
//! @param[out] proportion The proportion of the segment L(t) = (end - start) * t
|
||||
//! @param[out] closestPointOnSegment The point along the line segment
|
||||
void ClosestPointSegment(
|
||||
const Vector3& point, const Vector3& segmentStart, const Vector3& segmentEnd,
|
||||
float& proportion, Vector3& closestPointOnSegment);
|
||||
}
|
||||
}
|
||||
const Vector3& point,
|
||||
const Vector3& segmentStart,
|
||||
const Vector3& segmentEnd,
|
||||
float& proportion,
|
||||
Vector3& closestPointOnSegment);
|
||||
} // namespace Intersect
|
||||
} // namespace AZ
|
||||
|
||||
#endif // AZCORE_MATH_SEGMENT_INTERSECTION_H
|
||||
#pragma once
|
||||
#include <AzCore/Math/IntersectSegment.inl>
|
||||
|
||||
@@ -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
|
||||
*
|
||||
*/
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
namespace Intersect
|
||||
{
|
||||
AZ_MATH_INLINE bool ClipRayWithAabb(const Aabb& aabb, Vector3& rayStart, Vector3& rayEnd, float& tClipStart, float& tClipEnd)
|
||||
{
|
||||
Vector3 startNormal;
|
||||
float tStart, tEnd;
|
||||
Vector3 dirLen = rayEnd - rayStart;
|
||||
if (IntersectRayAABB(rayStart, dirLen, dirLen.GetReciprocal(), aabb, tStart, tEnd, startNormal) != ISECT_RAY_AABB_NONE)
|
||||
{
|
||||
// clip the ray with the box
|
||||
if (tStart > 0.0f)
|
||||
{
|
||||
rayStart = rayStart + tStart * dirLen;
|
||||
tClipStart = tStart;
|
||||
}
|
||||
if (tEnd < 1.0f)
|
||||
{
|
||||
rayEnd = rayStart + tEnd * dirLen;
|
||||
tClipEnd = tEnd;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
AZ_MATH_INLINE SphereIsectTypes
|
||||
IntersectRaySphereOrigin(const Vector3& rayStart, const Vector3& rayDirNormalized, const float sphereRadius, float& t)
|
||||
{
|
||||
Vector3 m = rayStart;
|
||||
float b = m.Dot(rayDirNormalized);
|
||||
float c = m.Dot(m) - sphereRadius * sphereRadius;
|
||||
|
||||
// Exit if r's origin outside s (c > 0)and r pointing away from s (b > 0)
|
||||
if (c > 0.0f && b > 0.0f)
|
||||
{
|
||||
return ISECT_RAY_SPHERE_NONE;
|
||||
}
|
||||
float discr = b * b - c;
|
||||
// A negative discriminant corresponds to ray missing sphere
|
||||
if (discr < 0.0f)
|
||||
{
|
||||
return ISECT_RAY_SPHERE_NONE;
|
||||
}
|
||||
|
||||
// Ray now found to intersect sphere, compute smallest t value of intersection
|
||||
t = -b - Sqrt(discr);
|
||||
|
||||
// If t is negative, ray started inside sphere so clamp t to zero
|
||||
if (t < 0.0f)
|
||||
{
|
||||
// t = 0.0f;
|
||||
return ISECT_RAY_SPHERE_SA_INSIDE; // no hit if inside
|
||||
}
|
||||
// q = p + t * d;
|
||||
return ISECT_RAY_SPHERE_ISECT;
|
||||
}
|
||||
|
||||
AZ_MATH_INLINE SphereIsectTypes IntersectRaySphere(const Vector3& rayStart, const Vector3& rayDirNormalized, const Vector3& sphereCenter, const float sphereRadius, float& t)
|
||||
{
|
||||
return IntersectRaySphereOrigin(rayStart - sphereCenter, rayDirNormalized, sphereRadius, t);
|
||||
}
|
||||
|
||||
AZ_MATH_INLINE Vector3 LineToPointDistance(const Vector3& s1, const Vector3& s2, const Vector3& p, float& u)
|
||||
{
|
||||
const Vector3 s21 = s2 - s1;
|
||||
// we assume seg1 and seg2 are NOT coincident
|
||||
AZ_MATH_ASSERT(!s21.IsClose(Vector3(0.0f), 1e-4f), "OK we agreed that we will pass valid segments! (s1 != s2)");
|
||||
|
||||
u = LineToPointDistanceTime(s1, s21, p);
|
||||
|
||||
return s1 + u * s21;
|
||||
}
|
||||
|
||||
AZ_MATH_INLINE float LineToPointDistanceTime(const Vector3& s1, const Vector3& s21, const Vector3& p)
|
||||
{
|
||||
// so u = (p.x - s1.x)*(s2.x - s1.x) + (p.y - s1.y)*(s2.y - s1.y) + (p.z-s1.z)*(s2.z-s1.z) / |s2-s1|^2
|
||||
return s21.Dot(p - s1) / s21.Dot(s21);
|
||||
}
|
||||
|
||||
AZ_MATH_INLINE bool TestSegmentAABB(const Vector3& p0, const Vector3& p1, const Aabb& aabb)
|
||||
{
|
||||
Vector3 e = aabb.GetExtents();
|
||||
Vector3 d = p1 - p0;
|
||||
Vector3 m = p0 + p1 - aabb.GetMin() - aabb.GetMax();
|
||||
|
||||
return TestSegmentAABBOrigin(m, d, e);
|
||||
}
|
||||
} // namespace Intersect
|
||||
} // namespace AZ
|
||||
@@ -34,7 +34,9 @@ namespace AZ
|
||||
friend IAllocator;
|
||||
friend class AllocatorBase;
|
||||
friend class Debug::AllocationRecords;
|
||||
friend class AZ::Internal::EnvironmentVariableHolder<AllocatorManager>;
|
||||
template<typename T, typename... Args> friend constexpr auto AZStd::construct_at(T*, Args&&... args)
|
||||
->AZStd::enable_if_t<AZStd::is_void_v<AZStd::void_t<decltype(new (AZStd::declval<void*>()) T(AZStd::forward<Args>(args)...))>>, T*>;
|
||||
template<typename T> constexpr friend void AZStd::destroy_at(T*);
|
||||
|
||||
public:
|
||||
typedef AZStd::function<void (IAllocator* allocator, size_t /*byteSize*/, size_t /*alignment*/, int/* flags*/, const char* /*name*/, const char* /*fileName*/, int lineNum /*=0*/)> OutOfMemoryCBType;
|
||||
|
||||
@@ -251,16 +251,15 @@ namespace AZ
|
||||
class EnvironmentVariableHolder
|
||||
: public EnvironmentVariableHolderBase
|
||||
{
|
||||
void ConstructImpl(const AZStd::true_type& /* AZStd::has_trivial_constructor<T> */)
|
||||
{
|
||||
memset(&m_value, 0, sizeof(T));
|
||||
}
|
||||
|
||||
template<class... Args>
|
||||
void ConstructImpl(const AZStd::false_type& /* AZStd::has_trivial_constructor<T> */, Args&&... args)
|
||||
void ConstructImpl(Args&&... args)
|
||||
{
|
||||
// Construction of non-trivial types is left up to the type's constructor.
|
||||
new(&m_value) T(AZStd::forward<Args>(args)...);
|
||||
// Use std::launder to ensure that the compiler treats the T* reinterpret_cast as a new object
|
||||
#if __cpp_lib_launder
|
||||
AZStd::construct_at(std::launder(reinterpret_cast<T*>(&m_value)), AZStd::forward<Args>(args)...);
|
||||
#else
|
||||
AZStd::construct_at(reinterpret_cast<T*>(&m_value), AZStd::forward<Args>(args)...);
|
||||
#endif
|
||||
}
|
||||
static void DestructDispatchNoLock(EnvironmentVariableHolderBase *base, DestroyTarget selfDestruct)
|
||||
{
|
||||
@@ -274,10 +273,12 @@ namespace AZ
|
||||
AZ_Assert(self->m_isConstructed, "Variable is not constructed. Please check your logic and guard if needed!");
|
||||
self->m_isConstructed = false;
|
||||
self->m_moduleOwner = nullptr;
|
||||
if constexpr(!AZStd::is_trivially_destructible_v<T>)
|
||||
{
|
||||
reinterpret_cast<T*>(&self->m_value)->~T();
|
||||
}
|
||||
// Use std::launder to ensure that the compiler treats the T* reinterpret_cast as a new object
|
||||
#if __cpp_lib_launder
|
||||
AZStd::destroy_at(std::launder(reinterpret_cast<T*>(&self->m_value)));
|
||||
#else
|
||||
AZStd::destroy_at(reinterpret_cast<T*>(&self->m_value));
|
||||
#endif
|
||||
}
|
||||
public:
|
||||
EnvironmentVariableHolder(u32 guid, bool isOwnershipTransfer, Environment::AllocatorInterface* allocator)
|
||||
@@ -303,24 +304,13 @@ namespace AZ
|
||||
UnregisterAndDestroy(DestructDispatchNoLock, moduleRelease);
|
||||
}
|
||||
|
||||
void Construct()
|
||||
{
|
||||
AZStd::lock_guard<AZStd::spin_mutex> lock(m_mutex);
|
||||
if (!m_isConstructed)
|
||||
{
|
||||
ConstructImpl(AZStd::is_trivially_constructible<T>{});
|
||||
m_isConstructed = true;
|
||||
m_moduleOwner = Environment::GetModuleId();
|
||||
}
|
||||
}
|
||||
|
||||
template <class... Args>
|
||||
void Construct(Args&&... args)
|
||||
{
|
||||
AZStd::lock_guard<AZStd::spin_mutex> lock(m_mutex);
|
||||
if (!m_isConstructed)
|
||||
{
|
||||
ConstructImpl(typename AZStd::false_type(), AZStd::forward<Args>(args)...);
|
||||
ConstructImpl(AZStd::forward<Args>(args)...);
|
||||
m_isConstructed = true;
|
||||
m_moduleOwner = Environment::GetModuleId();
|
||||
}
|
||||
@@ -333,7 +323,7 @@ namespace AZ
|
||||
}
|
||||
|
||||
// variable storage
|
||||
typename AZStd::aligned_storage<sizeof(T), AZStd::alignment_of<T>::value>::type m_value;
|
||||
AZStd::aligned_storage_for_t<T> m_value;
|
||||
static int s_moduleUseCount;
|
||||
};
|
||||
|
||||
@@ -468,6 +458,11 @@ namespace AZ
|
||||
Get() = value;
|
||||
}
|
||||
|
||||
void Set(T&& value)
|
||||
{
|
||||
Get() = AZStd::move(value);
|
||||
}
|
||||
|
||||
explicit operator bool() const
|
||||
{
|
||||
return IsValid();
|
||||
|
||||
@@ -42,7 +42,10 @@ namespace AZ
|
||||
AZ_Assert(m_useCount > 0, "m_useCount is already 0!");
|
||||
if (m_useCount.fetch_sub(1) == 1)
|
||||
{
|
||||
AZ::NameDictionary::Instance().TryReleaseName(hash);
|
||||
if (AZ::NameDictionary::IsReady())
|
||||
{
|
||||
AZ::NameDictionary::Instance().TryReleaseName(hash);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user