You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
| 
								 
											2 years ago
										 
									 | 
							
								// xs_begin
							 | 
						||
| 
								 | 
							
								// arg : { var = 'm_top' name = 'color_top' value = '1'   range = '1 255'    step = '1'	precision = '0' }
							 | 
						||
| 
								 | 
							
								// arg : { var = 'm_mid' name = 'color_mid' value = '1'   range = '1 255'    step = '1'	precision = '0' }
							 | 
						||
| 
								 | 
							
								// xs_end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//===== built-in args =====
							 | 
						||
| 
								 | 
							
								// uniform vec3		i_volume_size;		// volume size [1-256]
							 | 
						||
| 
								 | 
							
								// uniform float	i_color_index;		// current color index [0-255]
							 | 
						||
| 
								 | 
							
								// uniform int		i_num_color_sels;	// number of color selections [1-255]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//===== built-in functions ===== 
							 | 
						||
| 
								 | 
							
								// float voxel( vec3 v );				// get voxel color index
							 | 
						||
| 
								 | 
							
								// float color_sel( float k );			// get kth selected color index
							 | 
						||
| 
								 | 
							
								// vec4 palette( float index );			// get palette color
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float noise(int x, int y){
							 | 
						||
| 
								 | 
							
								  x %= 25;
							 | 
						||
| 
								 | 
							
								  y %= 25;
							 | 
						||
| 
								 | 
							
								  int n = x + y * 57;
							 | 
						||
| 
								 | 
							
								  n = (n<<13) ^ n;
							 | 
						||
| 
								 | 
							
								  float o=1.0f-(float((n*(n*n*int(iArgs[0]) + 789221 ) + 1376312589 ) & 0xFFFFFFFF)/1073741824.0f);
							 | 
						||
| 
								 | 
							
								  return o;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float snoise(int x, int y){
							 | 
						||
| 
								 | 
							
								  float co = (noise(x-1,y-1)+noise(x+1,y-1)+noise(x-1,y+1)+noise(x+1,y+1))/16.0f;
							 | 
						||
| 
								 | 
							
								  float si = (noise(x-1,y)+noise(x+1,y)+noise(x,y-1)+noise(x,y+1))/8.0f;
							 | 
						||
| 
								 | 
							
								  float ce = noise(x,y)/4.0f;
							 | 
						||
| 
								 | 
							
								  return co+si+ce;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float cosini(float a, float b, float x){
							 | 
						||
| 
								 | 
							
								  float f=(1-cos(x*3.1415927))*0.5f;
							 | 
						||
| 
								 | 
							
								  return a*(1-f)+b*f;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float inno(float x, float y){
							 | 
						||
| 
								 | 
							
								  int intX=int(x);
							 | 
						||
| 
								 | 
							
								  float fraX=x-intX;
							 | 
						||
| 
								 | 
							
								  int intY=int(y);
							 | 
						||
| 
								 | 
							
								  float fraY=y-intY;
							 | 
						||
| 
								 | 
							
								  float i1=cosini(snoise(intX,intY),snoise(intX+1,intY),fraX);
							 | 
						||
| 
								 | 
							
								  float i2=cosini(snoise(intX,intY+1),snoise(intX+1,intY+1),fraX);
							 | 
						||
| 
								 | 
							
								  return cosini(i1,i2,fraY);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float pernoi(float x, float y){
							 | 
						||
| 
								 | 
							
								  float total=0.;
							 | 
						||
| 
								 | 
							
								  for(int i=0;i<=20;i++){
							 | 
						||
| 
								 | 
							
								    float freq=pow(float(2),i);
							 | 
						||
| 
								 | 
							
								    total+=inno(x*freq,y*freq)*pow(0.45f,i);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return total;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float map( vec3 v ) {
							 | 
						||
| 
								 | 
							
								    float col = voxel(v);
							 | 
						||
| 
								 | 
							
								    if(col==0){
							 | 
						||
| 
								 | 
							
								        return 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    float cellSize = 1f/iVolumeSize.z;
							 | 
						||
| 
								 | 
							
								    float col_up = voxel( vec3( v.xy, v.z+ 1));
							 | 
						||
| 
								 | 
							
								    if(col_up==0){
							 | 
						||
| 
								 | 
							
								        return 188+pernoi(0.1f*v.x,0.1f*v.y);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return 98+pernoi(0.1f*v.x,0.1f*v.y);
							 | 
						||
| 
								 | 
							
								}
							 |