warp-lang 1.0.0b2__py3-none-win_amd64.whl → 1.0.0b6__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of warp-lang might be problematic. Click here for more details.
- docs/conf.py +17 -5
- examples/env/env_ant.py +1 -1
- examples/env/env_cartpole.py +1 -1
- examples/env/env_humanoid.py +1 -1
- examples/env/env_usd.py +4 -1
- examples/env/environment.py +8 -9
- examples/example_dem.py +34 -33
- examples/example_diffray.py +364 -337
- examples/example_fluid.py +32 -23
- examples/example_jacobian_ik.py +97 -93
- examples/example_marching_cubes.py +6 -16
- examples/example_mesh.py +6 -16
- examples/example_mesh_intersect.py +16 -14
- examples/example_nvdb.py +14 -16
- examples/example_raycast.py +14 -13
- examples/example_raymarch.py +16 -23
- examples/example_render_opengl.py +19 -10
- examples/example_sim_cartpole.py +82 -78
- examples/example_sim_cloth.py +45 -48
- examples/example_sim_fk_grad.py +51 -44
- examples/example_sim_fk_grad_torch.py +47 -40
- examples/example_sim_grad_bounce.py +108 -133
- examples/example_sim_grad_cloth.py +99 -113
- examples/example_sim_granular.py +5 -6
- examples/{example_sim_sdf_shape.py → example_sim_granular_collision_sdf.py} +37 -26
- examples/example_sim_neo_hookean.py +51 -55
- examples/example_sim_particle_chain.py +4 -4
- examples/example_sim_quadruped.py +126 -81
- examples/example_sim_rigid_chain.py +54 -61
- examples/example_sim_rigid_contact.py +66 -70
- examples/example_sim_rigid_fem.py +3 -3
- examples/example_sim_rigid_force.py +1 -1
- examples/example_sim_rigid_gyroscopic.py +3 -4
- examples/example_sim_rigid_kinematics.py +28 -39
- examples/example_sim_trajopt.py +112 -110
- examples/example_sph.py +9 -8
- examples/example_wave.py +7 -7
- examples/fem/bsr_utils.py +30 -17
- examples/fem/example_apic_fluid.py +85 -69
- examples/fem/example_convection_diffusion.py +97 -93
- examples/fem/example_convection_diffusion_dg.py +142 -149
- examples/fem/example_convection_diffusion_dg0.py +141 -136
- examples/fem/example_deformed_geometry.py +146 -0
- examples/fem/example_diffusion.py +115 -84
- examples/fem/example_diffusion_3d.py +116 -86
- examples/fem/example_diffusion_mgpu.py +102 -79
- examples/fem/example_mixed_elasticity.py +139 -100
- examples/fem/example_navier_stokes.py +175 -162
- examples/fem/example_stokes.py +143 -111
- examples/fem/example_stokes_transfer.py +186 -157
- examples/fem/mesh_utils.py +59 -97
- examples/fem/plot_utils.py +138 -17
- tools/ci/publishing/build_nodes_info.py +54 -0
- warp/__init__.py +4 -3
- warp/__init__.pyi +1 -0
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +5 -3
- warp/build_dll.py +29 -9
- warp/builtins.py +836 -492
- warp/codegen.py +864 -553
- warp/config.py +3 -1
- warp/context.py +389 -172
- warp/fem/__init__.py +24 -6
- warp/fem/cache.py +318 -25
- warp/fem/dirichlet.py +7 -3
- warp/fem/domain.py +14 -0
- warp/fem/field/__init__.py +30 -38
- warp/fem/field/field.py +149 -0
- warp/fem/field/nodal_field.py +244 -138
- warp/fem/field/restriction.py +8 -6
- warp/fem/field/test.py +127 -59
- warp/fem/field/trial.py +117 -60
- warp/fem/geometry/__init__.py +5 -1
- warp/fem/geometry/deformed_geometry.py +271 -0
- warp/fem/geometry/element.py +24 -1
- warp/fem/geometry/geometry.py +86 -14
- warp/fem/geometry/grid_2d.py +112 -54
- warp/fem/geometry/grid_3d.py +134 -65
- warp/fem/geometry/hexmesh.py +953 -0
- warp/fem/geometry/partition.py +85 -33
- warp/fem/geometry/quadmesh_2d.py +532 -0
- warp/fem/geometry/tetmesh.py +451 -115
- warp/fem/geometry/trimesh_2d.py +197 -92
- warp/fem/integrate.py +534 -268
- warp/fem/operator.py +58 -31
- warp/fem/polynomial.py +11 -0
- warp/fem/quadrature/__init__.py +1 -1
- warp/fem/quadrature/pic_quadrature.py +150 -58
- warp/fem/quadrature/quadrature.py +209 -57
- warp/fem/space/__init__.py +230 -53
- warp/fem/space/basis_space.py +489 -0
- warp/fem/space/collocated_function_space.py +105 -0
- warp/fem/space/dof_mapper.py +49 -2
- warp/fem/space/function_space.py +90 -39
- warp/fem/space/grid_2d_function_space.py +149 -496
- warp/fem/space/grid_3d_function_space.py +173 -538
- warp/fem/space/hexmesh_function_space.py +352 -0
- warp/fem/space/partition.py +129 -76
- warp/fem/space/quadmesh_2d_function_space.py +369 -0
- warp/fem/space/restriction.py +46 -34
- warp/fem/space/shape/__init__.py +15 -0
- warp/fem/space/shape/cube_shape_function.py +738 -0
- warp/fem/space/shape/shape_function.py +103 -0
- warp/fem/space/shape/square_shape_function.py +611 -0
- warp/fem/space/shape/tet_shape_function.py +567 -0
- warp/fem/space/shape/triangle_shape_function.py +429 -0
- warp/fem/space/tetmesh_function_space.py +132 -1039
- warp/fem/space/topology.py +295 -0
- warp/fem/space/trimesh_2d_function_space.py +104 -742
- warp/fem/types.py +13 -11
- warp/fem/utils.py +335 -60
- warp/native/array.h +120 -34
- warp/native/builtin.h +101 -72
- warp/native/bvh.cpp +73 -325
- warp/native/bvh.cu +406 -23
- warp/native/bvh.h +22 -40
- warp/native/clang/clang.cpp +1 -0
- warp/native/crt.h +2 -0
- warp/native/cuda_util.cpp +8 -3
- warp/native/cuda_util.h +1 -0
- warp/native/exports.h +1522 -1243
- warp/native/intersect.h +19 -4
- warp/native/intersect_adj.h +8 -8
- warp/native/mat.h +76 -17
- warp/native/mesh.cpp +33 -108
- warp/native/mesh.cu +114 -18
- warp/native/mesh.h +395 -40
- warp/native/noise.h +272 -329
- warp/native/quat.h +51 -8
- warp/native/rand.h +44 -34
- warp/native/reduce.cpp +1 -1
- warp/native/sparse.cpp +4 -4
- warp/native/sparse.cu +163 -155
- warp/native/spatial.h +2 -2
- warp/native/temp_buffer.h +18 -14
- warp/native/vec.h +103 -21
- warp/native/warp.cpp +2 -1
- warp/native/warp.cu +28 -3
- warp/native/warp.h +4 -3
- warp/render/render_opengl.py +261 -109
- warp/sim/__init__.py +1 -2
- warp/sim/articulation.py +385 -185
- warp/sim/import_mjcf.py +59 -48
- warp/sim/import_urdf.py +15 -15
- warp/sim/import_usd.py +174 -102
- warp/sim/inertia.py +17 -18
- warp/sim/integrator_xpbd.py +4 -3
- warp/sim/model.py +330 -250
- warp/sim/render.py +1 -1
- warp/sparse.py +625 -152
- warp/stubs.py +341 -309
- warp/tape.py +9 -6
- warp/tests/__main__.py +3 -6
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
- warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
- warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
- warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
- warp/tests/aux_test_unresolved_func.py +14 -0
- warp/tests/aux_test_unresolved_symbol.py +14 -0
- warp/tests/disabled_kinematics.py +239 -0
- warp/tests/run_coverage_serial.py +31 -0
- warp/tests/test_adam.py +103 -106
- warp/tests/test_arithmetic.py +94 -74
- warp/tests/test_array.py +82 -101
- warp/tests/test_array_reduce.py +57 -23
- warp/tests/test_atomic.py +64 -28
- warp/tests/test_bool.py +22 -12
- warp/tests/test_builtins_resolution.py +1292 -0
- warp/tests/test_bvh.py +18 -18
- warp/tests/test_closest_point_edge_edge.py +54 -57
- warp/tests/test_codegen.py +165 -134
- warp/tests/test_compile_consts.py +28 -20
- warp/tests/test_conditional.py +108 -24
- warp/tests/test_copy.py +10 -12
- warp/tests/test_ctypes.py +112 -88
- warp/tests/test_dense.py +21 -14
- warp/tests/test_devices.py +98 -0
- warp/tests/test_dlpack.py +75 -75
- warp/tests/test_examples.py +237 -0
- warp/tests/test_fabricarray.py +22 -24
- warp/tests/test_fast_math.py +15 -11
- warp/tests/test_fem.py +1034 -124
- warp/tests/test_fp16.py +23 -16
- warp/tests/test_func.py +187 -86
- warp/tests/test_generics.py +194 -49
- warp/tests/test_grad.py +123 -181
- warp/tests/test_grad_customs.py +176 -0
- warp/tests/test_hash_grid.py +35 -34
- warp/tests/test_import.py +10 -23
- warp/tests/test_indexedarray.py +24 -25
- warp/tests/test_intersect.py +18 -9
- warp/tests/test_large.py +141 -0
- warp/tests/test_launch.py +14 -41
- warp/tests/test_lerp.py +64 -65
- warp/tests/test_lvalue.py +493 -0
- warp/tests/test_marching_cubes.py +12 -13
- warp/tests/test_mat.py +517 -2898
- warp/tests/test_mat_lite.py +115 -0
- warp/tests/test_mat_scalar_ops.py +2889 -0
- warp/tests/test_math.py +103 -9
- warp/tests/test_matmul.py +304 -69
- warp/tests/test_matmul_lite.py +410 -0
- warp/tests/test_mesh.py +60 -22
- warp/tests/test_mesh_query_aabb.py +21 -25
- warp/tests/test_mesh_query_point.py +111 -22
- warp/tests/test_mesh_query_ray.py +12 -24
- warp/tests/test_mlp.py +30 -22
- warp/tests/test_model.py +92 -89
- warp/tests/test_modules_lite.py +39 -0
- warp/tests/test_multigpu.py +88 -114
- warp/tests/test_noise.py +12 -11
- warp/tests/test_operators.py +16 -20
- warp/tests/test_options.py +11 -11
- warp/tests/test_pinned.py +17 -18
- warp/tests/test_print.py +32 -11
- warp/tests/test_quat.py +275 -129
- warp/tests/test_rand.py +18 -16
- warp/tests/test_reload.py +38 -34
- warp/tests/test_rounding.py +50 -43
- warp/tests/test_runlength_encode.py +168 -20
- warp/tests/test_smoothstep.py +9 -11
- warp/tests/test_snippet.py +143 -0
- warp/tests/test_sparse.py +261 -63
- warp/tests/test_spatial.py +276 -243
- warp/tests/test_streams.py +110 -85
- warp/tests/test_struct.py +268 -63
- warp/tests/test_tape.py +39 -21
- warp/tests/test_torch.py +90 -86
- warp/tests/test_transient_module.py +10 -12
- warp/tests/test_types.py +363 -0
- warp/tests/test_utils.py +451 -0
- warp/tests/test_vec.py +354 -2050
- warp/tests/test_vec_lite.py +73 -0
- warp/tests/test_vec_scalar_ops.py +2099 -0
- warp/tests/test_volume.py +418 -376
- warp/tests/test_volume_write.py +124 -134
- warp/tests/unittest_serial.py +35 -0
- warp/tests/unittest_suites.py +291 -0
- warp/tests/unittest_utils.py +342 -0
- warp/tests/{test_misc.py → unused_test_misc.py} +13 -5
- warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
- warp/thirdparty/appdirs.py +36 -45
- warp/thirdparty/unittest_parallel.py +589 -0
- warp/types.py +622 -211
- warp/utils.py +54 -393
- warp_lang-1.0.0b6.dist-info/METADATA +238 -0
- warp_lang-1.0.0b6.dist-info/RECORD +409 -0
- {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/WHEEL +1 -1
- examples/example_cache_management.py +0 -40
- examples/example_multigpu.py +0 -54
- examples/example_struct.py +0 -65
- examples/fem/example_stokes_transfer_3d.py +0 -210
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/fem/field/discrete_field.py +0 -80
- warp/fem/space/nodal_function_space.py +0 -233
- warp/tests/test_all.py +0 -223
- warp/tests/test_array_scan.py +0 -60
- warp/tests/test_base.py +0 -208
- warp/tests/test_unresolved_func.py +0 -7
- warp/tests/test_unresolved_symbol.py +0 -7
- warp_lang-1.0.0b2.dist-info/METADATA +0 -26
- warp_lang-1.0.0b2.dist-info/RECORD +0 -380
- /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
- /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
- /warp/tests/{test_square.py → aux_test_square.py} +0 -0
- {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/LICENSE.md +0 -0
- {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/top_level.txt +0 -0
warp/native/noise.h
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
|
-
#ifndef
|
|
12
|
-
#define
|
|
11
|
+
#ifndef M_PI_F
|
|
12
|
+
#define M_PI_F 3.14159265358979323846f
|
|
13
13
|
#endif
|
|
14
14
|
|
|
15
15
|
namespace wp
|
|
@@ -27,7 +27,7 @@ inline CUDA_CALLABLE float smootherstep_gradient(float t)
|
|
|
27
27
|
|
|
28
28
|
inline CUDA_CALLABLE float smoothstep(float t)
|
|
29
29
|
{
|
|
30
|
-
return t * t * (3.
|
|
30
|
+
return t * t * (3.f - t * 2.f);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
inline CUDA_CALLABLE float smoothstep_gradient(float t)
|
|
@@ -49,22 +49,35 @@ inline CUDA_CALLABLE float interpolate_gradient(float a0, float a1, float t, flo
|
|
|
49
49
|
// return (d_a1 - d_a0) * t + (a1 - a0) * d_t + d_a0;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
inline CUDA_CALLABLE vec2 interpolate_gradient_2d(float a0, float a1, float t, vec2& d_a0, vec2& d_a1, vec2& d_t)
|
|
53
|
+
{
|
|
54
|
+
return (d_a1 - d_a0) * smootherstep(t) + (a1 - a0) * smootherstep_gradient(t) * d_t + d_a0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
inline CUDA_CALLABLE vec3 interpolate_gradient_3d(float a0, float a1, float t, vec3& d_a0, vec3& d_a1, vec3& d_t)
|
|
58
|
+
{
|
|
59
|
+
return (d_a1 - d_a0) * smootherstep(t) + (a1 - a0) * smootherstep_gradient(t) * d_t + d_a0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
inline CUDA_CALLABLE vec4 interpolate_gradient_4d(float a0, float a1, float t, vec4& d_a0, vec4& d_a1, vec4& d_t)
|
|
63
|
+
{
|
|
64
|
+
return (d_a1 - d_a0) * smootherstep(t) + (a1 - a0) * smootherstep_gradient(t) * d_t + d_a0;
|
|
65
|
+
}
|
|
66
|
+
|
|
52
67
|
inline CUDA_CALLABLE float random_gradient_1d(uint32 state, int ix)
|
|
53
68
|
{
|
|
54
|
-
const
|
|
69
|
+
const uint32 p1 = 73856093;
|
|
55
70
|
uint32 idx = ix*p1 + state;
|
|
56
71
|
return randf(idx, -1.f, 1.f);
|
|
57
72
|
}
|
|
58
73
|
|
|
59
74
|
inline CUDA_CALLABLE vec2 random_gradient_2d(uint32 state, int ix, int iy)
|
|
60
75
|
{
|
|
61
|
-
const
|
|
62
|
-
const
|
|
76
|
+
const uint32 p1 = 73856093;
|
|
77
|
+
const uint32 p2 = 19349663;
|
|
63
78
|
uint32 idx = ix*p1 ^ iy*p2 + state;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
float y = sin(phi);
|
|
67
|
-
return vec2(x, y);
|
|
79
|
+
|
|
80
|
+
return normalize(sample_unit_square(idx));
|
|
68
81
|
}
|
|
69
82
|
|
|
70
83
|
inline CUDA_CALLABLE vec3 random_gradient_3d(uint32 state, int ix, int iy, int iz)
|
|
@@ -74,11 +87,7 @@ inline CUDA_CALLABLE vec3 random_gradient_3d(uint32 state, int ix, int iy, int i
|
|
|
74
87
|
const uint32 p3 = 53471161;
|
|
75
88
|
uint32 idx = ix*p1 ^ iy*p2 ^ iz*p3 + state;
|
|
76
89
|
|
|
77
|
-
|
|
78
|
-
float y = randn(idx);
|
|
79
|
-
float z = randn(idx);
|
|
80
|
-
|
|
81
|
-
return normalize(vec3(x, y, z));
|
|
90
|
+
return normalize(sample_unit_cube(idx));
|
|
82
91
|
}
|
|
83
92
|
|
|
84
93
|
inline CUDA_CALLABLE vec4 random_gradient_4d(uint32 state, int ix, int iy, int iz, int it)
|
|
@@ -89,12 +98,7 @@ inline CUDA_CALLABLE vec4 random_gradient_4d(uint32 state, int ix, int iy, int i
|
|
|
89
98
|
const uint32 p4 = 10000019;
|
|
90
99
|
uint32 idx = ix*p1 ^ iy*p2 ^ iz*p3 ^ it*p4 + state;
|
|
91
100
|
|
|
92
|
-
|
|
93
|
-
float y = randn(idx);
|
|
94
|
-
float z = randn(idx);
|
|
95
|
-
float t = randn(idx);
|
|
96
|
-
|
|
97
|
-
return normalize(vec4(x, y, z, t));
|
|
101
|
+
return normalize(sample_unit_hypercube(idx));
|
|
98
102
|
}
|
|
99
103
|
|
|
100
104
|
inline CUDA_CALLABLE float dot_grid_gradient_1d(uint32 state, int ix, float dx)
|
|
@@ -103,48 +107,24 @@ inline CUDA_CALLABLE float dot_grid_gradient_1d(uint32 state, int ix, float dx)
|
|
|
103
107
|
return dx*gradient;
|
|
104
108
|
}
|
|
105
109
|
|
|
106
|
-
inline CUDA_CALLABLE float dot_grid_gradient_1d_gradient(uint32 state, int ix, float d_dx)
|
|
107
|
-
{
|
|
108
|
-
float gradient = random_gradient_1d(state, ix);
|
|
109
|
-
return d_dx*gradient;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
110
|
inline CUDA_CALLABLE float dot_grid_gradient_2d(uint32 state, int ix, int iy, float dx, float dy)
|
|
113
111
|
{
|
|
114
112
|
vec2 gradient = random_gradient_2d(state, ix, iy);
|
|
115
113
|
return (dx*gradient[0] + dy*gradient[1]);
|
|
116
114
|
}
|
|
117
115
|
|
|
118
|
-
inline CUDA_CALLABLE float dot_grid_gradient_2d_gradient(uint32 state, int ix, int iy, float d_dx, float d_dy)
|
|
119
|
-
{
|
|
120
|
-
vec2 gradient = random_gradient_2d(state, ix, iy);
|
|
121
|
-
return (d_dx*gradient[0] + d_dy*gradient[1]);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
116
|
inline CUDA_CALLABLE float dot_grid_gradient_3d(uint32 state, int ix, int iy, int iz, float dx, float dy, float dz)
|
|
125
117
|
{
|
|
126
118
|
vec3 gradient = random_gradient_3d(state, ix, iy, iz);
|
|
127
119
|
return (dx*gradient[0] + dy*gradient[1] + dz*gradient[2]);
|
|
128
120
|
}
|
|
129
121
|
|
|
130
|
-
inline CUDA_CALLABLE float dot_grid_gradient_3d_gradient(uint32 state, int ix, int iy, int iz, float d_dx, float d_dy, float d_dz)
|
|
131
|
-
{
|
|
132
|
-
vec3 gradient = random_gradient_3d(state, ix, iy, iz);
|
|
133
|
-
return (d_dx*gradient[0] + d_dy*gradient[1] + d_dz*gradient[2]);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
122
|
inline CUDA_CALLABLE float dot_grid_gradient_4d(uint32 state, int ix, int iy, int iz, int it, float dx, float dy, float dz, float dt)
|
|
137
123
|
{
|
|
138
124
|
vec4 gradient = random_gradient_4d(state, ix, iy, iz, it);
|
|
139
125
|
return (dx*gradient[0] + dy*gradient[1] + dz*gradient[2] + dt*gradient[3]);
|
|
140
126
|
}
|
|
141
127
|
|
|
142
|
-
inline CUDA_CALLABLE float dot_grid_gradient_4d_gradient(uint32 state, int ix, int iy, int iz, int it, float d_dx, float d_dy, float d_dz, float d_dt)
|
|
143
|
-
{
|
|
144
|
-
vec4 gradient = random_gradient_4d(state, ix, iy, iz, it);
|
|
145
|
-
return (d_dx*gradient[0] + d_dy*gradient[1] + d_dz*gradient[2] + d_dt*gradient[3]);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
128
|
inline CUDA_CALLABLE float noise_1d(uint32 state, int x0, int x1, float dx)
|
|
149
129
|
{
|
|
150
130
|
//vX
|
|
@@ -156,13 +136,13 @@ inline CUDA_CALLABLE float noise_1d(uint32 state, int x0, int x1, float dx)
|
|
|
156
136
|
|
|
157
137
|
inline CUDA_CALLABLE float noise_1d_gradient(uint32 state, int x0, int x1, float dx)
|
|
158
138
|
{
|
|
159
|
-
float
|
|
160
|
-
float
|
|
139
|
+
float gradient_x0 = random_gradient_1d(state, x0);
|
|
140
|
+
float v0 = dx * gradient_x0;
|
|
161
141
|
|
|
162
|
-
float
|
|
163
|
-
float
|
|
142
|
+
float gradient_x1 = random_gradient_1d(state, x1);
|
|
143
|
+
float v1 = (dx-1.f) * gradient_x1;
|
|
164
144
|
|
|
165
|
-
return interpolate_gradient(v0, v1, dx,
|
|
145
|
+
return interpolate_gradient(v0, v1, dx, gradient_x0, gradient_x1, 1.f);
|
|
166
146
|
}
|
|
167
147
|
|
|
168
148
|
inline CUDA_CALLABLE float noise_2d(uint32 state, int x0, int y0, int x1, int y1, float dx, float dy)
|
|
@@ -181,34 +161,35 @@ inline CUDA_CALLABLE float noise_2d(uint32 state, int x0, int y0, int x1, int y1
|
|
|
181
161
|
|
|
182
162
|
inline CUDA_CALLABLE vec2 noise_2d_gradient(uint32 state, int x0, int y0, int x1, int y1, float dx, float dy)
|
|
183
163
|
{
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
float
|
|
187
|
-
|
|
188
|
-
float v10 = dot_grid_gradient_2d(state, x1, y0, dx-1.f, dy);
|
|
189
|
-
float d_v10_dx = dot_grid_gradient_2d_gradient(state, x1, y0, 1.f, 0.f);
|
|
190
|
-
float d_v10_dy = dot_grid_gradient_2d_gradient(state, x1, y0, 0.0, 1.f);
|
|
164
|
+
vec2 d00 = vec2(dx, dy);
|
|
165
|
+
vec2 gradient_v00 = random_gradient_2d(state, x0, y0);
|
|
166
|
+
float v00 = dot(d00, gradient_v00);
|
|
191
167
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
float
|
|
168
|
+
vec2 d10 = vec2(dx-1.f, dy);
|
|
169
|
+
vec2 gradient_v10 = random_gradient_2d(state, x1, y0);
|
|
170
|
+
float v10 = dot(d10, gradient_v10);
|
|
195
171
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
float
|
|
172
|
+
vec2 d01 = vec2(dx, dy-1.f);
|
|
173
|
+
vec2 gradient_v01 = random_gradient_2d(state, x0, y1);
|
|
174
|
+
float v01 = dot(d01, gradient_v01);
|
|
175
|
+
|
|
176
|
+
vec2 d11 = vec2(dx-1.f, dy-1.f);
|
|
177
|
+
vec2 gradient_v11 = random_gradient_2d(state, x1, y1);
|
|
178
|
+
float v11 = dot(d11, gradient_v11);
|
|
179
|
+
|
|
180
|
+
vec2 dx_dt = vec2(1.f, 0.f);
|
|
199
181
|
|
|
200
182
|
float xi0 = interpolate(v00, v10, dx);
|
|
201
|
-
|
|
202
|
-
float d_xi0_dy = interpolate_gradient(v00, v10, dx, d_v00_dy, d_v10_dy, 0.0);
|
|
183
|
+
vec2 gradient_xi0 = interpolate_gradient_2d(v00, v10, dx, gradient_v00, gradient_v10, dx_dt);
|
|
203
184
|
|
|
204
185
|
float xi1 = interpolate(v01, v11, dx);
|
|
205
|
-
|
|
206
|
-
float d_xi1_dy = interpolate_gradient(v01, v11, dx, d_v01_dy, d_v11_dy, 0.0);
|
|
186
|
+
vec2 gradient_xi1 = interpolate_gradient_2d(v01, v11, dx, gradient_v01, gradient_v11, dx_dt);
|
|
207
187
|
|
|
208
|
-
|
|
209
|
-
float gradient_y = interpolate_gradient(xi0, xi1, dy, d_xi0_dy, d_xi1_dy, 1.f);
|
|
188
|
+
vec2 dy_dt = vec2(0.f, 1.f);
|
|
210
189
|
|
|
211
|
-
|
|
190
|
+
vec2 gradient = interpolate_gradient_2d(xi0, xi1, dy, gradient_xi0, gradient_xi1, dy_dt);
|
|
191
|
+
|
|
192
|
+
return gradient;
|
|
212
193
|
}
|
|
213
194
|
|
|
214
195
|
inline CUDA_CALLABLE float noise_3d(uint32 state, int x0, int y0, int z0, int x1, int y1, int z1, float dx, float dy, float dz)
|
|
@@ -239,81 +220,65 @@ inline CUDA_CALLABLE float noise_3d(uint32 state, int x0, int y0, int z0, int x1
|
|
|
239
220
|
|
|
240
221
|
inline CUDA_CALLABLE vec3 noise_3d_gradient(uint32 state, int x0, int y0, int z0, int x1, int y1, int z1, float dx, float dy, float dz)
|
|
241
222
|
{
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
float
|
|
245
|
-
float d_v000_dz = dot_grid_gradient_3d_gradient(state, x0, y0, z0, 0.f, 0.f, 1.f);
|
|
223
|
+
vec3 d000 = vec3(dx, dy, dz);
|
|
224
|
+
vec3 gradient_v000 = random_gradient_3d(state, x0, y0, z0);
|
|
225
|
+
float v000 = dot(d000, gradient_v000);
|
|
246
226
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
float
|
|
250
|
-
float d_v100_dz = dot_grid_gradient_3d_gradient(state, x1, y0, z0, 0.f, 0.f, 1.f);
|
|
227
|
+
vec3 d100 = vec3(dx-1.f, dy, dz);
|
|
228
|
+
vec3 gradient_v100 = random_gradient_3d(state, x1, y0, z0);
|
|
229
|
+
float v100 = dot(d100, gradient_v100);
|
|
251
230
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
float
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
float
|
|
259
|
-
float d_v110_dy = dot_grid_gradient_3d_gradient(state, x1, y1, z0, 0.f, 1.f, 0.f);
|
|
260
|
-
float d_v110_dz = dot_grid_gradient_3d_gradient(state, x1, y1, z0, 0.f, 0.f, 1.f);
|
|
231
|
+
vec3 d010 = vec3(dx, dy-1.f, dz);
|
|
232
|
+
vec3 gradient_v010 = random_gradient_3d(state, x0, y1, z0);
|
|
233
|
+
float v010 = dot(d010, gradient_v010);
|
|
234
|
+
|
|
235
|
+
vec3 d110 = vec3(dx-1.f, dy-1.f, dz);
|
|
236
|
+
vec3 gradient_v110 = random_gradient_3d(state, x1, y1, z0);
|
|
237
|
+
float v110 = dot(d110, gradient_v110);
|
|
261
238
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
float
|
|
265
|
-
float d_v001_dz = dot_grid_gradient_3d_gradient(state, x0, y0, z1, 0.f, 0.f, 1.f);
|
|
239
|
+
vec3 d001 = vec3(dx, dy, dz-1.f);
|
|
240
|
+
vec3 gradient_v001 = random_gradient_3d(state, x0, y0, z1);
|
|
241
|
+
float v001 = dot(d001, gradient_v001);
|
|
266
242
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
float
|
|
270
|
-
float d_v101_dz = dot_grid_gradient_3d_gradient(state, x1, y0, z1, 0.f, 0.f, 1.f);
|
|
243
|
+
vec3 d101 = vec3(dx-1.f, dy, dz-1.f);
|
|
244
|
+
vec3 gradient_v101 = random_gradient_3d(state, x1, y0, z1);
|
|
245
|
+
float v101 = dot(d101, gradient_v101);
|
|
271
246
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
float
|
|
275
|
-
float d_v011_dz = dot_grid_gradient_3d_gradient(state, x0, y1, z1, 0.f, 0.f, 1.f);
|
|
247
|
+
vec3 d011 = vec3(dx, dy-1.f, dz-1.f);
|
|
248
|
+
vec3 gradient_v011 = random_gradient_3d(state, x0, y1, z1);
|
|
249
|
+
float v011 = dot(d011, gradient_v011);
|
|
276
250
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
float
|
|
280
|
-
|
|
251
|
+
vec3 d111 = vec3(dx-1.f, dy-1.f, dz-1.f);
|
|
252
|
+
vec3 gradient_v111 = random_gradient_3d(state, x1, y1, z1);
|
|
253
|
+
float v111 = dot(d111, gradient_v111);
|
|
254
|
+
|
|
255
|
+
vec3 dx_dt = vec3(1.f, 0.f, 0.f);
|
|
281
256
|
|
|
282
257
|
float xi00 = interpolate(v000, v100, dx);
|
|
283
|
-
|
|
284
|
-
float d_xi00_dy = interpolate_gradient(v000, v100, dx, d_v000_dy, d_v100_dy, 0.f);
|
|
285
|
-
float d_xi00_dz = interpolate_gradient(v000, v100, dx, d_v000_dz, d_v100_dz, 0.f);
|
|
258
|
+
vec3 gradient_xi00 = interpolate_gradient_3d(v000, v100, dx, gradient_v000, gradient_v100, dx_dt);
|
|
286
259
|
|
|
287
260
|
float xi10 = interpolate(v010, v110, dx);
|
|
288
|
-
|
|
289
|
-
float d_xi10_dy = interpolate_gradient(v010, v110, dx, d_v010_dy, d_v110_dy, 0.f);
|
|
290
|
-
float d_xi10_dz = interpolate_gradient(v010, v110, dx, d_v010_dz, d_v110_dz, 0.f);
|
|
261
|
+
vec3 gradient_xi10 = interpolate_gradient_3d(v010, v110, dx, gradient_v010, gradient_v110, dx_dt);
|
|
291
262
|
|
|
292
263
|
float xi01 = interpolate(v001, v101, dx);
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
float d_xi01_dz = interpolate_gradient(v001, v101, dx, d_v001_dz, d_v101_dz, 0.f);
|
|
296
|
-
|
|
264
|
+
vec3 gradient_xi01 = interpolate_gradient_3d(v001, v101, dx, gradient_v001, gradient_v101, dx_dt);
|
|
265
|
+
|
|
297
266
|
float xi11 = interpolate(v011, v111, dx);
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
267
|
+
vec3 gradient_xi11 = interpolate_gradient_3d(v011, v111, dx, gradient_v011, gradient_v111, dx_dt);
|
|
268
|
+
|
|
269
|
+
vec3 dy_dt = vec3(0.f, 1.f, 0.f);
|
|
301
270
|
|
|
302
271
|
float yi0 = interpolate(xi00, xi10, dy);
|
|
303
|
-
|
|
304
|
-
float d_yi0_dy = interpolate_gradient(xi00, xi10, dy, d_xi00_dy, d_xi10_dy, 1.f);
|
|
305
|
-
float d_yi0_dz = interpolate_gradient(xi00, xi10, dy, d_xi00_dz, d_xi10_dz, 0.f);
|
|
272
|
+
vec3 gradient_yi0 = interpolate_gradient_3d(xi00, xi10, dy, gradient_xi00, gradient_xi10, dy_dt);
|
|
306
273
|
|
|
307
274
|
float yi1 = interpolate(xi01, xi11, dy);
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
275
|
+
vec3 gradient_yi1 = interpolate_gradient_3d(xi01, xi11, dy, gradient_xi01, gradient_xi11, dy_dt);
|
|
276
|
+
|
|
277
|
+
vec3 dz_dt = vec3(0.f, 0.f, 1.f);
|
|
311
278
|
|
|
312
|
-
|
|
313
|
-
float gradient_y = interpolate_gradient(yi0, yi1, dz, d_yi0_dx, d_yi1_dx, 0.f);
|
|
314
|
-
float gradient_z = interpolate_gradient(yi0, yi1, dz, d_yi0_dz, d_yi1_dz, 1.f);
|
|
279
|
+
vec3 gradient = interpolate_gradient_3d(yi0, yi1, dz, gradient_yi0, gradient_yi1, dz_dt);
|
|
315
280
|
|
|
316
|
-
return
|
|
281
|
+
return gradient;
|
|
317
282
|
}
|
|
318
283
|
|
|
319
284
|
inline CUDA_CALLABLE float noise_4d(uint32 state, int x0, int y0, int z0, int t0, int x1, int y1, int z1, int t1, float dx, float dy, float dz, float dt)
|
|
@@ -368,192 +333,123 @@ inline CUDA_CALLABLE float noise_4d(uint32 state, int x0, int y0, int z0, int t0
|
|
|
368
333
|
|
|
369
334
|
inline CUDA_CALLABLE vec4 noise_4d_gradient(uint32 state, int x0, int y0, int z0, int t0, int x1, int y1, int z1, int t1, float dx, float dy, float dz, float dt)
|
|
370
335
|
{
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
float
|
|
374
|
-
float d_v0000_dz = dot_grid_gradient_4d_gradient(state, x0, y0, z0, t0, 0.f, 0.f, 1.f, 0.f);
|
|
375
|
-
float d_v0000_dt = dot_grid_gradient_4d_gradient(state, x0, y0, z0, t0, 0.f, 0.f, 0.f, 1.f);
|
|
336
|
+
vec4 d0000 = vec4(dx, dy, dz, dt);
|
|
337
|
+
vec4 gradient_v0000 = random_gradient_4d(state, x0, y0, z0, t0);
|
|
338
|
+
float v0000 = dot(d0000, gradient_v0000);
|
|
376
339
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
float
|
|
380
|
-
float d_v1000_dz = dot_grid_gradient_4d_gradient(state, x1, y0, z0, t0, 0.f, 0.f, 1.f, 0.f);
|
|
381
|
-
float d_v1000_dt = dot_grid_gradient_4d_gradient(state, x1, y0, z0, t0, 0.f, 0.f, 0.f, 1.f);
|
|
340
|
+
vec4 d1000 = vec4(dx-1.f, dy, dz, dt);
|
|
341
|
+
vec4 gradient_v1000 = random_gradient_4d(state, x1, y0, z0, t0);
|
|
342
|
+
float v1000 = dot(d1000, gradient_v1000);
|
|
382
343
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
float
|
|
386
|
-
float d_v0100_dz = dot_grid_gradient_4d_gradient(state, x0, y1, z0, t0, 0.f, 0.f, 1.f, 0.f);
|
|
387
|
-
float d_v0100_dt = dot_grid_gradient_4d_gradient(state, x0, y1, z0, t0, 0.f, 0.f, 0.f, 1.f);
|
|
344
|
+
vec4 d0100 = vec4(dx, dy-1.f, dz, dt);
|
|
345
|
+
vec4 gradient_v0100 = random_gradient_4d(state, x0, y1, z0, t0);
|
|
346
|
+
float v0100 = dot(d0100, gradient_v0100);
|
|
388
347
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
float
|
|
392
|
-
float d_v1100_dz = dot_grid_gradient_4d_gradient(state, x1, y1, z0, t0, 0.f, 0.f, 1.f, 0.f);
|
|
393
|
-
float d_v1100_dt = dot_grid_gradient_4d_gradient(state, x1, y1, z0, t0, 0.f, 0.f, 0.f, 1.f);
|
|
348
|
+
vec4 d1100 = vec4(dx-1.f, dy-1.f, dz, dt);
|
|
349
|
+
vec4 gradient_v1100 = random_gradient_4d(state, x1, y1, z0, t0);
|
|
350
|
+
float v1100 = dot(d1100, gradient_v1100);
|
|
394
351
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
float
|
|
398
|
-
float d_v0010_dz = dot_grid_gradient_4d_gradient(state, x0, y0, z1, t0, 0.f, 0.f, 1.f, 0.f);
|
|
399
|
-
float d_v0010_dt = dot_grid_gradient_4d_gradient(state, x0, y0, z1, t0, 0.f, 0.f, 0.f, 1.f);
|
|
352
|
+
vec4 d0010 = vec4(dx, dy, dz-1.f, dt);
|
|
353
|
+
vec4 gradient_v0010 = random_gradient_4d(state, x0, y0, z1, t0);
|
|
354
|
+
float v0010 = dot(d0010, gradient_v0010);
|
|
400
355
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
float
|
|
404
|
-
float d_v1010_dz = dot_grid_gradient_4d_gradient(state, x1, y0, z1, t0, 0.f, 0.f, 1.f, 0.f);
|
|
405
|
-
float d_v1010_dt = dot_grid_gradient_4d_gradient(state, x1, y0, z1, t0, 0.f, 0.f, 0.f, 1.f);
|
|
406
|
-
|
|
407
|
-
float v0110 = dot_grid_gradient_4d(state, x0, y1, z1, t0, dx, dy-1.f, dz-1.f, dt);
|
|
408
|
-
float d_v0110_dx = dot_grid_gradient_4d_gradient(state, x0, y1, z1, t0, 1.f, 0.f, 0.f, 0.f);
|
|
409
|
-
float d_v0110_dy = dot_grid_gradient_4d_gradient(state, x0, y1, z1, t0, 0.f, 1.f, 0.f, 0.f);
|
|
410
|
-
float d_v0110_dz = dot_grid_gradient_4d_gradient(state, x0, y1, z1, t0, 0.f, 0.f, 1.f, 0.f);
|
|
411
|
-
float d_v0110_dt = dot_grid_gradient_4d_gradient(state, x0, y1, z1, t0, 0.f, 0.f, 0.f, 1.f);
|
|
356
|
+
vec4 d1010 = vec4(dx-1.f, dy, dz-1.f, dt);
|
|
357
|
+
vec4 gradient_v1010 = random_gradient_4d(state, x1, y0, z1, t0);
|
|
358
|
+
float v1010 = dot(d1010, gradient_v1010);
|
|
412
359
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
float
|
|
416
|
-
float d_v1110_dz = dot_grid_gradient_4d_gradient(state, x1, y1, z1, t0, 0.f, 0.f, 1.f, 0.f);
|
|
417
|
-
float d_v1110_dt = dot_grid_gradient_4d_gradient(state, x1, y1, z1, t0, 0.f, 0.f, 0.f, 1.f);
|
|
360
|
+
vec4 d0110 = vec4(dx, dy-1.f, dz-1.f, dt);
|
|
361
|
+
vec4 gradient_v0110 = random_gradient_4d(state, x0, y1, z1, t0);
|
|
362
|
+
float v0110 = dot(d0110, gradient_v0110);
|
|
418
363
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
float
|
|
422
|
-
float d_v0001_dz = dot_grid_gradient_4d_gradient(state, x0, y0, z0, t1, 0.f, 0.f, 1.f, 0.f);
|
|
423
|
-
float d_v0001_dt = dot_grid_gradient_4d_gradient(state, x0, y0, z0, t1, 0.f, 0.f, 0.f, 1.f);
|
|
364
|
+
vec4 d1110 = vec4(dx-1.f, dy-1.f, dz-1.f, dt);
|
|
365
|
+
vec4 gradient_v1110 = random_gradient_4d(state, x1, y1, z1, t0);
|
|
366
|
+
float v1110 = dot(d1110, gradient_v1110);
|
|
424
367
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
float
|
|
428
|
-
float d_v1001_dz = dot_grid_gradient_4d_gradient(state, x1, y0, z0, t1, 0.f, 0.f, 1.f, 0.f);
|
|
429
|
-
float d_v1001_dt = dot_grid_gradient_4d_gradient(state, x1, y0, z0, t1, 0.f, 0.f, 0.f, 1.f);
|
|
430
|
-
|
|
431
|
-
float v0101 = dot_grid_gradient_4d(state, x0, y1, z0, t1, dx, dy-1.f, dz, dt-1.f);
|
|
432
|
-
float d_v0101_dx = dot_grid_gradient_4d_gradient(state, x0, y1, z0, t1, 1.f, 0.f, 0.f, 0.f);
|
|
433
|
-
float d_v0101_dy = dot_grid_gradient_4d_gradient(state, x0, y1, z0, t1, 0.f, 1.f, 0.f, 0.f);
|
|
434
|
-
float d_v0101_dz = dot_grid_gradient_4d_gradient(state, x0, y1, z0, t1, 0.f, 0.f, 1.f, 0.f);
|
|
435
|
-
float d_v0101_dt = dot_grid_gradient_4d_gradient(state, x0, y1, z0, t1, 0.f, 0.f, 0.f, 1.f);
|
|
368
|
+
vec4 d0001 = vec4(dx, dy, dz, dt-1.f);
|
|
369
|
+
vec4 gradient_v0001 = random_gradient_4d(state, x0, y0, z0, t1);
|
|
370
|
+
float v0001 = dot(d0001, gradient_v0001);
|
|
436
371
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
float
|
|
440
|
-
float d_v1101_dz = dot_grid_gradient_4d_gradient(state, x1, y1, z0, t1, 0.f, 0.f, 1.f, 0.f);
|
|
441
|
-
float d_v1101_dt = dot_grid_gradient_4d_gradient(state, x1, y1, z0, t1, 0.f, 0.f, 0.f, 1.f);
|
|
442
|
-
|
|
443
|
-
float v0011 = dot_grid_gradient_4d(state, x0, y0, z1, t1, dx, dy, dz-1.f, dt-1.f);
|
|
444
|
-
float d_v0011_dx = dot_grid_gradient_4d_gradient(state, x0, y0, z1, t1, 1.f, 0.f, 0.f, 0.f);
|
|
445
|
-
float d_v0011_dy = dot_grid_gradient_4d_gradient(state, x0, y0, z1, t1, 0.f, 1.f, 0.f, 0.f);
|
|
446
|
-
float d_v0011_dz = dot_grid_gradient_4d_gradient(state, x0, y0, z1, t1, 0.f, 0.f, 1.f, 0.f);
|
|
447
|
-
float d_v0011_dt = dot_grid_gradient_4d_gradient(state, x0, y0, z1, t1, 0.f, 0.f, 0.f, 1.f);
|
|
372
|
+
vec4 d1001 = vec4(dx-1.f, dy, dz, dt-1.f);
|
|
373
|
+
vec4 gradient_v1001 = random_gradient_4d(state, x1, y0, z0, t1);
|
|
374
|
+
float v1001 = dot(d1001, gradient_v1001);
|
|
448
375
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
float
|
|
452
|
-
float d_v1011_dz = dot_grid_gradient_4d_gradient(state, x1, y0, z1, t1, 0.f, 0.f, 1.f, 0.f);
|
|
453
|
-
float d_v1011_dt = dot_grid_gradient_4d_gradient(state, x1, y0, z1, t1, 0.f, 0.f, 0.f, 1.f);
|
|
376
|
+
vec4 d0101 = vec4(dx, dy-1.f, dz, dt-1.f);
|
|
377
|
+
vec4 gradient_v0101 = random_gradient_4d(state, x0, y1, z0, t1);
|
|
378
|
+
float v0101 = dot(d0101, gradient_v0101);
|
|
454
379
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
float
|
|
458
|
-
float d_v0111_dz = dot_grid_gradient_4d_gradient(state, x0, y1, z1, t1, 0.f, 0.f, 1.f, 0.f);
|
|
459
|
-
float d_v0111_dt = dot_grid_gradient_4d_gradient(state, x0, y1, z1, t1, 0.f, 0.f, 0.f, 1.f);
|
|
380
|
+
vec4 d1101 = vec4(dx-1.f, dy-1.f, dz, dt-1.f);
|
|
381
|
+
vec4 gradient_v1101 = random_gradient_4d(state, x1, y1, z0, t1);
|
|
382
|
+
float v1101 = dot(d1101, gradient_v1101);
|
|
460
383
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
float
|
|
464
|
-
|
|
465
|
-
|
|
384
|
+
vec4 d0011 = vec4(dx, dy, dz-1.f, dt-1.f);
|
|
385
|
+
vec4 gradient_v0011 = random_gradient_4d(state, x0, y0, z1, t1);
|
|
386
|
+
float v0011 = dot(d0011, gradient_v0011);
|
|
387
|
+
|
|
388
|
+
vec4 d1011 = vec4(dx-1.f, dy, dz-1.f, dt-1.f);
|
|
389
|
+
vec4 gradient_v1011 = random_gradient_4d(state, x1, y0, z1, t1);
|
|
390
|
+
float v1011 = dot(d1011, gradient_v1011);
|
|
391
|
+
|
|
392
|
+
vec4 d0111 = vec4(dx, dy-1.f, dz-1.f, dt-1.f);
|
|
393
|
+
vec4 gradient_v0111 = random_gradient_4d(state, x0, y1, z1, t1);
|
|
394
|
+
float v0111 = dot(d0111, gradient_v0111);
|
|
395
|
+
|
|
396
|
+
vec4 d1111 = vec4(dx-1.f, dy-1.f, dz-1.f, dt-1.f);
|
|
397
|
+
vec4 gradient_v1111 = random_gradient_4d(state, x1, y1, z1, t1);
|
|
398
|
+
float v1111 = dot(d1111, gradient_v1111);
|
|
399
|
+
|
|
400
|
+
vec4 dx_dt = vec4(1.f, 0.f, 0.f, 0.f);
|
|
466
401
|
|
|
467
402
|
float xi000 = interpolate(v0000, v1000, dx);
|
|
468
|
-
|
|
469
|
-
float d_xi000_dy = interpolate_gradient(v0000, v1000, dx, d_v0000_dy, d_v1000_dy, 0.f);
|
|
470
|
-
float d_xi000_dz = interpolate_gradient(v0000, v1000, dx, d_v0000_dz, d_v1000_dz, 0.f);
|
|
471
|
-
float d_xi000_dt = interpolate_gradient(v0000, v1000, dx, d_v0000_dt, d_v1000_dt, 0.f);
|
|
403
|
+
vec4 gradient_xi000 = interpolate_gradient_4d(v0000, v1000, dx, gradient_v0000, gradient_v1000, dx_dt);
|
|
472
404
|
|
|
473
405
|
float xi100 = interpolate(v0100, v1100, dx);
|
|
474
|
-
|
|
475
|
-
float d_xi100_dy = interpolate_gradient(v0100, v1100, dx, d_v0100_dy, d_v1100_dy, 0.f);
|
|
476
|
-
float d_xi100_dz = interpolate_gradient(v0100, v1100, dx, d_v0100_dz, d_v1100_dz, 0.f);
|
|
477
|
-
float d_xi100_dt = interpolate_gradient(v0100, v1100, dx, d_v0100_dt, d_v1100_dt, 0.f);
|
|
406
|
+
vec4 gradient_xi100 = interpolate_gradient_4d(v0100, v1100, dx, gradient_v0100, gradient_v1100, dx_dt);
|
|
478
407
|
|
|
479
408
|
float xi010 = interpolate(v0010, v1010, dx);
|
|
480
|
-
|
|
481
|
-
float d_xi010_dy = interpolate_gradient(v0010, v1010, dx, d_v0010_dy, d_v1010_dy, 0.f);
|
|
482
|
-
float d_xi010_dz = interpolate_gradient(v0010, v1010, dx, d_v0010_dz, d_v1010_dz, 0.f);
|
|
483
|
-
float d_xi010_dt = interpolate_gradient(v0010, v1010, dx, d_v0010_dt, d_v1010_dt, 0.f);
|
|
409
|
+
vec4 gradient_xi010 = interpolate_gradient_4d(v0010, v1010, dx, gradient_v0010, gradient_v1010, dx_dt);
|
|
484
410
|
|
|
485
411
|
float xi110 = interpolate(v0110, v1110, dx);
|
|
486
|
-
|
|
487
|
-
float d_xi110_dy = interpolate_gradient(v0110, v1110, dx, d_v0110_dy, d_v1110_dy, 0.f);
|
|
488
|
-
float d_xi110_dz = interpolate_gradient(v0110, v1110, dx, d_v0110_dz, d_v1110_dz, 0.f);
|
|
489
|
-
float d_xi110_dt = interpolate_gradient(v0110, v1110, dx, d_v0110_dt, d_v1110_dt, 0.f);
|
|
412
|
+
vec4 gradient_xi110 = interpolate_gradient_4d(v0110, v1110, dx, gradient_v0110, gradient_v1110, dx_dt);
|
|
490
413
|
|
|
491
414
|
float xi001 = interpolate(v0001, v1001, dx);
|
|
492
|
-
|
|
493
|
-
float d_xi001_dy = interpolate_gradient(v0001, v1001, dx, d_v0001_dy, d_v1001_dy, 0.f);
|
|
494
|
-
float d_xi001_dz = interpolate_gradient(v0001, v1001, dx, d_v0001_dz, d_v1001_dz, 0.f);
|
|
495
|
-
float d_xi001_dt = interpolate_gradient(v0001, v1001, dx, d_v0001_dt, d_v1001_dt, 0.f);
|
|
415
|
+
vec4 gradient_xi001 = interpolate_gradient_4d(v0001, v1001, dx, gradient_v0001, gradient_v1001, dx_dt);
|
|
496
416
|
|
|
497
417
|
float xi101 = interpolate(v0101, v1101, dx);
|
|
498
|
-
|
|
499
|
-
float d_xi101_dy = interpolate_gradient(v0101, v1101, dx, d_v0101_dy, d_v1101_dy, 0.f);
|
|
500
|
-
float d_xi101_dz = interpolate_gradient(v0101, v1101, dx, d_v0101_dz, d_v1101_dz, 0.f);
|
|
501
|
-
float d_xi101_dt = interpolate_gradient(v0101, v1101, dx, d_v0101_dt, d_v1101_dt, 0.f);
|
|
418
|
+
vec4 gradient_xi101 = interpolate_gradient_4d(v0101, v1101, dx, gradient_v0101, gradient_v1101, dx_dt);
|
|
502
419
|
|
|
503
420
|
float xi011 = interpolate(v0011, v1011, dx);
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
float d_xi011_dz = interpolate_gradient(v0011, v1011, dx, d_v0011_dz, d_v1011_dz, 0.f);
|
|
507
|
-
float d_xi011_dt = interpolate_gradient(v0011, v1011, dx, d_v0011_dt, d_v1011_dt, 0.f);
|
|
508
|
-
|
|
421
|
+
vec4 gradient_xi011 = interpolate_gradient_4d(v0011, v1011, dx, gradient_v0011, gradient_v1011, dx_dt);
|
|
422
|
+
|
|
509
423
|
float xi111 = interpolate(v0111, v1111, dx);
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
float d_xi111_dt = interpolate_gradient(v0111, v1111, dx, d_v0111_dt, d_v1111_dt, 0.f);
|
|
424
|
+
vec4 gradient_xi111 = interpolate_gradient_4d(v0111, v1111, dx, gradient_v0111, gradient_v1111, dx_dt);
|
|
425
|
+
|
|
426
|
+
vec4 dy_dt = vec4(0.f, 1.f, 0.f, 0.f);
|
|
514
427
|
|
|
515
428
|
float yi00 = interpolate(xi000, xi100, dy);
|
|
516
|
-
|
|
517
|
-
float d_yi00_dy = interpolate_gradient(xi000, xi100, dy, d_xi000_dy, d_xi100_dy, 1.f);
|
|
518
|
-
float d_yi00_dz = interpolate_gradient(xi000, xi100, dy, d_xi000_dz, d_xi100_dz, 0.f);
|
|
519
|
-
float d_yi00_dt = interpolate_gradient(xi000, xi100, dy, d_xi000_dt, d_xi100_dt, 0.f);
|
|
429
|
+
vec4 gradient_yi00 = interpolate_gradient_4d(xi000, xi100, dy, gradient_xi000, gradient_xi100, dy_dt);
|
|
520
430
|
|
|
521
431
|
float yi10 = interpolate(xi010, xi110, dy);
|
|
522
|
-
|
|
523
|
-
float d_yi10_dy = interpolate_gradient(xi010, xi110, dy, d_xi010_dy, d_xi110_dy, 1.f);
|
|
524
|
-
float d_yi10_dz = interpolate_gradient(xi010, xi110, dy, d_xi010_dz, d_xi110_dz, 0.f);
|
|
525
|
-
float d_yi10_dt = interpolate_gradient(xi010, xi110, dy, d_xi010_dt, d_xi110_dt, 0.f);
|
|
432
|
+
vec4 gradient_yi10 = interpolate_gradient_4d(xi010, xi110, dy, gradient_xi010, gradient_xi110, dy_dt);
|
|
526
433
|
|
|
527
434
|
float yi01 = interpolate(xi001, xi101, dy);
|
|
528
|
-
|
|
529
|
-
float d_yi01_dy = interpolate_gradient(xi001, xi101, dy, d_xi001_dy, d_xi101_dy, 1.f);
|
|
530
|
-
float d_yi01_dz = interpolate_gradient(xi001, xi101, dy, d_xi001_dz, d_xi101_dz, 0.f);
|
|
531
|
-
float d_yi01_dt = interpolate_gradient(xi001, xi101, dy, d_xi001_dt, d_xi101_dt, 0.f);
|
|
435
|
+
vec4 gradient_yi01 = interpolate_gradient_4d(xi001, xi101, dy, gradient_xi001, gradient_xi101, dy_dt);
|
|
532
436
|
|
|
533
437
|
float yi11 = interpolate(xi011, xi111, dy);
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
float d_yi11_dt = interpolate_gradient(xi011, xi111, dy, d_xi011_dt, d_xi111_dt, 0.f);
|
|
438
|
+
vec4 gradient_yi11 = interpolate_gradient_4d(xi011, xi111, dy, gradient_xi011, gradient_xi111, dy_dt);
|
|
439
|
+
|
|
440
|
+
vec4 dz_dt = vec4(0.f, 0.f, 1.f, 0.f);
|
|
538
441
|
|
|
539
442
|
float zi0 = interpolate(yi00, yi10, dz);
|
|
540
|
-
|
|
541
|
-
float d_zi0_dy = interpolate_gradient(yi00, yi10, dz, d_yi00_dy, d_yi10_dy, 0.f);
|
|
542
|
-
float d_zi0_dz = interpolate_gradient(yi00, yi10, dz, d_yi00_dz, d_yi10_dz, 1.f);
|
|
543
|
-
float d_zi0_dt = interpolate_gradient(yi00, yi10, dz, d_yi00_dt, d_yi10_dt, 0.f);
|
|
443
|
+
vec4 gradient_zi0 = interpolate_gradient_4d(yi00, yi10, dz, gradient_yi00, gradient_yi10, dz_dt);
|
|
544
444
|
|
|
545
445
|
float zi1 = interpolate(yi01, yi11, dz);
|
|
546
|
-
|
|
547
|
-
float d_zi1_dy = interpolate_gradient(yi01, yi11, dz, d_yi01_dy, d_yi11_dy, 0.f);
|
|
548
|
-
float d_zi1_dz = interpolate_gradient(yi01, yi11, dz, d_yi01_dz, d_yi11_dz, 1.f);
|
|
549
|
-
float d_zi1_dt = interpolate_gradient(yi01, yi11, dz, d_yi01_dt, d_yi11_dt, 0.f);
|
|
446
|
+
vec4 gradient_zi1 = interpolate_gradient_4d(yi01, yi11, dz, gradient_yi01, gradient_yi11, dz_dt);
|
|
550
447
|
|
|
551
|
-
|
|
552
|
-
float gradient_y = interpolate_gradient(zi0, zi1, dt, d_zi0_dy, d_zi1_dy, 0.f);
|
|
553
|
-
float gradient_z = interpolate_gradient(zi0, zi1, dt, d_zi0_dz, d_zi1_dz, 0.f);
|
|
554
|
-
float gradient_t = interpolate_gradient(zi0, zi1, dt, d_zi0_dt, d_zi1_dt, 1.f);
|
|
448
|
+
vec4 dt_dt = vec4(0.f, 0.f, 0.f, 1.f);
|
|
555
449
|
|
|
556
|
-
|
|
450
|
+
vec4 gradient = interpolate_gradient_4d(zi0, zi1, dt, gradient_zi0, gradient_zi1, dt_dt);
|
|
451
|
+
|
|
452
|
+
return gradient;
|
|
557
453
|
}
|
|
558
454
|
|
|
559
455
|
// non-periodic Perlin noise
|
|
@@ -830,78 +726,125 @@ inline CUDA_CALLABLE void adj_pnoise(uint32 state, const vec4& xyzt, int px, int
|
|
|
830
726
|
|
|
831
727
|
// curl noise
|
|
832
728
|
|
|
833
|
-
inline CUDA_CALLABLE vec2 curlnoise(uint32 state, const vec2& xy)
|
|
834
|
-
{
|
|
835
|
-
|
|
836
|
-
float
|
|
729
|
+
inline CUDA_CALLABLE vec2 curlnoise(uint32 state, const vec2& xy, const uint32 octaves, const float lacunarity, const float gain)
|
|
730
|
+
{
|
|
731
|
+
vec2 curl_sum = vec2(0.f);
|
|
732
|
+
float freq = 1.f;
|
|
733
|
+
float amplitude = 1.f;
|
|
837
734
|
|
|
838
|
-
int
|
|
839
|
-
|
|
735
|
+
for (int i = 0; i < octaves; i++)
|
|
736
|
+
{
|
|
737
|
+
vec2 pt = freq * xy;
|
|
738
|
+
float dx = pt[0] - floor(pt[0]);
|
|
739
|
+
float dy = pt[1] - floor(pt[1]);
|
|
840
740
|
|
|
841
|
-
|
|
842
|
-
|
|
741
|
+
int x0 = (int)floor(pt[0]);
|
|
742
|
+
int y0 = (int)floor(pt[1]);
|
|
843
743
|
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
}
|
|
847
|
-
inline CUDA_CALLABLE void adj_curlnoise(uint32 state, const vec2& xy, uint32& adj_state, vec2& adj_xy, const vec2& adj_ret) {}
|
|
744
|
+
int x1 = x0 + 1;
|
|
745
|
+
int y1 = y0 + 1;
|
|
848
746
|
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
float dx = xyz[0] - floor(xyz[0]);
|
|
852
|
-
float dy = xyz[1] - floor(xyz[1]);
|
|
853
|
-
float dz = xyz[2] - floor(xyz[2]);
|
|
854
|
-
|
|
855
|
-
int x0 = (int)floor(xyz[0]);
|
|
856
|
-
int y0 = (int)floor(xyz[1]);
|
|
857
|
-
int z0 = (int)floor(xyz[2]);
|
|
747
|
+
vec2 grad_field = noise_2d_gradient(state, x0, y0, x1, y1, dx, dy);
|
|
748
|
+
curl_sum += amplitude * grad_field;
|
|
858
749
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
750
|
+
amplitude *= gain;
|
|
751
|
+
freq *= lacunarity;
|
|
752
|
+
}
|
|
753
|
+
return vec2(-curl_sum[1], curl_sum[0]);
|
|
754
|
+
}
|
|
755
|
+
inline CUDA_CALLABLE void adj_curlnoise(uint32 state, const vec2& xy, const uint32 octaves, const float lacunarity, const float gain, uint32& adj_state, vec2& adj_xy, const uint32& adj_octaves, const float& adj_lacunarity, const float& adj_gain, const vec2& adj_ret) {}
|
|
862
756
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
vec3
|
|
866
|
-
|
|
867
|
-
vec3
|
|
757
|
+
inline CUDA_CALLABLE vec3 curlnoise(uint32 state, const vec3& xyz, const uint32 octaves, const float lacunarity, const float gain)
|
|
758
|
+
{
|
|
759
|
+
vec3 curl_sum_1 = vec3(0.f);
|
|
760
|
+
vec3 curl_sum_2 = vec3(0.f);
|
|
761
|
+
vec3 curl_sum_3 = vec3(0.f);
|
|
762
|
+
|
|
763
|
+
float freq = 1.f;
|
|
764
|
+
float amplitude = 1.f;
|
|
765
|
+
|
|
766
|
+
for(int i = 0; i < octaves; i++)
|
|
767
|
+
{
|
|
768
|
+
vec3 pt = freq * xyz;
|
|
769
|
+
float dx = pt[0] - floor(pt[0]);
|
|
770
|
+
float dy = pt[1] - floor(pt[1]);
|
|
771
|
+
float dz = pt[2] - floor(pt[2]);
|
|
772
|
+
|
|
773
|
+
int x0 = (int)floor(pt[0]);
|
|
774
|
+
int y0 = (int)floor(pt[1]);
|
|
775
|
+
int z0 = (int)floor(pt[2]);
|
|
776
|
+
|
|
777
|
+
int x1 = x0 + 1;
|
|
778
|
+
int y1 = y0 + 1;
|
|
779
|
+
int z1 = z0 + 1;
|
|
780
|
+
|
|
781
|
+
vec3 grad_field_1 = noise_3d_gradient(state, x0, y0, z0, x1, y1, z1, dx, dy, dz);
|
|
782
|
+
state = rand_init(state, 10019689);
|
|
783
|
+
vec3 grad_field_2 = noise_3d_gradient(state, x0, y0, z0, x1, y1, z1, dx, dy, dz);
|
|
784
|
+
state = rand_init(state, 13112221);
|
|
785
|
+
vec3 grad_field_3 = noise_3d_gradient(state, x0, y0, z0, x1, y1, z1, dx, dy, dz);
|
|
786
|
+
|
|
787
|
+
curl_sum_1 += amplitude * grad_field_1;
|
|
788
|
+
curl_sum_2 += amplitude * grad_field_2;
|
|
789
|
+
curl_sum_3 += amplitude * grad_field_3;
|
|
868
790
|
|
|
791
|
+
amplitude *= gain;
|
|
792
|
+
freq *= lacunarity;
|
|
793
|
+
}
|
|
869
794
|
|
|
870
795
|
return vec3(
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
796
|
+
curl_sum_3[1] - curl_sum_2[2],
|
|
797
|
+
curl_sum_1[2] - curl_sum_3[0],
|
|
798
|
+
curl_sum_2[0] - curl_sum_1[1]);
|
|
874
799
|
}
|
|
875
|
-
inline CUDA_CALLABLE void adj_curlnoise(uint32 state, const vec3& xyz, uint32& adj_state, vec3& adj_xyz, const vec3& adj_ret) {}
|
|
800
|
+
inline CUDA_CALLABLE void adj_curlnoise(uint32 state, const vec3& xyz, const uint32 octaves, const float lacunarity, const float gain, uint32& adj_state, vec3& adj_xyz, const uint32& adj_octaves, const float& adj_lacunarity, const float& adj_gain, vec3& adj_ret) {}
|
|
876
801
|
|
|
877
|
-
inline CUDA_CALLABLE vec3 curlnoise(uint32 state, const vec4& xyzt)
|
|
802
|
+
inline CUDA_CALLABLE vec3 curlnoise(uint32 state, const vec4& xyzt, const uint32 octaves, const float lacunarity, const float gain)
|
|
878
803
|
{
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
int
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
804
|
+
vec4 curl_sum_1 = vec4(0.f);
|
|
805
|
+
vec4 curl_sum_2 = vec4(0.f);
|
|
806
|
+
vec4 curl_sum_3 = vec4(0.f);
|
|
807
|
+
|
|
808
|
+
float freq = 1.f;
|
|
809
|
+
float amplitude = 1.f;
|
|
810
|
+
|
|
811
|
+
for(int i = 0; i < octaves; i++)
|
|
812
|
+
{
|
|
813
|
+
vec4 pt = freq * xyzt;
|
|
814
|
+
float dx = pt[0] - floor(pt[0]);
|
|
815
|
+
float dy = pt[1] - floor(pt[1]);
|
|
816
|
+
float dz = pt[2] - floor(pt[2]);
|
|
817
|
+
float dt = pt[3] - floor(pt[3]);
|
|
818
|
+
|
|
819
|
+
int x0 = (int)floor(pt[0]);
|
|
820
|
+
int y0 = (int)floor(pt[1]);
|
|
821
|
+
int z0 = (int)floor(pt[2]);
|
|
822
|
+
int t0 = (int)floor(pt[3]);
|
|
823
|
+
|
|
824
|
+
int x1 = x0 + 1;
|
|
825
|
+
int y1 = y0 + 1;
|
|
826
|
+
int z1 = z0 + 1;
|
|
827
|
+
int t1 = t0 + 1;
|
|
828
|
+
|
|
829
|
+
vec4 grad_field_1 = noise_4d_gradient(state, x0, y0, z0, t0, x1, y1, z1, t1, dx, dy, dz, dt);
|
|
830
|
+
state = rand_init(state, 10019689);
|
|
831
|
+
vec4 grad_field_2 = noise_4d_gradient(state, x0, y0, z0, t0, x1, y1, z1, t1, dx, dy, dz, dt);
|
|
832
|
+
state = rand_init(state, 13112221);
|
|
833
|
+
vec4 grad_field_3 = noise_4d_gradient(state, x0, y0, z0, t0, x1, y1, z1, t1, dx, dy, dz, dt);
|
|
834
|
+
|
|
835
|
+
curl_sum_1 += amplitude * grad_field_1;
|
|
836
|
+
curl_sum_2 += amplitude * grad_field_2;
|
|
837
|
+
curl_sum_3 += amplitude * grad_field_3;
|
|
838
|
+
|
|
839
|
+
amplitude *= gain;
|
|
840
|
+
freq *= lacunarity;
|
|
841
|
+
}
|
|
899
842
|
|
|
900
843
|
return vec3(
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
844
|
+
curl_sum_3[1] - curl_sum_2[2],
|
|
845
|
+
curl_sum_1[2] - curl_sum_3[0],
|
|
846
|
+
curl_sum_2[0] - curl_sum_1[1]);
|
|
904
847
|
}
|
|
905
|
-
inline CUDA_CALLABLE void adj_curlnoise(uint32 state, const vec4& xyzt, uint32& adj_state, vec4& adj_xyzt, const vec3& adj_ret) {}
|
|
848
|
+
inline CUDA_CALLABLE void adj_curlnoise(uint32 state, const vec4& xyzt, const uint32 octaves, const float lacunarity, const float gain, uint32& adj_state, vec4& adj_xyzt, const uint32& adj_octaves, const float& adj_lacunarity, const float& adj_gain, const vec3& adj_ret) {}
|
|
906
849
|
|
|
907
850
|
} // namespace wp
|