forked from LeenkxTeam/LNXSDK
Repe [T3DU] Update - 31f26d171bba0355ce2a77031e3aad4c64dbc7e9
This commit is contained in:
@ -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]
|
||||
|
||||
Reference in New Issue
Block a user