Jump to content
  • Advertisement
Sign in to follow this  
hick18

Effect File arrays

This topic is 3218 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Ive noticed that all the implementations of Perlin noise on the GPU create textures for their Noise and Gradient tables, and then use texture samplers to read the value they want. Why cant you create the arrays in the effect file, and access them through the [] operator? something like
cbuffer cbImmutable
{
float Random[256] = {	151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190, 6,148,247,120,234,75,
					0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,
					166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, 102,143,54, 65,25,63,161, 1,216,80,73,209,
					76,132,187,208, 89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,5,202,38,147,
					118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152, 2,44,154,163,70,221,153,101,155,
					167, 43,172,9,129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,
					179,162,241, 81,51,145,235,249,14,239,107,49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,138,236,
					205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180};
	
float3 Gradient[16] = {	float3( 1.0f,  1.0f,  0.0f),   float3(-1.0f,  1.0f,  0.0f),   float3( 1.0f, -1.0f,  0.0f),   float3(-1.0f, -1.0f,  0.0f),
						float3( 1.0f,  0.0f,  1.0f),   float3(-1.0f,  0.0f,  1.0f),   float3( 1.0f,  0.0f, -1.0f),   float3(-1.0f,  0.0f, -1.0f),
						float3( 0.0f,  1.0f,  1.0f),   float3( 0.0f, -1.0f,  1.0f),   float3( 0.0f,  1.0f, -1.0f),   float3( 0.0f, -1.0f, -1.0f),
						float3( 1.0f,  1.0f,  0.0f),   float3( 0.0f, -1.0f,  1.0f),   float3(-1.0f,  1.0f,  0.0f),   float3( 0.0f, -1.0f, -1.0f)};
}

//Gradients
//=============================================================================  
float grad(float x, float3 p)
{
	//return 1;
	x = fmod(abs(x), 16);
	return dot(Gradient[x], p);
}

//Permutation
//=============================================================================
float perm(float x)
{
	int i = fmod(abs(x), 256);
	return Random;
}

Share this post


Link to post
Share on other sites
Advertisement
I believe the answers lie in the number of registers used by the arrays, and the speed of accessing a texture vs. an array on the GPU.

Share this post


Link to post
Share on other sites
If you hardcode your random values into the effect you are effectivly locked to them. You can't change them except by editing code (shader or main program.)

On the other hand, with textures you just change the texture to get a new random sampling. That way you can let the art guys fiddle with the visual result. Want to try a turbulence noise? Or a salt-and-pepper noise? Or mayby sin curves? Just create a new noise texture for each in Photoshop or whatever and try them.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!