Merge pull request 't3du - Fix NoiseTexture fac output for FBM and include params: detail and distortion' (#51) from Onek8/LNXSDK:main into main
Reviewed-on: #51
This commit is contained in:
		| @ -170,32 +170,64 @@ vec3 random3(const vec3 c) { | |||||||
|     r.y = fract(512.0 * j); |     r.y = fract(512.0 * j); | ||||||
|     return r - 0.5; |     return r - 0.5; | ||||||
| } | } | ||||||
| float tex_musgrave_f(const vec3 p) { |  | ||||||
|  | float noise_tex(const vec3 p) { | ||||||
|     const float F3 = 0.3333333; |     const float F3 = 0.3333333; | ||||||
|     const float G3 = 0.1666667; |     const float G3 = 0.1666667; | ||||||
|  |  | ||||||
|     vec3 s = floor(p + dot(p, vec3(F3))); |     vec3 s = floor(p + dot(p, vec3(F3))); | ||||||
|     vec3 x = p - s + dot(s, vec3(G3)); |     vec3 x = p - s + dot(s, vec3(G3)); | ||||||
|     vec3 e = step(vec3(0.0), x - x.yzx); |     vec3 e = step(vec3(0.0), x - x.yzx); | ||||||
|     vec3 i1 = e*(1.0 - e.zxy); |     vec3 i1 = e * (1.0 - e.zxy); | ||||||
|     vec3 i2 = 1.0 - e.zxy*(1.0 - e); |     vec3 i2 = 1.0 - e.zxy * (1.0 - e); | ||||||
|  |  | ||||||
|     vec3 x1 = x - i1 + G3; |     vec3 x1 = x - i1 + G3; | ||||||
|     vec3 x2 = x - i2 + 2.0*G3; |     vec3 x2 = x - i2 + 2.0 * G3; | ||||||
|     vec3 x3 = x - 1.0 + 3.0*G3; |     vec3 x3 = x - 1.0 + 3.0 * G3; | ||||||
|     vec4 w, d; |  | ||||||
|     w.x = dot(x, x); |     vec4 w; | ||||||
|     w.y = dot(x1, x1); |     w.x = max(0.6 - dot(x, x), 0.0); | ||||||
|     w.z = dot(x2, x2); |     w.y = max(0.6 - dot(x1, x1), 0.0); | ||||||
|     w.w = dot(x3, x3); |     w.z = max(0.6 - dot(x2, x2), 0.0); | ||||||
|     w = max(0.6 - w, 0.0); |     w.w = max(0.6 - dot(x3, x3), 0.0); | ||||||
|  |  | ||||||
|  |     w = w * w; | ||||||
|  |     w = w * w; | ||||||
|  |  | ||||||
|  |     vec4 d; | ||||||
|     d.x = dot(random3(s), x); |     d.x = dot(random3(s), x); | ||||||
|     d.y = dot(random3(s + i1), x1); |     d.y = dot(random3(s + i1), x1); | ||||||
|     d.z = dot(random3(s + i2), x2); |     d.z = dot(random3(s + i2), x2); | ||||||
|     d.w = dot(random3(s + 1.0), x3); |     d.w = dot(random3(s + 1.0), x3); | ||||||
|     w *= w; |  | ||||||
|     w *= w; |  | ||||||
|     d *= w; |     d *= w; | ||||||
|     return clamp(dot(d, vec4(52.0)), 0.0, 1.0); |     return clamp(dot(d, vec4(52.0)), 0.0, 1.0); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | float tex_musgrave_f(const vec3 p, float detail, float distortion) { | ||||||
|  |     // Apply distortion to the input coordinates smoothly with noise_tex | ||||||
|  |     vec3 distorted_p = p + distortion * vec3( | ||||||
|  |         noise_tex(p + vec3(5.2, 1.3, 7.1)), | ||||||
|  |         noise_tex(p + vec3(1.7, 9.2, 3.8)), | ||||||
|  |         noise_tex(p + vec3(8.3, 2.8, 4.5)) | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     float value = 0.0; | ||||||
|  |     float amplitude = 1.0; | ||||||
|  |     float frequency = 1.0; | ||||||
|  |  | ||||||
|  |     // Use 'detail' as number of octaves, clamped between 1 and 8 | ||||||
|  |     int octaves = int(clamp(detail, 1.0, 8.0)); | ||||||
|  |  | ||||||
|  |     for (int i = 0; i < octaves; i++) { | ||||||
|  |         value += amplitude * noise_tex(distorted_p * frequency); | ||||||
|  |         frequency *= 2.0; | ||||||
|  |         amplitude *= 0.5; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return clamp(value, 0.0, 1.0); | ||||||
|  | } | ||||||
|  |  | ||||||
| """ | """ | ||||||
|  |  | ||||||
| # col: the incoming color | # col: the incoming color | ||||||
|  | |||||||
| @ -254,10 +254,10 @@ if bpy.app.version < (4, 1, 0): | |||||||
|             co = 'bposition' |             co = 'bposition' | ||||||
|      |      | ||||||
|         scale = c.parse_value_input(node.inputs['Scale']) |         scale = c.parse_value_input(node.inputs['Scale']) | ||||||
|         # detail = c.parse_value_input(node.inputs[2]) |         detail = c.parse_value_input(node.inputs[3]) | ||||||
|         # distortion = c.parse_value_input(node.inputs[3]) |         distortion = c.parse_value_input(node.inputs[4]) | ||||||
|  |  | ||||||
|         res = f'tex_musgrave_f({co} * {scale} * 0.5)' |         res = f'tex_musgrave_f({co} * {scale} * 0.5, {detail}, {distortion})' | ||||||
|      |      | ||||||
|         return res |         return res | ||||||
|  |  | ||||||
| @ -278,11 +278,11 @@ def parse_tex_noise(node: bpy.types.ShaderNodeTexNoise, out_socket: bpy.types.No | |||||||
|     distortion = c.parse_value_input(node.inputs[5]) |     distortion = c.parse_value_input(node.inputs[5]) | ||||||
|     if bpy.app.version >= (4, 1, 0): |     if bpy.app.version >= (4, 1, 0): | ||||||
|         if node.noise_type == "FBM": |         if node.noise_type == "FBM": | ||||||
|             if out_socket == node.outputs[1]: |  | ||||||
|             state.curshader.add_function(c_functions.str_tex_musgrave) |             state.curshader.add_function(c_functions.str_tex_musgrave) | ||||||
|                 res = 'vec3(tex_musgrave_f({0} * {1}), tex_musgrave_f({0} * {1} + 120.0), tex_musgrave_f({0} * {1} + 168.0))'.format(co, scale, detail, distortion) |             if out_socket == node.outputs[1]: | ||||||
|  |                 res = 'vec3(tex_musgrave_f({0} * {1}, {2}, {3}), tex_musgrave_f({0} * {1} + 120.0, {2}, {3}), tex_musgrave_f({0} * {1} + 168.0, {2}, {3}))'.format(co, scale, detail, distortion) | ||||||
|             else: |             else: | ||||||
|                 res = f'tex_musgrave_f({co} * {scale} * 1.0)' |                 res = f'tex_musgrave_f({co} * {scale} * 1.0, {detail}, {distortion})' | ||||||
|         else: |         else: | ||||||
|             if out_socket == node.outputs[1]: |             if out_socket == node.outputs[1]: | ||||||
|                 res = 'vec3(tex_noise({0} * {1},{2},{3}), tex_noise({0} * {1} + 120.0,{2},{3}), tex_noise({0} * {1} + 168.0,{2},{3}))'.format(co, scale, detail, distortion) |                 res = 'vec3(tex_noise({0} * {1},{2},{3}), tex_noise({0} * {1} + 120.0,{2},{3}), tex_noise({0} * {1} + 168.0,{2},{3}))'.format(co, scale, detail, distortion) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user