Repe [T3DU] Update - 31f26d171bba0355ce2a77031e3aad4c64dbc7e9

This commit is contained in:
2026-09-04 10:46:13 -07:00
parent c915312901
commit 0460b9d587
482 changed files with 27797 additions and 3226 deletions

View File

@ -22,35 +22,41 @@ def write(vert, particle_info=None, shadowmap=False):
rotation_factor_random = 0
phase_factor = 0
phase_factor_random = 0
normal_factor = 0.0
for obj in bpy.data.objects:
for psys in obj.particle_systems:
psettings = psys.settings
if psettings.instance_object:
if psettings.instance_object.active_material:
# FIXME: Different particle systems may share the same particle object. This ideally should check the correct `ParticleSystem` using an id or name in the particle's object material.
if psettings.instance_object.active_material.name.replace(".", "_") == vert.context.matname:
# Rotation data
use_rotations = psettings.use_rotations
rotation_mode = psettings.rotation_mode
rotation_factor_random = psettings.rotation_factor_random
phase_factor = psettings.phase_factor
phase_factor_random = psettings.phase_factor_random
mat_found = False
for slot in psettings.instance_object.material_slots:
if slot.material and slot.material.name.replace(".", "_") == vert.context.matname:
mat_found = True
break
if mat_found:
# Rotation data
use_rotations = psettings.use_rotations
rotation_mode = psettings.rotation_mode
rotation_factor_random = psettings.rotation_factor_random
phase_factor = psettings.phase_factor
phase_factor_random = psettings.phase_factor_random
normal_factor = psettings.normal_factor
# Texture slots data
if psettings.texture_slots and len(psettings.texture_slots.items()) != 0:
for tex_slot in psettings.texture_slots:
if not tex_slot: break
if not tex_slot.use_map_size: break # TODO: check also for other influences
if tex_slot.texture.use_color_ramp:
if tex_slot.texture.color_ramp and tex_slot.texture.color_ramp.elements:
ramp_el_len = len(tex_slot.texture.color_ramp.elements.items())
for element in tex_slot.texture.color_ramp.elements:
ramp_positions.append(element.position)
ramp_colors_b.append(element.color[2])
size_over_time_factor = tex_slot.size_factor
break
# Texture slots data
if psettings.texture_slots and len(psettings.texture_slots.items()) != 0:
for tex_slot in psettings.texture_slots:
if not tex_slot: break
if not tex_slot.use_map_size: break # TODO: check also for other influences
if tex_slot.texture and tex_slot.texture.use_color_ramp:
if tex_slot.texture.color_ramp and tex_slot.texture.color_ramp.elements:
ramp_el_len = len(tex_slot.texture.color_ramp.elements.items())
for element in tex_slot.texture.color_ramp.elements:
ramp_positions.append(element.position)
ramp_colors_b.append(element.color[2])
size_over_time_factor = tex_slot.size_factor
break
# Outs
@ -72,6 +78,12 @@ def write(vert, particle_info=None, shadowmap=False):
vert.add_uniform('float pd_random', '_particleRandom')
vert.add_uniform('float pd_size', '_particleSize')
vert.add_const('float', 'P_NORMAL_FACTOR', str(normal_factor))
if (shadowmap and normal_factor != 0.0):
vert.add_out('vec3 N')
if ramp_el_len != 0:
vert.add_const('float', 'P_SIZE_OVER_TIME_FACTOR', str(size_over_time_factor))
for i in range(ramp_el_len):
@ -143,6 +155,13 @@ def write(vert, particle_info=None, shadowmap=False):
vert.write('p_velocity.y += (fhash(gl_InstanceID + pd_random + pd[0][3]) * 2.0 / pd_size - 1.0 / pd_size) * pd[1][3];')
vert.write('p_velocity.z += (fhash(gl_InstanceID + pd_random + 2 * pd[0][3]) * 2.0 / pd_size - 1.0 / pd_size) * pd[1][3];')
if normal_factor != 0.0:
vert.write('if (P_NORMAL_FACTOR != 0.0) {')
vert.write(' vec3 local_normal_dir = normalize(ipos);')
vert.write(' vec3 world_emitter_normal = normalize(N * local_normal_dir);')
vert.write(' p_velocity += world_emitter_normal * P_NORMAL_FACTOR;')
vert.write('}')
# factor_random = pd[1][3]
# p.i = gl_InstanceID
# particles.length = pd[0][3]
@ -262,6 +281,10 @@ def write(vert, particle_info=None, shadowmap=False):
vert.add_out('float p_random')
vert.write('p_random = fract(sin(gl_InstanceID) * 43758.5453);')
if out_size:
vert.add_out('float p_size')
vert.write('p_size = pd_size * (1 - (fhash(gl_InstanceID + 3 * pd[0][3] + pd_random) * pd_size_random));')
def write_tilesheet(vert):
# tilesx, tilesy, framerate - pd[3][0], pd[3][1], pd[3][2]