[Bf-blender-cvs] [cef79fecde1] temp-trimesh-sculpt: commit current code

Joseph Eagar noreply at git.blender.org
Wed Oct 14 04:05:41 CEST 2020


Commit: cef79fecde11add7b1c3ff3969c1f92b5887809e
Author: Joseph Eagar
Date:   Thu Sep 24 22:04:41 2020 -0700
Branches: temp-trimesh-sculpt
https://developer.blender.org/rBcef79fecde11add7b1c3ff3969c1f92b5887809e

commit current code

===================================================================

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/kernel/kernel_path_surface.h
M	intern/cycles/kernel/kernel_random.h
M	intern/cycles/kernel/kernel_textures.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/render/integrator.cpp
M	intern/cycles/render/integrator.h
M	intern/cycles/render/scene.cpp
M	intern/cycles/render/scene.h
M	intern/cycles/util/CMakeLists.txt
M	intern/ghost/intern/GHOST_WindowWin32.cpp
M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	release/scripts/startup/bl_ui/properties_render.py
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/bmesh/tools/bmesh_decimate_collapse.c
M	source/blender/draw/intern/draw_cache_impl_particles.c
M	source/blender/draw/intern/draw_hair.c
M	source/blender/draw/intern/draw_hair_private.h
M	source/blender/draw/intern/shaders/common_hair_lib.glsl
M	source/blender/makesdna/DNA_scene_defaults.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_context.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/tools

===================================================================

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 0befeb164cc..3d648ca1587 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -249,6 +249,12 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
         default=False,
     )
 
+    use_bluenoise_seeds: BoolProperty(
+        name="Blue Noise Seeds",
+        description="Use blue noise seeds to add coherency",
+        default=False,
+    )
+    
     samples: IntProperty(
         name="Samples",
         description="Number of samples to render for each pixel",
@@ -329,6 +335,19 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
         default='SOBOL',
     )
 
+    coherency_shift: IntProperty(
+        name="Coherency Shift",
+        description="Higher values force pixels to be more similar to each other",
+        min=0, max=31,
+        default=16,
+    )
+    
+    coherency_only_blue : BoolProperty(
+        name="Bluenoise Only",
+        description="Use coherency parameter for bluenoise seeds only",
+        default=True
+    )
+    
     use_layer_samples: EnumProperty(
         name="Layer Samples",
         description="How to use per view layer sample settings",
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 1614d787010..a9d2d3481c5 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -277,6 +277,12 @@ class CYCLES_RENDER_PT_sampling_advanced(CyclesButtonsPanel, Panel):
         col.prop(cscene, "sampling_pattern", text="Pattern")
 
         layout.prop(cscene, "use_square_samples")
+        
+        layout.prop(cscene, "use_bluenoise_seeds", text="Blue Noise Seeds")
+
+        row = layout.row()
+        row.prop(cscene, "coherency_shift", text="Coherency")
+        row.prop(cscene, "coherency_only_blue", text="Bluenoise Only")
 
         layout.separator()
 
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 28a737c3341..85b210ffe37 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -284,6 +284,10 @@ void BlenderSync::sync_integrator()
   integrator->sampling_pattern = (SamplingPattern)get_enum(
       cscene, "sampling_pattern", SAMPLING_NUM_PATTERNS, SAMPLING_PATTERN_SOBOL);
 
+  integrator->coherency_only_blue = get_boolean(cscene, "coherency_only_blue");
+  integrator->coherency_shift = get_int(cscene, "coherency_shift");
+  integrator->use_bluenoise_seeds = get_boolean(cscene, "use_bluenoise_seeds");
+
   integrator->sample_clamp_direct = get_float(cscene, "sample_clamp_direct");
   integrator->sample_clamp_indirect = get_float(cscene, "sample_clamp_indirect");
   if (!preview) {
diff --git a/intern/cycles/kernel/kernel_path_surface.h b/intern/cycles/kernel/kernel_path_surface.h
index eb1c1b5cd23..ba48c0bdfc4 100644
--- a/intern/cycles/kernel/kernel_path_surface.h
+++ b/intern/cycles/kernel/kernel_path_surface.h
@@ -266,418 +266,6 @@ ccl_device_inline void kernel_path_surface_connect_light(KernelGlobals *kg,
 #endif
 }
 
-constexpr size_t HCLEN = 1024*16;
-
-typedef struct _hitcache {
-  Ray rays[HCLEN];
-  int cur, used;
-} _hitcache;
-
-static _hitcache hitcache[2] = { 0, };
-
-static void hitcache_add(Ray ray, int thread) {
-  hitcache[thread].rays[hitcache[thread].cur] = ray;
-  hitcache[thread].cur = (hitcache[thread].cur + 1) % HCLEN;
-
-  if (hitcache[thread].used < HCLEN) {
-    hitcache[thread].used++;
-  }
-}
-
-static int hitcache_get(KernelGlobals *kg, PathState* state, int thread) {
-  if (hitcache[thread].used == 0)
-    return -1;
-
-  //is path_state_rng_1D only giving numbers from 0.5-1.0?
-  float r = path_state_rng_1D(kg, state, PRNG_LIGHT_U);
-  r = r > 0.5 ? (r - 0.5) * 2.0 : r;
-
-  int idx = (int)(r * ((float)hitcache[thread].used) * 0.9999);
-
-  return idx;
-}
-
-//bastardized one-bounce bidirection tracing
-ccl_device_inline void kernel_path_surface_connect_light_indirect(KernelGlobals* kg,
-  ShaderData* sd,
-  ShaderData* emission_sd,
-  float3 throughput,
-  ccl_addr_space PathState* state,
-  PathRadiance* L)
-{
-  PROFILING_INIT(kg, PROFILING_CONNECT_LIGHT);
-
-#ifdef __EMISSION__
-  if (!(kernel_data.integrator.use_direct_light && (sd->flag & SD_BSDF_HAS_EVAL)))
-    return;
-
-  /* sample illumination from lights to find path contribution */
-  float light_u, light_v;
-  path_state_rng_2D(kg, state, PRNG_LIGHT_U, &light_u, &light_v);
-
-  Ray light_ray;
-  BsdfEval L_light;
-  PathRadiance L2 = { 0, };
-  bool is_lamp;
-
-#  ifdef __OBJECT_MOTION__
-  light_ray.time = sd->time;
-#  endif
-
-  LightSample ls;
-  if (light_sample(kg, light_u, light_v, sd->time, sd->P, state->bounce, &ls)) {
-    float terminate = path_state_rng_light_termination(kg, state);
-
-    if (1) { //direct_emission(kg, sd, emission_sd, &ls, state, &light_ray, &L_light, &is_lamp, terminate) || true) {
-      Ray ray;
-      float3 omega;
-      float3 Ng;
-      float pdf = 0.0;
-
-      /*trace a ray*/
-      if (ls.type == LIGHT_DISTANT) {
-        const ccl_global KernelLight* klight = &kernel_tex_fetch(__lights, ls.lamp);
-
-        ray.P = make_float3(klight->co[0], klight->co[1], klight->co[2]);
-        Ng = ls.P;
-      } else if (ls.type == LIGHT_POINT) {
-        Ng = -ls.D;
-        ray.P = ls.P + Ng * 0.00015f;
-      } else {
-        Ng = ls.Ng;
-        ray.P = ls.P + Ng * 0.00015f;
-      }
-
-      ray.t = ls.t;
-
-      sample_cos_hemisphere(Ng, light_u, light_v, &omega, &pdf);
-
-      omega = normalize(omega);
-      ray.D = omega;
-
-      float prob = path_state_rng_1D(kg, state, PRNG_LIGHT_U);
-      bool has_cache = prob > 0.75;
-
-      if (has_cache) {
-        int i = hitcache_get(kg, state, 0);
-
-        if (i >= 0) {
-          ray = hitcache[0].rays[i];
-        }
-      }
-
-      /* trace shadow ray */
-      float3 shadow = make_float3(1.0f, 1.0f, 1.0f);
-
-      if (1) { //!shadow_blocked(kg, sd, emission_sd, state, &ray, &shadow)) {
-        Intersection isect, isect2;
-        PathState _state2 = *state, *state2 = &_state2;
-        ShaderData sd2;
-        float3 P, Ng;
-        BsdfEval bsdf_eval;
-        Ray ray2;
-
-        //bool hit = scene_intersect(kg, *ray, visibility, isect);
-        //bool hit = kernel_path_scene_intersect(kg, state2, &ray, &isect, &L2);
-        bool hit = scene_intersect(kg, ray, PATH_RAY_ALL_VISIBILITY, &isect);
-        if (!hit) {
-          return;
-        }
-
-        P = ray.P + ray.D * isect.t;
-        Ng = normalize(isect.Ng);
-
-        float d1 = dot(Ng, -ray.D);
-        d1 = d1 < 0.0 ? 0.0 : d1;
-
-        ray2.P = sd->P + sd->Ng * 0.00015;
-
-        float dis = len(P - ray2.P) * 0.99999;
-
-        ray2.D = normalize(P - ray2.P);
-        ray2.t = dis;
-
-        float3 N2 = ray2.D;
-        
-        bool hit2 = scene_intersect(kg, ray2, PATH_RAY_ALL_VISIBILITY, &isect2);
-        bool bad = false;
-
-        if (hit2) {
-          bad = (isect.object != isect2.object || isect.prim != isect2.prim);
-        } else {
-          //?
-        }
-
-        if (bad) {
-          return;
-        }
-
-        shader_setup_from_ray(kg, &sd2, &isect, &ray);
-
-        /* Evaluate shader. */
-        shader_eval_surface(kg, &sd2, state2, state2->flag);
-        shader_prepare_closures(&sd2, state2);
-
-        float d2 = dot(sd->N, N2);
-
-        d2 = d2 < 0.0 ? 0.0 : d2;
-
-        d1 = d2 = 1.0f;
-        float3 throughput2 = throughput * d2 * d1 * make_float3(1.0f, 1.0f, 1.0f) / (1.0f + dis * dis);
-
-        if (1) { //direct_emission(kg, &sd2, emission_sd, &ls, state2, &light_ray, &L_light, &is_lamp, terminate)) {
-          differential3 dD = differential3_zero();
-
-          /* evaluate light closure */
-          float3 light_eval = direct_emissive_eval(
-              kg, emission_sd, &ls, state, -ls.D, dD, ls.t, sd->time);
-
-          throughput2 *= light_eval / ls.pdf; //L_light.diffuse;
-        }
-
-        if (1) {
-          /* sample BSDF */
-          float bsdf_pdf;
-          BsdfEval bsdf_eval;
-          float3 bsdf_omega_in;
-          differential3 bsdf_domega_in;
-          float bsdf_u, bsdf_v;
-          path_state_rng_2D(kg, state2, PRNG_BSDF_U, &bsdf_u, &bsdf_v);
-          int label;
-
-          label = shader_bsdf_sample(
-            kg, sd, bsdf_u, bsdf_v, &bsdf_eval, &bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
-
-          if (!(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))) {
-            //throughput2 *= bsdf_eval.sum_no_mis;
-            throughput2 *= bsdf_eval.diffuse;
-            //path_radiance_accum_light(L, state, throughput2, &bsdf_eval, shadow, 1.0f, is_lamp);
-            /* modify throughput */
-            //path_radiance_bsdf_bounce(kg, L, &throughput, &bsdf_eval, bsdf_pdf, state->bounce, label);
-          }
-        }
-
-        //path_radiance_accum_light(&L2, state2, throughput, &L_light, shadow, 1.0f, is_lamp);
-
-        
-        //path_radiance_accum_light(L, state, throughput2, &L_light, shadow, 1.0f, is_lamp);
-        L->emission += throughput2;
-
-        if (!has_cache) {
-          hitcache_add(ray, 0);
-        }
-      }
-    }
-  }
-#endif
-}
-
-constexpr size_t HCLEN = 1024*16;
-
-typedef struct _hitcache {
-  Ray rays[HCLEN];
-  int cur, used;
-} _hitcache;
-
-static _hitcache hitcache[2] = { 0, };
-
-static void hitcache_add(Ray ray, int thread) {
-  hitcache[thread].rays[hitcache[thread].cur] = ray;
-  hitcache[thread].cur = (hitcache[thread].cur + 1) % HCLEN;
-
-  if (hitcache[thread].used < HCLEN) {
-    hitcache[thread].used++;
-  }
-}
-
-static int hitcache_get(KernelGlobals *kg, PathState* state, int thread) {
-  if (hitcache[thread].used == 0)
-    return -1;
-
-  //is path_state_rng_1D only giving numbers from 0.5-1.0?
-  float r = path_state_rng_1D(kg, state, PRNG_LIGHT_U);
-  r = r > 0.5 ? (r - 0.5) * 2.0 : r;
-
-  int idx = (int)(r * ((float)hitcache[thread].used) * 0.9999);
-
-  return idx;
-}
-
-//bastardized one-bounce bidirection tracing
-ccl_device_inline void kernel_path_surface_connect_light_indirect(KernelGlobals* kg,
-  ShaderData* sd,
-  ShaderData* emission_sd,
-  float3 throughput,
-  ccl_addr_space

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list