[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20919] branches/soc-2009-yukishiro/source /blender: add preview ( the current way of previewing light env is totally a hack...)
Jingyuan Huang
jingyuan.huang at gmail.com
Tue Jun 16 07:34:24 CEST 2009
Revision: 20919
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20919
Author: yukishiro
Date: 2009-06-16 07:34:24 +0200 (Tue, 16 Jun 2009)
Log Message:
-----------
add preview (the current way of previewing light env is totally a hack...)
Modified Paths:
--------------
branches/soc-2009-yukishiro/source/blender/editors/preview/previewrender.c
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
branches/soc-2009-yukishiro/source/blender/editors/space_view3d/space_view3d.c
branches/soc-2009-yukishiro/source/blender/makesdna/DNA_material_types.h
branches/soc-2009-yukishiro/source/blender/makesdna/DNA_scene_types.h
branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c
branches/soc-2009-yukishiro/source/blender/sh/SH_api.h
branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c
Modified: branches/soc-2009-yukishiro/source/blender/editors/preview/previewrender.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/preview/previewrender.c 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/editors/preview/previewrender.c 2009-06-16 05:34:24 UTC (rev 20919)
@@ -433,7 +433,6 @@
sce->world= (World *)id;
}
else if(id_type==ID_LE) {
- sce->lay= 1<<MA_LIGHT;
sce->lightenv = (LightEnv *)id;
}
Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c 2009-06-16 05:34:24 UTC (rev 20919)
@@ -554,10 +554,8 @@
compute_color(scene, ps);
lpaint_exit(C, op);
undo_lightpaint_push(scene);
- // signal for recompute
- vc->rv3d->rflag |= RV3D_RECALCMCOL;
- ED_region_tag_redraw(vc->ar);
+ WM_event_add_notifier(C, NC_LIGHTENV, NULL);
return OPERATOR_FINISHED;
}
/* pass on, first press gets painted too */
Modified: branches/soc-2009-yukishiro/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/space_view3d/space_view3d.c 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/editors/space_view3d/space_view3d.c 2009-06-16 05:34:24 UTC (rev 20919)
@@ -423,6 +423,11 @@
* more context than just the region */
ED_region_tag_redraw(ar);
break;
+ case NC_LIGHTENV:
+ rv3d = ar->regiondata;
+ rv3d->rflag |= RV3D_RECALCMCOL;
+ ED_region_tag_redraw(ar);
+ break;
}
}
Modified: branches/soc-2009-yukishiro/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/makesdna/DNA_material_types.h 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/makesdna/DNA_material_types.h 2009-06-16 05:34:24 UTC (rev 20919)
@@ -325,7 +325,6 @@
#define MA_SKY 7
#define MA_HAIR 10
#define MA_ATMOS 11
-#define MA_LIGHT 12
/* pr_back */
#define MA_DARK 1
Modified: branches/soc-2009-yukishiro/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/makesdna/DNA_scene_types.h 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/makesdna/DNA_scene_types.h 2009-06-16 05:34:24 UTC (rev 20919)
@@ -135,7 +135,7 @@
#define SCE_LAY_ZTRA 2
#define SCE_LAY_HALO 4
#define SCE_LAY_EDGE 8
-#define SCE_LAY_SKY 16
+#define SCE_LAY_SKY 16
#define SCE_LAY_STRAND 32
/* flags between 32 and 0x8000 are set to 1 already, for future options */
Modified: branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/render/intern/source/rendercore.c 2009-06-16 05:34:24 UTC (rev 20919)
@@ -58,6 +58,8 @@
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
+#include "SH_api.h"
+
/* local include */
#include "renderpipeline.h"
#include "render_types.h"
@@ -1159,6 +1161,17 @@
if(rl->layflag & SCE_LAY_HALO)
halo_tile(pa, rl);
+ // XXX: THIS IS TOTALLY A HACK NOW
+ if(G.f & G_LIGHTPAINT) {
+ float *fcol= rl->rectf;
+ int width = R.disprect.xmax - R.disprect.xmin;
+ int height = R.disprect.ymax - R.disprect.ymin;
+
+ SH_LightProbePreview(R.scene->lightenv, width, height,
+ pa->disprect.xmin, pa->disprect.ymin,
+ pa->disprect.xmax, pa->disprect.ymax, fcol);
+ }
+
/* transp layer */
if(R.flag & R_ZTRA || R.totstrand) {
if(rl->layflag & (SCE_LAY_ZTRA|SCE_LAY_STRAND)) {
Modified: branches/soc-2009-yukishiro/source/blender/sh/SH_api.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/sh/SH_api.h 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/sh/SH_api.h 2009-06-16 05:34:24 UTC (rev 20919)
@@ -40,6 +40,8 @@
void SH_ComputeSceneCoefficients(struct Scene *scene, struct View3D *v3d);
void SH_ComputeLightCoefficients(struct LightEnv *env);
void SH_ReconstructLightProbe(struct LightEnv *env, struct ImBuf *ibuf);
+void SH_LightProbePreview(struct LightEnv *env, int width, int height,
+ int xmin, int ymin, int xmax, int ymax, float *col);
void SH_from_disc(int L, float *n, float area, float *shresult);
float SH_eval(float *sh, float *v);
Modified: branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c 2009-06-16 03:27:57 UTC (rev 20918)
+++ branches/soc-2009-yukishiro/source/blender/sh/intern/compute.c 2009-06-16 05:34:24 UTC (rev 20919)
@@ -357,6 +357,52 @@
}
}
+void SH_LightProbePreview(LightEnv *env, int width, int height,
+ int xmin, int ymin, int xmax, int ymax, float *col)
+{
+ int m, i, j;
+ float phi, theta, *y_val, *lval;
+ float u, v, r, xdelta, ydelta;
+ int num_sh = (L+1)*(L+1);
+ Vec3 pnt;
+ ShCoeffs Y;
+
+ Y = allocate_ShCoeffs();
+ xdelta = 2.0f / (float)width;
+ ydelta = 2.0f / (float)height;
+
+ for (i = xmin; i < xmax; i++) {
+ for (j = ymin; j < ymax; j++) {
+ lval = col + (xmax - xmin) * (j - ymin) * 4 + (i - xmin) * 4;
+
+ v = 1 - xdelta * i;
+ u = ydelta * j - 1;
+ r = sqrt(u * u + v * v);
+ if (r > 1.0) continue;
+
+ theta = M_PI * r;
+ phi = atan2(v, u);
+ pnt[0] = sin(theta) * cos(phi);
+ pnt[1] = sin(theta) * sin(phi);
+ pnt[2] = cos(theta);
+
+ compute_Y(pnt, Y);
+ y_val = *Y;
+
+ lval[0] = lval[1] = lval[2] = 0.0;
+ for (m = 0; m < num_sh; m++) {
+ lval[0] += y_val[m] * env->shcoeffs[m][0];
+ lval[1] += y_val[m] * env->shcoeffs[m][1];
+ lval[2] += y_val[m] * env->shcoeffs[m][2];
+ }
+ lval[3] = 1.0;
+ }
+ }
+
+ free_ShCoeffs(Y);
+
+}
+
void SH_ReconstructLightProbe(LightEnv *env, ImBuf *ibuf)
{
int m, i, j;
More information about the Bf-blender-cvs
mailing list