Transparency discard
This commit is contained in:
parent
321de4bbdd
commit
dd57d2f78f
|
@ -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:
|
||||
|
|
|
@ -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);')
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue