Integrating up through commit 90f050496
This commit is contained in:
+199
@@ -0,0 +1,199 @@
|
||||
# coding:utf-8
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
# its licensors.
|
||||
#
|
||||
# For complete copyright and license terms please see the LICENSE at the root of this
|
||||
# distribution (the "License"). All use of this software is governed by the License,
|
||||
# or, if provided, by the license below or the license accompanying this file. Do not
|
||||
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# -- This line is 75 characters -------------------------------------------
|
||||
"""Empty Doc String""" # To Do: add documentation
|
||||
# -------------------------------------------------------------------------
|
||||
# built-ins
|
||||
import os
|
||||
import sys
|
||||
#import simplejson as json
|
||||
import json
|
||||
|
||||
# Lumberyard extensions
|
||||
from azpy.env_bool import env_bool
|
||||
from azpy.constants import ENVAR_DCCSI_GDEBUG
|
||||
from azpy.constants import ENVAR_DCCSI_DEV_MODE
|
||||
from azpy.constants import *
|
||||
|
||||
# 3rdparty (we provide)
|
||||
from box import Box
|
||||
from pathlib import Path
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# set up global space, logging etc.
|
||||
_G_DEBUG = env_bool(ENVAR_DCCSI_GDEBUG, False)
|
||||
_DCCSI_DEV_MODE = env_bool(ENVAR_DCCSI_DEV_MODE, False)
|
||||
|
||||
_PACKAGENAME = __name__
|
||||
if _PACKAGENAME is '__main__':
|
||||
_PACKAGENAME = 'DCCsi.SDK.substance.builder.atom_material'
|
||||
|
||||
import azpy
|
||||
_LOGGER = azpy.initialize_logger(_PACKAGENAME)
|
||||
_LOGGER.debug('Starting up: {0}.'.format({_PACKAGENAME}))
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# early attach WingIDE debugger (can refactor to include other IDEs later)
|
||||
if _DCCSI_DEV_MODE:
|
||||
from azpy.test.entry_test import connect_wing
|
||||
foo = connect_wing()
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# previous
|
||||
class AtomPBR:
|
||||
def __init__(self, material_file):
|
||||
|
||||
# loading .material File
|
||||
self.material_file = material_file
|
||||
self.input_data = open(self.material_file, "r")
|
||||
self.material = json.load(self.input_data)
|
||||
self.mat_box = Box(self.material)
|
||||
self.input_data.close()
|
||||
|
||||
# List of texture slots
|
||||
self.tex = ['baseColor', 'metallic', 'roughness', 'normalMap', 'opacity']
|
||||
|
||||
# Construct texture maps
|
||||
self.basecolor_tex = ""
|
||||
self.metallic_tex = ""
|
||||
self.roughness_tex = ""
|
||||
self.normalmap_tex = ""
|
||||
self.opacity_tex = ""
|
||||
|
||||
def load(self, material_file):
|
||||
input_data = open(material_file, "r")
|
||||
self.material = json.load(input_data)
|
||||
self.mat_box = Box(self.material)
|
||||
input_data.close()
|
||||
|
||||
def get_map(self, tex_slot):
|
||||
return self.mat_box.properties[tex_slot].parameters.textureMap
|
||||
|
||||
def set_map(self, tex_slot, tex_map):
|
||||
self.mat_box.properties[tex_slot].parameters.textureMap = tex_map
|
||||
|
||||
def write(self, material_out):
|
||||
output_data = open(material_out, "w+")
|
||||
output_data.write(json.dumps(self.mat_box, indent=4))
|
||||
output_data.close()
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# new?
|
||||
class AtomMaterial:
|
||||
def __init__(self, material_file):
|
||||
# loading .material File
|
||||
self.material_file = material_file
|
||||
self.input_data = open(self.material_file, "r")
|
||||
self.material = json.load(self.input_data)
|
||||
self.mat_box = Box(self.material)
|
||||
self.input_data.close()
|
||||
|
||||
# List of texture slots
|
||||
# old tex maps
|
||||
# self.tex = ['DiffuseMap', 'NormalMap', 'SpecularMap', 'EnvironmentMap']
|
||||
self.tex = ['baseColor', 'metallic', 'roughness', 'specularF0', 'normal', 'opacity']
|
||||
|
||||
self.texture_map = {'baseColor': 'baseColor',
|
||||
'metallic': 'metallic',
|
||||
'roughness': 'roughness',
|
||||
'specularF0': 'specular',
|
||||
'normal': 'normal',
|
||||
'opacity': 'opacity'
|
||||
}
|
||||
|
||||
def load(self, material_file):
|
||||
input_data = open(material_file, "r")
|
||||
self.material = json.load(input_data)
|
||||
self.mat_box = Box(self.material)
|
||||
input_data.close()
|
||||
|
||||
def get_material_type(self):
|
||||
return self.mat_box.materialType
|
||||
|
||||
# old getMap function
|
||||
# def getMap(self, tex_slot):
|
||||
# return self.mat_box.properties.general[tex_slot]
|
||||
|
||||
def get_map(self, tex_slot):
|
||||
return self.mat_box.properties[tex_slot].textureMap
|
||||
|
||||
def set_map(self, tex_slot, tex_map):
|
||||
self.mat_box.properties[tex_slot].textureMap = tex_map
|
||||
self.mat_box.properties[tex_slot].useTexture = True
|
||||
self.mat_box.properties[tex_slot].factor = 1.0
|
||||
|
||||
def write(self, material_out):
|
||||
|
||||
if not material_out.parent.exists():
|
||||
try:
|
||||
material_out.parent.mkdir(mode=0o777, parents=True, exist_ok=True)
|
||||
_LOGGER.info('mkdir: {}'.format(material_out.parent))
|
||||
except Exception as e:
|
||||
_LOGGER.error(e)
|
||||
raise(e)
|
||||
else:
|
||||
_LOGGER.info('exists: {}'.format(material_out.parent))
|
||||
|
||||
material_out.touch()
|
||||
output_data = open(str(material_out), "w+")
|
||||
output_data.write(json.dumps(self.mat_box, indent=4))
|
||||
output_data.close()
|
||||
return material_out
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
###########################################################################
|
||||
# Main Code Block, runs this script as main (testing)
|
||||
# -------------------------------------------------------------------------
|
||||
if __name__ == "__main__":
|
||||
"""Run this file as main"""
|
||||
|
||||
_LOGGER.info("Test Run:: {0}.".format({_PACKAGENAME}))
|
||||
_LOGGER.info("{0} :: if __name__ == '__main__':".format(_PACKAGENAME))
|
||||
|
||||
material_path = Path(Path(__file__).parent.parent, 'resources', 'atom')
|
||||
# material_01 = AtomPBR("atom_pbr.material", "awesome.material")
|
||||
# material_01 = AtomPBR("atom_pbr.material")
|
||||
material_01 = AtomMaterial(Path(material_path, "StandardPBR_AllProperties.material"))
|
||||
# material_01.load("atom_pbr.material")
|
||||
# material_01.map(material_01.tex[2]).textureMap = "materials/substance/amazing_xzzzx.tif"
|
||||
# # print(material_01.metallic)
|
||||
# material_01.write("awesome.material")
|
||||
# print(material_01.tex[2])
|
||||
# print(material_01.getMap(material_01.tex[3]))
|
||||
|
||||
# material_01.baesColor_tex = "materials/substance/amazing_bc.tif"
|
||||
# material_01.setMap(material_01.tex[0], material_01.baesColor_tex)
|
||||
# material_01.write("awesome.material")
|
||||
|
||||
# Test material parser for the new format.
|
||||
material_01.baseColor_tex = "Textures/Streaming/streaming99.dds"
|
||||
material_01.metallic_tex = "Textures/Streaming/streaming99.dds"
|
||||
material_01.set_map(material_01.tex[0], material_01.baseColor_tex)
|
||||
material_01.set_map(material_01.tex[1], material_01.metallic_tex)
|
||||
material_out = material_01.write(Path(material_path, "atom_variant00.material"))
|
||||
_LOGGER.info('materialType is:: {}'.format(material_01.get_material_type()))
|
||||
|
||||
if material_out.exists():
|
||||
_LOGGER.info('Wrote material file: {}'.format(material_out))
|
||||
|
||||
# remove the logger
|
||||
del _LOGGER
|
||||
# ---- END ---------------------------------------------------------------
|
||||
Reference in New Issue
Block a user