Full BSDF
This commit is contained in:
@ -77,17 +77,12 @@ def parse_mixshader(node: bpy.types.ShaderNodeMixShader, out_socket: NodeSocket,
|
||||
state.curshader.write('{0}float {1} = 1.0 - {2};'.format(prefix, fac_inv_var, fac_var))
|
||||
|
||||
mat_state.emission_type = mat_state.EmissionType.NO_EMISSION
|
||||
sss_before_1 = mat_state.needs_sss
|
||||
o1 = c.parse_shader_input(node.inputs[1])
|
||||
sss_1 = mat_state.needs_sss
|
||||
ek1 = mat_state.emission_type
|
||||
|
||||
mat_state.emission_type = mat_state.EmissionType.NO_EMISSION
|
||||
mat_state.needs_sss = sss_before_1 # Reset to state before parsing input 1
|
||||
o2 = c.parse_shader_input(node.inputs[2])
|
||||
sss_2 = mat_state.needs_sss
|
||||
ek2 = mat_state.emission_type
|
||||
mat_state.needs_sss = sss_1 or sss_2
|
||||
|
||||
if state.parse_surface:
|
||||
fm = '{0} * {3} + {1} * {2}' # fac mix template: a*fac_inv + b*fac
|
||||
@ -126,17 +121,12 @@ def parse_mixshader(node: bpy.types.ShaderNodeMixShader, out_socket: NodeSocket,
|
||||
|
||||
def parse_addshader(node: bpy.types.ShaderNodeAddShader, out_socket: NodeSocket, state: ParserState) -> None:
|
||||
mat_state.emission_type = mat_state.EmissionType.NO_EMISSION
|
||||
sss_before_1 = mat_state.needs_sss
|
||||
o1 = c.parse_shader_input(node.inputs[0])
|
||||
sss_1 = mat_state.needs_sss
|
||||
ek1 = mat_state.emission_type
|
||||
|
||||
mat_state.emission_type = mat_state.EmissionType.NO_EMISSION
|
||||
mat_state.needs_sss = sss_before_1 # Reset to state before parsing input 0
|
||||
o2 = c.parse_shader_input(node.inputs[1])
|
||||
sss_2 = mat_state.needs_sss
|
||||
ek2 = mat_state.emission_type
|
||||
mat_state.needs_sss = sss_1 or sss_2
|
||||
|
||||
if state.parse_surface:
|
||||
am = '{0} * 0.5 + {1} * 0.5' # add mix template (average)
|
||||
@ -179,8 +169,6 @@ if bpy.app.version < (2, 91, 0):
|
||||
if state.parse_surface:
|
||||
c.write_normal(node.inputs['Normal'])
|
||||
state.out_basecol = c.parse_vector_input(node.inputs['Base Color'])
|
||||
if node.inputs[SUBSURFACE].is_linked or node.inputs[SUBSURFACE].default_value > 0.0:
|
||||
mat_state.needs_sss = True
|
||||
state.out_subsurface = c.parse_value_input(node.inputs[SUBSURFACE])
|
||||
state.out_subsurface_radius = c.parse_vector_input(node.inputs[SUBSURFACE_RADIUS])
|
||||
state.out_subsurface_color = c.parse_vector_input(node.inputs[SUBSURFACE_COLOR])
|
||||
@ -194,6 +182,9 @@ if bpy.app.version < (2, 91, 0):
|
||||
state.out_sheen_tint = 'vec3({})'.format(c.parse_value_input(node.inputs[SHEEN_TINT]))
|
||||
state.out_clearcoat = c.parse_value_input(node.inputs[CLEARCOAT])
|
||||
state.out_clearcoat_rough = c.parse_value_input(node.inputs[CLEARCOAT_ROUGHNESS])
|
||||
coat_normal_socket = node.inputs.get(CLEARCOAT_NORMAL)
|
||||
if coat_normal_socket is not None:
|
||||
c.write_normal(coat_normal_socket, target_var='nCoat')
|
||||
state.out_transmission = c.parse_value_input(node.inputs[TRANSMISSION])
|
||||
trans_rough_socket = node.inputs.get(TRANSMISSION_ROUGHNESS)
|
||||
if trans_rough_socket is not None:
|
||||
@ -216,8 +207,6 @@ if bpy.app.version >= (2, 91, 0) and bpy.app.version < (4, 0, 0):
|
||||
if state.parse_surface:
|
||||
c.write_normal(node.inputs['Normal'])
|
||||
state.out_basecol = c.parse_vector_input(node.inputs['Base Color'])
|
||||
if node.inputs[SUBSURFACE].is_linked or node.inputs[SUBSURFACE].default_value > 0.0:
|
||||
mat_state.needs_sss = True
|
||||
state.out_subsurface = c.parse_value_input(node.inputs[SUBSURFACE])
|
||||
state.out_subsurface_radius = c.parse_vector_input(node.inputs[SUBSURFACE_RADIUS])
|
||||
state.out_subsurface_color = c.parse_vector_input(node.inputs[SUBSURFACE_COLOR])
|
||||
@ -231,6 +220,9 @@ if bpy.app.version >= (2, 91, 0) and bpy.app.version < (4, 0, 0):
|
||||
state.out_sheen_tint = 'vec3({})'.format(c.parse_value_input(node.inputs[SHEEN_TINT]))
|
||||
state.out_clearcoat = c.parse_value_input(node.inputs[CLEARCOAT])
|
||||
state.out_clearcoat_rough = c.parse_value_input(node.inputs[CLEARCOAT_ROUGHNESS])
|
||||
coat_normal_socket = node.inputs.get(CLEARCOAT_NORMAL)
|
||||
if coat_normal_socket is not None:
|
||||
c.write_normal(coat_normal_socket, target_var='nCoat')
|
||||
state.out_transmission = c.parse_value_input(node.inputs[TRANSMISSION])
|
||||
state.out_transmission_rough = c.parse_value_input(node.inputs[TRANSMISSION_ROUGHNESS])
|
||||
state.out_tangent = c.parse_vector_input(node.inputs[TANGENT])
|
||||
@ -256,8 +248,6 @@ if bpy.app.version >= (4, 0, 0):
|
||||
|
||||
sss_input = node.inputs.get(SUBSURFACE)
|
||||
if sss_input is not None:
|
||||
if sss_input.is_linked or sss_input.default_value > 0.0:
|
||||
mat_state.needs_sss = True
|
||||
state.out_subsurface = c.parse_value_input(sss_input)
|
||||
|
||||
sss_radius_input = node.inputs.get(SUBSURFACE_RADIUS)
|
||||
@ -331,6 +321,9 @@ if bpy.app.version >= (4, 0, 0):
|
||||
coat_tint_socket = node.inputs.get(COAT_TINT)
|
||||
if coat_tint_socket is not None:
|
||||
state.out_coat_tint = c.parse_vector_input(coat_tint_socket)
|
||||
coat_normal_socket = node.inputs.get(CLEARCOAT_NORMAL)
|
||||
if coat_normal_socket is not None:
|
||||
c.write_normal(coat_normal_socket, target_var='nCoat')
|
||||
|
||||
trans_socket = node.inputs.get(TRANSMISSION)
|
||||
if trans_socket is not None:
|
||||
@ -507,8 +500,6 @@ def parse_bsdfrefraction(node: bpy.types.ShaderNodeBsdfRefraction, out_socket: N
|
||||
|
||||
def parse_subsurfacescattering(node: bpy.types.ShaderNodeSubsurfaceScattering, out_socket: NodeSocket, state: ParserState) -> None:
|
||||
if state.parse_surface:
|
||||
# Mark that this material needs SSS
|
||||
mat_state.needs_sss = True
|
||||
c.write_normal(node.inputs['Normal'])
|
||||
state.out_basecol = c.parse_vector_input(node.inputs['Color'])
|
||||
state.out_subsurface = c.parse_value_input(node.inputs['Scale'])
|
||||
|
||||
@ -588,7 +588,7 @@ def parse_tex_voronoi(node: bpy.types.ShaderNodeTexVoronoi, out_socket: bpy.type
|
||||
co = 'bposition'
|
||||
|
||||
scale = c.get_value_input(node, ['Scale'])
|
||||
exp = c.get_value_input(node, ['Exponent'])
|
||||
exp = c.get_value_input(node, ['Exponent']) if m == 3 else '1.0'
|
||||
randomness = c.get_value_input(node, ['Randomness'])
|
||||
|
||||
# Color or Position
|
||||
|
||||
Reference in New Issue
Block a user