im trying to offset the vertices of a sphere based on 3dnoise
how do i get the correct uvs? now they are in xy direction.
shader_type spatial;
uniform float distortStrenght : hint_range(0.0, 1.0, 0.1);
uniform float distortSpeed : hint_range(0.0, 4.0, 0.1);
uniform float noisescale : hint_range(0.0, 40.0, 1.0);
varying vec4 noisevalue ;
varying vec3 uv_world_pos;
uniform vec4 cloud_color1 : source_color;
uniform vec4 cloud_color2 : source_color;
//uniform vec4 flame_color : source_color;
float oct(vec3 p){
return fract(4768.1232345456 * sin((p.x+p.y*43.0+p.z*137.0)));
}
float achnoise(vec3 x){
vec3 p = floor(x);
vec3 fr = smoothstep(0.0, 1.0, fract(x));
vec3 LBZ = p + vec3(0.0, 0.0, 0.0);
vec3 LTZ = p + vec3(0.0, 1.0, 0.0);
vec3 RBZ = p + vec3(1.0, 0.0, 0.0);
vec3 RTZ = p + vec3(1.0, 1.0, 0.0);
vec3 LBF = p + vec3(0.0, 0.0, 1.0);
vec3 LTF = p + vec3(0.0, 1.0, 1.0);
vec3 RBF = p + vec3(1.0, 0.0, 1.0);
vec3 RTF = p + vec3(1.0, 1.0, 1.0);
float l0candidate1 = oct(LBZ);
float l0candidate2 = oct(RBZ);
float l0candidate3 = oct(LTZ);
float l0candidate4 = oct(RTZ);
float l0candidate5 = oct(LBF);
float l0candidate6 = oct(RBF);
float l0candidate7 = oct(LTF);
float l0candidate8 = oct(RTF);
float l1candidate1 = mix(l0candidate1, l0candidate2, fr[0]);
float l1candidate2 = mix(l0candidate3, l0candidate4, fr[0]);
float l1candidate3 = mix(l0candidate5, l0candidate6, fr[0]);
float l1candidate4 = mix(l0candidate7, l0candidate8, fr[0]);
float l2candidate1 = mix(l1candidate1, l1candidate2, fr[1]);
float l2candidate2 = mix(l1candidate3, l1candidate4, fr[1]);
float l3candidate1 = mix(l2candidate1, l2candidate2, fr[2]);
return l3candidate1;
}
float supernoise3d(vec3 p){
float a = achnoise(p);
float b = achnoise(p + 2.5);
return (a * b) ;
}
void vertex() {
uv_world_pos = (MODEL_MATRIX * vec4(VERTEX,1.0)).xyz;
noisevalue = vec4(supernoise3d(vec3(TIME*distortSpeed, uv_world_pos.x * noisescale , uv_world_pos.y * noisescale )));
VERTEX += (noisevalue.r * distortStrenght);
}
void fragment()
{
vec4 albedo_mix = vec4(supernoise3d(vec3(TIME*2.0 *distortSpeed, uv_world_pos.x *noisescale/10.0 , uv_world_pos.y * noisescale/10.0 )));
vec3 base_color = mix (cloud_color1.rgb,cloud_color2.rgb,albedo_mix.r*2.0 );
//vec3 burncolor = flame_color.rgb *2.0;
ALBEDO = base_color;
//EMISSION = burncolor;
}