forked from LeenkxTeam/LNXSDK
Repe [T3DU] Update - 31f26d171bba0355ce2a77031e3aad4c64dbc7e9
This commit is contained in:
@ -283,6 +283,11 @@ def parse_material_output(node: bpy.types.Node, custom_particle_node: bpy.types.
|
||||
|
||||
mat_state.emission_type = mat_state.EmissionType.NO_EMISSION
|
||||
|
||||
#for debugDraw color in deferred
|
||||
if '_EmissionShaded' not in wrd.world_defs:
|
||||
wrd.world_defs += '_EmissionShaded'
|
||||
lnx.assets.add_khafile_def('rp_gbuffer_emission')
|
||||
|
||||
# Surface
|
||||
if parse_surface or parse_opacity:
|
||||
state.parents = []
|
||||
@ -559,6 +564,8 @@ def parse_vector(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> str:
|
||||
'TEX_SKY',
|
||||
'TEX_VORONOI',
|
||||
'TEX_WAVE',
|
||||
'TEX_GABOR',
|
||||
'TEX_WHITE_NOISE',
|
||||
'VERTEX_COLOR',
|
||||
'BRIGHTCONTRAST',
|
||||
'GAMMA',
|
||||
@ -591,6 +598,7 @@ def parse_vector(node: bpy.types.Node, socket: bpy.types.NodeSocket) -> str:
|
||||
'COMBXYZ',
|
||||
'VECT_MATH',
|
||||
'DISPLACEMENT',
|
||||
'VECTOR_DISPLACEMENT',
|
||||
'VECTOR_ROTATE',
|
||||
)
|
||||
|
||||
@ -625,7 +633,7 @@ def get_value_input(node: bpy.types.Node, socket_names: Tuple[str, ...]) -> floa
|
||||
return '1.0'
|
||||
|
||||
|
||||
def parse_normal_map_color_input(inp, strength_input=None):
|
||||
def parse_normal_map_color_input(inp, strength_input=None, space='TANGENT'):
|
||||
frag = state.frag
|
||||
|
||||
if state.basecol_only or not inp.is_linked or state.normal_parsed:
|
||||
@ -633,20 +641,40 @@ def parse_normal_map_color_input(inp, strength_input=None):
|
||||
|
||||
state.normal_parsed = True
|
||||
frag.write_normal += 1
|
||||
if not get_lnx_export_tangents() or mat_get_material().lnx_decal: # Compute TBN matrix
|
||||
frag.write('vec3 texn = ({0}) * 2.0 - 1.0;'.format(parse_vector_input(inp)))
|
||||
frag.write('texn.y = -texn.y;')
|
||||
frag.add_include('std/normals.glsl')
|
||||
frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);')
|
||||
frag.write('n = TBN * normalize(texn);')
|
||||
else:
|
||||
frag.write('n = ({0}) * 2.0 - 1.0;'.format(parse_vector_input(inp)))
|
||||
if strength_input is not None:
|
||||
strength = parse_value_input(strength_input)
|
||||
|
||||
color_val = parse_vector_input(inp)
|
||||
strength = parse_value_input(strength_input) if strength_input is not None else '1.0'
|
||||
|
||||
if space == 'TANGENT':
|
||||
if not get_lnx_export_tangents() or mat_get_material().lnx_decal:
|
||||
frag.write(f'vec3 texn = ({color_val}) * 2.0 - 1.0;')
|
||||
frag.write('texn.y = -texn.y;')
|
||||
frag.add_include('std/normals.glsl')
|
||||
frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);')
|
||||
if strength != '1.0':
|
||||
frag.write('n.xy *= {0};'.format(strength))
|
||||
frag.write('n = normalize(TBN * n);')
|
||||
state.con.add_elem('tang', 'short4norm')
|
||||
frag.write(f'texn.xy *= {strength};')
|
||||
frag.write('n = TBN * normalize(texn);')
|
||||
else:
|
||||
frag.write(f'vec3 texn = ({color_val}) * 2.0 - 1.0;')
|
||||
if strength != '1.0':
|
||||
frag.write(f'texn.xy *= {strength};')
|
||||
frag.write('n = normalize(TBN * texn);')
|
||||
state.con.add_elem('tang', 'short4norm')
|
||||
|
||||
elif space in ['OBJECT', 'BLENDER_OBJECT']:
|
||||
frag.add_uniform('mat3 N', '_normalMatrix')
|
||||
frag.write(f'vec3 objn = ({color_val}) * 2.0 - 1.0;')
|
||||
if strength != '1.0':
|
||||
frag.write(f'objn = mix(vec3(0.0, 0.0, 1.0), objn, {strength});')
|
||||
frag.write('n = normalize(N * objn);')
|
||||
|
||||
elif space in ['WORLD', 'BLENDER_WORLD']:
|
||||
frag.write(f'vec3 worldn = ({color_val}) * 2.0 - 1.0;')
|
||||
if strength != '1.0':
|
||||
frag.write(f'n = normalize(mix(n, worldn, {strength}));')
|
||||
else:
|
||||
frag.write('n = normalize(worldn);')
|
||||
|
||||
frag.write_normal -= 1
|
||||
|
||||
|
||||
@ -700,6 +728,8 @@ def parse_value(node, socket):
|
||||
'TEX_POINTDENSITY',
|
||||
'TEX_VORONOI',
|
||||
'TEX_WAVE',
|
||||
'TEX_GABOR',
|
||||
'TEX_WHITE_NOISE',
|
||||
'LIGHT_FALLOFF',
|
||||
'NORMAL',
|
||||
'CLAMP',
|
||||
@ -828,7 +858,6 @@ def write_result(link: bpy.types.NodeLink) -> Optional[str]:
|
||||
|
||||
def write_procedurals():
|
||||
if state.curshader not in state.procedurals_written:
|
||||
state.curshader.add_function(c_functions.str_tex_proc)
|
||||
state.procedurals_written.add(state.curshader)
|
||||
|
||||
|
||||
@ -869,14 +898,18 @@ def texture_store(node, tex, tex_name, to_linear=False, unpremultiply=False, tex
|
||||
state.con.add_elem('tex', 'short2norm')
|
||||
curshader.add_uniform('sampler2D {0}'.format(tex_name), link=tex_link, default_value=default_value, is_lnx_mat_param=is_lnx_mat_param)
|
||||
triplanar = node.projection == 'BOX'
|
||||
spherical = node.projection == 'SPHERE'
|
||||
tube = node.projection == 'TUBE'
|
||||
if node.inputs[0].is_linked:
|
||||
uv_name = parse_vector_input(node.inputs[0])
|
||||
if triplanar:
|
||||
uv_name = 'vec3({0}.x, 1.0 - {0}.y, {0}.z)'.format(uv_name)
|
||||
uv_name = 'vec3({0}.x, {0}.y, 1.0 - {0}.z)'.format(uv_name)
|
||||
elif spherical or tube:
|
||||
uv_name = 'vec3({0}.x, {0}.y, {0}.z)'.format(uv_name)
|
||||
else:
|
||||
uv_name = 'vec2({0}.x, 1.0 - {0}.y)'.format(uv_name)
|
||||
else:
|
||||
uv_name = 'vec3(texCoord.xy, 0.0)' if triplanar else 'texCoord'
|
||||
uv_name = 'vec3(texCoord.xy, 0.0)' if triplanar or spherical or tube else 'texCoord'
|
||||
if triplanar:
|
||||
if not curshader.has_include('std/mapping.glsl'):
|
||||
curshader.add_include('std/mapping.glsl')
|
||||
@ -884,7 +917,16 @@ def texture_store(node, tex, tex_name, to_linear=False, unpremultiply=False, tex
|
||||
nor = 'TBN[2]'
|
||||
else:
|
||||
nor = 'n'
|
||||
curshader.write('vec4 {0} = vec4(triplanarMapping({1}, {2}, {3}), 0.0);'.format(tex_store, tex_name, nor, uv_name))
|
||||
blend = getattr(node, 'projection_blend', 0.0)
|
||||
curshader.write('vec4 {0} = boxProjection({1}, {2}, {3}, clamp({4}, 0.0, 1.0));'.format(tex_store, tex_name, nor, uv_name, blend))
|
||||
elif spherical:
|
||||
if not curshader.has_include('std/mapping.glsl'):
|
||||
curshader.add_include('std/mapping.glsl')
|
||||
curshader.write('vec4 {0} = texture({1}, sphericalMapping({2}));'.format(tex_store, tex_name, uv_name))
|
||||
elif tube:
|
||||
if not curshader.has_include('std/mapping.glsl'):
|
||||
curshader.add_include('std/mapping.glsl')
|
||||
curshader.write('vec4 {0} = texture({1}, tubeMapping({2}));'.format(tex_store, tex_name, uv_name))
|
||||
else:
|
||||
if mat_state.texture_grad:
|
||||
curshader.write('vec4 {0} = textureGrad({1}, {2}.xy, g2.xy, g2.zw);'.format(tex_store, tex_name, uv_name))
|
||||
|
||||
Reference in New Issue
Block a user