Merge branch 'development' into animation/rhhong/RenderUtilOptions

Signed-off-by: rhhong <rhhong@amazon.com>
This commit is contained in:
rhhong
2021-10-25 01:40:58 -07:00
1689 changed files with 43726 additions and 664968 deletions
-13
View File
@@ -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>
-2
View File
@@ -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"/>
-11
View File
@@ -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
-10
View File
@@ -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 -8
View File
@@ -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
-3
View File
@@ -1,4 +1 @@
ai_DebugDraw = 1
ai_DebugDrawNavigation = 1
ai_DrawPath all
ai_debugMNMAgentType MediumSizedCharacters
+1 -13
View File
@@ -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
-3
View File
@@ -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
-10
View File
@@ -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 -11
View File
@@ -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
-6
View File
@@ -1,6 +0,0 @@
r_ColorGradingChartsCache = 0
r_waterupdateFactor = 0
r_PostProcessHUD3DCache = 0
e_gsmcache = 0
r_ConditionalRendering = 0
e_gicache = 0
-77
View File
@@ -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
-60
View File
@@ -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
-15
View File
@@ -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
-24
View File
@@ -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
-24
View File
@@ -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
-69
View File
@@ -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
-90
View File
@@ -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
-93
View File
@@ -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
-91
View File
@@ -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
View File
@@ -1 +0,0 @@
sys_spec_Full = 7
-1
View File
@@ -1 +0,0 @@
sys_spec_Full = 5
-1
View File
@@ -1 +0,0 @@
sys_spec_Full = 6
@@ -1 +0,0 @@
sys_spec_Full = 8
-9
View File
@@ -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
-26
View File
@@ -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
-152
View File
@@ -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}"/>
@@ -54,6 +54,30 @@ def get_mesh_node_names(sceneGraph):
return meshDataList, paths
def add_material_component(entity_id):
# Create an override AZ::Render::EditorMaterialComponent
editor_material_component = azlmbr.entity.EntityUtilityBus(
azlmbr.bus.Broadcast,
"GetOrAddComponentByTypeName",
entity_id,
"EditorMaterialComponent")
# this fills out the material asset to a known product AZMaterial asset relative path
json_update = json.dumps({
"Controller": { "Configuration": { "materials": [
{
"Key": {},
"Value": { "MaterialAsset":{
"assetHint": "materials/basic_grey.azmaterial"
}}
}]
}}
});
result = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "UpdateComponentForEntity", entity_id, editor_material_component, json_update)
if not result:
raise RuntimeError("UpdateComponentForEntity for editor_material_component failed")
def update_manifest(scene):
import json
import uuid, os
@@ -74,6 +98,8 @@ def update_manifest(scene):
source_filename_only = os.path.basename(clean_filename)
created_entities = []
previous_entity_id = azlmbr.entity.InvalidEntityId
first_mesh = True
# Loop every mesh node in the scene
for activeMeshIndex in range(len(mesh_name_list)):
@@ -102,14 +128,38 @@ 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")
# an example of adding a material component to override the default material
if previous_entity_id is not None and first_mesh:
first_mesh = False
add_material_component(entity_id)
# 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 +197,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
@@ -54,4 +54,5 @@ set(ENABLED_GEMS
AWSMetrics
PrefabBuilder
AudioSystem
Profiler
)
@@ -204,7 +204,7 @@ namespace PythonCoverage
return coveringModuleOutputNames;
}
void PythonCoverageEditorSystemComponent::OnStartExecuteByFilenameAsTest(AZStd::string_view filename, AZStd::string_view testCase, [[maybe_unused]] const AZStd::vector<AZStd::string_view>& args)
void PythonCoverageEditorSystemComponent::OnStartExecuteByFilenameAsTest([[maybe_unused]]AZStd::string_view filename, AZStd::string_view testCase, [[maybe_unused]] const AZStd::vector<AZStd::string_view>& args)
{
if (m_coverageState == CoverageState::Disabled)
{
@@ -226,8 +226,7 @@ namespace PythonCoverage
return;
}
const AZStd::string scriptName = AZ::IO::Path(filename).Stem().Native();
const auto coverageFile = m_coverageDir / AZStd::string::format("%s.pycoverage", scriptName.c_str());
const auto coverageFile = m_coverageDir / AZStd::string::format("%.*s.pycoverage", AZ_STRING_ARG(testCase));
// If this is a different python script we clear the existing entity components and start afresh
if (m_coverageFile != coverageFile)
@@ -8,11 +8,14 @@
## Deploy CDK Applications
1. Go to the AWS IAM console and create an IAM role called o3de-automation-tests which adds your own account as as a trusted entity and uses the "AdministratorAccess" permissions policy.
2. Copy {engine_root}\scripts\build\Platform\Windows\deploy_cdk_applications.cmd to your engine root folder.
3. Open a new Command Prompt window at the engine root and set the following environment variables:
3. Open a new Command Prompt window at the engine root and set the following environment variables:
```
Set O3DE_AWS_PROJECT_NAME=AWSAUTO
Set O3DE_AWS_DEPLOY_REGION=us-east-1
Set O3DE_AWS_DEPLOY_ACCOUNT={your_aws_account_id}
Set ASSUME_ROLE_ARN=arn:aws:iam::{your_aws_account_id}:role/o3de-automation-tests
Set COMMIT_ID=HEAD
```
4. In the same Command Prompt window, Deploy the CDK applications for AWS gems by running deploy_cdk_applications.cmd.
## Run Automation Tests
@@ -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):
"""
@@ -240,64 +253,3 @@ class TestAtomEditorComponentsMain(object):
)
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_generic'])
@pytest.mark.system
class TestMaterialEditorBasicTests(object):
@pytest.fixture(autouse=True)
def setup_teardown(self, request, workspace, project):
def delete_files():
file_system.delete(
[
os.path.join(workspace.paths.project(), "Materials", "test_material.material"),
os.path.join(workspace.paths.project(), "Materials", "test_material_1.material"),
os.path.join(workspace.paths.project(), "Materials", "test_material_2.material"),
],
True,
True,
)
# Cleanup our newly created materials
delete_files()
def teardown():
# Cleanup our newly created materials
delete_files()
request.addfinalizer(teardown)
@pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
def test_MaterialEditorBasicTests(
self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
expected_lines = [
"Material opened: True",
"Test asset doesn't exist initially: True",
"New asset created: True",
"New Material opened: True",
"Material closed: True",
"All documents closed: True",
"Close All Except Selected worked as expected: True",
"Actual Document saved with changes: True",
"Document saved as copy is saved with changes: True",
"Document saved as child is saved with changes: True",
"Save All worked as expected: True",
]
unexpected_lines = [
# "Trace::Assert",
# "Trace::Error",
"Traceback (most recent call last):"
]
hydra.launch_and_validate_results(
request,
TEST_DIRECTORY,
generic_launcher,
"hydra_AtomMaterialEditor_BasicTests.py",
run_python="--runpython",
timeout=120,
expected_lines=expected_lines,
unexpected_lines=unexpected_lines,
halt_on_unexpected=True,
null_renderer=True,
log_file_name="MaterialEditor.log",
)
@@ -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):
"""
@@ -88,7 +89,7 @@ class TestAllComponentsIndepthTests(object):
level_creation_expected_lines = [
"Viewport is set to the expected size: True",
"Basic level created"
"Exited game mode"
]
unexpected_lines = [
"Trace::Assert",
@@ -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",
@@ -187,8 +189,8 @@ class TestPerformanceBenchmarkSuite(object):
"Benchmark metadata captured.",
"Pass timestamps captured.",
"CPU frame time captured.",
"Capturing complete.",
"Captured data successfully."
"Captured data successfully.",
"Exited game mode"
]
unexpected_lines = [
@@ -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
@@ -14,10 +14,6 @@ import editor_python_test_tools.hydra_test_utils as hydra
logger = logging.getLogger(__name__)
TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("level", ["auto_test"])
class TestAtomEditorComponentsSandbox(object):
# It requires at least one test
@@ -30,6 +26,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):
"""
@@ -69,3 +66,75 @@ class TestAtomEditorComponentsSandbox(object):
null_renderer=True,
cfg_args=cfg_args,
)
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_generic'])
@pytest.mark.system
class TestMaterialEditorBasicTests(object):
@pytest.fixture(autouse=True)
def setup_teardown(self, request, workspace, project):
def delete_files():
file_system.delete(
[
os.path.join(workspace.paths.project(), "Materials", "test_material.material"),
os.path.join(workspace.paths.project(), "Materials", "test_material_1.material"),
os.path.join(workspace.paths.project(), "Materials", "test_material_2.material"),
],
True,
True,
)
# Cleanup our newly created materials
delete_files()
def teardown():
# Cleanup our newly created materials
delete_files()
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):
expected_lines = [
"Material opened: True",
"Test asset doesn't exist initially: True",
"New asset created: True",
"New Material opened: True",
"Material closed: True",
"All documents closed: True",
"Close All Except Selected worked as expected: True",
"Actual Document saved with changes: True",
"Document saved as copy is saved with changes: True",
"Document saved as child is saved with changes: True",
"Save All worked as expected: True",
]
unexpected_lines = [
# "Trace::Assert",
# "Trace::Error",
"Traceback (most recent call last):"
]
hydra.launch_and_validate_results(
request,
TEST_DIRECTORY,
generic_launcher,
"hydra_AtomMaterialEditor_BasicTests.py",
run_python="--runpython",
timeout=120,
expected_lines=expected_lines,
unexpected_lines=unexpected_lines,
halt_on_unexpected=True,
null_renderer=True,
log_file_name="MaterialEditor.log",
)
@@ -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
@@ -17,3 +17,392 @@ LIGHT_TYPES = {
'simple_point': 6,
'simple_spot': 7,
}
class AtomComponentProperties:
"""
Holds Atom component related constants
"""
@staticmethod
def actor(property: str = 'name') -> str:
"""
Actor component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Actor',
}
return properties[property]
@staticmethod
def bloom(property: str = 'name') -> str:
"""
Bloom component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Bloom',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def camera(property: str = 'name') -> str:
"""
Camera component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Camera',
}
return properties[property]
@staticmethod
def decal(property: str = 'name') -> str:
"""
Decal component properties.
- 'Material' the material Asset.id of the decal.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Decal',
'Material': 'Controller|Configuration|Material',
}
return properties[property]
@staticmethod
def deferred_fog(property: str = 'name') -> str:
"""
Deferred Fog component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Deferred Fog',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def depth_of_field(property: str = 'name') -> str:
"""
Depth of Field component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
- 'Camera Entity' an EditorEntity.id reference to the Camera component required for this effect.
Must be a different entity than the one which hosts Depth of Field component.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'DepthOfField',
'requires': [AtomComponentProperties.postfx_layer()],
'Camera Entity': 'Controller|Configuration|Camera Entity',
}
return properties[property]
@staticmethod
def diffuse_probe(property: str = 'name') -> str:
"""
Diffuse Probe Grid component properties. Requires one of 'shapes'.
- 'shapes' a list of supported shapes as component names.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Diffuse Probe Grid',
'shapes': ['Axis Aligned Box Shape', 'Box Shape']
}
return properties[property]
@staticmethod
def directional_light(property: str = 'name') -> str:
"""
Directional Light component properties.
- 'Camera' an EditorEntity.id reference to the Camera component that controls cascaded shadow view frustum.
Must be a different entity than the one which hosts Directional Light component.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Directional Light',
'Camera': 'Controller|Configuration|Shadow|Camera',
}
return properties[property]
@staticmethod
def display_mapper(property: str = 'name') -> str:
"""
Display Mapper component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Display Mapper',
}
return properties[property]
@staticmethod
def entity_reference(property: str = 'name') -> str:
"""
Entity Reference component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Entity Reference',
}
return properties[property]
@staticmethod
def exposure_control(property: str = 'name') -> str:
"""
Exposure Control component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Exposure Control',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def global_skylight(property: str = 'name') -> str:
"""
Global Skylight (IBL) component properties.
- 'Diffuse Image' Asset.id for the cubemap image for determining diffuse lighting.
- 'Specular Image' Asset.id for the cubemap image for determining specular lighting.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Global Skylight (IBL)',
'Diffuse Image': 'Controller|Configuration|Diffuse Image',
'Specular Image': 'Controller|Configuration|Specular Image',
}
return properties[property]
@staticmethod
def grid(property: str = 'name') -> str:
"""
Grid component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Grid',
}
return properties[property]
@staticmethod
def hdr_color_grading(property: str = 'name') -> str:
"""
HDR Color Grading component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'HDR Color Grading',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def hdri_skybox(property: str = 'name') -> str:
"""
HDRi Skybox component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'HDRi Skybox',
}
return properties[property]
@staticmethod
def light(property: str = 'name') -> str:
"""
Light component properties.
- 'Light type' from atom_constants.py LIGHT_TYPES
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Light',
'Light type': 'Controller|Configuration|Light type',
}
return properties[property]
@staticmethod
def look_modification(property: str = 'name') -> str:
"""
Look Modification component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Look Modification',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def material(property: str = 'name') -> str:
"""
Material component properties. Requires one of Actor OR Mesh component.
- 'requires' a list of component names as strings required by this component.
Only one of these is required at a time for this component.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Material',
'requires': [AtomComponentProperties.actor(), AtomComponentProperties.mesh()],
}
return properties[property]
@staticmethod
def mesh(property: str = 'name') -> str:
"""
Mesh component properties.
- 'Mesh Asset' Asset.id of the mesh model.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
:rtype: str
"""
properties = {
'name': 'Mesh',
'Mesh Asset': 'Controller|Configuration|Mesh Asset',
}
return properties[property]
@staticmethod
def occlusion_culling_plane(property: str = 'name') -> str:
"""
Occlusion Culling Plane component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Occlusion Culling Plane',
}
return properties[property]
@staticmethod
def physical_sky(property: str = 'name') -> str:
"""
Physical Sky component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Physical Sky',
}
return properties[property]
@staticmethod
def postfx_layer(property: str = 'name') -> str:
"""
PostFX Layer component properties.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'PostFX Layer',
}
return properties[property]
@staticmethod
def postfx_gradient(property: str = 'name') -> str:
"""
PostFX Gradient Weight Modifier component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'PostFX Gradient Weight Modifier',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def postfx_radius(property: str = 'name') -> str:
"""
PostFX Radius Weight Modifier component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'PostFX Radius Weight Modifier',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@staticmethod
def postfx_shape(property: str = 'name') -> str:
"""
PostFX Shape Weight Modifier component properties. Requires PostFX Layer and one of 'shapes' listed.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
- 'shapes' a list of supported shapes as component names. 'Tube Shape' is also supported but requires 'Spline'.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'PostFX Shape Weight Modifier',
'requires': [AtomComponentProperties.postfx_layer()],
'shapes': ['Axis Aligned Box Shape', 'Box Shape', 'Capsule Shape', 'Compound Shape', 'Cylinder Shape',
'Disk Shape', 'Polygon Prism Shape', 'Quad Shape', 'Sphere Shape', 'Vegetation Reference Shape'],
}
return properties[property]
@staticmethod
def reflection_probe(property: str = 'name') -> str:
"""
Reflection Probe component properties. Requires one of 'shapes' listed.
- 'shapes' a list of supported shapes as component names.
- 'Baked Cubemap Path' Asset.id of the baked cubemap image generated by a call to 'BakeReflectionProbe' ebus.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Reflection Probe',
'shapes': ['Axis Aligned Box Shape', 'Box Shape'],
'Baked Cubemap Path': 'Cubemap|Baked Cubemap Path',
}
return properties[property]
@staticmethod
def ssao(property: str = 'name') -> str:
"""
SSAO component properties. Requires PostFX Layer component.
- 'requires' a list of component names as strings required by this component.
Use editor_entity_utils EditorEntity.add_components(list) to add this list of requirements.\n
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'SSAO',
'requires': [AtomComponentProperties.postfx_layer()],
}
return properties[property]
@@ -80,25 +80,25 @@ def AtomEditorComponents_Mesh_AddedToEntity():
from editor_python_test_tools.asset_utils import Asset
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report, Tracer, TestHelper as helper
from editor_python_test_tools.utils import Report, Tracer, TestHelper
from Atom.atom_utils.atom_constants import AtomComponentProperties as Atom
with Tracer() as error_tracer:
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
helper.init_idle()
helper.open_level("", "Base")
TestHelper.init_idle()
TestHelper.open_level("", "Base")
# Test steps begin.
# 1. Create a Mesh entity with no components.
mesh_name = "Mesh"
mesh_entity = EditorEntity.create_editor_entity(mesh_name)
mesh_entity = EditorEntity.create_editor_entity(Atom.mesh())
Report.critical_result(Tests.mesh_entity_creation, mesh_entity.exists())
# 2. Add a Mesh component to Mesh entity.
mesh_component = mesh_entity.add_component(mesh_name)
mesh_component = mesh_entity.add_component(Atom.mesh())
Report.critical_result(
Tests.mesh_component_added,
mesh_entity.has_component(mesh_name))
mesh_entity.has_component(Atom.mesh()))
# 3. UNDO the entity creation and component addition.
# -> UNDO component addition.
@@ -125,17 +125,16 @@ def AtomEditorComponents_Mesh_AddedToEntity():
Report.result(Tests.creation_redo, mesh_entity.exists())
# 5. Set Mesh component asset property
mesh_property_asset = 'Controller|Configuration|Mesh Asset'
model_path = os.path.join('Objects', 'shaderball', 'shaderball_default_1m.azmodel')
model = Asset.find_asset_by_path(model_path)
mesh_component.set_component_property_value(mesh_property_asset, model.id)
mesh_component.set_component_property_value(Atom.mesh('Mesh Asset'), model.id)
Report.result(Tests.mesh_asset_specified,
mesh_component.get_component_property_value(mesh_property_asset) == model.id)
mesh_component.get_component_property_value(Atom.mesh('Mesh Asset')) == model.id)
# 6. Enter/Exit game mode.
helper.enter_game_mode(Tests.enter_game_mode)
TestHelper.enter_game_mode(Tests.enter_game_mode)
general.idle_wait_frames(1)
helper.exit_game_mode(Tests.exit_game_mode)
TestHelper.exit_game_mode(Tests.exit_game_mode)
# 7. Test IsHidden.
mesh_entity.set_visibility_state(False)
@@ -159,7 +158,7 @@ def AtomEditorComponents_Mesh_AddedToEntity():
Report.result(Tests.deletion_redo, not mesh_entity.exists())
# 12. Look for errors or asserts.
helper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
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:
@@ -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)
@@ -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)
@@ -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
@@ -91,7 +90,6 @@ def run():
benchmarker.capture_cpu_frame_time(i)
general.exit_game_mode()
helper.wait_for_condition(function=lambda: not general.is_in_game_mode(), timeout_in_seconds=2.0)
general.log("Capturing complete.")
if __name__ == "__main__":
@@ -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
@@ -216,7 +215,6 @@ def run():
ScreenshotHelper(general.idle_wait_frames).capture_screenshot_blocking(f"{'AtomBasicLevelSetup'}.ppm")
general.exit_game_mode()
helper.wait_for_condition(function=lambda: not general.is_in_game_mode(), timeout_in_seconds=2.0)
general.log("Basic level created")
if __name__ == "__main__":
@@ -33,7 +33,7 @@ add_subdirectory(WhiteBox)
add_subdirectory(NvCloth)
## Prefab ##
add_subdirectory(prefab)
add_subdirectory(Prefab)
## Editor Python Bindings ##
add_subdirectory(EditorPythonBindings)
@@ -58,3 +58,6 @@ add_subdirectory(smoke)
## AWS ##
add_subdirectory(AWS)
## Integration tests for editor testing framework ##
add_subdirectory(editor_test_testing)
@@ -122,17 +122,32 @@ class EditorEntity:
# Creation functions
@classmethod
def find_editor_entity(cls, entity_name: str) -> EditorEntity:
def find_editor_entity(cls, entity_name: str, must_be_unique : bool = False) -> EditorEntity:
"""
Given Entity name, outputs entity object
:param entity_name: Name of entity to find
:return: EditorEntity class object
"""
entity_id = general.find_editor_entity(entity_name)
assert entity_id.IsValid(), f"Failure: Couldn't find entity with name: '{entity_name}'"
entity = cls(entity_id)
entities = cls.find_editor_entities([entity_name])
assert len(entities) != 0, f"Failure: Couldn't find entity with name: '{entity_name}'"
if must_be_unique:
assert len(entities) == 1, f"Failure: Multiple entities with name: '{entity_name}' when expected only one"
entity = cls(entities[0])
return entity
@classmethod
def find_editor_entities(cls, entity_names: List[str]) -> EditorEntity:
"""
Given Entities names, returns a list of EditorEntity
:param entity_name: Name of entity to find
:return: List[EditorEntity] class object
"""
searchFilter = azlmbr.entity.SearchFilter()
searchFilter.names = entity_names
ids = azlmbr.entity.SearchBus(bus.Broadcast, 'SearchEntities', searchFilter)
return [cls(id) for id in ids]
@classmethod
def create_editor_entity(cls, name: str = None, parent_id=None) -> EditorEntity:
"""
@@ -157,8 +172,7 @@ class EditorEntity:
cls,
entity_position: Union[List, Tuple, math.Vector3],
name: str = None,
parent_id: azlmbr.entity.EntityId = None,
) -> EditorEntity:
parent_id: azlmbr.entity.EntityId = None) -> EditorEntity:
"""
Used to create entity at position using 'CreateNewEntityAtPosition' Bus.
:param entity_position: World Position(X, Y, Z) of entity in viewport.
@@ -227,6 +241,12 @@ class EditorEntity:
"""
return editor.EditorEntityInfoRequestBus(bus.Event, "GetChildren", self.id)
def get_children(self) -> List[EditorEntity]:
"""
:return: List of EditorEntity children. Type: [EditorEntity]
"""
return [EditorEntity(child_id) for child_id in self.get_children_ids()]
def add_component(self, component_name: str) -> EditorComponent:
"""
Used to add new component to Entity.
@@ -51,7 +51,7 @@ def launch_and_validate_results(request, test_directory, editor, editor_script,
logger.debug("Running automated test: {}".format(editor_script))
editor.args.extend(["--skipWelcomeScreenDialog", "--regset=/Amazon/Settings/EnableSourceControl=false",
"--regset=/Amazon/Preferences/EnablePrefabSystem=false", run_python, test_case,
f"--pythontestcase={request.node.originalname}", "--runpythonargs", " ".join(cfg_args)])
f"--pythontestcase={request.node.name}", "--runpythonargs", " ".join(cfg_args)])
if auto_test_mode:
editor.args.extend(["--autotest_mode"])
if null_renderer:
@@ -0,0 +1,353 @@
"""
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
"""
from __future__ import annotations
from collections import Counter
from collections import deque
from os import path
from pathlib import Path
from PySide2 import QtWidgets
import azlmbr.legacy.general as general
from azlmbr.entity import EntityId
from azlmbr.math import Vector3
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report
import azlmbr.entity as entity
import azlmbr.bus as bus
import azlmbr.components as components
import azlmbr.editor as editor
import azlmbr.globals
import azlmbr.math as math
import azlmbr.prefab as prefab
import editor_python_test_tools.pyside_utils as pyside_utils
def get_prefab_file_path(prefab_path):
if not path.isabs(prefab_path):
prefab_path = path.join(general.get_file_alias("@projectroot@"), prefab_path)
# Append prefab if it doesn't contain .prefab on it
name, ext = path.splitext(prefab_path)
if ext != ".prefab":
prefab_path = name + ".prefab"
return prefab_path
def get_all_entity_ids():
return entity.SearchBus(bus.Broadcast, 'SearchEntities', entity.SearchFilter())
def wait_for_propagation():
general.idle_wait_frames(1)
# This is a helper class which contains some of the useful information about a prefab instance.
class PrefabInstance:
def __init__(self, prefab_file_name: str = None, container_entity: EditorEntity = None):
self.prefab_file_name: str = prefab_file_name
self.container_entity: EditorEntity = container_entity
def __eq__(self, other):
return other and self.container_entity.id == other.container_entity.id
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash(self.container_entity.id)
def is_valid(self) -> bool:
"""
See if this instance is valid to be used with other prefab operations.
:return: Whether the target instance is valid or not.
"""
return self.container_entity.id.IsValid() and self.prefab_file_name in Prefab.existing_prefabs
def has_editor_prefab_component(self) -> bool:
"""
Check if the instance's container entity contains EditorPrefabComponent.
:return: Whether the container entity of target instance has EditorPrefabComponent in it or not.
"""
return editor.EditorComponentAPIBus(bus.Broadcast, "HasComponentOfType", self.container_entity.id, azlmbr.globals.property.EditorPrefabComponentTypeId)
def is_at_position(self, expected_position):
"""
Check if the instance's container entity is at expected position given.
:return: Whether the container entity of target instance is at expected position or not.
"""
actual_position = components.TransformBus(bus.Event, "GetWorldTranslation", self.container_entity.id)
is_at_position = actual_position.IsClose(expected_position)
if not is_at_position:
Report.info(f"Prefab Instance Container Entity '{self.container_entity.id.ToString()}'\'s expected position: {expected_position.ToString()}, actual position: {actual_position.ToString()}")
return is_at_position
async def ui_reparent_prefab_instance(self, parent_entity_id: EntityId):
"""
Reparent this instance to target parent entity.
The function will also check pop up dialog ui in editor to see if there's prefab cyclical dependency error while reparenting prefabs.
:param parent_entity_id: The id of the entity this instance should be a child of in the transform hierarchy next.
"""
container_entity_id_before_reparent = self.container_entity.id
original_parent = EditorEntity(self.container_entity.get_parent_id())
original_parent_before_reparent_children_ids = {child_id.ToString(): child_id for child_id in original_parent.get_children_ids()}
new_parent = EditorEntity(parent_entity_id)
new_parent_before_reparent_children_ids = {child_id.ToString(): child_id for child_id in new_parent.get_children_ids()}
pyside_utils.run_soon(lambda: self.container_entity.set_parent_entity(parent_entity_id))
pyside_utils.run_soon(lambda: wait_for_propagation())
try:
active_modal_widget = await pyside_utils.wait_for_modal_widget()
error_message_box = active_modal_widget.findChild(QtWidgets.QMessageBox)
ok_button = error_message_box.button(QtWidgets.QMessageBox.Ok)
ok_button.click()
assert False, "Cyclical dependency detected while reparenting prefab"
except pyside_utils.EventLoopTimeoutException:
pass
original_parent_after_reparent_children_ids = {child_id.ToString(): child_id for child_id in original_parent.get_children_ids()}
assert len(original_parent_after_reparent_children_ids) == len(original_parent_before_reparent_children_ids) - 1, \
"The children count of the Prefab Instance's original parent should be decreased by 1."
assert not container_entity_id_before_reparent in original_parent_after_reparent_children_ids, \
"This Prefab Instance is still a child entity of its original parent entity."
new_parent_after_reparent_children_ids = {child_id.ToString(): child_id for child_id in new_parent.get_children_ids()}
assert len(new_parent_after_reparent_children_ids) == len(new_parent_before_reparent_children_ids) + 1, \
"The children count of the Prefab Instance's new parent should be increased by 1."
after_before_diff = set(new_parent_after_reparent_children_ids.keys()).difference(set(new_parent_before_reparent_children_ids.keys()))
container_entity_id_after_reparent = new_parent_after_reparent_children_ids[after_before_diff.pop()]
reparented_container_entity = EditorEntity(container_entity_id_after_reparent)
reparented_container_entity_parent_id = reparented_container_entity.get_parent_id()
has_correct_parent = reparented_container_entity_parent_id.ToString() == parent_entity_id.ToString()
assert has_correct_parent, "Prefab Instance reparented is *not* under the expected parent entity"
current_instance_prefab = Prefab.get_prefab(self.prefab_file_name)
current_instance_prefab.instances.remove(self)
self.container_entity = reparented_container_entity
current_instance_prefab.instances.add(self)
# This is a helper class which contains some of the useful information about a prefab template.
class Prefab:
existing_prefabs = {}
def __init__(self, file_path: str):
self.file_path: str = get_prefab_file_path(file_path)
self.instances: set[PrefabInstance] = set()
@classmethod
def is_prefab_loaded(cls, file_path: str) -> bool:
"""
Check if a prefab is ready to be used to generate its instances.
:param file_path: A unique file path of the target prefab.
:return: Whether the target prefab is loaded or not.
"""
return file_path in Prefab.existing_prefabs
@classmethod
def prefab_exists(cls, file_path: str) -> bool:
"""
Check if a prefab exists in the directory for files of prefab tests.
:param file_name: A unique file name of the target prefab.
:return: Whether the target prefab exists or not.
"""
return path.exists(get_prefab_file_path(file_path))
@classmethod
def get_prefab(cls, file_name: str) -> Prefab:
"""
Return a prefab which can be used immediately.
:param file_name: A unique file name of the target prefab.
:return: The prefab with given file name.
"""
assert file_name, "Received an empty file_name"
if Prefab.is_prefab_loaded(file_name):
return Prefab.existing_prefabs[file_name]
else:
assert Prefab.prefab_exists(file_name), f"Attempted to get a prefab \"{file_name}\" that doesn't exist"
new_prefab = Prefab(file_name)
Prefab.existing_prefabs[file_name] = Prefab(file_name)
return new_prefab
@classmethod
def create_prefab(cls, entities: list[EditorEntity], file_name: str, prefab_instance_name: str=None) -> tuple(Prefab, PrefabInstance):
"""
Create a prefab in memory and return it. The very first instance of this prefab will also be created.
:param entities: The entities that should form the new prefab (along with their descendants).
:param file_name: A unique file name of new prefab.
:param prefab_instance_name: A name for the very first instance generated while prefab creation. The default instance name is the same as file_name.
:return: Created Prefab object and the very first PrefabInstance object owned by the prefab.
"""
assert not Prefab.is_prefab_loaded(file_name), f"Can't create Prefab '{file_name}' since the prefab already exists"
new_prefab = Prefab(file_name)
entity_ids = [entity.id for entity in entities]
create_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'CreatePrefabInMemory', entity_ids, new_prefab.file_path)
assert create_prefab_result.IsSuccess(), f"Prefab operation 'CreatePrefab' failed. Error: {create_prefab_result.GetError()}"
container_entity_id = create_prefab_result.GetValue()
container_entity = EditorEntity(container_entity_id)
children_entity_ids = container_entity.get_children_ids()
assert len(children_entity_ids) == len(entities), f"Entity count of created prefab instance does *not* match the count of given entities."
if prefab_instance_name:
container_entity.set_name(prefab_instance_name)
wait_for_propagation()
new_prefab_instance = PrefabInstance(file_name, EditorEntity(container_entity_id))
new_prefab.instances.add(new_prefab_instance)
Prefab.existing_prefabs[file_name] = new_prefab
return new_prefab, new_prefab_instance
@classmethod
def remove_prefabs(cls, prefab_instances: list[PrefabInstance]):
"""
Remove target prefab instances.
:param prefab_instances: Instances to be removed.
"""
entity_ids_to_remove = []
entity_id_queue = [prefab_instance.container_entity for prefab_instance in prefab_instances]
while entity_id_queue:
entity = entity_id_queue.pop(0)
children_entity_ids = entity.get_children_ids()
for child_entity_id in children_entity_ids:
entity_id_queue.append(EditorEntity(child_entity_id))
entity_ids_to_remove.append(entity.id)
container_entity_ids = [prefab_instance.container_entity.id for prefab_instance in prefab_instances]
delete_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'DeleteEntitiesAndAllDescendantsInInstance', container_entity_ids)
assert delete_prefab_result.IsSuccess(), f"Prefab operation 'DeleteEntitiesAndAllDescendantsInInstance' failed. Error: {delete_prefab_result.GetError()}"
wait_for_propagation()
entity_ids_after_delete = set(get_all_entity_ids())
for entity_id_removed in entity_ids_to_remove:
if entity_id_removed in entity_ids_after_delete:
assert False, "Not all entities and descendants in target prefabs are deleted."
for instance in prefab_instances:
instance_deleted_prefab = Prefab.get_prefab(instance.prefab_file_name)
instance_deleted_prefab.instances.remove(instance)
instance = PrefabInstance()
@classmethod
def duplicate_prefabs(cls, prefab_instances: list[PrefabInstance]):
"""
Duplicate target prefab instances.
:param prefab_instances: Instances to be duplicated.
:return: PrefabInstance objects of given prefab instances' duplicates.
"""
assert prefab_instances, "Input list of prefab instances should *not* be empty."
common_parent = EditorEntity(prefab_instances[0].container_entity.get_parent_id())
common_parent_children_ids_before_duplicate = set([child_id.ToString() for child_id in common_parent.get_children_ids()])
container_entity_ids = [prefab_instance.container_entity.id for prefab_instance in prefab_instances]
duplicate_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'DuplicateEntitiesInInstance', container_entity_ids)
assert duplicate_prefab_result.IsSuccess(), f"Prefab operation 'DuplicateEntitiesInInstance' failed. Error: {duplicate_prefab_result.GetError()}"
wait_for_propagation()
duplicate_container_entity_ids = duplicate_prefab_result.GetValue()
common_parent_children_ids_after_duplicate = set([child_id.ToString() for child_id in common_parent.get_children_ids()])
assert set([container_entity_id.ToString() for container_entity_id in container_entity_ids]).issubset(common_parent_children_ids_after_duplicate), \
"Provided prefab instances are *not* the children of their common parent anymore after duplication."
assert common_parent_children_ids_before_duplicate.issubset(common_parent_children_ids_after_duplicate), \
"Some children of provided entities' common parent before duplication are *not* the children of the common parent anymore after duplication."
assert len(common_parent_children_ids_after_duplicate) == len(common_parent_children_ids_before_duplicate) + len(prefab_instances), \
"The children count of the given prefab instances' common parent entity is *not* increased to the expected number."
assert EditorEntity(duplicate_container_entity_ids[0]).get_parent_id().ToString() == common_parent.id.ToString(), \
"Provided prefab instances' parent should be the same as duplicates' parent."
duplicate_instances = []
for duplicate_container_entity_id in duplicate_container_entity_ids:
prefab_file_path = prefab.PrefabPublicRequestBus(bus.Broadcast, 'GetOwningInstancePrefabPath', duplicate_container_entity_id)
assert prefab_file_path, "Returned file path should *not* be empty."
prefab_file_name = Path(prefab_file_path).stem
duplicate_instance_prefab = Prefab.get_prefab(prefab_file_name)
duplicate_instance = PrefabInstance(prefab_file_path, EditorEntity(duplicate_container_entity_id))
duplicate_instance_prefab.instances.add(duplicate_instance)
duplicate_instances.append(duplicate_instance)
return duplicate_instances
@classmethod
def detach_prefab(cls, prefab_instance: PrefabInstance):
"""
Detach target prefab instance.
:param prefab_instances: Instance to be detached.
"""
parent = EditorEntity(prefab_instance.container_entity.get_parent_id())
parent_children_ids_before_detach = set([child_id.ToString() for child_id in parent.get_children_ids()])
assert prefab_instance.has_editor_prefab_component(), f"Container entity should have EditorPrefabComponent before detachment."
detach_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'DetachPrefab', prefab_instance.container_entity.id)
assert detach_prefab_result.IsSuccess(), f"Prefab operation 'DetachPrefab' failed. Error: {detach_prefab_result.GetError()}"
assert not prefab_instance.has_editor_prefab_component(), f"Container entity should *not* have EditorPrefabComponent after detachment."
parent_children_ids_after_detach = set([child_id.ToString() for child_id in parent.get_children_ids()])
assert prefab_instance.container_entity.id.ToString() in parent_children_ids_after_detach, \
"Target prefab instance's container entity id should still exists after the detachment and before the propagation."
assert len(parent_children_ids_after_detach) == len(parent_children_ids_before_detach), \
"Parent entity should still keep the same amount of children entities."
wait_for_propagation()
instance_owner_prefab = Prefab.get_prefab(prefab_instance.prefab_file_name)
instance_owner_prefab.instances.remove(prefab_instance)
prefab_instance = PrefabInstance()
def instantiate(self, parent_entity: EditorEntity=None, name: str=None, prefab_position: Vector3=Vector3()) -> PrefabInstance:
"""
Instantiate an instance of this prefab.
:param parent_entity: The entity the prefab should be a child of in the transform hierarchy.
:param name: A name for newly instantiated prefab instance. The default instance name is the same as this prefab's file name.
:param prefab_position: The position in world space the prefab should be instantiated in.
:return: Instantiated PrefabInstance object owned by this prefab.
"""
parent_entity_id = parent_entity.id if parent_entity is not None else EntityId()
instantiate_prefab_result = prefab.PrefabPublicRequestBus(
bus.Broadcast, 'InstantiatePrefab', self.file_path, parent_entity_id, prefab_position)
assert instantiate_prefab_result.IsSuccess(), f"Prefab operation 'InstantiatePrefab' failed. Error: {instantiate_prefab_result.GetError()}"
container_entity_id = instantiate_prefab_result.GetValue()
container_entity = EditorEntity(container_entity_id)
if name:
container_entity.set_name(name)
wait_for_propagation()
new_prefab_instance = PrefabInstance(self.file_path, EditorEntity(container_entity_id))
assert not new_prefab_instance in self.instances, "This prefab instance is already existed before this instantiation."
self.instances.add(new_prefab_instance)
assert new_prefab_instance.is_at_position(prefab_position), "This prefab instance is *not* at expected position."
return new_prefab_instance
@@ -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)
@@ -9,20 +9,17 @@ import pytest
import sys
import ly_test_tools.environment.file_system as fs
from .FileManagement import FileManagement as fm
from .utils.FileManagement import FileManagement as fm
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
from .base import TestAutomationBase
from base import TestAutomationBase
@pytest.mark.parametrize("platform", ["win_x64_vs2017"])
@pytest.mark.parametrize("configuration", ["profile"])
@pytest.mark.parametrize("spec", ["all"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
class TestUtils(TestAutomationBase):
@fm.file_revert("UtilTest_Physmaterial_Editor_TestLibrary.physmaterial", r"AutomatedTesting\Levels\Physics\Physmaterial_Editor_Test")
def test_physmaterial_editor(self, request, workspace, editor):
def test_physmaterial_editor(self, request, workspace, launcher_platform, editor):
"""
Tests functionality of physmaterial editing utility
:param workspace: Fixture containing platform and project detail
@@ -35,11 +32,11 @@ class TestUtils(TestAutomationBase):
unexpected_lines = ["Assert"]
self._run_test(request, workspace, editor, physmaterial_editor_test_module, expected_lines, unexpected_lines)
def test_UtilTest_Tracer_PicksErrorsAndWarnings(self, request, workspace, editor):
def test_UtilTest_Tracer_PicksErrorsAndWarnings(self, request, workspace, launcher_platform, editor):
from .utils import UtilTest_Tracer_PicksErrorsAndWarnings as testcase_module
self._run_test(request, workspace, editor, testcase_module, [], [])
def test_FileManagement_FindingFiles(self, workspace):
def test_FileManagement_FindingFiles(self, workspace, launcher_platform):
"""
Tests the functionality of "searching for files" with FileManagement._find_files()
:param workspace: ly_test_tools workspace fixture
@@ -110,7 +107,7 @@ class TestUtils(TestAutomationBase):
find_me_too_path, found_me["FindMeToo.txt"]
)
def test_FileManagement_FileBackup(self, workspace):
def test_FileManagement_FileBackup(self, workspace, launcher_platform):
"""
Tests the functionality of the file back up system via the FileManagement class
:param workspace: ly_test_tools workspace fixture
@@ -167,7 +164,7 @@ class TestUtils(TestAutomationBase):
del file_map[target_file_path]
fm._save_file_map(file_map)
def test_FileManagement_FileRestoration(self, workspace):
def test_FileManagement_FileRestoration(self, workspace, launcher_platform):
"""
Tests the restore file system via the FileManagement class
:param workspace: ly_test_tools workspace fixture
@@ -261,7 +258,7 @@ class TestUtils(TestAutomationBase):
["FindMe.txt", "FindMeToo.txt"], parent_path=r"AutomatedTesting\levels\Utils\Managed_files", search_subdirs=True
)
@fm.file_override("default.physxconfiguration", "UtilTest_PhysxConfig_Override.physxconfiguration")
def test_UtilTest_Managed_Files(self, request, workspace, editor):
def test_UtilTest_Managed_Files(self, request, workspace, editor, launcher_platform):
from .utils import UtilTest_Managed_Files as test_module
expected_lines = []
@@ -126,7 +126,7 @@ def ForceRegion_LinearDampingForceOnRigidBodies():
# Constants
CLOSE_ENOUGH = 0.001
TIME_OUT = 3.0
TIME_OUT = 10.0
INITIAL_VELOCITY = azmath.Vector3(0.0, 0.0, -10.0)
# 1) Open level / Enter game mode
@@ -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)
@@ -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)
@@ -29,21 +29,29 @@ class TestAutomation(TestAutomationBase):
autotest_mode=autotest_mode)
def test_PrefabLevel_OpensLevelWithEntities(self, request, workspace, editor, launcher_platform):
from . import PrefabLevel_OpensLevelWithEntities as test_module
from .tests import PrefabLevel_OpensLevelWithEntities as test_module
self._run_prefab_test(request, workspace, editor, test_module)
def test_Prefab_BasicWorkflow_CreatePrefab(self, request, workspace, editor, launcher_platform):
from . import Prefab_BasicWorkflow_CreatePrefab as test_module
def test_PrefabBasicWorkflow_CreatePrefab(self, request, workspace, editor, launcher_platform):
from .tests import PrefabBasicWorkflow_CreatePrefab as test_module
self._run_prefab_test(request, workspace, editor, test_module)
def test_Prefab_BasicWorkflow_InstantiatePrefab(self, request, workspace, editor, launcher_platform):
from . import Prefab_BasicWorkflow_InstantiatePrefab as test_module
def test_PrefabBasicWorkflow_InstantiatePrefab(self, request, workspace, editor, launcher_platform):
from .tests import PrefabBasicWorkflow_InstantiatePrefab as test_module
self._run_prefab_test(request, workspace, editor, test_module)
def test_Prefab_BasicWorkflow_CreateAndDeletePrefab(self, request, workspace, editor, launcher_platform):
from . import Prefab_BasicWorkflow_CreateAndDeletePrefab as test_module
def test_PrefabBasicWorkflow_CreateAndDeletePrefab(self, request, workspace, editor, launcher_platform):
from .tests import PrefabBasicWorkflow_CreateAndDeletePrefab as test_module
self._run_prefab_test(request, workspace, editor, test_module)
def test_Prefab_BasicWorkflow_CreateAndReparentPrefab(self, request, workspace, editor, launcher_platform):
from . import Prefab_BasicWorkflow_CreateAndReparentPrefab as test_module
def test_PrefabBasicWorkflow_CreateAndReparentPrefab(self, request, workspace, editor, launcher_platform):
from .tests import PrefabBasicWorkflow_CreateAndReparentPrefab as test_module
self._run_prefab_test(request, workspace, editor, test_module, autotest_mode=False)
def test_PrefabBasicWorkflow_CreateReparentAndDetachPrefab(self, request, workspace, editor, launcher_platform):
from .tests import PrefabBasicWorkflow_CreateReparentAndDetachPrefab as test_module
self._run_prefab_test(request, workspace, editor, test_module, autotest_mode=False)
def test_PrefabBasicWorkflow_CreateAndDuplicatePrefab(self, request, workspace, editor, launcher_platform):
from .tests import PrefabBasicWorkflow_CreateAndDuplicatePrefab as test_module
self._run_prefab_test(request, workspace, editor, test_module)
@@ -5,29 +5,28 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
def Prefab_BasicWorkflow_CreateAndDeletePrefab():
def PrefabBasicWorkflow_CreateAndDeletePrefab():
CAR_PREFAB_FILE_NAME = 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from prefab.Prefab import Prefab
from editor_python_test_tools.prefab_utils import Prefab
import prefab.Prefab_Test_Utils as prefab_test_utils
import PrefabTestUtils as prefab_test_utils
prefab_test_utils.open_base_tests_level()
# Creates a new Entity at the root level
# Asserts if creation didn't succeed
# Creates a new entity at the root level
car_entity = EditorEntity.create_editor_entity()
car_prefab_entities = [car_entity]
# Checks for prefab creation passed or not
# Creates a prefab from the new entity
_, car = Prefab.create_prefab(
car_prefab_entities, CAR_PREFAB_FILE_NAME)
# Checks for prefab deletion passed or not
# Deletes the prefab instance
Prefab.remove_prefabs([car])
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Prefab_BasicWorkflow_CreateAndDeletePrefab)
Report.start_test(PrefabBasicWorkflow_CreateAndDeletePrefab)
@@ -0,0 +1,32 @@
"""
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
"""
def PrefabBasicWorkflow_CreateAndDuplicatePrefab():
CAR_PREFAB_FILE_NAME = 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.prefab_utils import Prefab
import PrefabTestUtils as prefab_test_utils
prefab_test_utils.open_base_tests_level()
# Creates a new entity at the root level
car_entity = EditorEntity.create_editor_entity()
car_prefab_entities = [car_entity]
# Creates a prefab from the new entity
_, car = Prefab.create_prefab(
car_prefab_entities, CAR_PREFAB_FILE_NAME)
# Duplicates the prefab instance
Prefab.duplicate_prefabs([car])
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(PrefabBasicWorkflow_CreateAndDuplicatePrefab)
@@ -5,7 +5,7 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
def Prefab_BasicWorkflow_CreateAndReparentPrefab():
def PrefabBasicWorkflow_CreateAndReparentPrefab():
CAR_PREFAB_FILE_NAME = 'car_prefab'
WHEEL_PREFAB_FILE_NAME = 'wheel_prefab'
@@ -16,34 +16,33 @@ def Prefab_BasicWorkflow_CreateAndReparentPrefab():
async def run_test():
from editor_python_test_tools.editor_entity_utils import EditorEntity
from prefab.Prefab import Prefab
from editor_python_test_tools.prefab_utils import Prefab
import prefab.Prefab_Test_Utils as prefab_test_utils
import PrefabTestUtils as prefab_test_utils
prefab_test_utils.open_base_tests_level()
# Creates a new Entity at the root level
# Asserts if creation didn't succeed
# Creates a new car entity at the root level
car_entity = EditorEntity.create_editor_entity()
car_prefab_entities = [car_entity]
# Checks for prefab creation passed or not
# Creates a prefab from the car entity
_, car = Prefab.create_prefab(
car_prefab_entities, CAR_PREFAB_FILE_NAME)
# Creates another new Entity at the root level
# Creates another new wheel entity at the root level
wheel_entity = EditorEntity.create_editor_entity()
wheel_prefab_entities = [wheel_entity]
# Checks for wheel prefab creation passed or not
# Creates another prefab from the wheel entity
_, wheel = Prefab.create_prefab(
wheel_prefab_entities, WHEEL_PREFAB_FILE_NAME)
# Checks for prefab reparenting passed or not
# Reparents the wheel prefab instance to the container entity of the car prefab instance
await wheel.ui_reparent_prefab_instance(car.container_entity.id)
run_test()
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Prefab_BasicWorkflow_CreateAndReparentPrefab)
Report.start_test(PrefabBasicWorkflow_CreateAndReparentPrefab)
@@ -5,26 +5,25 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
def Prefab_BasicWorkflow_CreatePrefab():
def PrefabBasicWorkflow_CreatePrefab():
CAR_PREFAB_FILE_NAME = 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report
from prefab.Prefab import Prefab
from editor_python_test_tools.prefab_utils import Prefab
import prefab.Prefab_Test_Utils as prefab_test_utils
import PrefabTestUtils as prefab_test_utils
prefab_test_utils.open_base_tests_level()
# Creates a new Entity at the root level
# Asserts if creation didn't succeed
# Creates a new entity at the root level
car_entity = EditorEntity.create_editor_entity()
car_prefab_entities = [car_entity]
# Checks for prefab creation passed or not
# Creates a prefab from the new entity
Prefab.create_prefab(car_prefab_entities, CAR_PREFAB_FILE_NAME)
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Prefab_BasicWorkflow_CreatePrefab)
Report.start_test(PrefabBasicWorkflow_CreatePrefab)
@@ -0,0 +1,51 @@
"""
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
"""
def PrefabBasicWorkflow_CreateReparentAndDetachPrefab():
CAR_PREFAB_FILE_NAME = 'car_prefab'
WHEEL_PREFAB_FILE_NAME = 'wheel_prefab'
import editor_python_test_tools.pyside_utils as pyside_utils
@pyside_utils.wrap_async
async def run_test():
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.prefab_utils import Prefab
import PrefabTestUtils as prefab_test_utils
prefab_test_utils.open_base_tests_level()
# Creates a new car entity at the root level
car_entity = EditorEntity.create_editor_entity()
car_prefab_entities = [car_entity]
# Creates a prefab from the car entity
_, car = Prefab.create_prefab(
car_prefab_entities, CAR_PREFAB_FILE_NAME)
# Creates another new wheel entity at the root level
wheel_entity = EditorEntity.create_editor_entity()
wheel_prefab_entities = [wheel_entity]
# Creates another prefab from the wheel entity
_, wheel = Prefab.create_prefab(
wheel_prefab_entities, WHEEL_PREFAB_FILE_NAME)
# Reparents the wheel prefab instance to the container entity of the car prefab instance
await wheel.ui_reparent_prefab_instance(car.container_entity.id)
# Detaches the wheel prefab instance
Prefab.detach_prefab(wheel)
run_test()
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(PrefabBasicWorkflow_CreateReparentAndDetachPrefab)
@@ -5,23 +5,22 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
def Prefab_BasicWorkflow_InstantiatePrefab():
def PrefabBasicWorkflow_InstantiatePrefab():
from azlmbr.math import Vector3
EXISTING_TEST_PREFAB_FILE_NAME = "Test"
EXISTING_TEST_PREFAB_FILE_NAME = "Gem/PythonTests/Prefab/data/Test.prefab"
INSTANTIATED_TEST_PREFAB_POSITION = Vector3(10.00, 20.0, 30.0)
EXPECTED_TEST_PREFAB_CHILDREN_COUNT = 1
from prefab.Prefab import Prefab
from editor_python_test_tools.prefab_utils import Prefab
import prefab.Prefab_Test_Utils as prefab_test_utils
import PrefabTestUtils as prefab_test_utils
prefab_test_utils.open_base_tests_level()
# Checks for prefab instantiation passed or not
# Instantiates a new car prefab instance
test_prefab = Prefab.get_prefab(EXISTING_TEST_PREFAB_FILE_NAME)
test_instance = test_prefab.instantiate(
prefab_position=INSTANTIATED_TEST_PREFAB_POSITION)
@@ -31,4 +30,4 @@ def Prefab_BasicWorkflow_InstantiatePrefab():
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Prefab_BasicWorkflow_InstantiatePrefab)
Report.start_test(PrefabBasicWorkflow_InstantiatePrefab)
@@ -7,9 +7,9 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
# fmt:off
class Tests():
find_empty_entity = ("Entity: 'EmptyEntity' found", "Entity: 'EmptyEntity' *not* found in level")
empty_entity_pos = ("'EmptyEntity' position is at the expected position", "'EmptyEntity' position is *not* at the expected position")
find_pxentity = ("Entity: 'EntityWithPxCollider' found", "Entity: 'EntityWithPxCollider' *not* found in level")
find_empty_entity = ("Entity: 'EmptyEntity' found", "Entity: 'EmptyEntity' *not* found in level")
empty_entity_pos = ("'EmptyEntity' position is at the expected position", "'EmptyEntity' position is *not* at the expected position")
find_pxentity = ("Entity: 'EntityWithPxCollider' found", "Entity: 'EntityWithPxCollider' *not* found in level")
pxentity_component = ("Entity: 'EntityWithPxCollider' has a Physx Collider", "Entity: 'EntityWithPxCollider' does *not* have a Physx Collider")
# fmt:on
@@ -0,0 +1,38 @@
"""
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
"""
import os
from azlmbr.entity import EntityId
from azlmbr.math import Vector3
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.bus as bus
import azlmbr.components as components
import azlmbr.entity as entity
import azlmbr.legacy.general as general
def check_entity_children_count(entity_id, expected_children_count):
entity_children_count_matched_result = (
"Entity with a unique name found",
"Entity with a unique name *not* found")
entity = EditorEntity(entity_id)
children_entity_ids = entity.get_children_ids()
entity_children_count_matched = len(children_entity_ids) == expected_children_count
Report.result(entity_children_count_matched_result, entity_children_count_matched)
if not entity_children_count_matched:
Report.info(f"Entity '{entity_id.ToString()}' actual children count: {len(children_entity_ids)}. Expected children count: {expected_children_count}")
return entity_children_count_matched
def open_base_tests_level():
helper.init_idle()
helper.open_level("Prefab", "Base")
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c3384e88cd0f47ab8ec81eb75101b02ff9675c76dc070c726a9f3f39f1b2b2df
size 4994448
@@ -1,16 +1,34 @@
ProductName: single_mesh_multiple_materials.dbgsg
debugSceneGraphVersion: 1
single_mesh_multiple_materials
Node Name: Torus
Node Path: RootNode.Torus
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Torus_1
Node Path: RootNode.Torus.Torus_1
Node Type: MeshData
Positions: Count 2304. Hash: 12560656679477605282
Normals: Count 2304. Hash: 14915939258818888021
FaceList: Count 1152. Hash: 3035560221708475304
FaceMaterialIds: Count 1152. Hash: 2033667258170256242
Node Name: Torus_optimized
Node Path: RootNode.Torus_optimized
Node Name: Torus_2
Node Path: RootNode.Torus.Torus_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Torus_1_optimized
Node Path: RootNode.Torus.Torus_1_optimized
Node Type: MeshData
Positions: Count 2304. Hash: 12560656679477605282
Normals: Count 2304. Hash: 14915939258818888021
@@ -18,7 +36,7 @@ Node Type: MeshData
FaceMaterialIds: Count 1152. Hash: 2033667258170256242
Node Name: transform
Node Path: RootNode.Torus.transform
Node Path: RootNode.Torus.Torus_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -27,13 +45,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UV0
Node Path: RootNode.Torus.UV0
Node Path: RootNode.Torus.Torus_1.UV0
Node Type: MeshVertexUVData
UVs: Count 2304. Hash: 6069930558565069665
UVCustomName: UV0
Node Name: OrangeMaterial
Node Path: RootNode.Torus.OrangeMaterial
Node Path: RootNode.Torus.Torus_1.OrangeMaterial
Node Type: MaterialData
MaterialName: OrangeMaterial
UniqueId: 10937477720113828524
@@ -63,7 +81,7 @@ Node Type: MaterialData
BaseColorTexture:
Node Name: SecondTextureMaterial
Node Path: RootNode.Torus.SecondTextureMaterial
Node Path: RootNode.Torus.Torus_1.SecondTextureMaterial
Node Type: MaterialData
MaterialName: SecondTextureMaterial
UniqueId: 16601413836225607467
@@ -93,7 +111,7 @@ Node Type: MaterialData
BaseColorTexture: OneMeshMultipleMaterials/FBXSecondTestTexture.png
Node Name: FirstTextureMaterial
Node Path: RootNode.Torus.FirstTextureMaterial
Node Path: RootNode.Torus.Torus_1.FirstTextureMaterial
Node Type: MaterialData
MaterialName: FirstTextureMaterial
UniqueId: 2580020563915538382
@@ -122,40 +140,21 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: OneMeshMultipleMaterials/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Torus.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Torus.Torus_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 2304. Hash: 17641066831235827929
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Torus.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Torus.Torus_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 2304. Hash: 6274616552656695154
TangentSpace: 1
Node Name: UV0
Node Path: RootNode.Torus_optimized.UV0
Node Type: MeshVertexUVData
UVs: Count 2304. Hash: 6069930558565069665
UVCustomName: UV0
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Torus_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 2304. Hash: 17641066831235827929
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Torus_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 2304. Hash: 6274616552656695154
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Torus_optimized.transform
Node Path: RootNode.Torus.Torus_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -163,8 +162,14 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UV0
Node Path: RootNode.Torus.Torus_2.UV0
Node Type: MeshVertexUVData
UVs: Count 2304. Hash: 6069930558565069665
UVCustomName: UV0
Node Name: OrangeMaterial
Node Path: RootNode.Torus_optimized.OrangeMaterial
Node Path: RootNode.Torus.Torus_2.OrangeMaterial
Node Type: MaterialData
MaterialName: OrangeMaterial
UniqueId: 10937477720113828524
@@ -194,7 +199,7 @@ Node Type: MaterialData
BaseColorTexture:
Node Name: SecondTextureMaterial
Node Path: RootNode.Torus_optimized.SecondTextureMaterial
Node Path: RootNode.Torus.Torus_2.SecondTextureMaterial
Node Type: MaterialData
MaterialName: SecondTextureMaterial
UniqueId: 16601413836225607467
@@ -224,7 +229,7 @@ Node Type: MaterialData
BaseColorTexture: OneMeshMultipleMaterials/FBXSecondTestTexture.png
Node Name: FirstTextureMaterial
Node Path: RootNode.Torus_optimized.FirstTextureMaterial
Node Path: RootNode.Torus.Torus_2.FirstTextureMaterial
Node Type: MaterialData
MaterialName: FirstTextureMaterial
UniqueId: 2580020563915538382
@@ -253,3 +258,120 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: OneMeshMultipleMaterials/FBXTestTexture.png
Node Name: UV0
Node Path: RootNode.Torus.Torus_1_optimized.UV0
Node Type: MeshVertexUVData
UVs: Count 2304. Hash: 6069930558565069665
UVCustomName: UV0
Node Name: TangentSet_0
Node Path: RootNode.Torus.Torus_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 2304. Hash: 17641066831235827929
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Torus.Torus_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 2304. Hash: 6274616552656695154
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Torus.Torus_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: OrangeMaterial
Node Path: RootNode.Torus.Torus_1_optimized.OrangeMaterial
Node Type: MaterialData
MaterialName: OrangeMaterial
UniqueId: 10937477720113828524
IsNoDraw: false
DiffuseColor: < 0.800000, 0.113346, 0.000000>
SpecularColor: < 0.800000, 0.113346, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: SecondTextureMaterial
Node Path: RootNode.Torus.Torus_1_optimized.SecondTextureMaterial
Node Type: MaterialData
MaterialName: SecondTextureMaterial
UniqueId: 16601413836225607467
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: OneMeshMultipleMaterials/FBXSecondTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: OneMeshMultipleMaterials/FBXSecondTestTexture.png
Node Name: FirstTextureMaterial
Node Path: RootNode.Torus.Torus_1_optimized.FirstTextureMaterial
Node Type: MaterialData
MaterialName: FirstTextureMaterial
UniqueId: 2580020563915538382
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: OneMeshMultipleMaterials/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: OneMeshMultipleMaterials/FBXTestTexture.png
@@ -1,16 +1,34 @@
ProductName: OneMeshOneMaterial.dbgsg
debugSceneGraphVersion: 1
OneMeshOneMaterial
Node Name: Cube
Node Path: RootNode.Cube
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1
Node Path: RootNode.Cube.Cube_1
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Name: Cube_2
Node Path: RootNode.Cube.Cube_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1_optimized
Node Path: RootNode.Cube.Cube_1_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
@@ -18,7 +36,7 @@ Node Type: MeshData
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: transform
Node Path: RootNode.Cube.transform
Node Path: RootNode.Cube.Cube_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -27,13 +45,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap
Node Path: RootNode.Cube.Cube_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: CubeMaterial
Node Path: RootNode.Cube.CubeMaterial
Node Path: RootNode.Cube.Cube_1.CubeMaterial
Node Type: MaterialData
MaterialName: CubeMaterial
UniqueId: 973942033197978066
@@ -62,40 +80,21 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: OneMeshOneMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Path: RootNode.Cube.Cube_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -103,8 +102,72 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.Cube_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: CubeMaterial
Node Path: RootNode.Cube_optimized.CubeMaterial
Node Path: RootNode.Cube.Cube_2.CubeMaterial
Node Type: MaterialData
MaterialName: CubeMaterial
UniqueId: 973942033197978066
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: OneMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: OneMeshOneMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cube.Cube_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube.Cube_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: CubeMaterial
Node Path: RootNode.Cube.Cube_1_optimized.CubeMaterial
Node Type: MaterialData
MaterialName: CubeMaterial
UniqueId: 973942033197978066
@@ -1,64 +1,109 @@
ProductName: lodtest.dbgsg
debugSceneGraphVersion: 1
lodtest
Node Name: lodtest
Node Path: RootNode.lodtest
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: lodtest_1
Node Path: RootNode.lodtest.lodtest_1
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: lodtest_lod3
Node Path: RootNode.lodtest_lod3
Node Name: lodtest_2
Node Path: RootNode.lodtest.lodtest_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: lodtest_1_optimized
Node Path: RootNode.lodtest.lodtest_1_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: lodtest_lod3_1
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1
Node Type: MeshData
Positions: Count 1984. Hash: 6600975913707260286
Normals: Count 1984. Hash: 2708036977889843831
FaceList: Count 960. Hash: 10390417165025722786
FaceMaterialIds: Count 960. Hash: 12510609185544665964
Node Name: lodtest_lod2
Node Path: RootNode.lodtest_lod2
Node Name: lodtest_lod3_2
Node Path: RootNode.lodtest_lod3.lodtest_lod3_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 2.298166, 0.000000>
Node Name: lodtest_lod3_1_optimized
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1_optimized
Node Type: MeshData
Positions: Count 1984. Hash: 6600975913707260286
Normals: Count 1984. Hash: 2708036977889843831
FaceList: Count 960. Hash: 10390417165025722786
FaceMaterialIds: Count 960. Hash: 12510609185544665964
Node Name: lodtest_lod2_1
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1
Node Type: MeshData
Positions: Count 240. Hash: 219362421205407416
Normals: Count 240. Hash: 11195242321181199939
FaceList: Count 80. Hash: 11130917988116538993
FaceMaterialIds: Count 80. Hash: 4190892684086530065
Node Name: lodtest_lod1
Node Path: RootNode.lodtest_lod1
Node Name: lodtest_lod2_2
Node Path: RootNode.lodtest_lod2.lodtest_lod2_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, -0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, -2.211498, 0.000000>
Node Name: lodtest_lod2_1_optimized
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1_optimized
Node Type: MeshData
Positions: Count 240. Hash: 219362421205407416
Normals: Count 240. Hash: 11195242321181199939
FaceList: Count 80. Hash: 11130917988116538993
FaceMaterialIds: Count 80. Hash: 4190892684086530065
Node Name: lodtest_lod1_1
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1
Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: lodtest_optimized
Node Path: RootNode.lodtest_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: lodtest_lod1_2
Node Path: RootNode.lodtest_lod1.lodtest_lod1_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 2.410331, 0.000000, 0.000000>
Node Name: lodtest_lod3_optimized
Node Path: RootNode.lodtest_lod3_optimized
Node Type: MeshData
Positions: Count 1984. Hash: 6600975913707260286
Normals: Count 1984. Hash: 2708036977889843831
FaceList: Count 960. Hash: 10390417165025722786
FaceMaterialIds: Count 960. Hash: 12510609185544665964
Node Name: lodtest_lod2_optimized
Node Path: RootNode.lodtest_lod2_optimized
Node Type: MeshData
Positions: Count 240. Hash: 219362421205407416
Normals: Count 240. Hash: 11195242321181199939
FaceList: Count 80. Hash: 11130917988116538993
FaceMaterialIds: Count 80. Hash: 4190892684086530065
Node Name: lodtest_lod1_optimized
Node Path: RootNode.lodtest_lod1_optimized
Node Name: lodtest_lod1_1_optimized
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized
Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856
@@ -66,7 +111,7 @@ Node Type: MeshData
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform
Node Path: RootNode.lodtest.transform
Node Path: RootNode.lodtest.lodtest_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -75,13 +120,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest.UVMap
Node Path: RootNode.lodtest.lodtest_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: Material
Node Path: RootNode.lodtest.Material
Node Path: RootNode.lodtest.lodtest_1.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
@@ -110,21 +155,124 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.lodtest.lodtest_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest.lodtest_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_lod3.transform
Node Path: RootNode.lodtest.lodtest_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest.lodtest_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: Material
Node Path: RootNode.lodtest.lodtest_2.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest.lodtest_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.lodtest.lodtest_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest.lodtest_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest.lodtest_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Material
Node Path: RootNode.lodtest.lodtest_1_optimized.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: transform
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -133,13 +281,13 @@ Node Type: TransformData
Transl: < 0.000000, 2.298166, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod3.UVMap
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 1984. Hash: 14119273880200542497
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod3.DefaultMaterial
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -168,21 +316,124 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 1984. Hash: 5664494957869921957
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 1984. Hash: 5048878728906162461
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_lod2.transform
Node Path: RootNode.lodtest_lod3.lodtest_lod3_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 2.298166, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod3.lodtest_lod3_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 1984. Hash: 14119273880200542497
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod3.lodtest_lod3_2.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 1984. Hash: 14119273880200542497
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 1984. Hash: 5664494957869921957
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 1984. Hash: 5048878728906162461
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 2.298166, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod3.lodtest_lod3_1_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: transform
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, -0.000000, 0.000000>
@@ -191,13 +442,13 @@ Node Type: TransformData
Transl: < 0.000000, -2.211498, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod2.UVMap
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 240. Hash: 13702273589593616598
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod2.DefaultMaterial
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -226,21 +477,124 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 240. Hash: 1390901212717410749
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 240. Hash: 1379238632949267281
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_lod1.transform
Node Path: RootNode.lodtest_lod2.lodtest_lod2_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, -0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, -2.211498, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod2.lodtest_lod2_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 240. Hash: 13702273589593616598
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod2.lodtest_lod2_2.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 240. Hash: 13702273589593616598
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 240. Hash: 1390901212717410749
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 240. Hash: 1379238632949267281
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, -0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, -2.211498, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod2.lodtest_lod2_1_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: transform
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -249,13 +603,13 @@ Node Type: TransformData
Transl: < 2.410331, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod1.UVMap
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod1.DefaultMaterial
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -284,107 +638,36 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.lodtest_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_optimized.transform
Node Path: RootNode.lodtest_lod1.lodtest_lod1_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Material
Node Path: RootNode.lodtest_optimized.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Transl: < 2.410331, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod3_optimized.UVMap
Node Path: RootNode.lodtest_lod1.lodtest_lod1_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 1984. Hash: 14119273880200542497
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 1984. Hash: 5664494957869921957
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 1984. Hash: 5048878728906162461
TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod3_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 2.298166, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod3_optimized.DefaultMaterial
Node Path: RootNode.lodtest_lod1.lodtest_lod1_2.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -414,84 +697,26 @@ Node Type: MaterialData
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod2_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 240. Hash: 13702273589593616598
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 240. Hash: 1390901212717410749
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 240. Hash: 1379238632949267281
TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod2_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, -0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, -2.211498, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod2_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod1_optimized.UVMap
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 13790301632763350589
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1_optimized.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1_optimized.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.lodtest_lod1_optimized.transform
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -500,7 +725,7 @@ Node Type: TransformData
Transl: < 2.410331, 0.000000, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod1_optimized.DefaultMaterial
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -528,4 +753,3 @@ Node Type: MaterialData
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
@@ -1,32 +1,59 @@
ProductName: physicstest.dbgsg
debugSceneGraphVersion: 1
physicstest
Node Name: Cone
Node Path: RootNode.Cone
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cone_1
Node Path: RootNode.Cone.Cone_1
Node Type: MeshData
Positions: Count 128. Hash: 7714223793259938211
Normals: Count 128. Hash: 2352668179264002707
FaceList: Count 62. Hash: 14563017593520122982
FaceMaterialIds: Count 62. Hash: 12234218120113875284
Node Name: Cube_phys
Node Path: RootNode.Cube_phys
Node Type: MeshData
Positions: Count 24. Hash: 3478903613105670818
Normals: Count 24. Hash: 7251512570672401149
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cone_2
Node Path: RootNode.Cone.Cone_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cone_optimized
Node Path: RootNode.Cone_optimized
Node Name: Cone_1_optimized
Node Path: RootNode.Cone.Cone_1_optimized
Node Type: MeshData
Positions: Count 128. Hash: 10174710861731544050
Normals: Count 128. Hash: 2352668179264002707
FaceList: Count 62. Hash: 11332459830831720586
FaceMaterialIds: Count 62. Hash: 12234218120113875284
Node Name: Cube_phys_1
Node Path: RootNode.Cube_phys.Cube_phys_1
Node Type: MeshData
Positions: Count 24. Hash: 3478903613105670818
Normals: Count 24. Hash: 7251512570672401149
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cube_phys_2
Node Path: RootNode.Cube_phys.Cube_phys_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: transform
Node Path: RootNode.Cone.transform
Node Path: RootNode.Cone.Cone_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -35,13 +62,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cone.UVMap
Node Path: RootNode.Cone.Cone_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 10171083346831193808
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.Cone.DefaultMaterial
Node Path: RootNode.Cone.Cone_1.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -70,21 +97,21 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cone.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 14351734474754285313
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cone.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 15997251922861304891
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube_phys.transform
Node Path: RootNode.Cone.Cone_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -93,13 +120,116 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube_phys.UVMap
Node Path: RootNode.Cone.Cone_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 10171083346831193808
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.Cone.Cone_2.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.Cone.Cone_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 7873368003484215433
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 12937806066914201637
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 873786942732834087
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cone.Cone_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.Cone.Cone_1_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: transform
Node Path: RootNode.Cube_phys.Cube_phys_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube_phys.Cube_phys_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 13623018071435219250
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.Cube_phys.DefaultMaterial
Node Path: RootNode.Cube_phys.Cube_phys_1.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -128,40 +258,21 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_phys.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube_phys.Cube_phys_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 11965897353301448436
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_phys.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube_phys.Cube_phys_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 17515781720544086759
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cone_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 7873368003484215433
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cone_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 12937806066914201637
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cone_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 873786942732834087
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cone_optimized.transform
Node Path: RootNode.Cube_phys.Cube_phys_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -169,8 +280,14 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube_phys.Cube_phys_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 13623018071435219250
UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.Cone_optimized.DefaultMaterial
Node Path: RootNode.Cube_phys.Cube_phys_2.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
@@ -198,4 +315,3 @@ Node Type: MaterialData
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
@@ -1,32 +1,59 @@
ProductName: multiple_mesh_linked_materials.dbgsg
debugSceneGraphVersion: 1
multiple_mesh_linked_materials
Node Name: Cube
Node Path: RootNode.Cube
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1
Node Path: RootNode.Cube.Cube_1
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7113802799051126666
Node Name: Cone
Node Path: RootNode.Cone
Node Name: Cube_2
Node Path: RootNode.Cube.Cube_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1_optimized
Node Path: RootNode.Cube.Cube_1_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7113802799051126666
Node Name: Cone_1
Node Path: RootNode.Cone.Cone_1
Node Type: MeshData
Positions: Count 128. Hash: 12506421592104186200
Normals: Count 128. Hash: 367461522682321485
FaceList: Count 62. Hash: 13208951979626973193
FaceMaterialIds: Count 62. Hash: 15454348664434923102
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7113802799051126666
Node Name: Cone_2
Node Path: RootNode.Cone.Cone_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 2.000000>
Node Name: Cone_optimized
Node Path: RootNode.Cone_optimized
Node Name: Cone_1_optimized
Node Path: RootNode.Cone.Cone_1_optimized
Node Type: MeshData
Positions: Count 128. Hash: 14946490408303214595
Normals: Count 128. Hash: 367461522682321485
@@ -34,7 +61,7 @@ Node Type: MeshData
FaceMaterialIds: Count 62. Hash: 15454348664434923102
Node Name: transform
Node Path: RootNode.Cube.transform
Node Path: RootNode.Cube.Cube_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -43,13 +70,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UV0
Node Path: RootNode.Cube.UV0
Node Path: RootNode.Cube.Cube_1.UV0
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UV0
Node Name: SharedBlack
Node Path: RootNode.Cube.SharedBlack
Node Path: RootNode.Cube.Cube_1.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
@@ -79,7 +106,7 @@ Node Type: MaterialData
BaseColorTexture:
Node Name: SharedOrange
Node Path: RootNode.Cube.SharedOrange
Node Path: RootNode.Cube.Cube_1.SharedOrange
Node Type: MaterialData
MaterialName: SharedOrange
UniqueId: 9470651048605569128
@@ -108,21 +135,184 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cone.transform
Node Path: RootNode.Cube.Cube_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UV0
Node Path: RootNode.Cube.Cube_2.UV0
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UV0
Node Name: SharedBlack
Node Path: RootNode.Cube.Cube_2.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
IsNoDraw: false
DiffuseColor: < 0.000000, 0.000000, 0.000000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: SharedOrange
Node Path: RootNode.Cube.Cube_2.SharedOrange
Node Type: MaterialData
MaterialName: SharedOrange
UniqueId: 9470651048605569128
IsNoDraw: false
DiffuseColor: < 0.800000, 0.139382, 0.014429>
SpecularColor: < 0.800000, 0.139382, 0.014429>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UV0
Node Path: RootNode.Cube.Cube_1_optimized.UV0
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UV0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube.Cube_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SharedBlack
Node Path: RootNode.Cube.Cube_1_optimized.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
IsNoDraw: false
DiffuseColor: < 0.000000, 0.000000, 0.000000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: SharedOrange
Node Path: RootNode.Cube.Cube_1_optimized.SharedOrange
Node Type: MaterialData
MaterialName: SharedOrange
UniqueId: 9470651048605569128
IsNoDraw: false
DiffuseColor: < 0.800000, 0.139382, 0.014429>
SpecularColor: < 0.800000, 0.139382, 0.014429>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: transform
Node Path: RootNode.Cone.Cone_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -131,13 +321,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 2.000000>
Node Name: UV0
Node Path: RootNode.Cone.UV0
Node Path: RootNode.Cone.Cone_1.UV0
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 10291654057525777310
UVCustomName: UV0
Node Name: SharedOrange
Node Path: RootNode.Cone.SharedOrange
Node Path: RootNode.Cone.Cone_1.SharedOrange
Node Type: MaterialData
MaterialName: SharedOrange
UniqueId: 9470651048605569128
@@ -167,7 +357,7 @@ Node Type: MaterialData
BaseColorTexture:
Node Name: SharedBlack
Node Path: RootNode.Cone.SharedBlack
Node Path: RootNode.Cone.Cone_1.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
@@ -196,79 +386,36 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cone.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 12695232913942738512
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cone.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 9034210764777745751
TangentSpace: 1
Node Name: UV0
Node Path: RootNode.Cube_optimized.UV0
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UV0
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Path: RootNode.Cone.Cone_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Transl: < 0.000000, 0.000000, 2.000000>
Node Name: SharedBlack
Node Path: RootNode.Cube_optimized.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
IsNoDraw: false
DiffuseColor: < 0.000000, 0.000000, 0.000000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UV0
Node Path: RootNode.Cone.Cone_2.UV0
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 10291654057525777310
UVCustomName: UV0
Node Name: SharedOrange
Node Path: RootNode.Cube_optimized.SharedOrange
Node Path: RootNode.Cone.Cone_2.SharedOrange
Node Type: MaterialData
MaterialName: SharedOrange
UniqueId: 9470651048605569128
@@ -297,27 +444,57 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: SharedBlack
Node Path: RootNode.Cone.Cone_2.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
IsNoDraw: false
DiffuseColor: < 0.000000, 0.000000, 0.000000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UV0
Node Path: RootNode.Cone_optimized.UV0
Node Path: RootNode.Cone.Cone_1_optimized.UV0
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 7173974213247584731
UVCustomName: UV0
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cone_optimized.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 10740776669168782230
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cone_optimized.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 6990068477421150065
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cone_optimized.transform
Node Path: RootNode.Cone.Cone_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -326,7 +503,7 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 2.000000>
Node Name: SharedOrange
Node Path: RootNode.Cone_optimized.SharedOrange
Node Path: RootNode.Cone.Cone_1_optimized.SharedOrange
Node Type: MaterialData
MaterialName: SharedOrange
UniqueId: 9470651048605569128
@@ -356,7 +533,7 @@ Node Type: MaterialData
BaseColorTexture:
Node Name: SharedBlack
Node Path: RootNode.Cone_optimized.SharedBlack
Node Path: RootNode.Cone.Cone_1_optimized.SharedBlack
Node Type: MaterialData
MaterialName: SharedBlack
UniqueId: 5248829540156873090
@@ -384,4 +561,3 @@ Node Type: MaterialData
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
@@ -1,32 +1,59 @@
ProductName: multiple_mesh_one_material.dbgsg
debugSceneGraphVersion: 1
multiple_mesh_one_material
Node Name: Cube
Node Path: RootNode.Cube
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1
Node Path: RootNode.Cube.Cube_1
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder
Node Path: RootNode.Cylinder
Node Name: Cube_2
Node Path: RootNode.Cube.Cube_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1_optimized
Node Path: RootNode.Cube.Cube_1_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_1
Node Path: RootNode.Cylinder.Cylinder_1
Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_2
Node Path: RootNode.Cylinder.Cylinder_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: Cylinder_optimized
Node Path: RootNode.Cylinder_optimized
Node Name: Cylinder_1_optimized
Node Path: RootNode.Cylinder.Cylinder_1_optimized
Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856
@@ -34,7 +61,7 @@ Node Type: MeshData
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform
Node Path: RootNode.Cube.transform
Node Path: RootNode.Cube.Cube_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -43,13 +70,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap
Node Path: RootNode.Cube.Cube_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.SingleMaterial
Node Path: RootNode.Cube.Cube_1.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
@@ -78,21 +105,124 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cylinder.transform
Node Path: RootNode.Cube.Cube_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.Cube_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.Cube_2.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cube.Cube_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube.Cube_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube.Cube_1_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: transform
Node Path: RootNode.Cylinder.Cylinder_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -101,13 +231,13 @@ Node Type: TransformData
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.UVMap
Node Path: RootNode.Cylinder.Cylinder_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cylinder.SingleMaterial
Node Path: RootNode.Cylinder.Cylinder_1.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
@@ -136,49 +266,36 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Path: RootNode.Cylinder.Cylinder_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.Cylinder_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube_optimized.SingleMaterial
Node Path: RootNode.Cylinder.Cylinder_2.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
@@ -208,26 +325,26 @@ Node Type: MaterialData
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cylinder_optimized.UVMap
Node Path: RootNode.Cylinder.Cylinder_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 13790301632763350589
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cylinder_optimized.transform
Node Path: RootNode.Cylinder.Cylinder_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -236,7 +353,7 @@ Node Type: TransformData
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cylinder_optimized.SingleMaterial
Node Path: RootNode.Cylinder.Cylinder_1_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
@@ -264,4 +381,3 @@ Node Type: MaterialData
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
@@ -1,32 +1,59 @@
ProductName: multiple_mesh_multiple_material.dbgsg
debugSceneGraphVersion: 1
multiple_mesh_multiple_material
Node Name: Cube
Node Path: RootNode.Cube
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1
Node Path: RootNode.Cube.Cube_1
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder
Node Path: RootNode.Cylinder
Node Name: Cube_2
Node Path: RootNode.Cube.Cube_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1_optimized
Node Path: RootNode.Cube.Cube_1_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_1
Node Path: RootNode.Cylinder.Cylinder_1
Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_2
Node Path: RootNode.Cylinder.Cylinder_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: Cylinder_optimized
Node Path: RootNode.Cylinder_optimized
Node Name: Cylinder_1_optimized
Node Path: RootNode.Cylinder.Cylinder_1_optimized
Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856
@@ -34,7 +61,7 @@ Node Type: MeshData
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform
Node Path: RootNode.Cube.transform
Node Path: RootNode.Cube.Cube_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -43,13 +70,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap
Node Path: RootNode.Cube.Cube_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.SingleMaterial
Node Path: RootNode.Cube.Cube_1.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
@@ -78,21 +105,124 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cylinder.transform
Node Path: RootNode.Cube.Cube_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.Cube_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.Cube_2.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cube.Cube_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube.Cube_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube.Cube_1_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: transform
Node Path: RootNode.Cylinder.Cylinder_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -101,13 +231,13 @@ Node Type: TransformData
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.UVMap
Node Path: RootNode.Cylinder.Cylinder_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SecondMaterial
Node Path: RootNode.Cylinder.SecondMaterial
Node Path: RootNode.Cylinder.Cylinder_1.SecondMaterial
Node Type: MaterialData
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
@@ -136,55 +266,42 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Path: RootNode.Cylinder.Cylinder_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube_optimized.SingleMaterial
Node Name: UVMap
Node Path: RootNode.Cylinder.Cylinder_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SecondMaterial
Node Path: RootNode.Cylinder.Cylinder_2.SecondMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
@@ -197,7 +314,7 @@ Node Type: MaterialData
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
DiffuseTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
@@ -205,29 +322,29 @@ Node Type: MaterialData
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cylinder_optimized.UVMap
Node Path: RootNode.Cylinder.Cylinder_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 13790301632763350589
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cylinder_optimized.transform
Node Path: RootNode.Cylinder.Cylinder_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -236,7 +353,7 @@ Node Type: TransformData
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: SecondMaterial
Node Path: RootNode.Cylinder_optimized.SecondMaterial
Node Path: RootNode.Cylinder.Cylinder_1_optimized.SecondMaterial
Node Type: MaterialData
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
@@ -264,4 +381,3 @@ Node Type: MaterialData
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
@@ -1,32 +1,59 @@
ProductName: multiple_mesh_multiple_material.dbgsg
debugSceneGraphVersion: 1
multiple_mesh_multiple_material
Node Name: Cube
Node Path: RootNode.Cube
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1
Node Path: RootNode.Cube.Cube_1
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder
Node Path: RootNode.Cylinder
Node Name: Cube_2
Node Path: RootNode.Cube.Cube_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1_optimized
Node Path: RootNode.Cube.Cube_1_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_1
Node Path: RootNode.Cylinder.Cylinder_1
Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_2
Node Path: RootNode.Cylinder.Cylinder_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: transform
Node Path: RootNode.Cube.transform
Node Path: RootNode.Cube.Cube_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -35,13 +62,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap
Node Path: RootNode.Cube.Cube_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.SingleMaterial
Node Path: RootNode.Cube.Cube_1.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
@@ -70,21 +97,124 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cylinder.transform
Node Path: RootNode.Cube.Cube_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.Cube_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.Cube_2.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cube.Cube_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube.Cube_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube.Cube_1_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: transform
Node Path: RootNode.Cylinder.Cylinder_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -93,13 +223,13 @@ Node Type: TransformData
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.UVMap
Node Path: RootNode.Cylinder.Cylinder_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SecondMaterial
Node Path: RootNode.Cylinder.SecondMaterial
Node Path: RootNode.Cylinder.Cylinder_1.SecondMaterial
Node Type: MaterialData
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
@@ -128,55 +258,42 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
GenerationMethod: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Path: RootNode.Cylinder.Cylinder_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube_optimized.SingleMaterial
Node Name: UVMap
Node Path: RootNode.Cylinder.Cylinder_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SecondMaterial
Node Path: RootNode.Cylinder.Cylinder_2.SecondMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
@@ -189,7 +306,7 @@ Node Type: MaterialData
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
DiffuseTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
@@ -197,5 +314,4 @@ Node Type: MaterialData
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
@@ -1,30 +1,48 @@
ProductName: vertexcolor.dbgsg
debugSceneGraphVersion: 1
vertexcolor
Node Name: Cube
Node Path: RootNode.Cube
Node Name: RootNode
Node Path: RootNode
Node Type: RootBoneData
WorldTransform:
BasisX: < 1.000000, 0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: < 0.000000, 0.000000, 1.000000>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1
Node Path: RootNode.Cube.Cube_1
Node Type: MeshData
Positions: Count 24576. Hash: 7031773714680283213
Normals: Count 24576. Hash: 8968157737282745201
FaceList: Count 12288. Hash: 13183441914179219962
FaceMaterialIds: Count 12288. Hash: 12545154121625736090
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Name: Cube_2
Node Path: RootNode.Cube.Cube_2
Node Type: BoneData
WorldTransform:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Cube_1_optimized
Node Path: RootNode.Cube.Cube_1_optimized
Node Type: MeshData
Positions: Count 24576. Hash: 7031773714680283213
Normals: Count 24576. Hash: 8968157737282745201
FaceList: Count 12288. Hash: 13183441914179219962
Positions: Count 6376. Hash: 10806296444120211070
Normals: Count 6376. Hash: 3814626075063770280
FaceList: Count 12288. Hash: 15242182080304859208
FaceMaterialIds: Count 12288. Hash: 12545154121625736090
Node Name: Col0
Node Path: RootNode.Cube.Col0
Node Path: RootNode.Cube.Cube_1.Col0
Node Type: MeshVertexColorData
Colors: Count 24576. Hash: 17169952715183318502
ColorsCustomName:
Node Name: transform
Node Path: RootNode.Cube.transform
Node Path: RootNode.Cube.Cube_1.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -33,13 +51,13 @@ Node Type: TransformData
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap
Node Path: RootNode.Cube.Cube_1.UVMap
Node Type: MeshVertexUVData
UVs: Count 24576. Hash: 4554678369329207802
UVCustomName: UVMap
Node Name: Material
Node Path: RootNode.Cube.Material
Node Path: RootNode.Cube.Cube_1.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
@@ -68,46 +86,27 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 24576. Hash: 13321090379606717973
TangentSpace: 1
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24576. Hash: 17217515414004886507
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24576. Hash: 4554678369329207802
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24576. Hash: 13321090379606717973
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24576. Hash: 17217515414004886507
TangentSpace: 1
GenerationMethod: 1
Node Name: Col0
Node Path: RootNode.Cube_optimized.Col0
Node Path: RootNode.Cube.Cube_2.Col0
Node Type: MeshVertexColorData
Colors: Count 24576. Hash: 17169952715183318502
ColorsCustomName:
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Path: RootNode.Cube.Cube_2.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
@@ -115,8 +114,14 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.Cube_2.UVMap
Node Type: MeshVertexUVData
UVs: Count 24576. Hash: 4554678369329207802
UVCustomName: UVMap
Node Name: Material
Node Path: RootNode.Cube_optimized.Material
Node Path: RootNode.Cube.Cube_2.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
@@ -145,3 +150,66 @@ Node Type: MaterialData
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.Cube.Cube_1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 6376. Hash: 12957930967905951851
UVCustomName: UVMap
Node Name: TangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData
Tangents: Count 6376. Hash: 7712841033379094373
GenerationMethod: 1
SetIndex: 0
Node Name: BitangentSet_0
Node Path: RootNode.Cube.Cube_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData
Bitangents: Count 6376. Hash: 12547048737213169362
GenerationMethod: 1
Node Name: Col0
Node Path: RootNode.Cube.Cube_1_optimized.Col0
Node Type: MeshVertexColorData
Colors: Count 6376. Hash: 8761962599807935159
ColorsCustomName:
Node Name: transform
Node Path: RootNode.Cube.Cube_1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Material
Node Path: RootNode.Cube.Cube_1_optimized.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:

Some files were not shown because too many files have changed in this diff Show More