MaterialScreenshotTests.bv.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. ----------------------------------------------------------------------------------------------------
  2. --
  3. -- All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
  4. -- its licensors.
  5. --
  6. -- For complete copyright and license terms please see the LICENSE at the root of this
  7. -- distribution (the "License"). All use of this software is governed by the License,
  8. -- or, if provided, by the license below or the license accompanying this file. Do not
  9. -- remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
  10. -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. --
  12. --
  13. ----------------------------------------------------------------------------------------------------
  14. g_shaderballModel = 'materialeditor/viewportmodels/shaderball.azmodel'
  15. g_cubeModel = 'materialeditor/viewportmodels/cube.azmodel'
  16. g_beveledCubeModel = 'materialeditor/viewportmodels/beveledcube.azmodel'
  17. g_modelWithoutLayerMask = 'objects/bunny.azmodel'
  18. g_modelWithLayerMask = 'objects/com_envi_me_wall-2x2_testcorner.azmodel'
  19. g_modelLucy = 'materialeditor/viewportmodels/lucy.azmodel'
  20. function GenerateMaterialScreenshot(imageComparisonThresholdLevel, materialName, options)
  21. if options == nil then options = {} end
  22. if not (type(options.model) == "string") then
  23. options.model = g_shaderballModel
  24. end
  25. if not (type(options.cameraPitch) == "number") then
  26. options.cameraPitch = 20
  27. end
  28. if not (type(options.cameraHeading) == "number") then
  29. options.cameraHeading = -30
  30. end
  31. if not (type(options.cameraDistance) == "number") then
  32. options.cameraDistance = 2.0
  33. end
  34. if not (type(options.cameraZ) == "number") then
  35. options.cameraZ = 0.0
  36. end
  37. if not (type(options.screenshotFilename) == "string") then
  38. options.screenshotFilename = materialName
  39. end
  40. Print("MODEL: " .. options.model)
  41. materialName = string.lower(materialName)
  42. SetImguiValue('Models/##Available', options.model)
  43. SetImguiValue('Materials/##Available', g_testMaterialsFolder .. materialName .. '.azmaterial')
  44. if (options.lighting ~= nil) then
  45. SetImguiValue('Lighting Preset##SampleBase/' .. options.lighting, true)
  46. else
  47. SetImguiValue('Lighting Preset##SampleBase/Neutral Urban (Alt)', true)
  48. end
  49. -- The sample resets the camera position after loading the model and we need to
  50. -- make sure that happens before moving the camera below
  51. IdleFrames(1)
  52. ArcBallCameraController_SetHeading(DegToRad(options.cameraHeading))
  53. ArcBallCameraController_SetPitch(DegToRad(-options.cameraPitch))
  54. ArcBallCameraController_SetDistance(options.cameraDistance)
  55. ArcBallCameraController_SetPan(Vector3(0.0, 0.0, options.cameraZ))
  56. -- Give some extra frames for the textures to finish streaming in.
  57. -- [GFX TODO][ATOM-4819] Hopefully at some point we can make this deterministic
  58. IdleFrames(10)
  59. options.screenshotFilename = string.lower(options.screenshotFilename)
  60. if type(options.uniqueSuffix) == "string" then
  61. filename = g_screenshotOutputFolder .. options.screenshotFilename .. '.' .. options.uniqueSuffix .. '.ppm'
  62. else
  63. filename = g_screenshotOutputFolder .. options.screenshotFilename .. '.ppm'
  64. end
  65. SelectImageComparisonToleranceLevel(imageComparisonThresholdLevel)
  66. CaptureScreenshot(filename)
  67. end
  68. OpenSample('RPI/Mesh')
  69. ResizeViewport(999, 999)
  70. ----------------------------------------------------------------------
  71. -- StandardPBR Materials...
  72. g_testMaterialsFolder = 'testdata/materials/standardpbrtestcases/'
  73. g_screenshotOutputFolder = ResolvePath('@user@/Scripts/Screenshots/StandardPBR/')
  74. Print('Saving screenshots to ' .. NormalizePath(g_screenshotOutputFolder))
  75. GenerateMaterialScreenshot('Level B', '001_DefaultWhite')
  76. GenerateMaterialScreenshot('Level G', '002_BaseColorLerp')
  77. GenerateMaterialScreenshot('Level H', '002_BaseColorLinearLight')
  78. GenerateMaterialScreenshot('Level G', '002_BaseColorMultiply')
  79. GenerateMaterialScreenshot('Level E', '003_MetalMatte')
  80. GenerateMaterialScreenshot('Level F', '003_MetalPolished')
  81. GenerateMaterialScreenshot('Level E', '004_MetalMap')
  82. GenerateMaterialScreenshot('Level E', '005_RoughnessMap')
  83. GenerateMaterialScreenshot('Level E', '006_SpecularF0Map')
  84. GenerateMaterialScreenshot('Level C', '007_MultiscatteringCompensationOff')
  85. GenerateMaterialScreenshot('Level C', '007_MultiscatteringCompensationOn')
  86. GenerateMaterialScreenshot('Level H', '008_NormalMap')
  87. GenerateMaterialScreenshot('Level E', '008_NormalMap_Bevels')
  88. GenerateMaterialScreenshot('Level F', '009_Opacity_Blended', {lighting="Neutral Urban", model=g_beveledCubeModel})
  89. GenerateMaterialScreenshot('Level H', '009_Opacity_Cutout_PackedAlpha_DoubleSided', {lighting="Neutral Urban", model=g_beveledCubeModel})
  90. GenerateMaterialScreenshot('Level H', '009_Opacity_Cutout_SplitAlpha_DoubleSided', {lighting="Neutral Urban", model=g_beveledCubeModel})
  91. GenerateMaterialScreenshot('Level G', '009_Opacity_Cutout_SplitAlpha_SingleSided', {lighting="Neutral Urban", model=g_beveledCubeModel})
  92. GenerateMaterialScreenshot('Level G', '010_AmbientOcclusion')
  93. GenerateMaterialScreenshot('Level G', '011_Emissive')
  94. GenerateMaterialScreenshot('Level I', '012_Parallax_POM', {model=g_cubeModel, cameraHeading=-35.0, cameraPitch=35.0})
  95. GenerateMaterialScreenshot('Level I', '013_SpecularAA_Off', {lighting="Dark Test Lighting"})
  96. GenerateMaterialScreenshot('Level J', '013_SpecularAA_On', {lighting="Dark Test Lighting"})
  97. GenerateMaterialScreenshot('Level G', '014_ClearCoat', {lighting="Neutral Urban"})
  98. GenerateMaterialScreenshot('Level H', '014_ClearCoat_NormalMap', {lighting="Neutral Urban"})
  99. GenerateMaterialScreenshot('Level H', '014_ClearCoat_NormalMap_2ndUv', {lighting="Neutral Urban"})
  100. GenerateMaterialScreenshot('Level F', '014_ClearCoat_RoughnessMap', {lighting="Neutral Urban"})
  101. GenerateMaterialScreenshot('Level F', '015_SubsurfaceScattering', {lighting="Dark Test Lighting", cameraHeading = 45.0, cameraPitch=30.0, cameraDistance=1.5})
  102. GenerateMaterialScreenshot('Level D', '015_SubsurfaceScattering_Transmission', {lighting="Dark Test Lighting", cameraHeading = 45.0, cameraPitch=-30.0, cameraDistance=1.5})
  103. GenerateMaterialScreenshot('Level I', '100_UvTiling_AmbientOcclusion')
  104. GenerateMaterialScreenshot('Level I', '100_UvTiling_BaseColor')
  105. GenerateMaterialScreenshot('Level I', '100_UvTiling_Emissive')
  106. GenerateMaterialScreenshot('Level H', '100_UvTiling_Metallic')
  107. GenerateMaterialScreenshot('Level I', '100_UvTiling_Normal')
  108. GenerateMaterialScreenshot('Level G', '100_UvTiling_Normal_Dome_Rotate20', {model=g_cubeModel, lighting="Dark Test Lighting", cameraHeading=225.0})
  109. GenerateMaterialScreenshot('Level G', '100_UvTiling_Normal_Dome_Rotate90', {model=g_cubeModel, lighting="Dark Test Lighting", cameraHeading=225.0})
  110. GenerateMaterialScreenshot('Level G', '100_UvTiling_Normal_Dome_ScaleOnlyU', {model=g_cubeModel, lighting="Dark Test Lighting", cameraHeading=225.0})
  111. GenerateMaterialScreenshot('Level G', '100_UvTiling_Normal_Dome_ScaleOnlyV', {model=g_cubeModel, lighting="Dark Test Lighting", cameraHeading=225.0})
  112. GenerateMaterialScreenshot('Level G', '100_UvTiling_Normal_Dome_ScaleUniform', {model=g_cubeModel, lighting="Dark Test Lighting", cameraHeading=225.0})
  113. GenerateMaterialScreenshot('Level G', '100_UvTiling_Normal_Dome_TransformAll', {model=g_cubeModel, lighting="Dark Test Lighting", cameraHeading=225.0})
  114. GenerateMaterialScreenshot('Level M', '100_UvTiling_Opacity', { lighting="Neutral Urban" })
  115. GenerateMaterialScreenshot('Level L', '100_UvTiling_Parallax_A', { uniqueSuffix="Angle1", model=g_cubeModel, cameraHeading=35.0, cameraPitch=35.0 })
  116. GenerateMaterialScreenshot('Level M', '100_UvTiling_Parallax_A', { uniqueSuffix="Angle2", model=g_cubeModel, cameraHeading=125.0, cameraPitch=35.0 })
  117. GenerateMaterialScreenshot('Level L', '100_UvTiling_Parallax_B', { uniqueSuffix="Angle1", model=g_cubeModel, cameraHeading=0.0, cameraPitch=45.0 })
  118. GenerateMaterialScreenshot('Level L', '100_UvTiling_Parallax_B', { uniqueSuffix="Angle2", model=g_cubeModel, cameraHeading=90.0, cameraPitch=45.0 })
  119. GenerateMaterialScreenshot('Level H', '100_UvTiling_Roughness')
  120. GenerateMaterialScreenshot('Level F', '100_UvTiling_SpecularF0')
  121. GenerateMaterialScreenshot('Level E', '101_DetailMaps_LucyBaseNoDetailMaps', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  122. GenerateMaterialScreenshot('Level F', '102_DetailMaps_All', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  123. GenerateMaterialScreenshot('Level F', '103_DetailMaps_BaseColor', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  124. GenerateMaterialScreenshot('Level F', '103_DetailMaps_BaseColorWithMask', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  125. GenerateMaterialScreenshot('Level F', '104_DetailMaps_Normal', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  126. GenerateMaterialScreenshot('Level F', '104_DetailMaps_NormalWithMask', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  127. GenerateMaterialScreenshot('Level F', '105_DetailMaps_BlendMaskUsingDetailUVs', {model=g_modelLucy, cameraHeading=175.0, cameraPitch=5.0, cameraDistance=0.75, cameraZ=0.5})
  128. ----------------------------------------------------------------------
  129. -- StandardMultilayerPBR Materials...
  130. g_testMaterialsFolder = 'testdata/materials/standardmultilayerpbrtestcases/'
  131. g_screenshotOutputFolder = ResolvePath('@user@/Scripts/Screenshots/StandardMultilayerPBR/')
  132. Print('Saving screenshots to ' .. NormalizePath(g_screenshotOutputFolder))
  133. GenerateMaterialScreenshot('Level I', '001_ManyFeatures', {model=g_cubeModel, cameraHeading=-125.0, cameraPitch=-16.0, cameraZ=0.12})
  134. GenerateMaterialScreenshot('Level I', '002_ParallaxPdo', {model=g_cubeModel, cameraHeading=15.0, cameraPitch=28.0, lighting="Goegap (Alt)"})
  135. GenerateMaterialScreenshot('Level G', '003_Debug_BlendMaskValues')
  136. GenerateMaterialScreenshot('Level F', '003_Debug_DepthMaps')
  137. GenerateMaterialScreenshot('Level I', '004_UseVertexColors', {model=g_modelWithLayerMask, cameraHeading=-135.0, cameraPitch=15.0, cameraZ=-0.3, cameraDistance=3.5})
  138. GenerateMaterialScreenshot('Level I', '004_UseVertexColors', {model=g_modelWithoutLayerMask, cameraHeading=145.0, cameraPitch=7.0, cameraZ=-0.1, cameraDistance=3.0, screenshotFilename="004_UseVertexColors_modelHasNoVertexColors"})
  139. ----------------------------------------------------------------------
  140. -- Skin Materials...
  141. g_testMaterialsFolder = 'testdata/materials/skintestcases/'
  142. g_screenshotOutputFolder = ResolvePath('@user@/Scripts/Screenshots/Skin/')
  143. Print('Saving screenshots to ' .. NormalizePath(g_screenshotOutputFolder))
  144. -- We should eventually replace this with realistic skin test cases, these are just placeholders for regression testing
  145. GenerateMaterialScreenshot('Level D', '001_lucy_regression_test', {model=g_modelLucy, cameraHeading=-26.0, cameraPitch=15.0, cameraDistance=2.0, cameraZ=0.7})
  146. GenerateMaterialScreenshot('Level E', '002_wrinkle_regression_test', {model=g_modelWithLayerMask, cameraHeading=-135.0, cameraPitch=15.0, cameraZ=-0.3, cameraDistance=3.5})
  147. ----------------------------------------------------------------------
  148. -- MinimalPBR Materials...
  149. g_testMaterialsFolder = 'materials/minimalpbr/'
  150. g_screenshotOutputFolder = ResolvePath('@user@/Scripts/Screenshots/MinimalPBR/')
  151. Print('Saving screenshots to ' .. NormalizePath(g_screenshotOutputFolder))
  152. GenerateMaterialScreenshot('Level B', 'MinimalPbr_Default')
  153. GenerateMaterialScreenshot('Level F', 'MinimalPbr_BlueMetal')
  154. GenerateMaterialScreenshot('Level D', 'MinimalPbr_RedDielectric')
  155. ----------------------------------------------------------------------
  156. -- AutoBrick Materials...
  157. g_screenshotOutputFolder = ResolvePath('@user@/Scripts/Screenshots/AutoBrick/')
  158. Print('Saving screenshots to ' .. NormalizePath(g_screenshotOutputFolder))
  159. g_testMaterialsFolder = 'testdata/materials/autobrick/'
  160. GenerateMaterialScreenshot('Level C', 'Brick', {model=g_cubeModel})
  161. GenerateMaterialScreenshot('Level D', 'Tile', {model=g_cubeModel})