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;
}
  • xyz replied to this.

    DJMaesen You need to move the vertex along its normal. So VERTEX += NORMAL * some_offset;. Assuming the mesh has correct normals.