2
0

substance_tools.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # coding:utf-8
  2. #!/usr/bin/python
  3. #
  4. # Copyright (c) Contributors to the Open 3D Engine Project.
  5. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  6. #
  7. # SPDX-License-Identifier: Apache-2.0 OR MIT
  8. #
  9. # -- This line is 75 characters -------------------------------------------
  10. """Empty Doc String""" # To Do: add documentation
  11. # -------------------------------------------------------------------------
  12. # built-ins
  13. import os
  14. import sys
  15. import site
  16. # Lumberyard extensions
  17. from azpy.env_bool import env_bool
  18. from azpy.constants import ENVAR_DCCSI_GDEBUG
  19. from azpy.constants import ENVAR_DCCSI_DEV_MODE
  20. from azpy.constants import *
  21. import sbsar_utils
  22. # 3rdparty
  23. from unipath import Path
  24. import click
  25. # -------------------------------------------------------------------------
  26. # -------------------------------------------------------------------------
  27. # substance automation toolkit (aka pysbs)
  28. # To Do: manage with dynaconf environment
  29. _PYSBS_DIR_PATH = Path(PATH_PROGRAMFILES_X64,
  30. 'Allegorithmic',
  31. 'Substance Automation Toolkit',
  32. 'Python API',
  33. 'install').resolve()
  34. site.addsitedir(str(_PYSBS_DIR_PATH)) # 'install' is the folder I created
  35. # Susbstance
  36. import pysbs.batchtools as pysbs_batch
  37. import pysbs.context as pysbs_context
  38. # -------------------------------------------------------------------------
  39. # -------------------------------------------------------------------------
  40. # set up global space, logging etc.
  41. _DCCSI_GDEBUG = env_bool(ENVAR_DCCSI_GDEBUG, False)
  42. _DCCSI_DEV_MODE = env_bool(ENVAR_DCCSI_DEV_MODE, False)
  43. _PACKAGENAME = __name__
  44. if _PACKAGENAME == '__main__':
  45. _PACKAGENAME = 'DCCsi.SDK.substance.builder.substance_tools'
  46. import azpy
  47. _LOGGER = azpy.initialize_logger(_PACKAGENAME)
  48. _LOGGER.debug('Starting up: {0}.'.format({_PACKAGENAME}))
  49. # -------------------------------------------------------------------------
  50. # -------------------------------------------------------------------------
  51. # Defining CONSTANTS
  52. # To Do: shouldn't need this _BASE_ENVVAR_DICT (replace with dynaconf config)
  53. from collections import OrderedDict
  54. _SYNTH_ENV_DICT = OrderedDict()
  55. _SYNTH_ENV_DICT = azpy.synthetic_env.stash_env(_SYNTH_ENV_DICT)
  56. # grab a specific path from the base_env
  57. _PATH_DCCSI = _SYNTH_ENV_DICT[ENVAR_PATH_DCCSIG]
  58. _PATH_O3DE_PROJECT = _SYNTH_ENV_DICT[ENVAR_PATH_O3DE_PROJECT]
  59. # build some reuseable path parts
  60. _PATH_MOCK_ASSETS = Path(_PATH_O3DE_PROJECT, 'Assets').norm()
  61. _PATH_MOCK_SUBLIB = Path(_PATH_MOCK_ASSETS, 'SubstanceSource').norm()
  62. _PATH_MOCK_SBS = Path(_PATH_MOCK_SUBLIB, 'sbs').norm()
  63. _PATH_MOCK_SBSAR = Path(_PATH_MOCK_SUBLIB, 'sbsar').norm()
  64. _PATH_MOCK_MAT = Path(_PATH_MOCK_ASSETS, 'Textures').norm()
  65. _PATH_MOCK_MAT_SUB = Path(_PATH_MOCK_MAT, 'Substance').norm()
  66. _PATH_INPUT_SBS = Path(_PATH_MOCK_SBS, 'bronze_yellow.sbs').norm()
  67. _PATH_COOK_OUTPUT = _PATH_MOCK_SBSAR.norm()
  68. _PATH_RENDER_OUTPUT = _PATH_MOCK_MAT_SUB
  69. _SBS_NAME = _PATH_INPUT_SBS.split('.sbs')[0].split('\\')[-1]
  70. _PYSBS_CONTEXT = pysbs_context.Context()
  71. # -------------------------------------------------------------------------
  72. # -------------------------------------------------------------------------
  73. @click.group()
  74. def builder_tools():
  75. pass
  76. # -------------------------------------------------------------------------
  77. # -------------------------------------------------------------------------
  78. @builder_tools.command()
  79. @click.option('--sbsar_path', default=_PATH_COOK_OUTPUT, help='Sbsar directory.')
  80. @click.option('--sbsar_name', default=_PATH_INPUT_SBS.stem, help='Sbsar name.')
  81. @click.option('--output_type', default='inputs', help='Output Type: \n'
  82. 'tex_maps | presets | inputs | input | input_type | params')
  83. def info(sbsar_path, sbsar_name, output_type):
  84. """SBSAR information"""
  85. click.echo(sbsar_utils.output_info(sbsar_path, sbsar_name, output_type))
  86. # -------------------------------------------------------------------------
  87. # -------------------------------------------------------------------------
  88. @builder_tools.command()
  89. @click.option('--sbs_path', default=_PATH_INPUT_SBS, help='Sbs path.')
  90. @click.option('--sbsar_path', default=_PATH_COOK_OUTPUT, help='Sbsar output path.')
  91. def sbs2sbsar(sbs_path, sbsar_path):
  92. """ Cook SBSAR from SBS"""
  93. sbsar_utils.cook_sbsar(sbs_path, sbsar_path)
  94. # -------------------------------------------------------------------------
  95. # -------------------------------------------------------------------------
  96. @builder_tools.command()
  97. @click.option('--sbsar_path', default=_PATH_COOK_OUTPUT, help='Sbsar directory.')
  98. @click.option('--sbsar_name', default=_PATH_INPUT_SBS.stem, help='Sbsar name.')
  99. @click.option('--tex_path', default=_PATH_RENDER_OUTPUT, help='Texture output path.')
  100. @click.option('--preset', required=False, help='Preset')
  101. @click.option('--output_size', default=9, help='512x512, 9 | 1024x1024, 10 | 2048x2048, 11')
  102. def render(sbsar_path, sbsar_name, tex_path, preset, output_size):
  103. """ Render textures maps from SBSAR"""
  104. sbsar_utils.render_sbsar(sbsar_path, sbsar_name, tex_path, preset, output_size)
  105. # -------------------------------------------------------------------------
  106. ###########################################################################
  107. # Main Code Block, runs this script as main (testing)
  108. # -------------------------------------------------------------------------
  109. if __name__ == '__main__':
  110. """Run this file as main"""
  111. _LOGGER.debug("{0} :: if __name__ == '__main__':".format(_PACKAGENAME))
  112. _LOGGER.debug(builder_tools())
  113. # remove the logger
  114. del _LOGGER
  115. # ---- END ---------------------------------------------------------------