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 |