Transparency discard

This commit is contained in:
Lubos Lenco 2017-07-08 15:12:37 +02:00
parent 321de4bbdd
commit dd57d2f78f
5 changed files with 18 additions and 7 deletions

View file

@ -204,14 +204,18 @@ def write_norpos(con_mesh, vert, declare=False):
def make_deferred(con_mesh):
wrd = bpy.data.worlds['Arm']
make_base(con_mesh, parse_opacity=False)
# make_base(con_mesh, parse_opacity=True) #### Discarded transparency
discard_transparent = mat_state.material.discard_transparent
make_base(con_mesh, parse_opacity=discard_transparent)
frag = con_mesh.frag
vert = con_mesh.vert
tese = con_mesh.tese
# frag.write('if (opacity < 0.2) {discard;}') #### Discarded transparency
if discard_transparent:
opac = mat_state.material.discard_transparent_opacity
frag.write('if (opacity < {0}) discard;'.format(opac))
gapi = arm.utils.get_gapi()
if '_Veloc' in wrd.rp_defs:

View file

@ -28,8 +28,7 @@ def make(context_id, rpasses):
frag.add_out('vec4 fragColor') # Definition requred for d3d9 - pixel shader must minimally write all four components of COLOR0
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
parse_opacity = 'translucent' in rpasses
# parse_opacity = True #### Discarded transparency
parse_opacity = 'translucent' in rpasses or mat_state.material.discard_transparent
if parse_opacity:
frag.write('vec3 n;') # Discard at compile time
frag.write('float dotNV;')
@ -125,7 +124,8 @@ def make(context_id, rpasses):
vert.write('vec2 t2 = tex; // TODO: Temp for d3d')
if parse_opacity:
frag.write('if (opacity < 0.1) discard;')
opac = mat_state.material.discard_transparent_opacity_shadows
frag.write('if (opacity < {0}) discard;'.format(opac))
# frag.write('fragColor = vec4(0.0);')

View file

@ -30,7 +30,7 @@ def get_rpasses(material):
ar.append('decal')
elif material.overlay:
ar.append('overlay')
elif is_transluc(material):
elif is_transluc(material) and not material.discard_transparent:
ar.append('translucent')
else:
ar.append('mesh')

View file

@ -557,6 +557,9 @@ def init_properties():
('clockwise', 'Clockwise', 'Clockwise'),
('counter_clockwise', 'Counter-Clockwise', 'Counter-Clockwise')],
name = "Face Culling", default='clockwise')
bpy.types.Material.discard_transparent = bpy.props.BoolProperty(name="Discard Transparent", default=False)
bpy.types.Material.discard_transparent_opacity = bpy.props.FloatProperty(name="Discard Opacity", default=0.2, min=0, max=1)
bpy.types.Material.discard_transparent_opacity_shadows = bpy.props.FloatProperty(name="Discard Opacity Shadows", default=0.1, min=0, max=1)
bpy.types.Material.override_compare = bpy.props.BoolProperty(name="Override Compare-Mode", default=False)
bpy.types.Material.override_compare_mode = EnumProperty(
items = [('Always', 'Always', 'Always'),

View file

@ -303,6 +303,10 @@ class MaterialPropsPanel(bpy.types.Panel):
layout.prop(mat, 'two_sided_shading')
if not mat.two_sided_shading:
layout.prop(mat, 'override_cull_mode')
layout.prop(mat, 'discard_transparent')
if mat.discard_transparent:
layout.prop(mat, 'discard_transparent_opacity')
layout.prop(mat, 'discard_transparent_opacity_shadows')
layout.prop(mat, 'override_shader')
if mat.override_shader:
layout.prop(mat, 'override_shader_name')