[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