Merge branch 'development' into Atom/santorac/FixSceneSrgTime
This commit is contained in:
@@ -7,20 +7,30 @@ labels: 'needs-triage,needs-sig,kind/bug'
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
A clear and concise description of what the bug is. Try to isolate the issue to help the community to reproduce it easily and increase chances for a fast fix.
|
||||
|
||||
**To Reproduce**
|
||||
**Steps to reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
2. Click on '...'
|
||||
3. Select attached asset '...'
|
||||
4. Scroll down to '...'
|
||||
5. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
**Actual behavior**
|
||||
A clear and concise description of what actually happened.
|
||||
|
||||
**Assets required**
|
||||
Provide sample assets needed to reproduce the issue.
|
||||
|
||||
**Screenshots/Video**
|
||||
If applicable, add screenshots and/or a video to help explain your problem.
|
||||
|
||||
**Found in Branch**
|
||||
Name of or link to the branch where the issue occurs.
|
||||
|
||||
**Desktop/Device (please complete the following information):**
|
||||
- Device: [e.g. PC, Mac, iPhone, Samsung]
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=Diffuse_lowQ
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /mipmaps=0 /preset=AlbedoWithGenericAlpha /reduce=-1
|
||||
@@ -185,7 +185,7 @@
|
||||
{
|
||||
"id": {
|
||||
"materialAssetId": {
|
||||
"guid": "{935F694A-8639-515B-8133-81CDC7948E5B}",
|
||||
"guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
|
||||
"subId": 803645540
|
||||
}
|
||||
}
|
||||
@@ -197,7 +197,7 @@
|
||||
"id": {
|
||||
"lodIndex": 0,
|
||||
"materialAssetId": {
|
||||
"guid": "{935F694A-8639-515B-8133-81CDC7948E5B}",
|
||||
"guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
|
||||
"subId": 803645540
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
|
||||
# This script shows basic usage of LuaSymbolsReporterBus,
|
||||
# Which can be used to report all symbols available for
|
||||
# game scripting with Lua.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
import azlmbr.bus as azbus
|
||||
import azlmbr.script as azscript
|
||||
import azlmbr.legacy.general as azgeneral
|
||||
|
||||
|
||||
def _dump_class_symbol(class_symbol: azlmbr.script.LuaClassSymbol):
|
||||
print(f"** {class_symbol}")
|
||||
print("Properties:")
|
||||
for property_symbol in class_symbol.properties:
|
||||
print(f" - {property_symbol}")
|
||||
print("Methods:")
|
||||
for method_symbol in class_symbol.methods:
|
||||
print(f" - {method_symbol}")
|
||||
|
||||
|
||||
def _dump_lua_classes():
|
||||
class_symbols = azscript.LuaSymbolsReporterBus(azbus.Broadcast,
|
||||
"GetListOfClasses")
|
||||
print("======== Classes ==========")
|
||||
sorted_classes_by_named = sorted(class_symbols, key=lambda class_symbol: class_symbol.name)
|
||||
for class_symbol in sorted_classes_by_named:
|
||||
_dump_class_symbol(class_symbol)
|
||||
print("\n\n")
|
||||
|
||||
|
||||
def _dump_lua_globals():
|
||||
global_properties = azscript.LuaSymbolsReporterBus(azbus.Broadcast,
|
||||
"GetListOfGlobalProperties")
|
||||
print("======== Global Properties ==========")
|
||||
sorted_properties_by_name = sorted(global_properties, key=lambda symbol: symbol.name)
|
||||
for property_symbol in sorted_properties_by_name:
|
||||
print(f"- {property_symbol}")
|
||||
print("\n\n")
|
||||
global_functions = azscript.LuaSymbolsReporterBus(azbus.Broadcast,
|
||||
"GetListOfGlobalFunctions")
|
||||
print("======== Global Functions ==========")
|
||||
sorted_functions_by_name = sorted(global_functions, key=lambda symbol: symbol.name)
|
||||
for function_symbol in sorted_functions_by_name:
|
||||
print(f"- {function_symbol}")
|
||||
print("\n\n")
|
||||
|
||||
|
||||
def _dump_lua_ebus(ebus_symbol: azlmbr.script.LuaEBusSymbol):
|
||||
print(f">> {ebus_symbol}")
|
||||
sorted_senders = sorted(ebus_symbol.senders, key=lambda symbol: symbol.name)
|
||||
for sender in sorted_senders:
|
||||
print(f" - {sender}")
|
||||
print("\n")
|
||||
|
||||
|
||||
def _dump_lua_ebuses():
|
||||
ebuses = azscript.LuaSymbolsReporterBus(azbus.Broadcast,
|
||||
"GetListOfEBuses")
|
||||
print("======== Ebus List ==========")
|
||||
sorted_ebuses_by_name = sorted(ebuses, key=lambda symbol: symbol.name)
|
||||
for ebus_symbol in sorted_ebuses_by_name:
|
||||
_dump_lua_ebus(ebus_symbol)
|
||||
print("\n\n")
|
||||
|
||||
|
||||
class WhatToDo:
|
||||
DumpClasses = "c"
|
||||
DumpGlobals = "g"
|
||||
DumpEBuses = "e"
|
||||
|
||||
if __name__ == "__main__":
|
||||
redirecting_stdout = False
|
||||
orig_stdout = sys.stdout
|
||||
if len(sys.argv) > 1:
|
||||
output_file_name = sys.argv[1]
|
||||
if not os.path.isabs(output_file_name):
|
||||
game_root_path = os.path.normpath(azgeneral.get_game_folder())
|
||||
output_file_name = os.path.join(game_root_path, output_file_name)
|
||||
try:
|
||||
file_obj = open(output_file_name, 'wt')
|
||||
sys.stdout = file_obj
|
||||
redirecting_stdout = True
|
||||
except Exception as e:
|
||||
print(f"Failed to open {output_file_name}: {e}")
|
||||
sys.exit(-1)
|
||||
|
||||
what_to_do = [action.lower() for action in sys.argv[2:]]
|
||||
|
||||
# If the user did not specify what to do, then let's dump
|
||||
# all the symbols.
|
||||
if len(what_to_do) < 1:
|
||||
what_to_do = [WhatToDo.DumpClasses, WhatToDo.DumpGlobals, WhatToDo.DumpEBuses]
|
||||
|
||||
for action in what_to_do:
|
||||
if action == WhatToDo.DumpClasses:
|
||||
_dump_lua_classes()
|
||||
elif action == WhatToDo.DumpGlobals:
|
||||
_dump_lua_globals()
|
||||
elif action == WhatToDo.DumpEBuses:
|
||||
_dump_lua_ebuses()
|
||||
|
||||
if redirecting_stdout:
|
||||
sys.stdout.close()
|
||||
sys.stdout = orig_stdout
|
||||
print(f" Lua Symbols Are available in: {output_file_name}")
|
||||
@@ -7,8 +7,6 @@
|
||||
<Tool Title="| Draw Helpers" Command="p_draw_helpers" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| AI Debug Draw" Command="ai_DebugDraw" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Toggle Music" Command="s_MusicEnable" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Toggle Sound" Command="s_SoundEnable" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Toggle ForcefeedBack" Command="i_forcefeedback" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Freeze Camera " Command="e_CameraFreeze" EditorCmd="" ToggleVar="1"/>
|
||||
<Tool Title="| Log Verbosity 0" Command="log_Verbosity 0" EditorCmd="" ToggleVar="0"/>
|
||||
<Tool Title="| SaveLevelStats" Command="savelevelstats" EditorCmd="" ToggleVar="0"/>
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
ConsoleHide
|
||||
g_godMode=1
|
||||
sys_warnings=0
|
||||
con_showonload=1
|
||||
i_forcefeedback=0
|
||||
g_infiniteammo=1
|
||||
e_ObjectLayersActivation=0
|
||||
e_ObjectLayersActivationPhysics=0
|
||||
g_flashrenderingduringloading=0
|
||||
sys_maxfps=0
|
||||
r_vsync=0
|
||||
p_max_substeps=1
|
||||
demo_file=autotest
|
||||
demo_num_runs=0
|
||||
demo_quit=1
|
||||
demo_ai=1
|
||||
|
||||
@@ -1,15 +1,5 @@
|
||||
ConsoleHide
|
||||
g_godMode=1
|
||||
g_infiniteammo=1
|
||||
r_displayinfo=1
|
||||
s_profiling=1
|
||||
sys_maxfps=0
|
||||
e_ObjectLayersActivation=0
|
||||
e_ObjectLayersActivationPhysics=0
|
||||
|
||||
demo_file=autotest
|
||||
demo_num_runs=2
|
||||
demo_quit=1
|
||||
demo_savestats=1
|
||||
demo_profile=-1
|
||||
demo
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
ConsoleHide
|
||||
g_godMode=1
|
||||
g_infiniteammo=1
|
||||
r_displayinfo=1
|
||||
s_profiling=1
|
||||
sys_maxfps=0
|
||||
demo_file=playthru
|
||||
demo_num_runs=2
|
||||
demo_quit=1
|
||||
demo_savestats=1
|
||||
demo_profile=-1
|
||||
demo
|
||||
demo
|
||||
|
||||
@@ -11,113 +11,16 @@
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
sys_spec_ObjectDetail=7
|
||||
sys_spec_Shading=7
|
||||
sys_spec_VolumetricEffects=7
|
||||
sys_spec_Shadows=7
|
||||
sys_spec_Texture=7
|
||||
sys_spec_Physics=7
|
||||
sys_spec_PostProcessing=7
|
||||
sys_spec_Particles=7
|
||||
sys_spec_Sound=7
|
||||
sys_spec_Water=7
|
||||
sys_spec_GameEffects=7
|
||||
sys_spec_light=7
|
||||
|
||||
[1]
|
||||
sys_spec_ObjectDetail=1
|
||||
sys_spec_Shading=1
|
||||
sys_spec_VolumetricEffects=1
|
||||
sys_spec_Shadows=1
|
||||
sys_spec_Texture=1
|
||||
sys_spec_Physics=1
|
||||
sys_spec_PostProcessing=1
|
||||
sys_spec_Particles=1
|
||||
sys_spec_Sound=1
|
||||
sys_spec_Water=1
|
||||
sys_spec_GameEffects=1
|
||||
sys_spec_light=1
|
||||
|
||||
[2]
|
||||
sys_spec_ObjectDetail=2
|
||||
sys_spec_Shading=2
|
||||
sys_spec_VolumetricEffects=2
|
||||
sys_spec_Shadows=2
|
||||
sys_spec_Texture=2
|
||||
sys_spec_Physics=2
|
||||
sys_spec_PostProcessing=2
|
||||
sys_spec_Particles=2
|
||||
sys_spec_Sound=2
|
||||
sys_spec_Water=2
|
||||
sys_spec_GameEffects=2
|
||||
sys_spec_light=2
|
||||
|
||||
[3]
|
||||
sys_spec_ObjectDetail=3
|
||||
sys_spec_Shading=3
|
||||
sys_spec_VolumetricEffects=3
|
||||
sys_spec_Shadows=3
|
||||
sys_spec_Texture=3
|
||||
sys_spec_Physics=3
|
||||
sys_spec_PostProcessing=3
|
||||
sys_spec_Particles=3
|
||||
sys_spec_Sound=3
|
||||
sys_spec_Water=3
|
||||
sys_spec_GameEffects=3
|
||||
sys_spec_light=3
|
||||
|
||||
[4]
|
||||
sys_spec_ObjectDetail=4
|
||||
sys_spec_Shading=4
|
||||
sys_spec_VolumetricEffects=4
|
||||
sys_spec_Shadows=4
|
||||
sys_spec_Texture=4
|
||||
sys_spec_Physics=4
|
||||
sys_spec_PostProcessing=4
|
||||
sys_spec_Particles=4
|
||||
sys_spec_Sound=4
|
||||
sys_spec_Water=4
|
||||
sys_spec_GameEffects=4
|
||||
sys_spec_light=4
|
||||
|
||||
[5]
|
||||
sys_spec_ObjectDetail=5
|
||||
sys_spec_Shading=5
|
||||
sys_spec_VolumetricEffects=5
|
||||
sys_spec_Shadows=5
|
||||
sys_spec_Texture=5
|
||||
sys_spec_Physics=5
|
||||
sys_spec_PostProcessing=5
|
||||
sys_spec_Particles=5
|
||||
sys_spec_Sound=5
|
||||
sys_spec_Water=5
|
||||
sys_spec_GameEffects=5
|
||||
sys_spec_light=5
|
||||
|
||||
[6]
|
||||
sys_spec_ObjectDetail=6
|
||||
sys_spec_Shading=6
|
||||
sys_spec_VolumetricEffects=6
|
||||
sys_spec_Shadows=6
|
||||
sys_spec_Texture=6
|
||||
sys_spec_Physics=6
|
||||
sys_spec_PostProcessing=6
|
||||
sys_spec_Particles=6
|
||||
sys_spec_Sound=6
|
||||
sys_spec_Water=6
|
||||
sys_spec_GameEffects=6
|
||||
sys_spec_light=6
|
||||
|
||||
[8]
|
||||
sys_spec_ObjectDetail=8
|
||||
sys_spec_Shading=8
|
||||
sys_spec_VolumetricEffects=8
|
||||
sys_spec_Shadows=8
|
||||
sys_spec_Texture=8
|
||||
sys_spec_Physics=8
|
||||
sys_spec_PostProcessing=8
|
||||
sys_spec_Particles=8
|
||||
sys_spec_Sound=8
|
||||
sys_spec_Water=8
|
||||
sys_spec_GameEffects=8
|
||||
sys_spec_light=8
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
mfx_Timeout = 0.01
|
||||
|
||||
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
ca_AttachmentCullingRation=360
|
||||
es_DebrisLifetimeScale=1
|
||||
e_CoverageBufferReproj=6
|
||||
e_DecalsAllowGameDecals=1
|
||||
e_DecalsLifeTimeScale=2
|
||||
e_DecalsOverlapping=1
|
||||
e_Dissolve=2
|
||||
e_LightQuality=3
|
||||
e_LodMin=0
|
||||
e_LodRatio=20
|
||||
e_MaxViewDistSpecLerp=1
|
||||
e_MergedMeshesInstanceDist=1.0
|
||||
e_MergedMeshesPool=8192
|
||||
e_ObjQuality=3
|
||||
e_OcclusionCullingViewDistRatio=1
|
||||
e_ProcVegetation=1
|
||||
e_StatObjBufferRenderTasks=1
|
||||
e_StreamCgf=0
|
||||
e_TerrainLodRatio=1
|
||||
e_TerrainOcclusionCullingMaxDist=200
|
||||
e_Tessellation=0
|
||||
e_VegetationMinSize=0
|
||||
e_ViewDistMin=10
|
||||
e_ViewDistRatio=100
|
||||
e_ViewDistRatioCustom=100
|
||||
e_ViewDistRatioDetail=100
|
||||
e_ViewDistRatioLights=50
|
||||
e_ViewDistRatioVegetation=100
|
||||
r_DrawNearZRange=0.12
|
||||
r_FlaresTessellationRatio=1
|
||||
r_SilhouettePOM=0
|
||||
r_usezpass=2
|
||||
|
||||
[1]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=1
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=1
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=21
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=0
|
||||
e_ViewDistRatio=50
|
||||
|
||||
[2]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=2
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=2
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=1
|
||||
e_ViewDistRatio=50
|
||||
|
||||
[3]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=3
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=3
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=1
|
||||
e_ViewDistRatio=75
|
||||
|
||||
[4]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_Dissolve=0
|
||||
e_LightQuality=4
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=4
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
r_usezpass=1
|
||||
e_ProcVegetation=1
|
||||
e_ViewDistRatio=75
|
||||
|
||||
[5]
|
||||
ca_AttachmentCullingRation=145
|
||||
es_DebrisLifetimeScale=0.6
|
||||
e_DecalsLifeTimeScale=1
|
||||
e_LightQuality=1
|
||||
e_LodRatio=10
|
||||
e_MaxViewDistSpecLerp=0.5
|
||||
e_ObjQuality=1
|
||||
e_TerrainOcclusionCullingMaxDist=130
|
||||
e_VegetationMinSize=0.5
|
||||
e_ViewDistRatio=50
|
||||
e_ViewDistRatioCustom=60
|
||||
e_ViewDistRatioDetail=25
|
||||
e_ViewDistRatioLights=25
|
||||
e_ViewDistRatioVegetation=50
|
||||
r_FlaresTessellationRatio=0.25
|
||||
|
||||
[6]
|
||||
ca_AttachmentCullingRation=300
|
||||
es_DebrisLifetimeScale=0.8
|
||||
e_LightQuality=2
|
||||
e_LodRatio=15
|
||||
e_ObjQuality=2
|
||||
e_ViewDistRatio=75
|
||||
e_ViewDistRatioDetail=35
|
||||
e_ViewDistRatioVegetation=75
|
||||
|
||||
[8]
|
||||
ca_AttachmentCullingRation=400
|
||||
e_LightQuality=4
|
||||
e_LodRatio=40
|
||||
e_MergedMeshesInstanceDist=2.0
|
||||
e_MergedMeshesPool=16384
|
||||
e_ObjQuality=4
|
||||
e_TerrainLodRatio=0.5
|
||||
e_Tessellation=1
|
||||
e_ViewDistRatio=125
|
||||
e_ViewDistRatioCustom=125
|
||||
e_ViewDistRatioDetail=125
|
||||
e_ViewDistRatioLights=75
|
||||
e_ViewDistRatioVegetation=125
|
||||
r_DrawNearZRange = 0.08
|
||||
r_SilhouettePOM=1
|
||||
@@ -1,94 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_ParticlesGI=1
|
||||
e_ParticlesPreload=0
|
||||
e_ParticlesMaxScreenFill=128
|
||||
e_ParticlesMinDrawPixels=1
|
||||
e_ParticlesMotionBlur=0
|
||||
e_ParticlesObjectCollisions=2
|
||||
e_ParticlesQuality=3
|
||||
e_ParticlesSortQuality=0
|
||||
e_ParticlesPoolSize=16384
|
||||
r_ParticlesHalfRes=0
|
||||
r_ParticlesTessellation=1
|
||||
r_ParticlesInstanceVertices=1
|
||||
r_ParticlesGpuMaxEmitCount=10000
|
||||
|
||||
[1]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=10
|
||||
|
||||
|
||||
[2]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=100
|
||||
|
||||
|
||||
[3]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=500
|
||||
|
||||
|
||||
[4]
|
||||
e_ParticlesGI=0
|
||||
e_ParticlesPreload=1
|
||||
e_ParticlesMaxScreenFill=16
|
||||
e_ParticlesMinDrawPixels=2
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
e_ParticlesPoolSize=4096
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesInstanceVertices=0
|
||||
r_ParticlesGpuMaxEmitCount=1000
|
||||
|
||||
|
||||
[5]
|
||||
e_ParticlesMaxScreenFill=32
|
||||
e_ParticlesMinDrawPixels=1.5
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=1
|
||||
r_ParticlesHalfRes=1
|
||||
r_ParticlesTessellation=0
|
||||
r_ParticlesGpuMaxEmitCount=3000
|
||||
|
||||
[6]
|
||||
e_ParticlesMaxScreenFill=64
|
||||
e_ParticlesObjectCollisions=1
|
||||
e_ParticlesQuality=2
|
||||
r_ParticlesGpuMaxEmitCount=5000
|
||||
|
||||
[8]
|
||||
e_ParticlesMaxScreenFill=160
|
||||
e_ParticlesMotionBlur=1
|
||||
e_ParticlesQuality=4
|
||||
r_ParticlesGpuMaxEmitCount=1048576
|
||||
@@ -1,100 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
es_MaxPhysDist=100
|
||||
es_MaxPhysDistInvisible=25
|
||||
e_CullVegActivation=50
|
||||
e_FoliageWindActivationDist=25
|
||||
e_PhysMinCellSize=4
|
||||
e_PhysOceanCell=0.5
|
||||
e_PhysProxyTriLimit=10000
|
||||
g_breakage_mem_limit=0
|
||||
g_breakage_particles_limit=160
|
||||
g_no_secondary_breaking=0
|
||||
g_tree_cut_reuse_dist=0
|
||||
p_gravity_z=-13
|
||||
p_max_entity_cells=300000
|
||||
p_max_MC_iters=6000
|
||||
p_max_object_splashes=3
|
||||
p_max_substeps=5
|
||||
p_max_substeps_large_group=5
|
||||
p_num_bodies_large_group=100
|
||||
p_splash_dist0=7
|
||||
p_splash_dist1=30
|
||||
p_splash_force0=10
|
||||
p_splash_force1=100
|
||||
p_splash_vel0=4.5
|
||||
p_splash_vel1=10
|
||||
v_vehicle_quality=4
|
||||
|
||||
[1]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[2]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[3]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[4]
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysMinCellSize=16
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_mem_limit=2000
|
||||
g_breakage_particles_limit=40
|
||||
g_no_secondary_breaking=1
|
||||
g_tree_cut_reuse_dist=1
|
||||
p_max_entity_cells=75000
|
||||
p_max_MC_iters=2000
|
||||
p_max_substeps=2
|
||||
|
||||
[5]
|
||||
es_MaxPhysDist=50
|
||||
es_MaxPhysDistInvisible=15
|
||||
e_CullVegActivation=30
|
||||
e_FoliageWindActivationDist=10
|
||||
e_PhysOceanCell=1
|
||||
g_breakage_particles_limit=80
|
||||
g_tree_cut_reuse_dist=0.35
|
||||
p_max_MC_iters=4000
|
||||
p_max_substeps=2
|
||||
|
||||
[6]
|
||||
|
||||
[8]
|
||||
@@ -1,114 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
r_PostProcessEffects=1
|
||||
q_ShaderHDR=2
|
||||
q_ShaderPostProcess=2
|
||||
r_ChromaticAberration=0
|
||||
r_ColorGradingChartsCache=0
|
||||
r_DepthOfField=2
|
||||
r_Flares=1
|
||||
r_HDRBloomQuality=2
|
||||
r_MotionBlur=2
|
||||
r_MotionBlurMaxViewDist=100000
|
||||
r_MotionBlurQuality=1
|
||||
r_MotionBlurShutterSpeed=125
|
||||
r_Rain=2
|
||||
r_RainMaxViewDist_Deferred=150
|
||||
r_Sharpening=0
|
||||
r_Snow=2
|
||||
r_SunShafts=2
|
||||
r_TranspDepthFixup=1
|
||||
r_ToneMapTechnique=0
|
||||
r_ToneMapExposureType=0
|
||||
r_HDRBloom=1
|
||||
r_ColorGrading=1
|
||||
r_ColorSpace=0
|
||||
|
||||
[1]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_ColorGrading=0
|
||||
r_DepthOfField=0
|
||||
r_Flares=0
|
||||
r_HDRBloom=0
|
||||
r_HDRBloomQuality=0
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=0
|
||||
r_TranspDepthFixup=0
|
||||
r_ToneMapTechnique=3
|
||||
r_ToneMapExposureType=1
|
||||
r_ColorSpace=2
|
||||
|
||||
|
||||
[2]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_ColorGradingChartsCache=4
|
||||
r_DepthOfField=1
|
||||
r_Flares=0
|
||||
r_HDRBloomQuality=0
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=1
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
|
||||
[3]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=2
|
||||
r_ColorGradingChartsCache=4
|
||||
r_DepthOfField=1
|
||||
r_HDRBloomQuality=1
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=1
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
[4]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=2
|
||||
r_ColorGradingChartsCache=4
|
||||
r_DepthOfField=1
|
||||
r_HDRBloomQuality=1
|
||||
r_MotionBlur=0
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_Rain=1
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_Snow=1
|
||||
r_SunShafts=1
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
[5]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_ColorGradingChartsCache=4
|
||||
r_MotionBlurMaxViewDist=16
|
||||
r_MotionBlurQuality=0
|
||||
r_RainMaxViewDist_Deferred=40
|
||||
r_TranspDepthFixup=0
|
||||
|
||||
[6]
|
||||
q_ShaderHDR=1
|
||||
q_ShaderPostProcess=1
|
||||
r_RainMaxViewDist_Deferred=100
|
||||
|
||||
[8]
|
||||
q_ShaderHDR=3
|
||||
q_ShaderPostProcess=3
|
||||
r_MotionBlurQuality=2
|
||||
@@ -1,98 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
q_ShaderGeneral=2
|
||||
q_ShaderMetal=2
|
||||
q_ShaderGlass=2
|
||||
q_ShaderVegetation=2
|
||||
q_ShaderIce=2
|
||||
q_ShaderTerrain=2
|
||||
q_ShaderShadow=2
|
||||
q_ShaderFX=2
|
||||
q_ShaderSky=2
|
||||
q_Renderer=2
|
||||
|
||||
[1]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[2]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[3]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=2
|
||||
|
||||
[4]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=2
|
||||
|
||||
[5]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[6]
|
||||
q_ShaderGeneral=1
|
||||
q_ShaderMetal=1
|
||||
q_ShaderGlass=1
|
||||
q_ShaderVegetation=1
|
||||
q_ShaderIce=1
|
||||
q_ShaderTerrain=1
|
||||
q_ShaderShadow=1
|
||||
q_ShaderFX=1
|
||||
q_ShaderSky=1
|
||||
q_Renderer=1
|
||||
|
||||
[8]
|
||||
q_ShaderGeneral=3
|
||||
q_ShaderMetal=3
|
||||
q_ShaderGlass=3
|
||||
q_ShaderVegetation=3
|
||||
q_ShaderIce=3
|
||||
q_ShaderTerrain=3
|
||||
q_ShaderShadow=3
|
||||
q_ShaderFX=3
|
||||
q_ShaderSky=3
|
||||
q_Renderer=3
|
||||
@@ -1,120 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_CacheNearestCubePicking=1
|
||||
e_DynamicLightsMaxEntityLights=16
|
||||
e_GI=1
|
||||
e_LightVolumes=1
|
||||
e_SkyUpdateRate=1
|
||||
e_TerrainAo=0
|
||||
e_VegetationUseTerrainColor=1
|
||||
r_DeferredShadingDepthBoundsTest=1
|
||||
r_DeferredShadingTiled=2
|
||||
r_DeferredShadingTiledHairQuality=1
|
||||
r_deferredShadingFilterGBuffer=0
|
||||
r_DeferredShadingSSS=1
|
||||
r_AntialiasingMode=3
|
||||
r_DetailDistance=8
|
||||
r_EnvTexUpdateInterval=0.05
|
||||
r_Refraction=1
|
||||
r_RefractionPartialResolves=2
|
||||
r_ssdo=1
|
||||
r_ssdoHalfRes=2
|
||||
r_ssdoColorBleeding=1
|
||||
r_SSReflections=1
|
||||
r_SSReflHalfRes=1
|
||||
r_VisAreaClipLightsPerPixel=1
|
||||
sys_spec_Quality=7
|
||||
|
||||
[1]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_Refraction=0
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=0
|
||||
r_ssdoHalfRes=1
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=1
|
||||
|
||||
[2]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=0
|
||||
r_ssdoHalfRes=1
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=2
|
||||
|
||||
[3]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=0
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=3
|
||||
|
||||
[4]
|
||||
e_DynamicLightsMaxEntityLights=2
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
e_VegetationUseTerrainColor=0
|
||||
r_DeferredShadingTiled=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
r_AntialiasingMode=0
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_RefractionPartialResolves=0
|
||||
r_ssdo=1
|
||||
r_ssdoHalfRes=1
|
||||
r_ssdoColorBleeding=0
|
||||
r_SSReflections=0
|
||||
sys_spec_Quality=4
|
||||
|
||||
[5]
|
||||
e_DynamicLightsMaxEntityLights=7
|
||||
e_GI=0
|
||||
e_SkyUpdateRate=0.5
|
||||
r_DetailDistance=4
|
||||
r_EnvTexUpdateInterval=0.075
|
||||
r_SSReflections=0
|
||||
r_DeferredShadingTiledHairQuality=0
|
||||
r_DeferredShadingSSS=0
|
||||
sys_spec_Quality=5
|
||||
|
||||
[6]
|
||||
e_DynamicLightsMaxEntityLights=11
|
||||
sys_spec_Quality=6
|
||||
|
||||
[8]
|
||||
r_DeferredShadingTiledHairQuality=2
|
||||
r_SSReflHalfRes=0
|
||||
sys_spec_Quality=8
|
||||
@@ -1,116 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_GsmLodsNum=5
|
||||
e_GsmRange=3
|
||||
e_ParticlesShadows=1
|
||||
e_Shadows=1
|
||||
e_ShadowsBlendCascades=1
|
||||
e_ShadowsClouds=1
|
||||
e_ShadowsCastViewDistRatio=1
|
||||
e_ShadowsLodBiasFixed=0
|
||||
e_ShadowsMaxTexRes=1024
|
||||
e_ShadowsOnAlphaBlend=0
|
||||
e_ShadowsPoolSize=4096
|
||||
e_ShadowsResScale=4
|
||||
e_ShadowsTessellateCascades=1
|
||||
e_ShadowsTessellateDLights=0
|
||||
e_ShadowsUpdateViewDistRatio=256
|
||||
r_DrawNearShadows=1
|
||||
r_FogShadows=2
|
||||
r_FogShadowsWater=0
|
||||
r_ShadowJittering=2.5
|
||||
r_ShadowPoolMaxFrames=30
|
||||
r_ShadowPoolMaxTimeslicedUpdatesPerFrame=100
|
||||
r_ShadowsPCFiltering=1
|
||||
r_ShadowsCache=4
|
||||
r_ShadowsCacheFormat=1
|
||||
r_ShadowsCacheResolutions=6324,4214
|
||||
r_ShadowsUseClipVolume=1
|
||||
e_ObjShadowCastSpec=3
|
||||
|
||||
[1]
|
||||
e_GsmLodsNum=3
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[2]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[3]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[4]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_DrawNearShadows=0
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=0
|
||||
r_ShadowsCacheFormat=0
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
e_ObjShadowCastSpec=1
|
||||
e_ShadowsPoolSize=1024
|
||||
|
||||
[5]
|
||||
e_GsmLodsNum=4
|
||||
e_ParticlesShadows=0
|
||||
e_ShadowsBlendCascades=0
|
||||
e_ShadowsCastViewDistRatio=0.8
|
||||
e_ShadowsLodBiasFixed=1
|
||||
e_ShadowsMaxTexRes=512
|
||||
r_FogShadows=0
|
||||
r_ShadowJittering=1
|
||||
e_ObjShadowCastSpec=1
|
||||
r_ShadowsCacheResolutions=3162,2107
|
||||
|
||||
[6]
|
||||
r_ShadowJittering=1
|
||||
e_ObjShadowCastSpec=2
|
||||
|
||||
[8]
|
||||
r_FogShadows=1
|
||||
r_FogShadowsWater=1
|
||||
r_ShadowPoolMaxFrames=0
|
||||
r_ShadowPoolMaxTimeslicedUpdatesPerFrame=100
|
||||
e_ObjShadowCastSpec=4
|
||||
r_ShadowsCache=5
|
||||
r_ShadowsCacheResolutions=4214
|
||||
@@ -1,17 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
[1]
|
||||
|
||||
[2]
|
||||
|
||||
[3]
|
||||
|
||||
[4]
|
||||
|
||||
[5]
|
||||
|
||||
[6]
|
||||
|
||||
[8]
|
||||
@@ -1,94 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_TerrainTextureStreamingPoolItemsNum=64
|
||||
r_DynTexAtlasCloudsMaxSize=32
|
||||
r_DynTexAtlasSpritesMaxSize=32
|
||||
r_DynTexMaxSize=80
|
||||
r_EnvCMResolution=2
|
||||
r_EnvTexResolution=3
|
||||
r_ImposterRatio=1
|
||||
r_TexAtlasSize=2048
|
||||
r_TexMaxAnisotropy=4
|
||||
r_TexMinAnisotropy=4
|
||||
r_TexNoAnisoAlphaTest=0
|
||||
|
||||
[1]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[2]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[3]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[4]
|
||||
e_TerrainTextureStreamingPoolItemsNum=16
|
||||
r_DynTexAtlasCloudsMaxSize=8
|
||||
r_DynTexAtlasSpritesMaxSize=8
|
||||
r_DynTexMaxSize=20
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[5]
|
||||
r_DynTexAtlasCloudsMaxSize=24
|
||||
r_DynTexAtlasSpritesMaxSize=16
|
||||
r_DynTexMaxSize=50
|
||||
r_EnvCMResolution=0
|
||||
r_EnvTexResolution=1
|
||||
r_ImposterRatio=2
|
||||
r_TexAtlasSize=512
|
||||
r_TexMaxAnisotropy=2
|
||||
r_TexMinAnisotropy=2
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[6]
|
||||
r_DynTexAtlasCloudsMaxSize=24
|
||||
r_DynTexAtlasSpritesMaxSize=16
|
||||
r_DynTexMaxSize=60
|
||||
r_EnvCMResolution=1
|
||||
r_EnvTexResolution=2
|
||||
r_ImposterRatio=1.5
|
||||
r_TexMaxAnisotropy=8
|
||||
r_TexMinAnisotropy=8
|
||||
r_TexNoAnisoAlphaTest=1
|
||||
|
||||
[8]
|
||||
r_TexMaxAnisotropy=16
|
||||
r_TexMinAnisotropy=16
|
||||
@@ -1,52 +0,0 @@
|
||||
[default]
|
||||
; dummy default for this CVarGroup (will be auto initialized during streaming system init or overridden by user via system.cfg)
|
||||
= 0
|
||||
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=1
|
||||
r_TexturesStreamingMipBias=0
|
||||
r_TexturesstreamingMinUsableMips=8
|
||||
r_TexturesStreamingSkipMips=2
|
||||
r_TexturesStreamPoolSize=256
|
||||
|
||||
[1]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[2]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[3]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[4]
|
||||
; VRAM 1.0 GB
|
||||
r_TexturesStreaming=0
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=384
|
||||
|
||||
[5]
|
||||
; VRAM 1.0 GB
|
||||
|
||||
[6]
|
||||
; VRAM 1.5 GB
|
||||
r_TexturesStreamingSkipMips=1
|
||||
r_TexturesStreamPoolSize=512
|
||||
|
||||
[7]
|
||||
; VRAM 2.0 GB
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=640
|
||||
|
||||
[8]
|
||||
; VRAM 3.0 GB
|
||||
r_TexturesStreamingSkipMips=0
|
||||
r_TexturesStreamPoolSize=1536
|
||||
@@ -1,26 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_Clouds=1
|
||||
r_Beams=1
|
||||
|
||||
[1]
|
||||
r_Beams=0
|
||||
|
||||
[2]
|
||||
r_Beams=0
|
||||
|
||||
[3]
|
||||
r_Beams=0
|
||||
|
||||
[4]
|
||||
r_Beams=0
|
||||
|
||||
[5]
|
||||
r_Beams=0
|
||||
|
||||
[6]
|
||||
r_Beams=0
|
||||
|
||||
[8]
|
||||
@@ -1,81 +0,0 @@
|
||||
[default]
|
||||
; default of this CVarGroup
|
||||
= 7
|
||||
|
||||
e_WaterOceanFFT=1
|
||||
e_WaterTessellationAmount=10
|
||||
e_WaterTessellationSwathWidth=10
|
||||
q_ShaderWater=2
|
||||
r_WaterCaustics=1
|
||||
r_WaterReflections=1
|
||||
r_WaterReflectionsQuality=4
|
||||
r_WaterReflectionsMinVisiblePixelsUpdate=0.05
|
||||
r_WaterTessellationHW=0
|
||||
r_WaterUpdateDistance=0.2
|
||||
r_WaterUpdateFactor=0.0
|
||||
r_WaterVolumeCaustics=0
|
||||
r_WaterVolumeCausticsDensity=256
|
||||
r_WaterVolumeCausticsMaxDist=35
|
||||
r_WaterVolumeCausticsRes=1024
|
||||
r_WaterVolumeCausticsSnapFactor=1
|
||||
|
||||
[1]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=0
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.1
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[2]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=0
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.1
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[3]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=0
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.05
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[4]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterReflectionsQuality=4
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.01
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[5]
|
||||
e_WaterTessellationAmount=20
|
||||
q_ShaderWater=1
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.1
|
||||
r_WaterVolumeCausticsDensity=64
|
||||
r_WaterVolumeCausticsMaxDist=20
|
||||
r_WaterVolumeCausticsRes=384
|
||||
|
||||
[6]
|
||||
r_WaterUpdateDistance=1
|
||||
r_WaterUpdateFactor=0.05
|
||||
r_WaterVolumeCausticsDensity=128
|
||||
r_WaterVolumeCausticsMaxDist=25
|
||||
r_WaterVolumeCausticsRes=512
|
||||
|
||||
[8]
|
||||
e_WaterTessellationAmount=85
|
||||
r_WaterTessellationHW=1
|
||||
r_WaterVolumeCaustics=1
|
||||
@@ -1,4 +1 @@
|
||||
ai_DebugDraw = 1
|
||||
ai_DebugDrawNavigation = 1
|
||||
ai_DrawPath all
|
||||
ai_debugMNMAgentType MediumSizedCharacters
|
||||
@@ -1,7 +1,6 @@
|
||||
; Setup useful cvars for artists profiling GPU cost
|
||||
; Once in level (e.g. map c3mp_rooftop_gardens from the frontend/cmdline), in the console:
|
||||
; exec artprof.cfg
|
||||
; Be sure also to set r_shadersAsyncActivation=0 in your user.cfg (or copy artprof_user.cfg -> user.cfg)
|
||||
|
||||
; used to allow loading of loose shaders
|
||||
sys_pakPriority=0
|
||||
@@ -9,19 +8,8 @@ sys_pakPriority=0
|
||||
; because it's annoying and not relevant for artists
|
||||
sys_pakLogInvalidFileAccess=0
|
||||
|
||||
; disable fog volumes and particles as they can be misleading with r_measureOverdraw 4
|
||||
e_fogVolumes=0
|
||||
e_particles=0
|
||||
|
||||
; for convenience
|
||||
g_infiniteSuitEnergy=1
|
||||
g_infiniteAmmo=1
|
||||
g_timelimit=0
|
||||
|
||||
bind o "r_measureOverdraw 0"
|
||||
bind p "r_measureOverdraw 4"
|
||||
bind k "r_artProfile 0"
|
||||
bind l "r_artProfile 1"
|
||||
|
||||
; loading into an MP level with the map command stops you looking up and down unless you have a weapon
|
||||
i_giveitem scar
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
; disable async shader activation as it crashes when r_shadersAllowCompilation=1
|
||||
r_shadersAsyncActivation=0
|
||||
|
||||
; enable shader compiliation for r_measureOverdraw 4
|
||||
r_shadersAllowCompilation=1
|
||||
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
demo_restart_level = 2
|
||||
g_godMode=1
|
||||
g_infiniteammo=1
|
||||
r_displayinfo=1
|
||||
demo_file = autotest
|
||||
demo_ai = 1
|
||||
demo_num_runs = 4
|
||||
demo_quit = 1
|
||||
hud_startPaused=0
|
||||
sys_maxfps=0
|
||||
e_ObjectLayersActivation=0
|
||||
sys_flash = 0
|
||||
r_vsync = 0
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
demo_restart_level = 1
|
||||
g_godMode = 1
|
||||
g_infiniteammo = 1
|
||||
r_displayinfo = 2
|
||||
demo_file = timedemo_short
|
||||
demo_ai = 0
|
||||
demo_num_runs = 2
|
||||
demo_quit = 1
|
||||
-- hud_startPaused = 0
|
||||
sys_maxfps = -1
|
||||
-- e_ObjectLayersActivation = 0
|
||||
-- sys_flash = 0
|
||||
r_vsync = 0
|
||||
r_vsync = 0
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
r_ColorGradingChartsCache = 0
|
||||
r_waterupdateFactor = 0
|
||||
r_PostProcessHUD3DCache = 0
|
||||
e_gsmcache = 0
|
||||
r_ConditionalRendering = 0
|
||||
e_gicache = 0
|
||||
@@ -1,77 +0,0 @@
|
||||
ag_turnSpeedParamScale=0.0
|
||||
aim_assistFalloffDistance=200
|
||||
aim_assistInputForFullFollow_Ironsight=0.20
|
||||
aim_assistMaxDistance=255
|
||||
aim_assistMaxDistance_ironsight=255
|
||||
aim_assistMinTurnScale=0.5
|
||||
aim_assistMinTurnScale_ironsight=0.5
|
||||
aim_assistSlowDisableDistance=255
|
||||
aim_assistSlowFalloffStartDistance=200
|
||||
aim_assistSlowThresholdOuter=2.5
|
||||
aim_assiststrength=0.7
|
||||
aim_assiststrength_ironsight=0.75
|
||||
br_breakmaxworldsize=511
|
||||
cl_sensitivityControllerMP=0.6
|
||||
cl_shallowWaterSpeedMulPlayer=1.0
|
||||
controller_multiplier_x=3
|
||||
controller_multiplier_z=4
|
||||
g_actorViewDistRatio=255
|
||||
|
||||
-- This forces broken trees to have spherical inertia, which makes them harder to rotate around their vertical axis.
|
||||
g_breakageMinAxisInertia=1.0
|
||||
g_glassAutoShatterMinArea=0.5
|
||||
|
||||
g_distanceForceNoIk=35
|
||||
g_fpDbaManagementEnable=0
|
||||
g_godMode=0
|
||||
g_highlightingMaxDistanceToHighlightSquared=625
|
||||
g_hitDeathReactions_streaming=2
|
||||
g_mp_as_DefendersMaxHealth=150
|
||||
g_multiplayerDefault=1
|
||||
|
||||
-- Overriden in GameSDK\Difficulty\*.cfg
|
||||
g_playerLowHealthThreshold=20
|
||||
g_playerMidHealthThreshold=60
|
||||
|
||||
g_spawn_vistable_numLineTestsPerFrame=3
|
||||
g_telemetryConfig="MP"
|
||||
g_telemetrySampleRateBandwidth=3
|
||||
g_telemetrySampleRateMemory=2
|
||||
g_telemetrySampleRatePerformance=1
|
||||
g_VTOLInsideBoundsScaleX=0.6
|
||||
g_VTOLInsideBoundsScaleY=1
|
||||
net_breakage_sync_entities=0
|
||||
net_enable_tfrc=0
|
||||
net_log=1
|
||||
|
||||
-- Make consoles match the PC gravity
|
||||
p_gravity_z="-13"
|
||||
|
||||
-- Sanity check for physics RepositionEntity
|
||||
p_max_entity_cells=10000
|
||||
|
||||
pl_impulseEnabled=1
|
||||
pl_jump_maxTimerValue=0.0
|
||||
pl_jump_quickPressThresh=0.12
|
||||
pl_melee.angle_limit_from_behind=70
|
||||
pl_melee.impulses_enable=1
|
||||
pl_melee.melee_snap_angle_limit=45
|
||||
pl_melee.melee_snap_end_position_range=1.5
|
||||
pl_melee.melee_snap_move_speed_multiplier=10
|
||||
pl_melee.melee_snap_target_select_range=3.5
|
||||
pl_melee.mp_knockback_strength_hor=2
|
||||
pl_melee.mp_melee_system=1
|
||||
pl_melee.mp_victim_screenfx_blendout_duration=0.25
|
||||
pl_melee.mp_victim_screenfx_duration=0.1
|
||||
pl_nanovision_timetodrain=8
|
||||
pl_nanovision_timetorecharge=16
|
||||
pl_pickAndThrow.chargedThrowAutoAimConeSize=10
|
||||
pl_pickAndThrow.complexMelee_snap_angle_limit=25
|
||||
pl_sliding_control_mp.deceleration_speed=4
|
||||
pl_sliding_control_mp.max_downhill_acceleration=15
|
||||
pl_sliding_control_mp.min_speed=4
|
||||
pl_sliding_control_mp.min_speed_threshold=5
|
||||
pl_stealthKill_aimVsSpineLerp=0.65
|
||||
pl_stealthKill_useExtendedRange=1
|
||||
p_splash_vel0=0.5
|
||||
sv_bandwidth=2147483647
|
||||
@@ -1,29 +0,0 @@
|
||||
e_GI=0
|
||||
r_DeferredShadingIndexedAmbient=0
|
||||
e_ParticlesObjectCollisions=0
|
||||
g_distanceForceNoLegRaycasts=0.00001
|
||||
g_telemetryDisplaySessionId=1
|
||||
g_breakageNoDebrisCollisions=1
|
||||
|
||||
; Breakage throttling
|
||||
; These are explained in ActionGame.cpp
|
||||
;
|
||||
g_glassAutoShatterOnExplosions=1
|
||||
g_glassNoDecals=1
|
||||
g_glassMaxPanesToBreakPerFrame=2
|
||||
g_breakageTreeMax=100
|
||||
g_breakageTreeInc=101
|
||||
g_breakageTreeDec=25
|
||||
g_breakageTreeIncGlass=51
|
||||
|
||||
sys_PakInMemoryPakSizeLimit=25
|
||||
|
||||
r_TexturesStreamPoolSecondarySize=35
|
||||
r_MotionBlur=1
|
||||
|
||||
e_CoverageBufferReproj=2
|
||||
|
||||
osm_enabled = 1
|
||||
|
||||
g_waterHitOnly = 1
|
||||
p_max_object_splashes=1
|
||||
|
||||
@@ -1,63 +1,3 @@
|
||||
-- added this lines for proper 360 deg panorama renderings
|
||||
|
||||
e_ScreenShotFileFormat = jpg
|
||||
demo_fixed_timestep = 60
|
||||
s_SoundEnable = 0
|
||||
r_DisplayInfo = 0
|
||||
e_PanoramaScreenShotHeight = 720
|
||||
e_PanoramaScreenShotWidth = 10053
|
||||
c_shakeMult = 0
|
||||
demo_ai = 1
|
||||
r_MotionBlur = 0
|
||||
|
||||
-- enables full water reflection
|
||||
-- e_DebugMask = 2 -- e_DebugMask not allowed here
|
||||
|
||||
-- set weapong lighting effect to 0 to prevent flickering bug because of too much dynamic lights in the scene
|
||||
|
||||
|
||||
sys_spec = 2
|
||||
r_WaterRefractions = 1
|
||||
r_WaterReflections = 1
|
||||
r_WaterUpdateFactor = 0.01
|
||||
r_WaterReflections_ForceParticles = 0
|
||||
|
||||
r_EnvCMResolution = 2
|
||||
r_EnvTexResolution = 3
|
||||
r_EnvTexUpdateInterval = 0.05
|
||||
e_Decals = 1
|
||||
e_DecalsLifeTimeScale = 2
|
||||
ca_EnableDecals = 1
|
||||
e_LodRatio = 10
|
||||
e_ViewDistRatio = 55
|
||||
e_Lods = 1
|
||||
e_VegetationMinSize = 0
|
||||
r_CloudsUpdateAlways = 0
|
||||
|
||||
e_DynamicLightsMaxEntityLights = 3
|
||||
r_DepthOfField = 1
|
||||
--r_MotionBlur = 1
|
||||
r_Flares = 1
|
||||
r_checkSunVis = 1
|
||||
r_Coronas = 1
|
||||
r_CoronaFade = 0.1625
|
||||
r_UseEdgeAA = 1
|
||||
e_Clouds = 1
|
||||
|
||||
r_TexResolution = 0
|
||||
r_TexBumpResolution = 0
|
||||
r_DetailTextures = 1
|
||||
r_DetailNumLayers = 1
|
||||
r_DetailDistance = 8
|
||||
|
||||
e_ParticlesLod = 0.9
|
||||
|
||||
r_ShadowBlur = 3
|
||||
e_ShadowsMaxTexRes = 1024
|
||||
r_ShadowJittering = 1
|
||||
e_Shadows = 1
|
||||
e_VegetationBending = 1
|
||||
ai_UpdateAllAlways = 1
|
||||
r_refraction = 1
|
||||
r_sunshafts = 1
|
||||
r_ImposterRatio = 1
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
ai_CompatibilityMode=crysis2
|
||||
ai_BurstWhileMovingDestinationRange=9999.0
|
||||
|
||||
g_telemetryConfig=SP
|
||||
|
||||
net_inactivitytimeout=3600
|
||||
net_inactivitytimeoutDevmode=3600
|
||||
|
||||
pl_movement.nonCombat_heavy_weapon_speed_scale=1.0
|
||||
|
||||
-- BLM - Don't override game rules. The template project only has DummyRules.
|
||||
-- Furthermore, multiplayer.cfg doesn't set sv_gamerules, so the inconsistency
|
||||
-- is likely to create bugs.
|
||||
--sv_gamerules=SinglePlayer
|
||||
ca_StreamCHR=1
|
||||
@@ -1,24 +0,0 @@
|
||||
r_UseZPass = 1
|
||||
r_GeomInstancing = 1
|
||||
|
||||
e_Fog = 1
|
||||
e_Clouds = 1
|
||||
e_Decals = 1
|
||||
e_TerrainDetailMaterials = 1
|
||||
e_Dissolve = 1
|
||||
e_TerrainAo = 1
|
||||
|
||||
r_WaterReflections = 1
|
||||
|
||||
e_Shadows = 1
|
||||
e_VegetationBending = 1
|
||||
|
||||
r_PostProcessEffects = 1
|
||||
r_Flares = 1
|
||||
r_Beams = 1
|
||||
r_Glow = 1
|
||||
|
||||
r_DetailTextures = 1
|
||||
|
||||
r_refraction = 1
|
||||
r_sunshafts = 1
|
||||
@@ -1,24 +0,0 @@
|
||||
r_UseZPass = 0
|
||||
r_GeomInstancing = 0
|
||||
|
||||
e_Fog = 0
|
||||
e_Clouds = 0
|
||||
e_Decals = 0
|
||||
e_TerrainDetailMaterials = 0
|
||||
e_Dissolve = 0
|
||||
e_TerrainAo = 0
|
||||
|
||||
r_WaterReflections = 0
|
||||
|
||||
e_Shadows = 0
|
||||
e_VegetationBending = 0
|
||||
|
||||
r_PostProcessEffects = 0
|
||||
r_Flares = 0
|
||||
r_Beams = 0
|
||||
r_Glow = 0
|
||||
|
||||
r_DetailTextures = 0
|
||||
|
||||
r_refraction = 0
|
||||
r_sunshafts = 0
|
||||
@@ -1,76 +1,8 @@
|
||||
sys_spec_Full=2
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Disable gmem for this device because it causes a crash
|
||||
r_EnableGMEMPath=0
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
|
||||
e_recursion=1
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
e_ViewDistRatioVegetation=21
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_HDRBloom=0
|
||||
r_SunShafts=0
|
||||
r_ToneMapTechnique=3
|
||||
r_ToneMapExposureType=1
|
||||
r_ColorSpace=2
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
------------------------
|
||||
-- sys_spec_textureresolution
|
||||
------------------------
|
||||
r_TexturesstreamingMinUsableMips=7
|
||||
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,65 +1,7 @@
|
||||
sys_spec_Full=3
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=2
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,61 +1,8 @@
|
||||
sys_spec_Full=3
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Disabling gmem for this configuration
|
||||
r_EnableGMEMPath=0
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
|
||||
|
||||
@@ -1,76 +1,7 @@
|
||||
sys_spec_Full=1
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
|
||||
e_recursion=0
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
|
||||
-- Water occlusion queries crash in some OpenGL ES 3.0 devices
|
||||
e_HwOcclusionCullingWater = 0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_textureresolution
|
||||
------------------------
|
||||
r_TexturesstreamingMinUsableMips=6
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,81 +1,7 @@
|
||||
sys_spec_Full=2
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
|
||||
e_recursion=1
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
e_ViewDistRatioVegetation=21
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_HDRBloom=0
|
||||
r_SunShafts=0
|
||||
r_ToneMapExposureType=1
|
||||
r_ColorSpace=2
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
------------------------
|
||||
-- sys_spec_textureresolution
|
||||
------------------------
|
||||
r_TexturesstreamingMinUsableMips=7
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,60 +1,5 @@
|
||||
sys_spec_Full=4
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=0
|
||||
|
||||
-- Enable framebufferfetch(256bpp) or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale already occurs
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
sys_job_system_max_worker=2
|
||||
sys_streaming_in_blocks=1
|
||||
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
e_CheckOcclusion=1
|
||||
|
||||
r_Fur=0
|
||||
az_Asset_EnableAsyncMeshLoading=0
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=33554432
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_objectdetail
|
||||
------------------------
|
||||
e_Dissolve=2
|
||||
e_LodRatio=5
|
||||
e_ViewDistRatioDetail=19
|
||||
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_VisAreaClipLightsPerPixel=0
|
||||
|
||||
r_ClearGMEMGBuffer=1
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,100 +1,10 @@
|
||||
sys_spec_Full=3
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=2048
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,103 +1,10 @@
|
||||
sys_spec_Full=1
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,101 +1,10 @@
|
||||
sys_spec_Full=2
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=1024
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,102 +1,10 @@
|
||||
sys_spec_Full=4
|
||||
|
||||
-- Cap frame rate at 30fps
|
||||
sys_maxfps=30
|
||||
r_vsync=1
|
||||
|
||||
-- Enable framebufferfetch or pls if applicable
|
||||
r_EnableGMEMPath=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
|
||||
------------------------
|
||||
-- Job System
|
||||
------------------------
|
||||
sys_job_system_enable=0
|
||||
sys_job_system_max_worker=1
|
||||
|
||||
------------------------
|
||||
-- Streaming
|
||||
------------------------
|
||||
sys_streaming_in_blocks=1
|
||||
sys_streaming_memory_budget=512
|
||||
|
||||
------------------------
|
||||
-- General Rendering
|
||||
------------------------
|
||||
r_Flush=0
|
||||
-- Enabling this will clear the GMEM buffer before the z-pass
|
||||
r_ClearGMEMGBuffer=2
|
||||
r_Fur=0
|
||||
|
||||
------------------------
|
||||
-- VisArea / Portals
|
||||
------------------------
|
||||
e_PortalsBlend=0
|
||||
r_GMEMVisAreasBlendWeight=0.5
|
||||
|
||||
------------------------
|
||||
-- Misc. memory buffers
|
||||
------------------------
|
||||
e_AutoPrecacheCgf=2
|
||||
e_AutoPrecacheTerrainAndProcVeget=1
|
||||
e_GeomCacheBufferSize=0
|
||||
e_CheckOcclusionQueueSize=512
|
||||
e_CheckOcclusionOutputQueueSize=2048
|
||||
|
||||
------------------------
|
||||
-- Animation
|
||||
------------------------
|
||||
ca_MemoryDefragPoolSize=32
|
||||
ca_StreamCHR=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_water
|
||||
------------------------
|
||||
e_WaterOcean=2
|
||||
e_WaterVolumes=2
|
||||
e_WaterOceanBottom=0
|
||||
|
||||
|
||||
------------------------
|
||||
-- batching
|
||||
------------------------
|
||||
r_Batching = 1
|
||||
r_BatchType = 0
|
||||
|
||||
------------------------
|
||||
-- geom instancing
|
||||
------------------------
|
||||
r_GeomInstancing=1
|
||||
r_GeomInstancingThreshold=5
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
------------------------
|
||||
-- Geometry Cache
|
||||
------------------------
|
||||
e_GeomCaches=0
|
||||
|
||||
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
|
||||
-- Sort ligths since we have limited space in the shadowmap pool texture
|
||||
r_DeferredShadingSortLights = 3
|
||||
|
||||
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
|
||||
r_DeferredShadingLBuffersFmt = 2
|
||||
@@ -1,38 +0,0 @@
|
||||
|
||||
sys_spec_Full=7
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI = 0
|
||||
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
sys_spec_Full=5
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI=0
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
sys_spec_Full=6
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI = 0
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
sys_spec_Full=8
|
||||
r_ShadersMETAL=1
|
||||
|
||||
-- Default of 3 allocates all shaders (potentially >150 MB)
|
||||
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
|
||||
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
|
||||
r_ShadersPreactivate=1
|
||||
|
||||
-- Skip the native upscale as a second upscale occurs on Metal Present
|
||||
r_SkipNativeUpscale=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_postprocessing
|
||||
------------------------
|
||||
r_SunShafts=1
|
||||
|
||||
------------------------
|
||||
-- sys_spec_shading
|
||||
------------------------
|
||||
r_DeferredShadingTiled=0
|
||||
r_RefractionPartialResolves=0
|
||||
e_GI = 0
|
||||
|
||||
r_Fur=2
|
||||
|
||||
|
||||
------------------------
|
||||
-- Upscaling
|
||||
------------------------
|
||||
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
|
||||
r_UpscalingQuality=1
|
||||
|
||||
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
|
||||
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
|
||||
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
|
||||
e_ShadowsCacheRequireManualUpdate = 2
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 7
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 5
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 6
|
||||
@@ -1 +0,0 @@
|
||||
sys_spec_Full = 8
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
profile=-1
|
||||
profile_allthreads=1
|
||||
i_forcefeedback=0
|
||||
g_godmode=1
|
||||
log_verbosity=-1
|
||||
sys_pakLogInvalidFileAccess=1
|
||||
e_StatoscopeDataGroups=fgmrtudlipny
|
||||
e_StatoscopeFilenameUseBuildInfo=0
|
||||
e_StatoscopeFilenameUseMap=1
|
||||
e_StatoscopeMinFuncLengthMs=0.1
|
||||
e_StatoscopeMaxNumFuncsPerFrame=60
|
||||
e_StatoscopeScreenshotCapturePeriod=5
|
||||
|
||||
@@ -3,39 +3,13 @@
|
||||
-----------------------------------------------
|
||||
r_width = 960
|
||||
r_height = 1080
|
||||
r_backbufferWidth = 1920
|
||||
r_backbufferHeight = 1080
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
-- Set the system Spec (Medium)
|
||||
-------------------------------------------
|
||||
sys_spec = 2
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
-- HMD related
|
||||
-------------------------------------------
|
||||
r_overrideDXGIoutput = 0
|
||||
r_stereodevice = 100
|
||||
r_stereomode = 1
|
||||
r_stereooutput = 7
|
||||
r_minimizeLatency = 1
|
||||
hmd_low_persistence = 1
|
||||
r_stereoScaleCoefficient = 1
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
-- Set some video optimisations
|
||||
-------------------------------------------
|
||||
r_vsync = 0
|
||||
r_MotionBlur = 0
|
||||
r_ssdoHalfRes = 3
|
||||
r_Refraction = 0
|
||||
r_DeferredShadingTiled = 0
|
||||
r_CBufferUseNativeDepth = 0
|
||||
|
||||
-------------------------------------------
|
||||
-- Hide the hud
|
||||
-------------------------------------------
|
||||
--hud_hide = 1
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /dns=1 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /dns=1 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /dns=1 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /dns=1 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /dns=1 /preset=Uncompressed
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /dns=1 /preset=Uncompressed
|
||||
@@ -1,16 +1,9 @@
|
||||
<EngineDependencies versionnumber="1.0.0">
|
||||
<Dependency path="*.ent" optional="false" />
|
||||
<Dependency path="game.cfg" optional="true" />
|
||||
<Dependency path="config/singleplayer.cfg" optional="true" />
|
||||
<Dependency path="singleplayer.cfg" optional="true" />
|
||||
<Dependency path="autoexec.cfg" optional="true" />
|
||||
<Dependency path="default-ui" optional="true" />
|
||||
<Dependency path="fonts/default-ui.fontfamily" optional="true" />
|
||||
<Dependency path="fonts/default-ui/default-ui.fontfamily" optional="true" />
|
||||
<Dependency path="libs/smartobjects.xml" optional="true" />
|
||||
<Dependency path="modes/menucommon_sp.pak" optional="true" />
|
||||
<Dependency path="modes/menucommon_mp.pak" optional="true" />
|
||||
<Dependency path="libs/materialeffects/surfacetypes.xml" optional="true" />
|
||||
<Dependency path="libs/localization/localization.xml" optional="true" />
|
||||
<Dependency path="localization/*xml" optional="true" />
|
||||
</EngineDependencies>
|
||||
<Dependency path="game.cfg" optional="true" />
|
||||
<Dependency path="autoexec.cfg" optional="true" />
|
||||
<Dependency path="default-ui" optional="true" />
|
||||
<Dependency path="fonts/default-ui.fontfamily" optional="true" />
|
||||
<Dependency path="fonts/default-ui/default-ui.fontfamily" optional="true" />
|
||||
<Dependency path="libs/localization/localization.xml" optional="true" />
|
||||
<Dependency path="localization/*xml" optional="true" />
|
||||
</EngineDependencies>
|
||||
|
||||
+258
-1675
File diff suppressed because it is too large
Load Diff
@@ -125,17 +125,6 @@
|
||||
<Class name="AZStd::string" field="Comment" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZStd::pair" field="element" type="{941B5626-118F-55BC-925E-6E416A7520E4}">
|
||||
<Class name="AZStd::string" field="value1" value="@devroot@/*.waf_files" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="FileTagData" field="value2" version="2" type="{5F66E43B-548B-4AA8-8CD8-F6924F6031E6}">
|
||||
<Class name="unsigned char" field="FilePatternType" value="1" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
|
||||
<Class name="AZStd::set" field="FileTags" type="{166F208E-DE97-53FE-B349-BDD9FE9B8693}">
|
||||
<Class name="AZStd::string" field="element" value="ignore" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="AZStd::string" field="element" value="productdependency" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="AZStd::string" field="Comment" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZStd::pair" field="element" type="{941B5626-118F-55BC-925E-6E416A7520E4}">
|
||||
<Class name="AZStd::string" field="value1" value="*/editor/leveltemplates.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="FileTagData" field="value2" version="2" type="{5F66E43B-548B-4AA8-8CD8-F6924F6031E6}">
|
||||
@@ -207,27 +196,6 @@
|
||||
<Class name="AZStd::string" field="Comment" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZStd::pair" field="element" type="{941B5626-118F-55BC-925E-6E416A7520E4}">
|
||||
<Class name="AZStd::string" field="value1" value="@devroot@/*wscript" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="FileTagData" field="value2" version="2" type="{5F66E43B-548B-4AA8-8CD8-F6924F6031E6}">
|
||||
<Class name="unsigned char" field="FilePatternType" value="1" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
|
||||
<Class name="AZStd::set" field="FileTags" type="{166F208E-DE97-53FE-B349-BDD9FE9B8693}">
|
||||
<Class name="AZStd::string" field="element" value="ignore" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="AZStd::string" field="element" value="productdependency" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="AZStd::string" field="Comment" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZStd::pair" field="element" type="{941B5626-118F-55BC-925E-6E416A7520E4}">
|
||||
<Class name="AZStd::string" field="value1" value=".*/assetprocessorplatformconfig.ini" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="FileTagData" field="value2" version="2" type="{5F66E43B-548B-4AA8-8CD8-F6924F6031E6}">
|
||||
<Class name="unsigned char" field="FilePatternType" value="2" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
|
||||
<Class name="AZStd::set" field="FileTags" type="{166F208E-DE97-53FE-B349-BDD9FE9B8693}">
|
||||
<Class name="AZStd::string" field="element" value="editoronly" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
<Class name="AZStd::string" field="Comment" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZStd::pair" field="element" type="{941B5626-118F-55BC-925E-6E416A7520E4}">
|
||||
<Class name="AZStd::string" field="value1" value=".*/gems?/?.*/gem.json" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="FileTagData" field="value2" version="2" type="{5F66E43B-548B-4AA8-8CD8-F6924F6031E6}">
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /mipmaps=0 /preset=Albedo /reduce=-1 /ser=1
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=AlbedoWithGenericAlpha /reduce="android:2,ios:2,mac:0,pc:0,provo:0"
|
||||
@@ -1 +0,0 @@
|
||||
/autooptimizefile=0 /preset=Albedo /reduce="android:3,ios:3,mac:0,pc:0,provo:0"
|
||||
@@ -1,5 +1,4 @@
|
||||
<EngineDependencies versionnumber="1.0.0">
|
||||
<Dependency path="libs/particles/preloadlibs.txt" optional="true" />
|
||||
<Dependency path="libs/gameaudio/wwise/*.xml" optional="false" />
|
||||
<Dependency path=":libs/gameaudio/wwise/levels/default_controls.xml" optional="false" />
|
||||
</EngineDependencies>
|
||||
@@ -3,9 +3,15 @@
|
||||
"Version": 1,
|
||||
"ClassName": "GlobalBuildOptions",
|
||||
"ClassData": {
|
||||
"ShaderCompilerArguments" : {
|
||||
"DefaultMatrixOrder" : "Row",
|
||||
"AzslcAdditionalFreeArguments" : "--strip-unused-srgs"
|
||||
"ShaderCompilerArguments": {
|
||||
"DefaultMatrixOrder": "Row",
|
||||
"AzslcAdditionalFreeArguments": "--strip-unused-srgs"
|
||||
},
|
||||
"PreprocessorOptions": {
|
||||
"predefinedMacros": [ "AZSL=17" ],
|
||||
"projectIncludePaths": [
|
||||
"Gems/AtomTressFX/Assets/Shaders"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
@@ -0,0 +1,30 @@
|
||||
#
|
||||
# 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 azlmbr.debug as debug
|
||||
|
||||
import pathlib
|
||||
|
||||
def test_profiler_system():
|
||||
if not debug.g_ProfilerSystem.IsValid():
|
||||
print('g_ProfilerSystem is INVALID')
|
||||
return
|
||||
|
||||
state = 'ACTIVE' if debug.g_ProfilerSystem.IsActive() else 'INACTIVE'
|
||||
print(f'Profiler system is currently {state}')
|
||||
|
||||
capture_location = pathlib.Path(debug.g_ProfilerSystem.GetCaptureLocation())
|
||||
print(f'Capture location set to {capture_location}')
|
||||
|
||||
print('Capturing single frame...' )
|
||||
capture_file = str(capture_location / 'script_capture_frame.json')
|
||||
debug.g_ProfilerSystem.CaptureFrame(capture_file)
|
||||
|
||||
# Invoke main function
|
||||
if __name__ == '__main__':
|
||||
test_profiler_system()
|
||||
@@ -0,0 +1,214 @@
|
||||
#
|
||||
# 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, traceback, binascii, sys, json, pathlib
|
||||
import azlmbr.math
|
||||
import azlmbr.bus
|
||||
|
||||
#
|
||||
# SceneAPI Processor
|
||||
#
|
||||
|
||||
|
||||
def log_exception_traceback():
|
||||
exc_type, exc_value, exc_tb = sys.exc_info()
|
||||
data = traceback.format_exception(exc_type, exc_value, exc_tb)
|
||||
print(str(data))
|
||||
|
||||
def get_mesh_node_names(sceneGraph):
|
||||
import azlmbr.scene as sceneApi
|
||||
import azlmbr.scene.graph
|
||||
from scene_api import scene_data as sceneData
|
||||
|
||||
meshDataList = []
|
||||
node = sceneGraph.get_root()
|
||||
children = []
|
||||
paths = []
|
||||
|
||||
while node.IsValid():
|
||||
# store children to process after siblings
|
||||
if sceneGraph.has_node_child(node):
|
||||
children.append(sceneGraph.get_node_child(node))
|
||||
|
||||
nodeName = sceneData.SceneGraphName(sceneGraph.get_node_name(node))
|
||||
paths.append(nodeName.get_path())
|
||||
|
||||
# store any node that has mesh data content
|
||||
nodeContent = sceneGraph.get_node_content(node)
|
||||
if nodeContent.CastWithTypeName('MeshData'):
|
||||
if sceneGraph.is_node_end_point(node) is False:
|
||||
if (len(nodeName.get_path())):
|
||||
meshDataList.append(sceneData.SceneGraphName(sceneGraph.get_node_name(node)))
|
||||
|
||||
# advance to next node
|
||||
if sceneGraph.has_node_sibling(node):
|
||||
node = sceneGraph.get_node_sibling(node)
|
||||
elif children:
|
||||
node = children.pop()
|
||||
else:
|
||||
node = azlmbr.scene.graph.NodeIndex()
|
||||
|
||||
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
|
||||
import azlmbr.scene as sceneApi
|
||||
import azlmbr.scene.graph
|
||||
from scene_api import scene_data as sceneData
|
||||
|
||||
graph = sceneData.SceneGraph(scene.graph)
|
||||
# Get a list of all the mesh nodes, as well as all the nodes
|
||||
mesh_name_list, all_node_paths = get_mesh_node_names(graph)
|
||||
scene_manifest = sceneData.SceneManifest()
|
||||
|
||||
clean_filename = scene.sourceFilename.replace('.', '_')
|
||||
|
||||
# Compute the filename of the scene file
|
||||
source_basepath = scene.watchFolder
|
||||
source_relative_path = os.path.dirname(os.path.relpath(clean_filename, source_basepath))
|
||||
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)):
|
||||
mesh_name = mesh_name_list[activeMeshIndex]
|
||||
mesh_path = mesh_name.get_path()
|
||||
# Create a unique mesh group name using the filename + node name
|
||||
mesh_group_name = '{}_{}'.format(source_filename_only, mesh_name.get_name())
|
||||
# Remove forbidden filename characters from the name since this will become a file on disk later
|
||||
mesh_group_name = "".join(char for char in mesh_group_name if char not in "|<>:\"/?*\\")
|
||||
# Add the MeshGroup to the manifest and give it a unique ID
|
||||
mesh_group = scene_manifest.add_mesh_group(mesh_group_name)
|
||||
mesh_group['id'] = '{' + str(uuid.uuid5(uuid.NAMESPACE_DNS, source_filename_only + mesh_path)) + '}'
|
||||
# Set our current node as the only node that is included in this MeshGroup
|
||||
scene_manifest.mesh_group_select_node(mesh_group, mesh_path)
|
||||
|
||||
# Explicitly remove all other nodes to prevent implicit inclusions
|
||||
for node in all_node_paths:
|
||||
if node != mesh_path:
|
||||
scene_manifest.mesh_group_unselect_node(mesh_group, node)
|
||||
|
||||
# Create an editor entity
|
||||
entity_id = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "CreateEditorReadyEntity", mesh_group_name)
|
||||
# Add an EditorMeshComponent to the entity
|
||||
editor_mesh_component = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "GetOrAddComponentByTypeName", entity_id, "AZ::Render::EditorMeshComponent")
|
||||
# Set the ModelAsset assetHint to the relative path of the input asset + the name of the MeshGroup we just created + the azmodel extension
|
||||
# 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" }}}
|
||||
});
|
||||
# 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 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)
|
||||
|
||||
# Create a prefab with all our entities
|
||||
prefab_filename = source_filename_only + ".prefab"
|
||||
created_template_id = azlmbr.prefab.PrefabSystemScriptingBus(azlmbr.bus.Broadcast, "CreatePrefab", created_entities, prefab_filename)
|
||||
|
||||
if created_template_id == azlmbr.prefab.InvalidTemplateId:
|
||||
raise RuntimeError("CreatePrefab {} failed".format(prefab_filename))
|
||||
|
||||
# Convert the prefab to a JSON string
|
||||
output = azlmbr.prefab.PrefabLoaderScriptingBus(azlmbr.bus.Broadcast, "SaveTemplateToString", created_template_id)
|
||||
|
||||
if output.IsSuccess():
|
||||
jsonString = output.GetValue()
|
||||
uuid = azlmbr.math.Uuid_CreateRandom().ToString()
|
||||
jsonResult = json.loads(jsonString)
|
||||
# Add a PrefabGroup to the manifest and store the JSON on it
|
||||
scene_manifest.add_prefab_group(source_filename_only, uuid, jsonResult)
|
||||
else:
|
||||
raise RuntimeError("SaveTemplateToString failed for template id {}, prefab {}".format(created_template_id, prefab_filename))
|
||||
|
||||
# Convert the manifest to a JSON string and return it
|
||||
new_manifest = scene_manifest.export()
|
||||
|
||||
return new_manifest
|
||||
|
||||
sceneJobHandler = None
|
||||
|
||||
def on_update_manifest(args):
|
||||
try:
|
||||
scene = args[0]
|
||||
return update_manifest(scene)
|
||||
except RuntimeError as err:
|
||||
print (f'ERROR - {err}')
|
||||
log_exception_traceback()
|
||||
except:
|
||||
log_exception_traceback()
|
||||
|
||||
global sceneJobHandler
|
||||
sceneJobHandler = None
|
||||
|
||||
# try to create SceneAPI handler for processing
|
||||
try:
|
||||
import azlmbr.scene as sceneApi
|
||||
if (sceneJobHandler == None):
|
||||
sceneJobHandler = sceneApi.ScriptBuildingNotificationBusHandler()
|
||||
sceneJobHandler.connect()
|
||||
sceneJobHandler.add_callback('OnUpdateManifest', on_update_manifest)
|
||||
except:
|
||||
sceneJobHandler = None
|
||||
@@ -3,19 +3,19 @@
|
||||
"AssetProcessor": {
|
||||
"Settings": {
|
||||
"Exclude PythonTest Benchmark Settings Assets": {
|
||||
"pattern": ".*\\\\/PythonTests\\\\/.*benchmarksettings"
|
||||
"pattern": "(^|.+/)PythonTests/.*benchmarksettings"
|
||||
},
|
||||
"Exclude fbx_tests": {
|
||||
"pattern": ".*\\\\/fbx_tests\\\\/assets\\\\/.*"
|
||||
"pattern": "(^|.+/)fbx_tests/assets(/.+)$"
|
||||
},
|
||||
"Exclude wwise_bank_dependency_tests": {
|
||||
"pattern": ".*\\\\/wwise_bank_dependency_tests\\\\/assets\\\\/.*"
|
||||
"pattern": "(^|.+/)wwise_bank_dependency_tests/assets(/.+)$"
|
||||
},
|
||||
"Exclude AssetProcessorTestAssets": {
|
||||
"pattern": ".*\\\\/asset_processor_tests\\\\/assets\\\\/.*"
|
||||
"pattern": "(^|.+/)asset_processor_tests/assets(/.+)$"
|
||||
},
|
||||
"Exclude Restricted AssetProcessorTestAssets": {
|
||||
"pattern": ".*\\\\/asset_processor_tests\\\\/restricted\\\\/.*"
|
||||
"pattern": "(^|.+/)asset_processor_tests/restricted(/.+)$"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,15 +14,25 @@ ly_add_target(
|
||||
FILES_CMAKE
|
||||
automatedtesting_files.cmake
|
||||
${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
|
||||
automatedtesting_autogen_files.cmake
|
||||
INCLUDE_DIRECTORIES
|
||||
PRIVATE
|
||||
Source
|
||||
PUBLIC
|
||||
Include
|
||||
BUILD_DEPENDENCIES
|
||||
PUBLIC
|
||||
AZ::AzNetworking
|
||||
Gem::Multiplayer
|
||||
PRIVATE
|
||||
AZ::AzCore
|
||||
Gem::Atom_AtomBridge.Static
|
||||
Gem::Multiplayer.Static
|
||||
AUTOGEN_RULES
|
||||
*.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h
|
||||
*.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp
|
||||
*.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h
|
||||
*.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
|
||||
)
|
||||
|
||||
# if enabled, AutomatedTesting is used by all kinds of applications
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<Component
|
||||
Name="NetworkTestPlayerComponent"
|
||||
Namespace="AutomatedTesting"
|
||||
OverrideComponent="false"
|
||||
OverrideController="false"
|
||||
OverrideInclude=""
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
|
||||
<ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
|
||||
|
||||
<NetworkInput Type="float" Name="FwdBack" Init="0.0f" ExposeToScript="true"/>
|
||||
<NetworkInput Type="float" Name="LeftRight" Init="0.0f" ExposeToScript="true"/>
|
||||
|
||||
</Component>
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <AzCore/Memory/SystemAllocator.h>
|
||||
#include <AzCore/Module/Module.h>
|
||||
#include <Source/AutoGen/AutoComponentTypes.h>
|
||||
|
||||
#include <AutomatedTestingSystemComponent.h>
|
||||
|
||||
@@ -27,6 +28,8 @@ namespace AutomatedTesting
|
||||
m_descriptors.insert(m_descriptors.end(), {
|
||||
AutomatedTestingSystemComponent::CreateDescriptor(),
|
||||
});
|
||||
|
||||
CreateComponentDescriptors(m_descriptors); //< Register multiplayer components
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzCore/Serialization/EditContext.h>
|
||||
#include <AzCore/Serialization/EditContextConstants.inl>
|
||||
#include <Source/AutoGen/AutoComponentTypes.h>
|
||||
|
||||
#include <AutomatedTestingSystemComponent.h>
|
||||
|
||||
@@ -60,6 +61,7 @@ namespace AutomatedTesting
|
||||
void AutomatedTestingSystemComponent::Activate()
|
||||
{
|
||||
AutomatedTestingRequestBus::Handler::BusConnect();
|
||||
RegisterMultiplayerComponents(); //< Register AutomatedTesting's multiplayer components to assign NetComponentIds
|
||||
}
|
||||
|
||||
void AutomatedTestingSystemComponent::Deactivate()
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(FILES
|
||||
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Common.jinja
|
||||
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Header.jinja
|
||||
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Source.jinja
|
||||
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponentTypes_Header.jinja
|
||||
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponentTypes_Source.jinja
|
||||
)
|
||||
@@ -11,4 +11,5 @@ set(FILES
|
||||
Source/AutomatedTestingModule.cpp
|
||||
Source/AutomatedTestingSystemComponent.cpp
|
||||
Source/AutomatedTestingSystemComponent.h
|
||||
Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml
|
||||
)
|
||||
|
||||
@@ -21,9 +21,9 @@ set(ENABLED_GEMS
|
||||
QtForPython
|
||||
PythonAssetBuilder
|
||||
Metastream
|
||||
|
||||
Camera
|
||||
EMotionFX
|
||||
AtomTressFX
|
||||
PhysX
|
||||
CameraFramework
|
||||
StartingPointMovement
|
||||
@@ -52,9 +52,8 @@ set(ENABLED_GEMS
|
||||
AWSCore
|
||||
AWSClientAuth
|
||||
AWSMetrics
|
||||
|
||||
|
||||
|
||||
|
||||
PrefabBuilder
|
||||
AudioSystem
|
||||
Profiler
|
||||
Multiplayer
|
||||
)
|
||||
|
||||
+2
-3
@@ -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
|
||||
|
||||
@@ -6,12 +6,7 @@
|
||||
#
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Atom Renderer: Automated Tests
|
||||
# Runs EditorPythonBindings (hydra) scripts inside the Editor to verify test results for the Atom renderer.
|
||||
################################################################################
|
||||
|
||||
if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS)
|
||||
if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED)
|
||||
ly_add_pytest(
|
||||
NAME AutomatedTesting::Atom_TestSuite_Main
|
||||
TEST_SUITE main
|
||||
@@ -65,4 +60,18 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT
|
||||
COMPONENT
|
||||
Atom
|
||||
)
|
||||
ly_add_pytest(
|
||||
NAME AutomatedTesting::Atom_TestSuite_Main_GPU_Optimized
|
||||
TEST_SUITE main
|
||||
TEST_REQUIRES gpu
|
||||
TEST_SERIAL
|
||||
TIMEOUT 1200
|
||||
PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_GPU_Optimized.py
|
||||
RUNTIME_DEPENDENCIES
|
||||
AssetProcessor
|
||||
AutomatedTesting.Assets
|
||||
Editor
|
||||
COMPONENT
|
||||
Atom
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -3,8 +3,6 @@ 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
|
||||
|
||||
Main suite tests for the Atom renderer.
|
||||
"""
|
||||
import logging
|
||||
import os
|
||||
@@ -25,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]
|
||||
|
||||
@@ -71,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",
|
||||
@@ -161,21 +171,6 @@ class TestAtomEditorComponentsMain(object):
|
||||
"Display Mapper_test: Entity deleted: True",
|
||||
"Display Mapper_test: UNDO entity deletion works: True",
|
||||
"Display Mapper_test: REDO entity deletion works: True",
|
||||
# Reflection Probe Component
|
||||
"Reflection Probe Entity successfully created",
|
||||
"Reflection Probe_test: Component added to the entity: True",
|
||||
"Reflection Probe_test: Component removed after UNDO: True",
|
||||
"Reflection Probe_test: Component added after REDO: True",
|
||||
"Reflection Probe_test: Entered game mode: True",
|
||||
"Reflection Probe_test: Exit game mode: True",
|
||||
"Reflection Probe_test: Entity disabled initially: True",
|
||||
"Reflection Probe_test: Entity enabled after adding required components: True",
|
||||
"Reflection Probe_test: Cubemap is generated: True",
|
||||
"Reflection Probe_test: Entity is hidden: True",
|
||||
"Reflection Probe_test: Entity is shown: True",
|
||||
"Reflection Probe_test: Entity deleted: True",
|
||||
"Reflection Probe_test: UNDO entity deletion works: True",
|
||||
"Reflection Probe_test: REDO entity deletion works: True",
|
||||
]
|
||||
|
||||
unexpected_lines = [
|
||||
@@ -197,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):
|
||||
"""
|
||||
@@ -257,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 = [
|
||||
@@ -220,20 +222,20 @@ class TestPerformanceBenchmarkSuite(object):
|
||||
@pytest.mark.system
|
||||
class TestMaterialEditor(object):
|
||||
|
||||
@pytest.mark.parametrize("cfg_args", ["-rhi=dx12", "-rhi=Vulkan"])
|
||||
@pytest.mark.parametrize("cfg_args,expected_lines", [
|
||||
pytest.param("-rhi=dx12", ["Registering dx12 RHI"]),
|
||||
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):
|
||||
self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name, cfg_args,
|
||||
expected_lines):
|
||||
"""
|
||||
Tests each valid RHI option (Null RHI excluded) can be launched with the MaterialEditor.
|
||||
Checks for the "Finished loading viewport configurtions." success message post lounch.
|
||||
Checks for the specific expected_lines messaging for each RHI type.
|
||||
"""
|
||||
expected_lines = ["Finished loading viewport configurtions."]
|
||||
unexpected_lines = [
|
||||
# "Trace::Assert",
|
||||
# "Trace::Error",
|
||||
"Traceback (most recent call last):",
|
||||
]
|
||||
|
||||
hydra.launch_and_validate_results(
|
||||
request,
|
||||
@@ -241,9 +243,9 @@ class TestMaterialEditor(object):
|
||||
generic_launcher,
|
||||
editor_script="",
|
||||
run_python="--runpython",
|
||||
timeout=30,
|
||||
timeout=60,
|
||||
expected_lines=expected_lines,
|
||||
unexpected_lines=unexpected_lines,
|
||||
unexpected_lines=[],
|
||||
halt_on_unexpected=False,
|
||||
null_renderer=False,
|
||||
cfg_args=[cfg_args],
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
"""
|
||||
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
|
||||
|
||||
import pytest
|
||||
|
||||
import ly_test_tools.environment.file_system as file_system
|
||||
from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite
|
||||
from ly_test_tools.image.screenshot_compare_qssim import qssim as compare_screenshots
|
||||
from .atom_utils.atom_component_helper import create_screenshots_archive, golden_images_directory
|
||||
|
||||
DEFAULT_SUBFOLDER_PATH = 'user/PythonTests/Automated/Screenshots'
|
||||
|
||||
|
||||
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
|
||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||
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"
|
||||
test_screenshots = [] # Gets set by setup()
|
||||
screenshot_directory = "" # Gets set by setup()
|
||||
|
||||
# Clear existing test screenshots before starting test.
|
||||
def setup(self, workspace):
|
||||
screenshot_directory = os.path.join(workspace.paths.project(), DEFAULT_SUBFOLDER_PATH)
|
||||
test_screenshots = [os.path.join(screenshot_directory, self.screenshot_name)]
|
||||
file_system.delete(test_screenshots, True, True)
|
||||
|
||||
from Atom.tests import hydra_AtomGPU_BasicLevelSetup as test_module
|
||||
|
||||
golden_images = [os.path.join(golden_images_directory(), screenshot_name)]
|
||||
for test_screenshot, golden_screenshot in zip(test_screenshots, golden_images):
|
||||
compare_screenshots(test_screenshot, golden_screenshot)
|
||||
create_screenshots_archive(screenshot_directory)
|
||||
@@ -14,33 +14,70 @@ from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite
|
||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||
class TestAutomation(EditorTestSuite):
|
||||
|
||||
@pytest.mark.test_case_id("C32078118")
|
||||
class AtomEditorComponents_DecalAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_DecalAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078119")
|
||||
class AtomEditorComponents_DepthOfFieldAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_DepthOfFieldAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078120")
|
||||
class AtomEditorComponents_DirectionalLightAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_DirectionalLightAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C36525660")
|
||||
class AtomEditorComponents_DisplayMapperAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_DisplayMapperAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078121")
|
||||
class AtomEditorComponents_ExposureControlAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_ExposureControlAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078115")
|
||||
class AtomEditorComponents_GlobalSkylightIBLAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_GlobalSkylightIBLAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078122")
|
||||
class AtomEditorComponents_GridAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_GridAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078117")
|
||||
class AtomEditorComponents_LightAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_LightAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078123")
|
||||
class AtomEditorComponents_MaterialAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_MaterialAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078124")
|
||||
class AtomEditorComponents_MeshAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_MeshAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078125")
|
||||
class AtomEditorComponents_PhysicalSkyAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PhysicalSkyAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C36525664")
|
||||
class AtomEditorComponents_PostFXGradientWeightModifierAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078127")
|
||||
class AtomEditorComponents_PostFXLayerAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PostFXLayerAdded as test_module
|
||||
|
||||
@pytest.mark.test_case_id("C32078131")
|
||||
class AtomEditorComponents_PostFXRadiusWeightModifierAdded(EditorSharedTest):
|
||||
from Atom.tests import (
|
||||
hydra_AtomEditorComponents_PostFXRadiusWeightModifierAdded as test_module)
|
||||
|
||||
class AtomEditorComponents_LightAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_LightAdded as test_module
|
||||
@pytest.mark.test_case_id("C36525665")
|
||||
class AtomEditorComponents_PostFXShapeWeightModifierAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_PostFxShapeWeightModifierAdded as test_module
|
||||
|
||||
class AtomEditorComponents_DisplayMapperAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_DisplayMapperAdded as test_module
|
||||
@pytest.mark.test_case_id("C32078128")
|
||||
class AtomEditorComponents_ReflectionProbeAdded(EditorSharedTest):
|
||||
from Atom.tests import hydra_AtomEditorComponents_ReflectionProbeAdded as test_module
|
||||
|
||||
class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest):
|
||||
from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module
|
||||
|
||||
@@ -3,18 +3,138 @@ 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
|
||||
|
||||
Sandbox suite tests for the Atom renderer.
|
||||
"""
|
||||
import logging
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
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
|
||||
def test_Dummy(self, request, editor, level, workspace, project, launcher_platform):
|
||||
pass
|
||||
|
||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||
@pytest.mark.parametrize("level", ["auto_test"])
|
||||
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):
|
||||
"""
|
||||
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. Reflection Probe
|
||||
"""
|
||||
cfg_args = [level]
|
||||
|
||||
expected_lines = [
|
||||
# Reflection Probe Component
|
||||
"Reflection Probe Entity successfully created",
|
||||
"Reflection Probe_test: Component added to the entity: True",
|
||||
"Reflection Probe_test: Component removed after UNDO: True",
|
||||
"Reflection Probe_test: Component added after REDO: True",
|
||||
"Reflection Probe_test: Entered game mode: True",
|
||||
"Reflection Probe_test: Exit game mode: True",
|
||||
"Reflection Probe_test: Entity disabled initially: True",
|
||||
"Reflection Probe_test: Entity enabled after adding required components: True",
|
||||
"Reflection Probe_test: Cubemap is generated: True",
|
||||
"Reflection Probe_test: Entity is hidden: True",
|
||||
"Reflection Probe_test: Entity is shown: True",
|
||||
"Reflection Probe_test: Entity deleted: True",
|
||||
"Reflection Probe_test: UNDO entity deletion works: True",
|
||||
"Reflection Probe_test: REDO entity deletion works: True",
|
||||
]
|
||||
|
||||
hydra.launch_and_validate_results(
|
||||
request,
|
||||
TEST_DIRECTORY,
|
||||
editor,
|
||||
"hydra_AtomEditorComponents_AddedToEntity.py",
|
||||
timeout=120,
|
||||
expected_lines=expected_lines,
|
||||
unexpected_lines=[],
|
||||
halt_on_unexpected=True,
|
||||
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",
|
||||
)
|
||||
|
||||
|
||||
@@ -3,13 +3,54 @@ Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
|
||||
File to assist with common hydra component functions used across various Atom tests.
|
||||
"""
|
||||
import datetime
|
||||
import os
|
||||
import zipfile
|
||||
|
||||
from editor_python_test_tools.editor_test_helper import EditorTestHelper
|
||||
|
||||
helper = EditorTestHelper(log_prefix="Atom_EditorTestHelper")
|
||||
def create_screenshots_archive(screenshot_path):
|
||||
"""
|
||||
Creates a new zip file archive at archive_path containing all files listed within archive_path.
|
||||
:param screenshot_path: location containing the files to archive, the zip archive file will also be saved here.
|
||||
:return: None, but creates a new zip file archive inside path containing all of the files inside archive_path.
|
||||
"""
|
||||
files_to_archive = []
|
||||
|
||||
# Search for .png and .ppm files to add to the zip archive file.
|
||||
for (folder_name, sub_folders, file_names) in os.walk(screenshot_path):
|
||||
for file_name in file_names:
|
||||
if file_name.endswith(".png") or file_name.endswith(".ppm"):
|
||||
file_path = os.path.join(folder_name, file_name)
|
||||
files_to_archive.append(file_path)
|
||||
|
||||
# Setup variables for naming the zip archive file.
|
||||
timestamp = datetime.datetime.now().timestamp()
|
||||
formatted_timestamp = datetime.datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d_%H-%M-%S")
|
||||
screenshots_file = os.path.join(screenshot_path, f'screenshots_{formatted_timestamp}.zip')
|
||||
|
||||
# Write all of the valid .png and .ppm files to the archive file.
|
||||
with zipfile.ZipFile(screenshots_file, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zip_archive:
|
||||
for file_path in files_to_archive:
|
||||
file_name = os.path.basename(file_path)
|
||||
zip_archive.write(file_path, file_name)
|
||||
|
||||
|
||||
def golden_images_directory():
|
||||
"""
|
||||
Uses this file location to return the valid location for golden image files.
|
||||
:return: The path to the golden_images directory, but raises an IOError if the golden_images directory is missing.
|
||||
"""
|
||||
current_file_directory = os.path.join(os.path.dirname(__file__))
|
||||
golden_images_dir = os.path.join(current_file_directory, '..', 'golden_images')
|
||||
|
||||
if not os.path.exists(golden_images_dir):
|
||||
raise IOError(
|
||||
f'golden_images" directory was not found at path "{golden_images_dir}"'
|
||||
f'Please add a "golden_images" directory inside: "{current_file_directory}"'
|
||||
)
|
||||
|
||||
return golden_images_dir
|
||||
|
||||
|
||||
def create_basic_atom_level(level_name):
|
||||
@@ -31,6 +72,9 @@ def create_basic_atom_level(level_name):
|
||||
import azlmbr.object
|
||||
|
||||
import editor_python_test_tools.hydra_editor_utils as hydra
|
||||
from editor_python_test_tools.editor_test_helper import EditorTestHelper
|
||||
|
||||
helper = EditorTestHelper(log_prefix="Atom_EditorTestHelper")
|
||||
|
||||
# Create a new level.
|
||||
new_level_name = level_name
|
||||
@@ -69,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]
|
||||
|
||||
@@ -211,7 +211,7 @@ class Timeout:
|
||||
return time.time() > self.die_after
|
||||
|
||||
|
||||
screenshotsFolder = os.path.join(azlmbr.paths.devroot, "AtomTest", "Cache" "pc", "Screenshots")
|
||||
screenshotsFolder = os.path.join(azlmbr.paths.products, "Screenshots")
|
||||
|
||||
|
||||
class ScreenshotHelper:
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ import azlmbr.legacy.general as general
|
||||
import azlmbr.editor as editor
|
||||
import azlmbr.render as render
|
||||
|
||||
sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests"))
|
||||
sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
|
||||
|
||||
import editor_python_test_tools.hydra_editor_utils as hydra
|
||||
from editor_python_test_tools.utils import TestHelper
|
||||
|
||||
+67
-41
@@ -5,25 +5,52 @@ For complete copyright and license terms please see the LICENSE at the root of t
|
||||
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
"""
|
||||
|
||||
# fmt: off
|
||||
class Tests:
|
||||
camera_creation = ("Camera Entity successfully created", "Camera Entity failed to be created")
|
||||
camera_component_added = ("Camera component was added to entity", "Camera component failed to be added to entity")
|
||||
camera_component_check = ("Entity has a Camera component", "Entity failed to find Camera component")
|
||||
creation_undo = ("UNDO Entity creation success", "UNDO Entity creation failed")
|
||||
creation_redo = ("REDO Entity creation success", "REDO Entity creation failed")
|
||||
decal_creation = ("Decal Entity successfully created", "Decal Entity failed to be created")
|
||||
decal_component = ("Entity has a Decal component", "Entity failed to find Decal component")
|
||||
material_property_set = ("Material property set on Decal component", "Couldn't set Material property on Decal component")
|
||||
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")
|
||||
no_error_occurred = ("No errors detected", "Errors were detected")
|
||||
# fmt: on
|
||||
camera_creation = (
|
||||
"Camera Entity successfully created",
|
||||
"Camera Entity failed to be created")
|
||||
camera_component_added = (
|
||||
"Camera component was added to entity",
|
||||
"Camera component failed to be added to entity")
|
||||
camera_component_check = (
|
||||
"Entity has a Camera component",
|
||||
"Entity failed to find Camera component")
|
||||
creation_undo = (
|
||||
"UNDO Entity creation success",
|
||||
"UNDO Entity creation failed")
|
||||
creation_redo = (
|
||||
"REDO Entity creation success",
|
||||
"REDO Entity creation failed")
|
||||
decal_creation = (
|
||||
"Decal Entity successfully created",
|
||||
"Decal Entity failed to be created")
|
||||
decal_component = (
|
||||
"Entity has a Decal component",
|
||||
"Entity failed to find Decal component")
|
||||
material_property_set = (
|
||||
"Material property set on Decal component",
|
||||
"Couldn't set Material property on Decal component")
|
||||
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_Decal_AddedToEntity():
|
||||
@@ -51,35 +78,33 @@ def AtomEditorComponents_Decal_AddedToEntity():
|
||||
9) Delete Decal entity.
|
||||
10) UNDO deletion.
|
||||
11) REDO deletion.
|
||||
12) Look for errors.
|
||||
12) Look for errors and asserts.
|
||||
|
||||
:return: None
|
||||
"""
|
||||
import os
|
||||
|
||||
import azlmbr.asset as asset
|
||||
import azlmbr.bus as bus
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.math as math
|
||||
|
||||
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
|
||||
|
||||
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 Decal entity with no components.
|
||||
decal_name = "Decal"
|
||||
decal_entity = EditorEntity.create_editor_entity_at(math.Vector3(512.0, 512.0, 34.0), decal_name)
|
||||
decal_entity = EditorEntity.create_editor_entity(AtomComponentProperties.decal())
|
||||
Report.critical_result(Tests.decal_creation, decal_entity.exists())
|
||||
|
||||
# 2. Add Decal component to Decal entity.
|
||||
decal_component = decal_entity.add_component(decal_name)
|
||||
Report.critical_result(Tests.decal_component, decal_entity.has_component(decal_name))
|
||||
decal_component = decal_entity.add_component(AtomComponentProperties.decal())
|
||||
Report.critical_result(Tests.decal_component, decal_entity.has_component(AtomComponentProperties.decal()))
|
||||
|
||||
# 3. UNDO the entity creation and component addition.
|
||||
# -> UNDO component addition.
|
||||
@@ -106,9 +131,9 @@ def AtomEditorComponents_Decal_AddedToEntity():
|
||||
Report.result(Tests.creation_redo, decal_entity.exists())
|
||||
|
||||
# 5. 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)
|
||||
|
||||
# 6. Test IsHidden.
|
||||
decal_entity.set_visibility_state(False)
|
||||
@@ -120,13 +145,11 @@ def AtomEditorComponents_Decal_AddedToEntity():
|
||||
Report.result(Tests.is_visible, decal_entity.is_visible() is True)
|
||||
|
||||
# 8. Set Material property on Decal component.
|
||||
decal_material_property_path = "Controller|Configuration|Material"
|
||||
decal_material_asset_path = os.path.join("AutomatedTesting", "Materials", "basic_grey.material")
|
||||
decal_material_asset = asset.AssetCatalogRequestBus(
|
||||
bus.Broadcast, "GetAssetIdByPath", decal_material_asset_path, math.Uuid(), False)
|
||||
decal_component.set_component_property_value(decal_material_property_path, decal_material_asset)
|
||||
get_material_property = decal_component.get_component_property_value(decal_material_property_path)
|
||||
Report.result(Tests.material_property_set, get_material_property == decal_material_asset)
|
||||
decal_material_asset_path = os.path.join("materials", "basic_grey.azmaterial")
|
||||
decal_material_asset = Asset.find_asset_by_path(decal_material_asset_path, False)
|
||||
decal_component.set_component_property_value(AtomComponentProperties.decal('Material'), decal_material_asset.id)
|
||||
get_material_property = decal_component.get_component_property_value(AtomComponentProperties.decal('Material'))
|
||||
Report.result(Tests.material_property_set, get_material_property == decal_material_asset.id)
|
||||
|
||||
# 9. Delete Decal entity.
|
||||
decal_entity.delete()
|
||||
@@ -141,9 +164,12 @@ def AtomEditorComponents_Decal_AddedToEntity():
|
||||
general.redo()
|
||||
Report.result(Tests.deletion_redo, not decal_entity.exists())
|
||||
|
||||
# 12. Look for errors.
|
||||
helper.wait_for_condition(lambda: error_tracer.has_errors, 1.0)
|
||||
Report.result(Tests.no_error_occurred, not error_tracer.has_errors)
|
||||
# 12. Look for errors and 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__":
|
||||
|
||||
+82
-47
@@ -5,28 +5,61 @@ For complete copyright and license terms please see the LICENSE at the root of t
|
||||
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
"""
|
||||
|
||||
# fmt: off
|
||||
class Tests:
|
||||
camera_creation = ("Camera Entity successfully created", "Camera Entity failed to be created")
|
||||
camera_component_added = ("Camera component was added to Camera entity", "Camera component failed to be added to entity")
|
||||
camera_component_check = ("Entity has a Camera component", "Entity failed to find Camera component")
|
||||
camera_property_set = ("DepthOfField Entity set Camera Entity", "DepthOfField Entity could not set Camera Entity")
|
||||
creation_undo = ("UNDO Entity creation success", "UNDO Entity creation failed")
|
||||
creation_redo = ("REDO Entity creation success", "REDO Entity creation failed")
|
||||
depth_of_field_creation = ("DepthOfField Entity successfully created", "DepthOfField Entity failed to be created")
|
||||
depth_of_field_component = ("Entity has a DepthOfField component", "Entity failed to find DepthOfField component")
|
||||
depth_of_field_disabled = ("DepthOfField component disabled", "DepthOfField component was not disabled.")
|
||||
post_fx_component = ("Entity has a Post FX Layer component", "Entity did not have a Post FX Layer component")
|
||||
depth_of_field_enabled = ("DepthOfField component enabled", "DepthOfField 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")
|
||||
no_error_occurred = ("No errors detected", "Errors were detected")
|
||||
# fmt: on
|
||||
camera_creation = (
|
||||
"Camera Entity successfully created",
|
||||
"Camera Entity failed to be created")
|
||||
camera_component_added = (
|
||||
"Camera component was added to Camera entity",
|
||||
"Camera component failed to be added to entity")
|
||||
camera_component_check = (
|
||||
"Entity has a Camera component",
|
||||
"Entity failed to find Camera component")
|
||||
camera_property_set = (
|
||||
"DepthOfField Entity set Camera Entity",
|
||||
"DepthOfField Entity could not set Camera Entity")
|
||||
creation_undo = (
|
||||
"UNDO Entity creation success",
|
||||
"UNDO Entity creation failed")
|
||||
creation_redo = (
|
||||
"REDO Entity creation success",
|
||||
"REDO Entity creation failed")
|
||||
depth_of_field_creation = (
|
||||
"DepthOfField Entity successfully created",
|
||||
"DepthOfField Entity failed to be created")
|
||||
depth_of_field_component = (
|
||||
"Entity has a DepthOfField component",
|
||||
"Entity failed to find DepthOfField component")
|
||||
depth_of_field_disabled = (
|
||||
"DepthOfField component disabled",
|
||||
"DepthOfField component was not disabled.")
|
||||
post_fx_component = (
|
||||
"Entity has a Post FX Layer component",
|
||||
"Entity did not have a Post FX Layer component")
|
||||
depth_of_field_enabled = (
|
||||
"DepthOfField component enabled",
|
||||
"DepthOfField 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_DepthOfField_AddedToEntity():
|
||||
@@ -59,33 +92,32 @@ def AtomEditorComponents_DepthOfField_AddedToEntity():
|
||||
14) Delete DepthOfField entity.
|
||||
15) UNDO deletion.
|
||||
16) REDO deletion.
|
||||
17) Look for errors.
|
||||
17) Look for errors and asserts.
|
||||
|
||||
:return: None
|
||||
"""
|
||||
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.math as math
|
||||
|
||||
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
|
||||
|
||||
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 DepthOfField entity with no components.
|
||||
depth_of_field_name = "DepthOfField"
|
||||
depth_of_field_entity = EditorEntity.create_editor_entity_at(
|
||||
math.Vector3(512.0, 512.0, 34.0), depth_of_field_name)
|
||||
depth_of_field_entity = EditorEntity.create_editor_entity(AtomComponentProperties.depth_of_field())
|
||||
Report.critical_result(Tests.depth_of_field_creation, depth_of_field_entity.exists())
|
||||
|
||||
# 2. Add a DepthOfField component to DepthOfField entity.
|
||||
depth_of_field_component = depth_of_field_entity.add_component(depth_of_field_name)
|
||||
Report.critical_result(Tests.depth_of_field_component, depth_of_field_entity.has_component(depth_of_field_name))
|
||||
depth_of_field_component = depth_of_field_entity.add_component(AtomComponentProperties.depth_of_field())
|
||||
Report.critical_result(Tests.depth_of_field_component,
|
||||
depth_of_field_entity.has_component(AtomComponentProperties.depth_of_field()))
|
||||
|
||||
# 3. UNDO the entity creation and component addition.
|
||||
# -> UNDO component addition.
|
||||
@@ -115,17 +147,16 @@ def AtomEditorComponents_DepthOfField_AddedToEntity():
|
||||
Report.result(Tests.depth_of_field_disabled, not depth_of_field_component.is_enabled())
|
||||
|
||||
# 6. Add Post FX Layer component since it is required by the DepthOfField component.
|
||||
post_fx_layer = "PostFX Layer"
|
||||
depth_of_field_entity.add_component(post_fx_layer)
|
||||
Report.result(Tests.post_fx_component, depth_of_field_entity.has_component(post_fx_layer))
|
||||
depth_of_field_entity.add_component(AtomComponentProperties.postfx_layer())
|
||||
Report.result(Tests.post_fx_component, depth_of_field_entity.has_component(AtomComponentProperties.postfx_layer()))
|
||||
|
||||
# 7. Verify DepthOfField component is enabled.
|
||||
Report.result(Tests.depth_of_field_enabled, depth_of_field_component.is_enabled())
|
||||
|
||||
# 8. 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)
|
||||
|
||||
# 9. Test IsHidden.
|
||||
depth_of_field_entity.set_visibility_state(False)
|
||||
@@ -137,19 +168,20 @@ def AtomEditorComponents_DepthOfField_AddedToEntity():
|
||||
Report.result(Tests.is_visible, depth_of_field_entity.is_visible() is True)
|
||||
|
||||
# 11. Add Camera entity.
|
||||
camera_name = "Camera"
|
||||
camera_entity = EditorEntity.create_editor_entity_at(math.Vector3(512.0, 512.0, 34.0), camera_name)
|
||||
camera_entity = EditorEntity.create_editor_entity(AtomComponentProperties.camera())
|
||||
Report.result(Tests.camera_creation, camera_entity.exists())
|
||||
|
||||
# 12. Add Camera component to Camera entity.
|
||||
camera_entity.add_component(camera_name)
|
||||
Report.result(Tests.camera_component_added, camera_entity.has_component(camera_name))
|
||||
camera_entity.add_component(AtomComponentProperties.camera())
|
||||
Report.result(Tests.camera_component_added, camera_entity.has_component(AtomComponentProperties.camera()))
|
||||
|
||||
# 13. Set the DepthOfField components's Camera Entity to the newly created Camera entity.
|
||||
depth_of_field_camera_property_path = "Controller|Configuration|Camera Entity"
|
||||
depth_of_field_component.set_component_property_value(depth_of_field_camera_property_path, camera_entity.id)
|
||||
camera_entity_set = depth_of_field_component.get_component_property_value(depth_of_field_camera_property_path)
|
||||
Report.result(Tests.camera_property_set, camera_entity.id == camera_entity_set)
|
||||
depth_of_field_component.set_component_property_value(
|
||||
AtomComponentProperties.depth_of_field('Camera Entity'), camera_entity.id)
|
||||
Report.result(
|
||||
Tests.camera_property_set,
|
||||
camera_entity.id == depth_of_field_component.get_component_property_value(
|
||||
AtomComponentProperties.depth_of_field('Camera Entity')))
|
||||
|
||||
# 14. Delete DepthOfField entity.
|
||||
depth_of_field_entity.delete()
|
||||
@@ -163,9 +195,12 @@ def AtomEditorComponents_DepthOfField_AddedToEntity():
|
||||
general.redo()
|
||||
Report.result(Tests.deletion_redo, not depth_of_field_entity.exists())
|
||||
|
||||
# 17. Look for errors.
|
||||
helper.wait_for_condition(lambda: error_tracer.has_errors, 1.0)
|
||||
Report.result(Tests.no_error_occurred, not error_tracer.has_errors)
|
||||
# 17. Look for errors and 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__":
|
||||
|
||||
+71
-41
@@ -5,25 +5,52 @@ For complete copyright and license terms please see the LICENSE at the root of t
|
||||
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
"""
|
||||
|
||||
# fmt: off
|
||||
class Tests:
|
||||
camera_creation = ("Camera Entity successfully created", "Camera Entity failed to be created")
|
||||
camera_component_added = ("Camera component was added to entity", "Camera component failed to be added to entity")
|
||||
camera_component_check = ("Entity has a Camera component", "Entity failed to find Camera component")
|
||||
creation_undo = ("UNDO Entity creation success", "UNDO Entity creation failed")
|
||||
creation_redo = ("REDO Entity creation success", "REDO Entity creation failed")
|
||||
directional_light_creation = ("Directional Light Entity successfully created", "Directional Light Entity failed to be created")
|
||||
directional_light_component = ("Entity has a Directional Light component", "Entity failed to find Directional Light component")
|
||||
shadow_camera_check = ("Directional Light component Shadow camera set", "Directional Light component Shadow camera was not set")
|
||||
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")
|
||||
no_error_occurred = ("No errors detected", "Errors were detected")
|
||||
# fmt: on
|
||||
camera_creation = (
|
||||
"Camera Entity successfully created",
|
||||
"Camera Entity failed to be created")
|
||||
camera_component_added = (
|
||||
"Camera component was added to entity",
|
||||
"Camera component failed to be added to entity")
|
||||
camera_component_check = (
|
||||
"Entity has a Camera component",
|
||||
"Entity failed to find Camera component")
|
||||
creation_undo = (
|
||||
"UNDO Entity creation success",
|
||||
"UNDO Entity creation failed")
|
||||
creation_redo = (
|
||||
"REDO Entity creation success",
|
||||
"REDO Entity creation failed")
|
||||
directional_light_creation = (
|
||||
"Directional Light Entity successfully created",
|
||||
"Directional Light Entity failed to be created")
|
||||
directional_light_component = (
|
||||
"Entity has a Directional Light component",
|
||||
"Entity failed to find Directional Light component")
|
||||
shadow_camera_check = (
|
||||
"Directional Light component Shadow camera set",
|
||||
"Directional Light component Shadow camera was not set")
|
||||
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_DirectionalLight_AddedToEntity():
|
||||
@@ -53,34 +80,33 @@ def AtomEditorComponents_DirectionalLight_AddedToEntity():
|
||||
11) Delete Directional Light entity.
|
||||
12) UNDO deletion.
|
||||
13) REDO deletion.
|
||||
14) Look for errors.
|
||||
14) Look for errors and asserts.
|
||||
|
||||
:return: None
|
||||
"""
|
||||
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.math as math
|
||||
|
||||
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
|
||||
|
||||
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 Directional Light entity with no components.
|
||||
directional_light_name = "Directional Light"
|
||||
directional_light_entity = EditorEntity.create_editor_entity_at(
|
||||
math.Vector3(512.0, 512.0, 34.0), directional_light_name)
|
||||
directional_light_entity = EditorEntity.create_editor_entity(AtomComponentProperties.directional_light())
|
||||
Report.critical_result(Tests.directional_light_creation, directional_light_entity.exists())
|
||||
|
||||
# 2. Add Directional Light component to Directional Light entity.
|
||||
directional_light_component = directional_light_entity.add_component(directional_light_name)
|
||||
directional_light_component = directional_light_entity.add_component(AtomComponentProperties.directional_light())
|
||||
Report.critical_result(
|
||||
Tests.directional_light_component, directional_light_entity.has_component(directional_light_name))
|
||||
Tests.directional_light_component,
|
||||
directional_light_entity.has_component(AtomComponentProperties.directional_light()))
|
||||
|
||||
# 3. UNDO the entity creation and component addition.
|
||||
# -> UNDO component addition.
|
||||
@@ -107,9 +133,9 @@ def AtomEditorComponents_DirectionalLight_AddedToEntity():
|
||||
Report.result(Tests.creation_redo, directional_light_entity.exists())
|
||||
|
||||
# 5. 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)
|
||||
|
||||
# 6. Test IsHidden.
|
||||
directional_light_entity.set_visibility_state(False)
|
||||
@@ -121,19 +147,20 @@ def AtomEditorComponents_DirectionalLight_AddedToEntity():
|
||||
Report.result(Tests.is_visible, directional_light_entity.is_visible() is True)
|
||||
|
||||
# 8. Add Camera entity.
|
||||
camera_name = "Camera"
|
||||
camera_entity = EditorEntity.create_editor_entity_at(math.Vector3(512.0, 512.0, 34.0), camera_name)
|
||||
camera_entity = EditorEntity.create_editor_entity(AtomComponentProperties.camera())
|
||||
Report.result(Tests.camera_creation, camera_entity.exists())
|
||||
|
||||
# 9. Add Camera component to Camera entity.
|
||||
camera_entity.add_component(camera_name)
|
||||
Report.result(Tests.camera_component_added, camera_entity.has_component(camera_name))
|
||||
camera_entity.add_component(AtomComponentProperties.camera())
|
||||
Report.result(Tests.camera_component_added, camera_entity.has_component(AtomComponentProperties.camera()))
|
||||
|
||||
# 10. Set the Directional Light component property Shadow|Camera to the Camera entity.
|
||||
shadow_camera_property_path = "Controller|Configuration|Shadow|Camera"
|
||||
directional_light_component.set_component_property_value(shadow_camera_property_path, camera_entity.id)
|
||||
shadow_camera_set = directional_light_component.get_component_property_value(shadow_camera_property_path)
|
||||
Report.result(Tests.shadow_camera_check, camera_entity.id == shadow_camera_set)
|
||||
directional_light_component.set_component_property_value(
|
||||
AtomComponentProperties.directional_light('Camera'), camera_entity.id)
|
||||
Report.result(
|
||||
Tests.shadow_camera_check,
|
||||
camera_entity.id == directional_light_component.get_component_property_value(
|
||||
AtomComponentProperties.directional_light('Camera')))
|
||||
|
||||
# 11. Delete DirectionalLight entity.
|
||||
directional_light_entity.delete()
|
||||
@@ -147,9 +174,12 @@ def AtomEditorComponents_DirectionalLight_AddedToEntity():
|
||||
general.redo()
|
||||
Report.result(Tests.deletion_redo, not directional_light_entity.exists())
|
||||
|
||||
# 14. Look for errors.
|
||||
helper.wait_for_condition(lambda: error_tracer.has_errors, 1.0)
|
||||
Report.result(Tests.no_error_occurred, not error_tracer.has_errors)
|
||||
# 14. Look for errors and 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__":
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user