Merge branch 'master' into blender2.8
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 23 Jan 2018 12:11:02 +0000 (13:11 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 23 Jan 2018 12:19:32 +0000 (13:19 +0100)
13 files changed:
1  2 
intern/cycles/blender/addon/version_update.py
intern/cycles/blender/blender_shader.cpp
release/scripts/startup/nodeitems_builtins.py
source/blender/blenkernel/BKE_blender_version.h
source/blender/blenkernel/BKE_node.h
source/blender/blenkernel/intern/node.c
source/blender/gpu/shaders/gpu_shader_material.glsl
source/blender/nodes/CMakeLists.txt
source/blender/nodes/NOD_shader.h
source/blender/nodes/NOD_static_types.h
source/blender/nodes/shader/node_shader_tree.c
source/blender/nodes/shader/nodes/node_shader_displacement.c
source/blender/nodes/shader/nodes/node_shader_output_material.c

index efd794461d6d5c6edd2f7596518e3a8a6e2d60ed,26cdecd2d522519820f828ef6d46b51d09ab13a0..2075bdba8c52de8b76eb0a815cc2124367fcc573
@@@ -315,3 -356,6 +356,6 @@@ def do_versions(self)
                  cscene.blur_glossy = 0.0
              if not cscene.is_property_set("sample_clamp_indirect"):
                  cscene.sample_clamp_indirect = 0.0
 -    if bpy.data.version <= (2, 79, 1):
++    if bpy.data.version <= (2, 80, 3):
+         displacement_nodes_insert()
index 27223afe4ff11dcd75c1c61da80d5058f7e68aeb,c99da724794862f5ab2d2fbb390510fabb3eee0b..ceb466ebdcdda8a262ebeb332c78b9b1b54ffa8a
@@@ -27,8 -27,8 +27,8 @@@
  /* these lines are grep'd, watch out for our not-so-awesome regex
   * and keep comment above the defines.
   * Use STRINGIFY() rather than defining with quotes */
 -#define BLENDER_VERSION         279
 -#define BLENDER_SUBVERSION      2
 +#define BLENDER_VERSION         280
- #define BLENDER_SUBVERSION      3
++#define BLENDER_SUBVERSION      4
  /* Several breakages with 270, e.g. constraint deg vs rad */
  #define BLENDER_MINVERSION      270
  #define BLENDER_MINSUBVERSION   6
index 5eec50019a96aafe640593f0caf36a22613a1348,854a3e64acc8f09f9065b5fcf5e158e70cb90834..4e30cb076d47f569b10d02991af527495ea4b46f
@@@ -798,8 -789,8 +798,9 @@@ struct ShadeResult
  #define SH_NODE_UVALONGSTROKE                 191
  #define SH_NODE_TEX_POINTDENSITY              192
  #define SH_NODE_BSDF_PRINCIPLED         193
 +#define SH_NODE_EEVEE_SPECULAR                        195
  #define SH_NODE_BEVEL                   197
+ #define SH_NODE_DISPLACEMENT            198
  
  /* custom defines options for Material node */
  #define SH_NODE_MAT_DIFF   1
index 07c3b1e782bdc6712dc5fbee0b7f3ee4d20ede02,b54bd213b749722e30e6eeb4a34e8c9d4f67613d..780f4f59fb9483d5ae2407a320f1a8e8fe2c2688
@@@ -4135,63 -3816,23 +4135,68 @@@ void node_bevel(float radius, vec3 N, o
        result = N;
  }
  
+ void node_displacement(float height, float dist, vec3 N, out vec3 result)
+ {
+       result = height * dist * N;
+ }
  /* output */
  
- void node_output_material(Closure surface, Closure volume, float displacement, out Closure result)
 -void node_output_material(vec4 surface, vec4 volume, vec3 displacement, out vec4 result)
++void node_output_material(Closure surface, Closure volume, vec3 displacement, out Closure result)
  {
 +#ifdef VOLUMETRICS
 +      result = volume;
 +#else
        result = surface;
 +#endif
  }
  
 -void node_output_world(vec4 surface, vec4 volume, out vec4 result)
 +uniform float backgroundAlpha;
 +
 +void node_output_world(Closure surface, Closure volume, out Closure result)
  {
 -      result = surface;
 +#ifndef VOLUMETRICS
 +#ifdef EEVEE_ENGINE
 +      result.radiance = surface.radiance;
 +      result.opacity = backgroundAlpha;
 +#else
 +      result = Closure(surface.radiance, backgroundAlpha);
 +#endif
 +#else
 +      result = volume;
 +#endif /* VOLUMETRICS */
 +}
 +
 +#ifndef VOLUMETRICS
 +/* TODO : clean this ifdef mess */
 +/* EEVEE output */
 +#ifdef EEVEE_ENGINE
 +void world_normals_get(out vec3 N)
 +{
 +      N = gl_FrontFacing ? worldNormal : -worldNormal;
 +}
 +
 +void node_eevee_specular(
 +        vec4 diffuse, vec4 specular, float roughness, vec4 emissive, float transp, vec3 normal,
 +        float clearcoat, float clearcoat_roughness, vec3 clearcoat_normal,
 +        float occlusion, float ssr_id, out Closure result)
 +{
 +      vec3 out_diff, out_spec, ssr_spec;
 +      eevee_closure_default(normal, diffuse.rgb, specular.rgb, int(ssr_id), roughness, occlusion,
 +                            out_diff, out_spec, ssr_spec);
 +
 +      vec3 vN = normalize(mat3(ViewMatrix) * normal);
 +      result = CLOSURE_DEFAULT;
 +      result.radiance = out_diff * diffuse.rgb + out_spec + emissive.rgb;
 +      result.opacity = 1.0 - transp;
 +      result.ssr_data = vec4(ssr_spec, roughness);
 +      result.ssr_normal = normal_encode(vN, viewCameraVec);
 +      result.ssr_id = int(ssr_id);
  }
  
 +#endif /* EEVEE_ENGINE */
 +#endif /* VOLUMETRICS */
 +
  /* ********************** matcap style render ******************** */
  
  void material_preview_matcap(vec4 color, sampler2D ima, vec4 N, vec4 mask, out vec4 result)
Simple merge
Simple merge
index 0000000000000000000000000000000000000000,bcd11b758f8f923d24afc4629be25eb7eff4b1ed..d5c191b396681f740f929833c49fe0c0c287fc4f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,65 +1,65 @@@
 -static int gpu_shader_displacement(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+ /*
+  * ***** 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+  *
+  * The Original Code is Copyright (C) 2005 Blender Foundation.
+  * All rights reserved.
+  *
+  * The Original Code is: all of this file.
+  *
+  * Contributor(s): none yet.
+  *
+  * ***** END GPL LICENSE BLOCK *****
+  */
+ #include "../node_shader_util.h"
+ /* **************** OUTPUT ******************** */
+ static bNodeSocketTemplate sh_node_displacement_in[] = {
+       {       SOCK_FLOAT, 0, N_("Height"), 0.00f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f},
+       {       SOCK_FLOAT, 0, N_("Scale"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f},
+       {       SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
+       {       -1, 0, ""       }
+ };
+ static bNodeSocketTemplate sh_node_displacement_out[] = {
+       {       SOCK_VECTOR, 0, N_("Displacement"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+       {       -1, 0, ""       }
+ };
 -      return GPU_stack_link(mat, "node_displacement", in, out);
++static int gpu_shader_displacement(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+ {
+       if (!in[2].link) {
+               GPU_link(mat, "direction_transform_m4v3", GPU_builtin(GPU_VIEW_NORMAL), GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &in[2].link);
+       }
++      return GPU_stack_link(mat, node, "node_displacement", in, out);
+ }
+ /* node type definition */
+ void register_node_type_sh_displacement(void)
+ {
+       static bNodeType ntype;
+       sh_node_type_base(&ntype, SH_NODE_DISPLACEMENT, "Displacement", NODE_CLASS_OP_VECTOR, 0);
+       node_type_compatibility(&ntype, NODE_NEW_SHADING);
+       node_type_socket_templates(&ntype, sh_node_displacement_in, sh_node_displacement_out);
+       node_type_storage(&ntype, "", NULL, NULL);
+       node_type_gpu(&ntype, gpu_shader_displacement);
+       nodeRegisterType(&ntype);
+ }