426 lines
11 KiB
Python
426 lines
11 KiB
Python
"""
|
|
Copyright (C) 2023 Adobe.
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
"""
|
|
|
|
# file: common.py
|
|
# brief: Global variables and Enumerators
|
|
# author Adobe - 3D & Immersive
|
|
# copyright 2023 Adobe Inc. All rights reserved.
|
|
|
|
|
|
import sys
|
|
import os
|
|
import pathlib
|
|
import math
|
|
import bpy
|
|
from bpy.utils import previews
|
|
|
|
from enum import Enum
|
|
|
|
|
|
# Substance Remote Engine
|
|
if sys.platform == "win32":
|
|
SRE_DIR = "AppData/Roaming/Adobe/Substance3DIntegrationTools"
|
|
SRE_BIN = "substance_remote_engine.exe"
|
|
elif sys.platform == "linux":
|
|
SRE_DIR = "Adobe/Substance3DIntegrationTools"
|
|
SRE_BIN = "substance_remote_engine"
|
|
elif sys.platform == "darwin":
|
|
SRE_DIR = "Library/Application Support/Adobe/Substance3DIntegrationTools"
|
|
SRE_BIN = "substance_remote_engine"
|
|
|
|
SRE_ENGINE_DICT = {
|
|
"WINDOWS":
|
|
[("DX", "DirectX", "DX"),
|
|
("OGL", "OpenGL", "OGL"),
|
|
("CPU", "CPU", "CPU"),
|
|
("VK", "Vulkan", "VK")],
|
|
"LINUX":
|
|
[("OGL", "OpenGL", "OGL"),
|
|
("CPU", "CPU", "CPU"),
|
|
("VK", "Vulkan", "VK")],
|
|
"DARWIN":
|
|
[("MTL", "Metal", "MTL"),
|
|
("OGL", "OpenGL", "OGL"),
|
|
("CPU", "CPU", "CPU"),
|
|
("VK", "Vulkan", "VK")]
|
|
}
|
|
|
|
# Addon
|
|
ADDON_PACKAGE = __package__
|
|
ADDON_ROOT = os.path.dirname(__file__)
|
|
|
|
# Draw
|
|
DRAW_DEFAULT_FACTOR = 0.3
|
|
|
|
# Path
|
|
PATH_DEFAULT = bpy.path.native_pathsep(os.path.join(pathlib.Path.home(), "Documents/Adobe/Substance3DInBlender/export"))
|
|
PATH_LIBARY_DEFAULT = bpy.path.native_pathsep(os.path.join(pathlib.Path.home(), "Desktop"))
|
|
|
|
# Substance Remote Engine
|
|
SRE_HOST = "127.0.0.1"
|
|
SRE_PORT = 41646
|
|
|
|
# Blender Addon Server
|
|
SERVER_HOST = "127.0.0.1"
|
|
SERVER_ALLOW_LIST = ['127.0.0.1', 'localhost']
|
|
SERVER_TIMEOUT_S = 5
|
|
|
|
# Client
|
|
CLIENT_THREAD_THROTTLE_MS = 5
|
|
CLIENT_BUFFER_SIZE = 2048
|
|
|
|
|
|
# Render
|
|
RENDER_MAX_RESOLUTION_SYNC = [10, 10]
|
|
RENDER_KEY = "{}_{}"
|
|
RENDER_IMG_UPDATE_DELAY_S = 0.0001
|
|
|
|
|
|
# Toolkit
|
|
TOOLKIT_NAME = "Substance3DIntegrationTools"
|
|
TOOLKIT_EXT = ".zip"
|
|
TOOLKIT_VERSION_FILE = "version.txt"
|
|
TOOLKIT_LAG_TIME = 2
|
|
TOOLKIT_INSTALL_TIME = 5
|
|
|
|
# Keep only the latest 3 compatible versions to avoid cluttering
|
|
TOOLKIT_EXPECTED_VERSION = ["2.1.1", "2.1.0", "2.0.0"]
|
|
|
|
# Web site links
|
|
WEB_SUBSTANCE_PRERELEASE = "https://www.adobeprerelease.com/beta/3DF9B9CB-7B2C-4B54-E279-86F9A93E82CD"
|
|
WEB_SUBSTANCE_TOOLS = "https://substance3d.adobe.com/plugins/substance-in-blender/#:~:text=The%20Substance%203D%20add-on,optimized%20features%20for%20enhanced%20productivity.&text=The%20add-on%20is%20in%20public%20" # noqa
|
|
WEB_SUBSTANCE_SHARE = "https://share-beta.substance3d.com/"
|
|
WEB_SUBSTANCE_SOURCE = "https://source.substance3d.com/"
|
|
WEB_SUBSTANCE_DOCS = "https://substance3d.adobe.com/documentation/integrations/blender-232292555.html"
|
|
WEB_SUBSTANCE_FORUMS = "https://community.adobe.com/t5/substance-3d-plugins/ct-p/ct-substance-3d-plugins?page=1&sort=latest_replies&lang=all&tabid=all" # noqa
|
|
WEB_SUBSTANCE_DISCORD = "https://discord.gg/substance3d"
|
|
|
|
# UI Panels
|
|
UI_SPACES = (
|
|
['3D View', 'VIEW_3D'],
|
|
['Node Editor', 'NODE_EDITOR'],
|
|
['Image Generic', 'IMAGE_EDITOR']
|
|
)
|
|
|
|
# SHORTCUTS
|
|
SHORTCUT_CLASS_NAME = 'SUBSTANCE_MT_MAIN_{}'
|
|
|
|
# APPLY TYPE
|
|
APPLY_TYPE_DICT = [
|
|
("INSERT", "INSERT", "Insert at the top"),
|
|
("APPEND", "APPEND", "Append at the bottom"),
|
|
]
|
|
|
|
# IMAGE EXPORT
|
|
IMAGE_EXPORT_FORMAT = [
|
|
("0", "BMP", "*.bmp"),
|
|
("1", "PNG", "*.png"),
|
|
("2", "JPEG", "*.jpeg"),
|
|
("3", "JPEG2000", "*.jp2"),
|
|
("4", "TARGA", "*.targa"),
|
|
("5", "TARGA_RAW", "*.targa"),
|
|
("6", "OPEN_EXR", "*.exr"),
|
|
("7", "HDR", "*.hdr"),
|
|
("8", "TIFF", "*.tiff")
|
|
]
|
|
|
|
IMAGE_FORMAT_DICT = [
|
|
("BMP", "bmp", "*.bmp"),
|
|
("EXR", "exr", "*.exr"),
|
|
("GIF", "gif", "*.gif"),
|
|
("HDR", "hdr", "*.hdr"),
|
|
("ICO", "ico", "*.ico"),
|
|
("J2K", "j2k", "*.j2k"),
|
|
("J2C", "j2c", "*.j2c"),
|
|
("JP2", "jp2", "*.jp2"),
|
|
("JPG", "jpg", "*.jpg"),
|
|
("JIF", "jif", "*.jif"),
|
|
("JPEG", "jpeg", "*.jpeg"),
|
|
("JPE", "jpe", "*.jpe"),
|
|
("JXR", "jxr", "*.jxr"),
|
|
("WDP", "wdp", "*.wdp"),
|
|
("HDP", "hdp", "*.hdp"),
|
|
("PBM", "pbm", "*.pbm"),
|
|
("PBMRAW", "pbm raw", "*.pbm"),
|
|
("PFM", "pfm", "*.pfm"),
|
|
("PGM", "pgm", "*.pgm"),
|
|
("PGMRAW", "pgm raw", "*.pgm"),
|
|
("PNG", "png", "*.png"),
|
|
("PPM", "ppm", "*.ppm"),
|
|
("TGA", "tga", "*.tga"),
|
|
("TARGA", "targa", "*.targa"),
|
|
("TIF", "tif", "*.tif"),
|
|
("TIFF", "tiff", "*.tiff"),
|
|
("WAP", "wap", "*.wap"),
|
|
("WBMP", "wbmp", "*.wbmp"),
|
|
("WBM", "wbm", "*.wbm"),
|
|
("WEBP", "webp", "*.webp"),
|
|
("XPM", "xpm", "*.xpm")
|
|
]
|
|
|
|
IMAGE_BITDEPTH_DICT = {
|
|
"BMP": [("8", "8", "8")],
|
|
"EXR": [("32", "32", "32")],
|
|
"GIF": [("8", "8", "8")],
|
|
"HDR": [("32", "32", "32")],
|
|
"ICO": [("8", "8", "8")],
|
|
"J2K": [("8", "8", "8"), ("16", "16", "16")],
|
|
"J2C": [("8", "8", "8"), ("16", "16", "16")],
|
|
"JP2": [("8", "8", "8"), ("16", "16", "16")],
|
|
"JPG": [("8", "8", "8")],
|
|
"JIF": [("8", "8", "8")],
|
|
"JPEG": [("8", "8", "8")],
|
|
"JPE": [("8", "8", "8")],
|
|
"JXR": [("8", "8", "8"), ("16", "16", "16"), ("32", "32", "32")],
|
|
"WDP": [("8", "8", "8"), ("16", "16", "16"), ("32", "32", "32")],
|
|
"HDP": [("8", "8", "8"), ("16", "16", "16"), ("32", "32", "32")],
|
|
"PBM": [("8", "8", "8")],
|
|
"PBMRAW": [("8", "8", "8")],
|
|
"PFM": [("32", "32", "32")],
|
|
"PGM": [("8", "8", "8"), ("16", "16", "16")],
|
|
"PGMRAW": [("8", "8", "8"), ("16", "16", "16")],
|
|
"PNG": [("8", "8", "8"), ("16", "16", "16")],
|
|
"PPM": [("8", "8", "8"), ("16", "16", "16")],
|
|
"TGA": [("8", "8", "8")],
|
|
"TARGA": [("8", "8", "8")],
|
|
"TIF": [("8", "8", "8"), ("16", "16", "16"), ("32", "32", "32")],
|
|
"TIFF": [("8", "8", "8"), ("16", "16", "16"), ("32", "32", "32")],
|
|
"WAP": [("8", "8", "8")],
|
|
"WBMP": [("8", "8", "8")],
|
|
"WBM": [("8", "8", "8")],
|
|
"WEBP": [("8", "8", "8")],
|
|
"XPM": [("8", "8", "8")]
|
|
}
|
|
|
|
# Icons
|
|
ICONS_DICT = previews.new()
|
|
ICONS_IMAGES = (
|
|
{"id": "share_icon", "filename": "share.png"},
|
|
{"id": "source_icon", "filename": "source.png"},
|
|
{"id": "random_icon", "filename": "random.png"},
|
|
{"id": "shuffle_icon", "filename": "shuffle.png"},
|
|
|
|
{"id": "loading", "filename": "loading.png"},
|
|
{"id": "loading_error", "filename": "loading_error.png"},
|
|
|
|
{"id": "render", "filename": "render.png"},
|
|
{"id": "render_queue", "filename": "render_queue.png"},
|
|
)
|
|
|
|
# Outputs Filter
|
|
OUTPUTS_FILTER_DICT = (
|
|
("enabled", "Enabled", "Show enabled outputs", "CHECKMARK", 1),
|
|
("shader", "Shader", "Show only shader outputs", "MATERIAL", 2),
|
|
("all", "All", "Show all available outputs", "COLLAPSEMENU", 3)
|
|
)
|
|
|
|
SHADER_OUTPUT_UNKNOWN_USAGE = "UNKNOWN"
|
|
|
|
# Parameters
|
|
INPUTS_MAX_RANDOM_SEED = 32767
|
|
INPUT_ANGLE_CONVERSION = math.pi * 2
|
|
INPUT_INT_MAX = 2 ** 31
|
|
INPUT_UPDATE_DELAY_S = 0.25
|
|
|
|
# GROUPS
|
|
INPUT_DEFAULT_GROUP = "General"
|
|
INPUT_CHANNELS_GROUP = "Channels"
|
|
INPUT_IMAGE_DEFAULT_GROUP = "Input Images"
|
|
INPUT_TECHINCAL_GROUP = "Technical parameters"
|
|
|
|
# RESOLUTIONS
|
|
RESOLUTIONS_DICT = (
|
|
('5', '32', ''),
|
|
('6', '64', ''),
|
|
('7', '128', ''),
|
|
('8', '256', ''),
|
|
('9', '512', ''),
|
|
('10', '1024', ''),
|
|
('11', '2048', ''),
|
|
('12', '4096', '')
|
|
)
|
|
|
|
|
|
# CLASS_NAME
|
|
CLASS_SHADER_INPUTS = "SUBSTANCE_SHP_{}"
|
|
|
|
CLASS_GRAPH_INPUTS = "SUBSTANCE_SGI_{}"
|
|
|
|
|
|
# PRESET_LABELS
|
|
PRESET_DEFAULT = "DEFAULT"
|
|
PRESET_CUSTOM = "CUSTOM"
|
|
|
|
|
|
# PRESET_EXTENSION
|
|
PRESET_EXTENSION = ".sbsprs"
|
|
|
|
|
|
class Code_RequestEndpoint(Enum):
|
|
system = "Lwnd-CHcT-uJlw-YSw3"
|
|
sbsar = "m7ef-7gYN-zTGu-4D3w"
|
|
preset = "S4Aa-CHHa-IHib-bpY3"
|
|
|
|
|
|
class Code_CallbackEndpoint(Enum):
|
|
render = "UNW4-UkJs-cxug-R2fK"
|
|
link = "cJiQ-IfbV-Tco8-JOaB"
|
|
|
|
|
|
class Code_RequestOp(Enum):
|
|
add = 0
|
|
remove = 1
|
|
update = 2
|
|
kill = 3
|
|
render = 4
|
|
load = 5
|
|
|
|
|
|
class Code_RequestType(Enum):
|
|
r_sync = 1
|
|
r_async = 2
|
|
|
|
|
|
class Code_SbsarOp(Enum):
|
|
load = 0
|
|
reload = 1
|
|
duplicate = 2
|
|
|
|
|
|
class Code_Response(Enum):
|
|
success = 0
|
|
toolkit_already_started = 1
|
|
toolkit_not_running = 2
|
|
toolkit_not_installed = 3
|
|
toolkit_in_use = 4
|
|
toolkit_stop_error = 5
|
|
toolkit_process_error = 6
|
|
toolkit_remove_error = 7
|
|
toolkit_version_error = 8
|
|
toolkit_version_get_error = 9
|
|
toolkit_version_empty_error = 10
|
|
toolkit_version_not_found_error = 11
|
|
toolkit_file_not_recognized_error = 12
|
|
toolkit_file_ext_error = 13
|
|
toolkit_install_error = 14
|
|
|
|
client_connection_error = 15
|
|
client_connection_refused_error = 16
|
|
|
|
server_request_type_error = 17
|
|
server_already_running = 18
|
|
server_not_running_error = 19
|
|
server_start_error = 20
|
|
server_stop_error = 21
|
|
|
|
sbsar_factory_register_error = 22
|
|
sbsar_factory_unregister_error = 23
|
|
|
|
sbsar_remove_not_found_error = 24
|
|
|
|
shader_preset_load_error = 25
|
|
|
|
input_image_empty = 26
|
|
|
|
preset_create_no_name_error = 27
|
|
preset_create_get_error = 28
|
|
preset_export_error = 29
|
|
preset_import_error = 30
|
|
preset_import_not_graph = 31
|
|
|
|
|
|
class Code_InputIdentifier(Enum):
|
|
outputsize = "$outputsize"
|
|
randomseed = "$randomseed"
|
|
pixelsize = "$pixelsize"
|
|
|
|
|
|
class Code_OutputSizeSuffix(Enum):
|
|
width = "_width"
|
|
height = "_height"
|
|
linked = "_linked"
|
|
|
|
|
|
class Code_InputType(Enum):
|
|
float = 0
|
|
float2 = 1
|
|
float3 = 2
|
|
float4 = 3
|
|
integer = 4
|
|
integer2 = 8
|
|
integer3 = 9
|
|
integer4 = 10
|
|
image = 5
|
|
string = 6
|
|
font = 7
|
|
other = -1
|
|
|
|
|
|
class Code_InputWidget(Enum):
|
|
combobox = "Combobox"
|
|
slider = "Slider"
|
|
color = "Color"
|
|
togglebutton = "Togglebutton"
|
|
image = "Image"
|
|
angle = "Angle"
|
|
position = "Position"
|
|
nowidget = "NoWidget"
|
|
|
|
|
|
class Code_Input(Enum):
|
|
combobox = "combobox"
|
|
slider_float = "slider_float"
|
|
slider_int = "slider_int"
|
|
other = "other"
|
|
|
|
|
|
class Code_ShaderInputType(Enum):
|
|
image = "image"
|
|
integer = "integer"
|
|
integer_maxmin = "integer_maxmin"
|
|
integer_slider = "integer_slider"
|
|
integer2 = "integer2"
|
|
integer2_maxmin = "integer2_maxmin"
|
|
integer2_slider = "integer2_slider"
|
|
integer3 = "integer3"
|
|
integer3_maxmin = "integer3_maxmin"
|
|
integer3_slider = "integer3_slider"
|
|
integer4 = "integer4"
|
|
integer4_maxmin = "integer4_maxmin"
|
|
integer4_slider = "integer4_slider"
|
|
float = "float"
|
|
float_maxmin = "float_maxmin"
|
|
float_slider = "float_slider"
|
|
float2 = "float2"
|
|
float2_maxmin = "float2_maxmin"
|
|
float2_slider = "float2_slider"
|
|
float3 = "float3"
|
|
float3_maxmin = "float3_maxmin"
|
|
float3_slider = "float3_slider"
|
|
float4 = "float4"
|
|
float4_maxmin = "float4_maxmin"
|
|
float4_slider = "float4_slider"
|
|
enum = "enum"
|
|
other = "other"
|
|
|
|
|
|
class Code_SbsarLoadSuffix(Enum):
|
|
loading = [" (loading...)", "loading"]
|
|
error = [" (error)", "loading_error"]
|
|
render = [" (rendering...)", "render"]
|
|
render_queue = [" (render_queue...)", "render_queue"]
|
|
success = ["", "NONE"]
|