forked from LeenkxTeam/LNXSDK
Repe [T3DU] and Moises Jpelaez updates
This commit is contained in:
@ -321,29 +321,18 @@ def parse_shader(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> Tuple[st
|
||||
'MIX_SHADER',
|
||||
'ADD_SHADER',
|
||||
'BSDF_PRINCIPLED',
|
||||
'PRINCIPLED_BSDF',
|
||||
'BSDF_DIFFUSE',
|
||||
'DIFFUSE_BSDF',
|
||||
'BSDF_GLOSSY',
|
||||
'GLOSSY_BSDF',
|
||||
'BSDF_SHEEN',
|
||||
'SHEEN_BSDF',
|
||||
'AMBIENT_OCCLUSION',
|
||||
'BSDF_ANISOTROPIC',
|
||||
'ANISOTROPIC_BSDF',
|
||||
'EMISSION',
|
||||
'BSDF_GLASS',
|
||||
'GLASS_BSDF',
|
||||
'BSDF_REFRACTION',
|
||||
'REFRACTION_BSDF',
|
||||
'HOLDOUT',
|
||||
'SUBSURFACE_SCATTERING',
|
||||
'BSDF_TRANSLUCENT',
|
||||
'TRANSLUCENT_BSDF',
|
||||
'BSDF_TRANSPARENT',
|
||||
'TRANSPARENT_BSDF',
|
||||
'BSDF_VELVET',
|
||||
'VELVET_BSDF',
|
||||
)
|
||||
|
||||
state.reset_outs()
|
||||
@ -377,7 +366,7 @@ def parse_shader(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> Tuple[st
|
||||
mat_state.emission_type = mat_state.EmissionType.SHADED
|
||||
if state.parse_opacity:
|
||||
state.out_opacity = parse_value_input(node.inputs[1])
|
||||
state.out_ior = 1.450;
|
||||
state.out_ior = 1.450
|
||||
else:
|
||||
return parse_group(node, socket)
|
||||
|
||||
@ -394,6 +383,21 @@ def parse_shader(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> Tuple[st
|
||||
return state.get_outs()
|
||||
|
||||
|
||||
# Use an array of socket names for compatibility across Blender versions
|
||||
def get_vector_input(node: bpy.types.Node, socket_names: Tuple[str, ...]) -> vec3str:
|
||||
for name in socket_names:
|
||||
if name in node.inputs:
|
||||
try:
|
||||
return parse_vector_input(node.inputs[name])
|
||||
except Exception:
|
||||
log.warn(f'Failed to parse input "{name}" on node "{node.name}"')
|
||||
else:
|
||||
# FIXME: Fallback to default value if the node isn't found
|
||||
log.warn(f'Input "{name}" not found on node "{node.name}", returning default None')
|
||||
return None
|
||||
|
||||
|
||||
|
||||
def parse_displacement_input(inp):
|
||||
if inp.is_linked:
|
||||
l = inp.links[0]
|
||||
@ -504,6 +508,20 @@ def parse_vector(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> str:
|
||||
return "vec3(0, 0, 0)"
|
||||
|
||||
|
||||
# Use an array of socket names for compatibility across Blender versions
|
||||
def get_value_input(node: bpy.types.Node, socket_names: Tuple[str, ...]) -> floatstr:
|
||||
for name in socket_names:
|
||||
if name in node.inputs:
|
||||
try:
|
||||
return parse_value_input(node.inputs[name])
|
||||
except Exception:
|
||||
log.warn(f'Failed to parse input "{name}" on node "{node.name}"')
|
||||
else:
|
||||
# FIXME: Fallback to default value if the node isn't found
|
||||
log.warn(f'Input "{name}" not found on node "{node.name}", returning default 1.0')
|
||||
return '1.0'
|
||||
|
||||
|
||||
def parse_normal_map_color_input(inp, strength_input=None):
|
||||
frag = state.frag
|
||||
|
||||
@ -731,7 +749,7 @@ def store_var_name(node: bpy.types.Node) -> str:
|
||||
return name + '_store'
|
||||
|
||||
|
||||
def texture_store(node, tex, tex_name, to_linear=False, tex_link=None, default_value=None, is_lnx_mat_param=None):
|
||||
def texture_store(node, tex, tex_name, to_linear=False, unpremultiply=False, tex_link=None, default_value=None, is_lnx_mat_param=None):
|
||||
curshader = state.curshader
|
||||
|
||||
tex_store = store_var_name(node)
|
||||
@ -770,6 +788,9 @@ def texture_store(node, tex, tex_name, to_linear=False, tex_link=None, default_v
|
||||
else:
|
||||
curshader.write('vec4 {0} = texture({1}, {2}.xy);'.format(tex_store, tex_name, uv_name))
|
||||
|
||||
if unpremultiply:
|
||||
curshader.write('if ({0}.a > 0.0) {0}.rgb /= {0}.a;'.format(tex_store))
|
||||
|
||||
if to_linear:
|
||||
curshader.write('{0}.rgb = pow({0}.rgb, vec3(2.2));'.format(tex_store))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user