def create_shadow_method(tech_res, material, resources, detail):
- from .datafile import Statement
+ from .datafile import Statement, Token
color_prop = next((p for p in material.properties if p.keyword and "color" in p.keyword), None)
else:
st.sub.append(Statement("shader", "occluder{}.glsl.shader".format(detail)))
+ if material.face_cull=='BACK':
+ st.sub.append(Statement("face_cull", Token("CULL_BACK")))
+
return st;
def create_technique_resource(material, resources):
ss.sub.append(Statement("uniform", u.name, *u.values[:u.size]))
st.sub.append(ss)
+ if material.face_cull=='BACK':
+ st.sub.append(Statement("face_cull", Token("CULL_BACK")))
+
tech_res.statements.append(st)
else:
base_method = "blended" if material.blend_type!='NONE' else ""
st.sub.append(Statement("receive_shadows", True))
if material.image_based_lighting:
st.sub.append(Statement("image_based_lighting", True))
+ if material.face_cull=='BACK':
+ st.sub.append(Statement("face_cull", Token("CULL_BACK")))
tech_res.statements.append(st)
shader_res.statements.append(st)
return shader_res
-
-
-class MaterialAtlasExporter:
- def __init__(self):
- pass
-
- def export_technique_resources(self, material_atlas, resources):
- from .datafile import Resource, Statement, Token
- base_color_name = material_atlas.name+"_base_color.tex"
- base_color_res = resources.get(base_color_name)
- if not base_color_res:
- base_color_res = Resource(base_color_name, "texture")
-
- base_color_res.statements.append(Statement("type", Token("\\2d")))
- base_color_res.statements.append(Statement("storage", Token('SRGB_ALPHA'), *material_atlas.size))
- base_color_res.statements.append(Statement("raw_data", material_atlas.base_color_data))
-
- resources[base_color_name] = base_color_res
-
- sampler_name = "nearest.samp"
- sampler_res = resources.get(sampler_name)
- if not sampler_res:
- sampler_res = Resource(sampler_name, "sampler")
-
- sampler_res.statements.append(Statement("filter", Token('NEAREST')))
-
- resources[sampler_name] = sampler_res
-
- mat_name = material_atlas.name+".mat"
- if mat_name not in resources:
- mat_res = Resource(mat_name, "material")
- mat_res.statements.append(Statement("type", Token('pbr')))
- mat_res.statements.append(mat_res.create_reference_statement("base_color_map", base_color_res))
- mat_res.statements.append(mat_res.create_reference_statement("sampler", sampler_res))
-
- resources[mat_name] = mat_res
-
- def export_technique(self, material_atlas, resources):
- return create_technique_resource(material_atlas, resources)