Jump to content

  • Log In with Google      Sign In   
  • Create Account


How to control the distribution of grass?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 BlurEffect   Members   -  Reputation: 162

Like
0Likes
Like

Posted 11 June 2014 - 10:15 AM

Hi guys,

 

I'm still busy implementing grass rendering by mostly adhering to this GPU Gems article: http://http.developer.nvidia.com/GPUGems/gpugems_ch07.html. That is, I'm using interleaved textures quads with transparent parts to simulate the grass. I have the grass pretty much done and also added a simple animation to it using the vertex shader. I have to add this grass to exisiting levels of a game now and am thinking about ways to control the distribution of the grass to prevent it from intersecting with objects in the level etc. I have implemented a simple solution already, but it's quite wasteful and I am looking for a better approach. At the moment I am generating random positions for grass objects within a specificly sized square to achieve a fairly even distribution. In addition, I created a square black and white texture with black areas representing areas, in which grass should be placed. In the shader, I map the position of the grass object to a texture coordinate into this texture and either discard the corresponding pixel or draw it depending on the texture value at that point. The problem is that I am sending data of all grass objects to the GPU just to have many of them being discarded in the end. The grass will be static, so it would be enough to somehow generate the positions of grass objects up front but I don't know how I could do that. Should I somehow sample the texture on the CPU and make sure all grass objects are placed on the desired parts? And is it actually possible to sample a texture on the CPU? What other choices do I have? Any ideas?

I actually tried sampling the texture on the CPU but the values I'm getting with this approach are not correct.

// pDensityTexture is of type ID3D11ShaderResourceView*
BYTE* pTexValue = reinterpret_cast<BYTE*>(m_pDensityTexture);

XMFLOAT4 pixel;
pixel.x  = pTexValue [0];
pixel.y  = pTexValue [1];
pixel.z  = pTexValue [2];
pixel.w = pTexValue [3];

Can you please point me into a direction to get this working. Thank you very much!



Sponsor:

#2 phil_t   Crossbones+   -  Reputation: 3234

Like
1Likes
Like

Posted 11 June 2014 - 01:54 PM

There's a recent post about "randomish" grass distribution here: http://mollyrocket.com/casey/stream_0015.html.

 

As for the larger scale question of where in the world to put grass:

 


Should I somehow sample the texture on the CPU and make sure all grass objects are placed on the desired parts? And is it actually possible to sample a texture on the CPU? What other choices do I have?

 

Why does it need to be a texture? If you've decided that you want to control where the grass objects are placed on the CPU, then your black and white "grass map" never needs to exist on the GPU, right? So it doesn't need to be a texture. Just have it be a grid of boolean values, say.



#3 Norman Barrows   Crossbones+   -  Reputation: 1991

Like
0Likes
Like

Posted 12 June 2014 - 11:51 AM

in caveman:

 

http://www.gamedev.net/blog/1730/entry-2258672-caveman-v30-general-desciption/

 

 

tall grass and prairie grass:

grass model ID, texture ID, scale, rotation, and location offset (jitter) are determined by functions which use a generic random map generated at game start.

ground foliage in woods and jungle is done similar to tall grass.

 

grass clumps in scrub terrain, trees, berry bushes, fruit trees, small rocks in scrub terrain, etc:

a tiled plant map (200x200 ft or 800x800 ft sparse matrix) containing model ID, texture ID, scale, rotation, and location is used to determine plant location. the plant map is generated at game start.

 

these are used to generate "terrain chunks" on the fly as needed, with LRU cacheing. a terrain chunk is a pre-generated ordered render queue of all the meshes in a 300x300 ft area, including interleaved ground meshes with different tiled ground textures, rocks, trees, plants, bushes, grass, rock shelters, caves, caverns, cliffs, canyons, huts, etc.

 

to draw the terrain, each visible terrain chunk is drawn in turn. individual meshes in a chunk are culled before being passed to directx for rendering.


Norm Barrows

Rockland Software Productions

"Building PC games since 1988"

 

rocklandsoftware.net

 





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS