186 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #ifndef UNITY_TERRAIN_TOOL_NOISE_${VariantName}_INC
 | |
| #define UNITY_TERRAIN_TOOL_NOISE_${VariantName}_INC
 | |
| 
 | |
| /*=========================================================================
 | |
| 
 | |
|     Includes
 | |
| 
 | |
| =========================================================================*/
 | |
| 
 | |
| ${Includes}
 | |
| 
 | |
| ${FractalDataDefinitions}
 | |
| 
 | |
| /*=========================================================================
 | |
| 
 | |
|     Fractal Functions
 | |
| 
 | |
| =========================================================================*/
 | |
| 
 | |
| float noise_${VariantName}_Raw( float pos, ${FunctionParams} )
 | |
| {
 | |
|     float prev = 0;
 | |
|     float n = 0;
 | |
| 
 | |
|     float octaves = ceil(fractalInput.octaves) + (1 - sign(frac(fractalInput.octaves)));
 | |
| 
 | |
|     for( float i = 0; i < octaves; ++i )
 | |
|     {
 | |
|         prev = n;
 | |
|         n += fractalInput.amplitude * get_noise_${NoiseName}( pos * fractalInput.frequency );
 | |
|         fractalInput.frequency *= fractalInput.lacunarity;
 | |
|         fractalInput.amplitude *= fractalInput.persistence;
 | |
|     }
 | |
| 
 | |
|     n = lerp(prev, n, frac(fractalInput.octaves));
 | |
| 
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| float noise_${VariantName}_Raw( float2 pos, ${FunctionParams} )
 | |
| {
 | |
|     float prev = 0;
 | |
|     float n = 0;
 | |
| 
 | |
|     float octaves = ceil(fractalInput.octaves) + (1 - sign(frac(fractalInput.octaves)));
 | |
| 
 | |
|     for( float i = 0; i < octaves; ++i )
 | |
|     {
 | |
|         prev = n;
 | |
|         n += fractalInput.amplitude * get_noise_${NoiseName}( pos * fractalInput.frequency );
 | |
|         fractalInput.frequency *= fractalInput.lacunarity;
 | |
|         fractalInput.amplitude *= fractalInput.persistence;
 | |
|     }
 | |
| 
 | |
|     n = lerp(prev, n, frac(fractalInput.octaves));
 | |
| 
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| float noise_${VariantName}_Raw( float3 pos, ${FunctionParams} )
 | |
| {
 | |
|     float prev = 0;
 | |
|     float n = 0;
 | |
| 
 | |
|     float octaves = ceil(fractalInput.octaves) + (1 - sign(frac(fractalInput.octaves)));
 | |
| 
 | |
|     for( float i = 0; i < octaves; ++i )
 | |
|     {
 | |
|         prev = n;
 | |
|         n += fractalInput.amplitude * get_noise_${NoiseName}( pos * fractalInput.frequency );
 | |
|         fractalInput.frequency *= fractalInput.lacunarity;
 | |
|         fractalInput.amplitude *= fractalInput.persistence;
 | |
|     }
 | |
| 
 | |
|     n = lerp(prev, n, frac(fractalInput.octaves));
 | |
| 
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| float noise_${VariantName}_Raw( float4 pos, ${FunctionParams} )
 | |
| {
 | |
|     float prev = 0;
 | |
|     float n = 0;
 | |
| 
 | |
|     float octaves = ceil(fractalInput.octaves) + (1 - sign(frac(fractalInput.octaves)));
 | |
| 
 | |
|     for( float i = 0; i < octaves; ++i )
 | |
|     {
 | |
|         prev = n;
 | |
|         n += fractalInput.amplitude * get_noise_${NoiseName}( pos * fractalInput.frequency );
 | |
|         fractalInput.frequency *= fractalInput.lacunarity;
 | |
|         fractalInput.amplitude *= fractalInput.persistence;
 | |
|     }
 | |
| 
 | |
|     n = lerp(prev, n, frac(fractalInput.octaves));
 | |
| 
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| /*=========================================================================
 | |
| 
 | |
|     ${VariantName} Noise Functions - Fractal, Warped
 | |
| 
 | |
| =========================================================================*/
 | |
| 
 | |
| float noise_${VariantName}( float pos, ${FunctionParams} )
 | |
| {
 | |
|     if(fractalInput.warpIterations > 0)
 | |
|     {
 | |
|         float prev = 0;
 | |
|         float warpIterations = ceil(fractalInput.warpIterations) + (1 - sign(frac(fractalInput.warpIterations)));
 | |
| 
 | |
|         // do warping
 | |
|         for ( float i = 0; i < warpIterations; ++i )
 | |
|         {
 | |
|             float q = noise_${VariantName}_Raw( pos + fractalInput.warpOffsets.x, ${FunctionInputs} );
 | |
|             prev = pos;
 | |
|             pos = pos + fractalInput.warpStrength * q;
 | |
|         }
 | |
| 
 | |
|         pos = lerp(prev, pos, frac(fractalInput.warpIterations));
 | |
|     }
 | |
| 
 | |
|     float f = noise_${VariantName}_Raw( pos, ${FunctionInputs} );
 | |
| 
 | |
|     return f;
 | |
| }
 | |
| 
 | |
| float noise_${VariantName}( float2 pos, ${FunctionParams} )
 | |
| {
 | |
|     if(fractalInput.warpIterations > 0)
 | |
|     {
 | |
|         float2 prev = 0;
 | |
|         float warpIterations = ceil(fractalInput.warpIterations) + (1 - sign(frac(fractalInput.warpIterations)));
 | |
| 
 | |
|         // do warping
 | |
|         for ( float i = 0; i < warpIterations; ++i )
 | |
|         {
 | |
|             float2 q = float2( noise_${VariantName}_Raw( pos, ${FunctionInputs} ),
 | |
|                             noise_${VariantName}_Raw( pos + fractalInput.warpOffsets.xy, ${FunctionInputs} ) );
 | |
|             prev = pos;
 | |
| 
 | |
|             pos = pos + fractalInput.warpStrength * q;
 | |
|         }
 | |
|         
 | |
|         pos = lerp(prev, pos, frac(fractalInput.warpIterations));
 | |
|     }
 | |
| 
 | |
|     float f = noise_${VariantName}_Raw( pos, ${FunctionInputs} );
 | |
| 
 | |
|     return f;
 | |
| }
 | |
| 
 | |
| float noise_${VariantName}( float3 pos, ${FunctionParams} )
 | |
| {
 | |
|     if(fractalInput.warpIterations > 0)
 | |
|     {
 | |
|         float3 prev = 0;
 | |
|         float warpIterations = ceil(fractalInput.warpIterations) + (1 - sign(frac(fractalInput.warpIterations)));
 | |
| 
 | |
|         // do warping
 | |
|         for ( float i = 0; i < warpIterations; ++i )
 | |
|         {
 | |
|             float3 q = float3( noise_${VariantName}_Raw( pos.xyz, ${FunctionInputs} ),
 | |
|                         noise_${VariantName}_Raw( pos.xyz + fractalInput.warpOffsets.xyz, ${FunctionInputs} ),
 | |
|                         noise_${VariantName}_Raw( pos.xyz + float3( fractalInput.warpOffsets.x, fractalInput.warpOffsets.y, 0 ), ${FunctionInputs} ) );
 | |
|             prev = pos;
 | |
|             pos = pos + fractalInput.warpStrength * q;
 | |
|         }
 | |
|         
 | |
|         pos = lerp(prev, pos, frac(fractalInput.warpIterations));
 | |
|     }
 | |
|     
 | |
|     float f = noise_${VariantName}_Raw( pos, ${FunctionInputs} );
 | |
| 
 | |
|     return f;
 | |
| }
 | |
| 
 | |
| float noise_${VariantName}( float4 pos, ${FunctionParams} )
 | |
| {
 | |
|     float f = noise_${VariantName}_Raw( pos, ${FunctionInputs} );
 | |
| 
 | |
|     return f;
 | |
| }
 | |
| 
 | |
| #endif // UNITY_TERRAIN_TOOL_NOISE_${VariantName}_INC | 
