Fix usage of normals in shaders
This commit is contained in:
parent
aa9a93b530
commit
b49bd54901
|
@ -365,7 +365,7 @@ def parse_normal_map_color_input(inp, strength_input=None):
|
|||
frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);')
|
||||
frag.write('n = TBN * normalize(texn);')
|
||||
else:
|
||||
frag.write('vec3 n = ({0}) * 2.0 - 1.0;'.format(parse_vector_input(inp)))
|
||||
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)
|
||||
if strength != '1.0':
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import arm.material.cycles as cycles
|
||||
import arm.material.mat_state as mat_state
|
||||
import arm.material.make_skin as make_skin
|
||||
import arm.material.make_particle as make_particle
|
||||
import arm.material.make_inst as make_inst
|
||||
import arm.material.shader as shader
|
||||
import arm.utils
|
||||
import arm.material.cycles as cycles
|
||||
|
||||
|
||||
def write_vertpos(vert):
|
||||
billboard = mat_state.material.arm_billboard
|
||||
|
@ -30,7 +32,8 @@ def write_vertpos(vert):
|
|||
vert.add_uniform('mat4 WVP', '_worldViewProjectionMatrix')
|
||||
vert.write('gl_Position = WVP * spos;')
|
||||
|
||||
def write_norpos(con_mesh, vert, declare=False, write_nor=True):
|
||||
|
||||
def write_norpos(con_mesh: shader.ShaderContext, vert: shader.Shader, declare=False, write_nor=True):
|
||||
prep = ''
|
||||
if declare:
|
||||
prep = 'vec3 '
|
||||
|
@ -42,7 +45,7 @@ def write_norpos(con_mesh, vert, declare=False, write_nor=True):
|
|||
if is_bone:
|
||||
make_skin.skin_nor(vert, prep)
|
||||
else:
|
||||
vert.write(prep + 'wnormal = normalize(N * vec3(nor.xy, pos.w));')
|
||||
vert.write_attrib(prep + 'wnormal = normalize(N * vec3(nor.xy, pos.w));')
|
||||
if con_mesh.is_elem('ipos'):
|
||||
make_inst.inst_pos(con_mesh, vert)
|
||||
vert.write_pre = False
|
||||
|
|
|
@ -89,7 +89,7 @@ def make(context_id, rpasses, shadowmap=False):
|
|||
vert.add_out('vec3 wnormal')
|
||||
vert.add_uniform('mat3 N', '_normalMatrix')
|
||||
vert.write('wnormal = normalize(N * vec3(nor.xy, pos.w));')
|
||||
|
||||
|
||||
make_tess.tesc_levels(tesc, rpdat.arm_tess_shadows_inner, rpdat.arm_tess_shadows_outer)
|
||||
make_tess.interpolate(tese, 'wposition', 3)
|
||||
make_tess.interpolate(tese, 'wnormal', 3, normalize=True)
|
||||
|
|
|
@ -140,7 +140,7 @@ def make_base(con_mesh, parse_opacity):
|
|||
else:
|
||||
vert.write_attrib('texCoord = tex * texUnpack;')
|
||||
|
||||
if tese != None:
|
||||
if tese is not None:
|
||||
tese.write_pre = True
|
||||
make_tess.interpolate(tese, 'texCoord', 2, declare_out=frag.contains('texCoord'))
|
||||
tese.write_pre = False
|
||||
|
@ -149,7 +149,7 @@ def make_base(con_mesh, parse_opacity):
|
|||
vert.add_out('vec2 texCoord1')
|
||||
vert.add_uniform('float texUnpack', link='_texUnpack')
|
||||
vert.write_attrib('texCoord1 = tex1 * texUnpack;')
|
||||
if tese != None:
|
||||
if tese is not None:
|
||||
tese.write_pre = True
|
||||
make_tess.interpolate(tese, 'texCoord1', 2, declare_out=frag.contains('texCoord1'))
|
||||
tese.write_pre = False
|
||||
|
@ -157,28 +157,25 @@ def make_base(con_mesh, parse_opacity):
|
|||
if con_mesh.is_elem('col'):
|
||||
vert.add_out('vec3 vcolor')
|
||||
vert.write_attrib('vcolor = col.rgb;')
|
||||
if tese != None:
|
||||
if tese is not None:
|
||||
tese.write_pre = True
|
||||
make_tess.interpolate(tese, 'vcolor', 3, declare_out=frag.contains('vcolor'))
|
||||
tese.write_pre = False
|
||||
|
||||
vert.add_out('vec3 wnormal')
|
||||
make_attrib.write_norpos(con_mesh, vert)
|
||||
frag.write_attrib('vec3 n = normalize(wnormal);')
|
||||
|
||||
if con_mesh.is_elem('tang'):
|
||||
if tese != None:
|
||||
vert.add_out('vec3 wnormal')
|
||||
make_attrib.write_norpos(con_mesh, vert)
|
||||
if tese is not None:
|
||||
tese.add_out('mat3 TBN')
|
||||
tese.write('vec3 wbitangent = normalize(cross(wnormal, wtangent));')
|
||||
tese.write('TBN = mat3(wtangent, wbitangent, wnormal);')
|
||||
tese.write_attrib('vec3 wbitangent = normalize(cross(wnormal, wtangent));')
|
||||
tese.write_attrib('TBN = mat3(wtangent, wbitangent, wnormal);')
|
||||
else:
|
||||
vert.add_out('mat3 TBN')
|
||||
make_attrib.write_norpos(con_mesh, vert, declare=True)
|
||||
vert.write('vec3 tangent = normalize(N * tang.xyz);')
|
||||
vert.write('vec3 bitangent = normalize(cross(wnormal, tangent));')
|
||||
vert.write('TBN = mat3(tangent, bitangent, wnormal);')
|
||||
else:
|
||||
vert.add_out('vec3 wnormal')
|
||||
make_attrib.write_norpos(con_mesh, vert)
|
||||
frag.write_attrib('vec3 n = normalize(wnormal);')
|
||||
vert.write_attrib('vec3 tangent = normalize(N * tang.xyz);')
|
||||
vert.write_attrib('vec3 bitangent = normalize(cross(wnormal, tangent));')
|
||||
vert.write_attrib('TBN = mat3(tangent, bitangent, wnormal);')
|
||||
|
||||
if is_displacement:
|
||||
if rpdat.arm_rp_displacement == 'Vertex':
|
||||
|
|
Loading…
Reference in a new issue