[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22053] branches/blender2.5/blender: BF2.5 : First commit of smoke code.
Daniel Genrich
daniel.genrich at gmx.net
Thu Jul 30 17:00:26 CEST 2009
Revision: 22053
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22053
Author: genscher
Date: 2009-07-30 17:00:26 +0200 (Thu, 30 Jul 2009)
Log Message:
-----------
BF2.5: First commit of smoke code.
Not working:
a) rendering (since volumterics branch is not merged yet)
b) moving collision objects of any kind
c) saving of collision objects (because that's what I am working on)
d) pointcache
e) A bunch of other things I already know of
So please do not report any bugs on this one yet :-)
Modified Paths:
--------------
branches/blender2.5/blender/intern/CMakeLists.txt
branches/blender2.5/blender/intern/SConscript
branches/blender2.5/blender/release/ui/buttons_data_modifier.py
branches/blender2.5/blender/source/blender/blenkernel/CMakeLists.txt
branches/blender2.5/blender/source/blender/blenkernel/SConscript
branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
branches/blender2.5/blender/source/blender/blenlib/BLI_kdopbvh.h
branches/blender2.5/blender/source/blender/blenlib/intern/BLI_kdopbvh.c
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
branches/blender2.5/blender/source/blender/editors/CMakeLists.txt
branches/blender2.5/blender/source/blender/editors/space_view3d/SConscript
branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h
branches/blender2.5/blender/source/blender/makesdna/intern/makesdna.c
branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
branches/blender2.5/blender/source/creator/CMakeLists.txt
Added Paths:
-----------
branches/blender2.5/blender/intern/smoke/
branches/blender2.5/blender/intern/smoke/SConscript
branches/blender2.5/blender/intern/smoke/extern/
branches/blender2.5/blender/intern/smoke/extern/smoke_API.h
branches/blender2.5/blender/intern/smoke/intern/
branches/blender2.5/blender/intern/smoke/intern/EIGENVALUE_HELPER.h
branches/blender2.5/blender/intern/smoke/intern/FFT_NOISE.h
branches/blender2.5/blender/intern/smoke/intern/FLUID_3D.cpp
branches/blender2.5/blender/intern/smoke/intern/FLUID_3D.h
branches/blender2.5/blender/intern/smoke/intern/FLUID_3D_SOLVERS.cpp
branches/blender2.5/blender/intern/smoke/intern/FLUID_3D_STATIC.cpp
branches/blender2.5/blender/intern/smoke/intern/IMAGE.h
branches/blender2.5/blender/intern/smoke/intern/INTERPOLATE.h
branches/blender2.5/blender/intern/smoke/intern/LICENSE.txt
branches/blender2.5/blender/intern/smoke/intern/LU_HELPER.h
branches/blender2.5/blender/intern/smoke/intern/MERSENNETWISTER.h
branches/blender2.5/blender/intern/smoke/intern/Makefile.FFT
branches/blender2.5/blender/intern/smoke/intern/Makefile.cygwin
branches/blender2.5/blender/intern/smoke/intern/Makefile.linux
branches/blender2.5/blender/intern/smoke/intern/Makefile.mac
branches/blender2.5/blender/intern/smoke/intern/OBSTACLE.h
branches/blender2.5/blender/intern/smoke/intern/SPHERE.cpp
branches/blender2.5/blender/intern/smoke/intern/SPHERE.h
branches/blender2.5/blender/intern/smoke/intern/VEC3.h
branches/blender2.5/blender/intern/smoke/intern/WAVELET_NOISE.h
branches/blender2.5/blender/intern/smoke/intern/WTURBULENCE.cpp
branches/blender2.5/blender/intern/smoke/intern/WTURBULENCE.h
branches/blender2.5/blender/intern/smoke/intern/main.cpp.back
branches/blender2.5/blender/intern/smoke/intern/smoke_API.cpp
branches/blender2.5/blender/intern/smoke/intern/tnt/
branches/blender2.5/blender/intern/smoke/intern/tnt/jama_eig.h
branches/blender2.5/blender/intern/smoke/intern/tnt/jama_lu.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_array1d.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_array1d_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_array2d.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_array2d_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_array3d.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_array3d_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_cmat.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_fortran_array1d.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_fortran_array1d_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_fortran_array2d.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_fortran_array2d_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_fortran_array3d.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_fortran_array3d_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_i_refvec.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_math_utils.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_sparse_matrix_csr.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_stopwatch.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_subscript.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_vec.h
branches/blender2.5/blender/intern/smoke/intern/tnt/tnt_version.h
branches/blender2.5/blender/source/blender/blenkernel/BKE_smoke.h
branches/blender2.5/blender/source/blender/blenkernel/intern/smoke.c
branches/blender2.5/blender/source/blender/makesdna/DNA_smoke_types.h
branches/blender2.5/blender/source/blender/makesrna/intern/rna_smoke.c
Modified: branches/blender2.5/blender/intern/CMakeLists.txt
===================================================================
--- branches/blender2.5/blender/intern/CMakeLists.txt 2009-07-30 14:41:52 UTC (rev 22052)
+++ branches/blender2.5/blender/intern/CMakeLists.txt 2009-07-30 15:00:26 UTC (rev 22053)
@@ -35,6 +35,7 @@
ADD_SUBDIRECTORY(iksolver)
ADD_SUBDIRECTORY(boolop)
ADD_SUBDIRECTORY(opennl)
+ADD_SUBDIRECTORY(smoke)
IF(WITH_ELBEEM)
ADD_SUBDIRECTORY(elbeem)
Modified: branches/blender2.5/blender/intern/SConscript
===================================================================
--- branches/blender2.5/blender/intern/SConscript 2009-07-30 14:41:52 UTC (rev 22052)
+++ branches/blender2.5/blender/intern/SConscript 2009-07-30 15:00:26 UTC (rev 22053)
@@ -11,7 +11,8 @@
'decimation/SConscript',
'iksolver/SConscript',
'boolop/SConscript',
- 'opennl/SConscript'])
+ 'opennl/SConscript',
+ 'smoke/SConscript'])
# NEW_CSG was intended for intern/csg, but
# getting it to compile is difficult
Added: branches/blender2.5/blender/intern/smoke/SConscript
===================================================================
--- branches/blender2.5/blender/intern/smoke/SConscript (rev 0)
+++ branches/blender2.5/blender/intern/smoke/SConscript 2009-07-30 15:00:26 UTC (rev 22053)
@@ -0,0 +1,15 @@
+#!/usr/bin/python
+Import ('env')
+
+sources = env.Glob('intern/*.cpp')
+
+defs = ''
+
+if env['WITH_BF_OPENMP']:
+ defs += ' PARALLEL=1'
+
+incs = env['BF_PNG_INC'] + ' ' + env['BF_ZLIB_INC']
+incs += ' intern ../../extern/bullet2/src ../memutil ../guardealloc '
+incs += env['BF_FFTW3_INC']
+
+env.BlenderLib ('bf_smoke', sources, Split(incs), Split(defs), libtype=['intern'], priority=[40] )
Added: branches/blender2.5/blender/intern/smoke/extern/smoke_API.h
===================================================================
--- branches/blender2.5/blender/intern/smoke/extern/smoke_API.h (rev 0)
+++ branches/blender2.5/blender/intern/smoke/extern/smoke_API.h 2009-07-30 15:00:26 UTC (rev 22053)
@@ -0,0 +1,62 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 by Daniel Genrich
+ * All rights reserved.
+ *
+ * Contributor(s): None
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef SMOKE_API_H_
+#define SMOKE_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct FLUID_3D *smoke_init(int *res, int amplify, float *p0, float *p1, float dt);
+void smoke_free(struct FLUID_3D *fluid);
+
+void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta);
+
+void smoke_step(struct FLUID_3D *fluid);
+
+float *smoke_get_density(struct FLUID_3D *fluid);
+float *smoke_get_bigdensity(struct FLUID_3D *fluid);
+float *smoke_get_heat(struct FLUID_3D *fluid);
+float *smoke_get_velocity_x(struct FLUID_3D *fluid);
+float *smoke_get_velocity_y(struct FLUID_3D *fluid);
+float *smoke_get_velocity_z(struct FLUID_3D *fluid);
+
+unsigned char *smoke_get_obstacle(struct FLUID_3D *fluid);
+
+size_t smoke_get_index(int x, int max_x, int y, int max_y, int z, int max_z);
+size_t smoke_get_index2d(int x, int max_x, int y, int max_y, int z, int max_z);
+
+void smoke_set_noise(struct FLUID_3D *fluid, int type);
+
+void smoke_get_bigres(struct FLUID_3D *fluid, int *res);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SMOKE_API_H_ */
Added: branches/blender2.5/blender/intern/smoke/intern/EIGENVALUE_HELPER.h
===================================================================
--- branches/blender2.5/blender/intern/smoke/intern/EIGENVALUE_HELPER.h (rev 0)
+++ branches/blender2.5/blender/intern/smoke/intern/EIGENVALUE_HELPER.h 2009-07-30 15:00:26 UTC (rev 22053)
@@ -0,0 +1,47 @@
+//////////////////////////////////////////////////////////////////////
+// This file is part of Wavelet Turbulence.
+//
+// Wavelet Turbulence is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Wavelet Turbulence is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Wavelet Turbulence. If not, see <http://www.gnu.org/licenses/>.
+//
+// Copyright 2008 Theodore Kim and Nils Thuerey
+//
+//////////////////////////////////////////////////////////////////////
+// Helper function, compute eigenvalues of 3x3 matrix
+//////////////////////////////////////////////////////////////////////
+
+#include "tnt/jama_eig.h"
+
+//////////////////////////////////////////////////////////////////////
+// eigenvalues of 3x3 non-symmetric matrix
+//////////////////////////////////////////////////////////////////////
+int inline computeEigenvalues3x3(
+ float dout[3],
+ float a[3][3])
+{
+ TNT::Array2D<float> A = TNT::Array2D<float>(3,3, &a[0][0]);
+ TNT::Array1D<float> eig = TNT::Array1D<float>(3);
+ TNT::Array1D<float> eigImag = TNT::Array1D<float>(3);
+ JAMA::Eigenvalue<float> jeig = JAMA::Eigenvalue<float>(A);
+ jeig.getRealEigenvalues(eig);
+
+ // complex ones
+ jeig.getImagEigenvalues(eigImag);
+ dout[0] = sqrt(eig[0]*eig[0] + eigImag[0]*eigImag[0]);
+ dout[1] = sqrt(eig[1]*eig[1] + eigImag[1]*eigImag[1]);
+ dout[2] = sqrt(eig[2]*eig[2] + eigImag[2]*eigImag[2]);
+ return 0;
+}
+
+#undef rfabs
+#undef ROT
Added: branches/blender2.5/blender/intern/smoke/intern/FFT_NOISE.h
===================================================================
--- branches/blender2.5/blender/intern/smoke/intern/FFT_NOISE.h (rev 0)
+++ branches/blender2.5/blender/intern/smoke/intern/FFT_NOISE.h 2009-07-30 15:00:26 UTC (rev 22053)
@@ -0,0 +1,178 @@
+//////////////////////////////////////////////////////////////////////
+// This file is part of Wavelet Turbulence.
+//
+// Wavelet Turbulence is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Wavelet Turbulence is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Wavelet Turbulence. If not, see <http://www.gnu.org/licenses/>.
+//
+// Copyright 2008 Theodore Kim and Nils Thuerey
+//
+/////////////////////////////////////////////////////////////////////////
+//
+
+#ifndef FFT_NOISE_H_
+#define FFT_NOISE_H_
+
+#if 0
+#include <iostream>
+#include <fftw3.h>
+#include <MERSENNETWISTER.h>
+
+#include "WAVELET_NOISE.h"
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+/////////////////////////////////////////////////////////////////////////
+// shift spectrum to the format that FFTW expects
+/////////////////////////////////////////////////////////////////////////
+static void shift3D(float*& field, int xRes, int yRes, int zRes)
+{
+ int xHalf = xRes / 2;
+ int yHalf = yRes / 2;
+ int zHalf = zRes / 2;
+ int slabSize = xRes * yRes;
+ for (int z = 0; z < zHalf; z++)
+ for (int y = 0; y < yHalf; y++)
+ for (int x = 0; x < xHalf; x++)
+ {
+ int index = x + y * xRes + z * xRes * yRes;
+ float temp;
+ int xSwap = xHalf;
+ int ySwap = yHalf * xRes;
+ int zSwap = zHalf * xRes * yRes;
+
+ // [0,0,0] to [1,1,1]
+ temp = field[index];
+ field[index] = field[index + xSwap + ySwap + zSwap];
+ field[index + xSwap + ySwap + zSwap] = temp;
+
+ // [1,0,0] to [0,1,1]
+ temp = field[index + xSwap];
+ field[index + xSwap] = field[index + ySwap + zSwap];
+ field[index + ySwap + zSwap] = temp;
+
+ // [0,1,0] to [1,0,1]
+ temp = field[index + ySwap];
+ field[index + ySwap] = field[index + xSwap + zSwap];
+ field[index + xSwap + zSwap] = temp;
+
+ // [0,0,1] to [1,1,0]
+ temp = field[index + zSwap];
+ field[index + zSwap] = field[index + xSwap + ySwap];
+ field[index + xSwap + ySwap] = temp;
+ }
+}
+
+static void generatTile_FFT(float* const noiseTileData, std::string filename)
+{
+ if (loadTile(noiseTileData, filename)) return;
+
+ int res = NOISE_TILE_SIZE;
+ int xRes = res;
+ int yRes = res;
+ int zRes = res;
+ int totalCells = xRes * yRes * zRes;
+
+ // create and shift the filter
+ float* filter = new float[totalCells];
+ for (int z = 0; z < zRes; z++)
+ for (int y = 0; y < yRes; y++)
+ for (int x = 0; x < xRes; x++)
+ {
+ int index = x + y * xRes + z * xRes * yRes;
+ float diff[] = {abs(x - xRes/2),
+ abs(y - yRes/2),
+ abs(z - zRes/2)};
+ float radius = sqrtf(diff[0] * diff[0] +
+ diff[1] * diff[1] +
+ diff[2] * diff[2]) / (xRes / 2);
+ radius *= M_PI;
+ float H = cos((M_PI / 2.0f) * log(4.0f * radius / M_PI) / log(2.0f));
+ H = H * H;
+ float filtered = H;
+
+ // clamp everything outside the wanted band
+ if (radius >= M_PI / 2.0f)
+ filtered = 0.0f;
+
+ // make sure to capture all low frequencies
+ if (radius <= M_PI / 4.0f)
+ filtered = 1.0f;
+
+ filter[index] = filtered;
+ }
+ shift3D(filter, xRes, yRes, zRes);
+
+ // create the noise
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list