Cloth Cache With First Stack Order

Welcome to this new blog post!

Today we are going to have a look at how you can use cloth caches with the First stack order mode.





Here is a script for randomizing your cloth caches.

import AtomsCore
import AtomsUtils
import AtomsMath
import os
import sys
import random

#agents ids to randomize
agents_ids = range(0,5)

#random time offset range
time_offset = 30

#input cache
cache_path = "E:/Atoms_files/atoms/deformed_cache/deform_anim.clothcache"
cache_folder = os.path.dirname(cache_path)
cache_name = os.path.basename(cache_path).split('.clothcache')[0]

#output cache
out_cache_folder = cache_folder
out_cache_name = cache_name+"_new" 

#open the header to get the start and end frame
ark = AtomsCore.Archive()
ark.readFromFile(cache_path)
cache_header = AtomsCore.MapMetadata()
cache_header.deserialise(ark)
start = cache_header['startFrame'].value()
end = cache_header['endFrame'].value()


#load all the frames of the * entry in memory
all_frame_data = {}
for i in range(start, end+1):
    curr_file = "%s/%s.%04d.clothcache" % (cache_folder, cache_name, i)
    ark_frame = AtomsCore.Archive()
    ark_frame.readFromFile(curr_file)
    cache_frame = AtomsCore.MapMetadata()
    cache_frame.deserialise(ark_frame)
    if not '*' in cache_frame:
        continue
    
    frame_data = cache_frame['*']
    all_frame_data[i] = frame_data.clone()
    

#randomize time offset
agents_ids_time_offset = [0 for i in agents_ids]
for i in range(len(agents_ids_time_offset)):
    agents_ids_time_offset[i] = random.randint(-time_offset,time_offset)
  
#rebuild the new random cache  
for f in range(start, end+1):
    frame_data = AtomsCore.MapMetadata()
    for i in range(len(agents_ids)):
        curr_frame = agents_ids_time_offset[i] % (end - start) + start
        agents_ids_time_offset[i] = agents_ids_time_offset[i] + 1
        frame_data[str(agents_ids[i])] = all_frame_data[curr_frame]
    frame_data['*'] = all_frame_data[f]
    frame_data['boundingBox'] = AtomsCore.Box3Metadata(AtomsMath.Box3d())
    
    ark_frame = AtomsCore.Archive(frame_data.memSize())
    frame_data.serialise(ark_frame)
    curr_file = "%s/%s.%04d.clothcache" % (out_cache_folder, out_cache_name, f)
    print curr_file
    ark_frame.writeToFile(curr_file)
    
#copy the header
ark_header = AtomsCore.Archive(cache_header.memSize())
cache_header.serialise(ark_header)
header_file = "%s/%s.clothcache" % (out_cache_folder, out_cache_name)
ark_frame.writeToFile(header_file)


Copyright © 2017, Toolchefs LTD.