Since animation is at upper stream than effects in the production, the animated geometry delivered to effects department has been already fixed and has very low chance to be changed. Instead of using simulation approached, I made a procedural animation workflow which derived pseudo collision behavior of grass. This was done by storing animation data in a single static geometry and by making the grass geometry sample the data to activate the pre-determined motion at the right timing.
I applied a noise-based swaying procedural animation tool on grass curves. My tool generated animated noise values, based on the vertices' position, and used the noise values as bending angles. Each vertex calculated the bending angle and bent position iteratively from the first vertex to the last vertex. With this procedure, curves kept the consistent length during animation.
At one frame, I generated a point cloud, inside the body of the animated geometry, which was a drifting limo in the shot, and animated the points with the same transformation of the limo. The points store the corresponding frame and velocity. I converted them into trail curves by connecting the points first, and converted them into volume. By interpolating the stored data, the volume had continuous time information in one of its fields. The grass geometry sampled the animation timing data from the volume and the stronger swaying motion was activated at the right timing.