I've come back to terrain after a long time, and I think heightmap terrain is better than using a mesh. I've been working on generating a mesh from a heightmap, procedural tree placement, and I'm back to the grass shader. I have it mostly working, but the height values are a little off. Almost all the grass is below the terrain, but the shape of the terrain is exaggerated in the grass, as if the height were scaled too high. I'm using the same height scale in the terrain mesh generator and the grass particles shader, both are 64 units high. Also, both the terrain and particles nodes are positioned at (0,0,0), and aren't rotated or scaled in any way(the transform for each is equal to Transform.IDENTITY). And, in the code for each, I have only one place that could possibly affect the Y position, and each gets the red channel from the heightmap and multiplies it by 64. It all works in theory...

The only thing I can think of that would make a difference in height is; for the terrain mesh I get texture data from a script, but for the particles I use the texture() function. I wouldn't think this would make a difference, but is it possible they don't return exactly the same results?