diff options
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/addon/properties.py | 25 | ||||
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 20 | ||||
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 8 | ||||
-rw-r--r-- | intern/cycles/device/device.h | 2 | ||||
-rw-r--r-- | intern/cycles/device/device_cpu.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/device/device_cuda.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/device/device_multi.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_textures.h | 55 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_image.h | 54 | ||||
-rw-r--r-- | intern/cycles/render/image.cpp | 13 | ||||
-rw-r--r-- | intern/cycles/render/image.h | 8 | ||||
-rw-r--r-- | intern/cycles/render/object.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/render/object.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/scene.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/scene.h | 4 |
15 files changed, 188 insertions, 12 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index eba94604a88..083fa643fe7 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -591,6 +591,31 @@ class CyclesWorldSettings(bpy.types.PropertyGroup): del bpy.types.World.cycles +class CyclesObjectSettings(bpy.types.PropertyGroup): + @classmethod + def register(cls): + bpy.types.Object.cycles_settings = PointerProperty( + name="Cycles Object Settings", + description="Cycles object settings", + type=cls, + ) + cls.use_motion = BoolProperty( + name="Motion Blur", + description="Enable or disable motion blur for this object", + default=True, + ) + cls.motion_multiplier = FloatProperty( + name="Motion Multiplier", + description="Multiplier for Object motion blur shutter time", + min=0.0, soft_max=10.0, max=100.0, + default=1.0, + ) + + + @classmethod + def unregister(cls): + del bpy.types.Object.cycles_settings + class CyclesVisibilitySettings(bpy.types.PropertyGroup): @classmethod def register(cls): diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 64fda3ef535..5ef718e1db4 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -572,6 +572,26 @@ class CyclesObject_PT_ray_visibility(CyclesButtonsPanel, Panel): flow.prop(visibility, "shadow") +class CyclesObject_PT_settings(CyclesButtonsPanel, Panel): + bl_label = "Settings" + bl_context = "object" + bl_options = {'DEFAULT_CLOSED'} + + @classmethod + def poll(cls, context): + ob = context.object + return CyclesButtonsPanel.poll(context) and ob and ob.type in {'MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META', 'LAMP'} + + def draw(self, context): + layout = self.layout + + ob = context.object + settings = ob.cycles_settings + + layout.prop(settings, "use_motion") + #layout.prop(settings, "motion_multiplier") + + class CYCLES_OT_use_shading_nodes(Operator): """Enable nodes on a material, world or lamp""" bl_idname = "cycles.use_shading_nodes" diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index 3410c73fbde..39ebb3dc1c6 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -241,13 +241,17 @@ Object *BlenderSync::sync_object(BL::Object b_parent, int persistent_id[OBJECT_P object = object_map.find(key); if(object) { + PointerRNA csettings = RNA_pointer_get(&b_ob.ptr, "cycles_settings"); + + object->motion_multiplier = get_float(csettings, "motion_multiplier"); + if(tfm != object->tfm) { if(motion == -1) object->motion.pre = tfm; else object->motion.post = tfm; - - object->use_motion = true; + + object->use_motion = get_boolean(csettings, "use_motion"); } /* mesh deformation blur not supported yet */ diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index 7b31b9ba157..e6d3922d3be 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -53,6 +53,7 @@ public: string description; string id; int num; + int extended_images; bool display_device; bool advanced_shading; bool pack_images; @@ -63,6 +64,7 @@ public: type = DEVICE_CPU; id = "CPU"; num = 0; + extended_images = false; display_device = false; advanced_shading = true; pack_images = false; diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp index 7bc84878dab..f2743e15e2b 100644 --- a/intern/cycles/device/device_cpu.cpp +++ b/intern/cycles/device/device_cpu.cpp @@ -339,6 +339,7 @@ void device_cpu_info(vector<DeviceInfo>& devices) info.description = system_cpu_brand_string(); info.id = "CPU"; info.num = 0; + info.extended_images = true; info.advanced_shading = true; info.pack_images = false; diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp index ec7157aa083..9cf0879742e 100644 --- a/intern/cycles/device/device_cuda.cpp +++ b/intern/cycles/device/device_cuda.cpp @@ -1029,6 +1029,7 @@ void device_cuda_info(vector<DeviceInfo>& devices) int major, minor; cuDeviceComputeCapability(&major, &minor, num); info.advanced_shading = (major >= 2); + info.extended_images = (major >= 3); info.pack_images = false; /* if device has a kernel timeout, assume it is used for display */ diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp index 807bfe578f3..02db5b84831 100644 --- a/intern/cycles/device/device_multi.cpp +++ b/intern/cycles/device/device_multi.cpp @@ -330,6 +330,7 @@ static bool device_multi_add(vector<DeviceInfo>& devices, DeviceType type, bool info.advanced_shading = with_advanced_shading; info.pack_images = false; + info.extended_images = true; foreach(DeviceInfo& subinfo, devices) { if(subinfo.type == type) { @@ -353,6 +354,7 @@ static bool device_multi_add(vector<DeviceInfo>& devices, DeviceType type, bool if(subinfo.display_device) info.display_device = true; info.pack_images = info.pack_images || subinfo.pack_images; + info.extended_images = info.extended_images && subinfo.extended_images; num_added++; } } diff --git a/intern/cycles/kernel/kernel_textures.h b/intern/cycles/kernel/kernel_textures.h index 55c6e15ad04..f09bb95046b 100644 --- a/intern/cycles/kernel/kernel_textures.h +++ b/intern/cycles/kernel/kernel_textures.h @@ -176,6 +176,61 @@ KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_097) KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_098) KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_099) +/* Kepler and above */ +#if defined(__KERNEL_CUDA__) && __CUDA_ARCH__ >= 300 +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_100) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_101) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_102) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_103) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_104) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_105) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_106) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_107) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_108) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_109) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_110) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_111) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_112) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_113) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_114) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_115) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_116) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_117) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_118) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_119) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_120) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_121) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_122) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_123) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_124) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_125) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_126) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_127) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_128) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_129) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_130) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_131) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_132) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_133) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_134) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_135) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_136) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_137) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_138) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_139) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_140) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_141) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_142) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_143) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_144) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_145) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_146) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_147) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_148) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_149) +KERNEL_IMAGE_TEX(uchar4, texture_image_uchar4, __tex_image_150) +#endif + /* packed image (opencl) */ KERNEL_TEX(uchar4, texture_uchar4, __tex_image_packed) KERNEL_TEX(uint4, texture_uint4, __tex_image_packed_info) diff --git a/intern/cycles/kernel/svm/svm_image.h b/intern/cycles/kernel/svm/svm_image.h index 57adaa863f1..037bfa2d9b9 100644 --- a/intern/cycles/kernel/svm/svm_image.h +++ b/intern/cycles/kernel/svm/svm_image.h @@ -229,6 +229,60 @@ __device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, u case 97: r = kernel_tex_image_interp(__tex_image_097, x, y); break; case 98: r = kernel_tex_image_interp(__tex_image_098, x, y); break; case 99: r = kernel_tex_image_interp(__tex_image_099, x, y); break; +#if defined(__KERNEL_CUDA__) && __CUDA_ARCH__ >= 300 + case 100: r = kernel_tex_image_interp(__tex_image_100, x, y); break; + case 101: r = kernel_tex_image_interp(__tex_image_101, x, y); break; + case 102: r = kernel_tex_image_interp(__tex_image_102, x, y); break; + case 103: r = kernel_tex_image_interp(__tex_image_103, x, y); break; + case 104: r = kernel_tex_image_interp(__tex_image_104, x, y); break; + case 105: r = kernel_tex_image_interp(__tex_image_105, x, y); break; + case 106: r = kernel_tex_image_interp(__tex_image_106, x, y); break; + case 107: r = kernel_tex_image_interp(__tex_image_107, x, y); break; + case 108: r = kernel_tex_image_interp(__tex_image_108, x, y); break; + case 109: r = kernel_tex_image_interp(__tex_image_109, x, y); break; + case 110: r = kernel_tex_image_interp(__tex_image_110, x, y); break; + case 111: r = kernel_tex_image_interp(__tex_image_111, x, y); break; + case 112: r = kernel_tex_image_interp(__tex_image_112, x, y); break; + case 113: r = kernel_tex_image_interp(__tex_image_113, x, y); break; + case 114: r = kernel_tex_image_interp(__tex_image_114, x, y); break; + case 115: r = kernel_tex_image_interp(__tex_image_115, x, y); break; + case 116: r = kernel_tex_image_interp(__tex_image_116, x, y); break; + case 117: r = kernel_tex_image_interp(__tex_image_117, x, y); break; + case 118: r = kernel_tex_image_interp(__tex_image_118, x, y); break; + case 119: r = kernel_tex_image_interp(__tex_image_119, x, y); break; + case 120: r = kernel_tex_image_interp(__tex_image_120, x, y); break; + case 121: r = kernel_tex_image_interp(__tex_image_121, x, y); break; + case 122: r = kernel_tex_image_interp(__tex_image_122, x, y); break; + case 123: r = kernel_tex_image_interp(__tex_image_123, x, y); break; + case 124: r = kernel_tex_image_interp(__tex_image_124, x, y); break; + case 125: r = kernel_tex_image_interp(__tex_image_125, x, y); break; + case 126: r = kernel_tex_image_interp(__tex_image_126, x, y); break; + case 127: r = kernel_tex_image_interp(__tex_image_127, x, y); break; + case 128: r = kernel_tex_image_interp(__tex_image_128, x, y); break; + case 129: r = kernel_tex_image_interp(__tex_image_129, x, y); break; + case 130: r = kernel_tex_image_interp(__tex_image_130, x, y); break; + case 131: r = kernel_tex_image_interp(__tex_image_131, x, y); break; + case 132: r = kernel_tex_image_interp(__tex_image_132, x, y); break; + case 133: r = kernel_tex_image_interp(__tex_image_133, x, y); break; + case 134: r = kernel_tex_image_interp(__tex_image_134, x, y); break; + case 135: r = kernel_tex_image_interp(__tex_image_135, x, y); break; + case 136: r = kernel_tex_image_interp(__tex_image_136, x, y); break; + case 137: r = kernel_tex_image_interp(__tex_image_137, x, y); break; + case 138: r = kernel_tex_image_interp(__tex_image_138, x, y); break; + case 139: r = kernel_tex_image_interp(__tex_image_139, x, y); break; + case 140: r = kernel_tex_image_interp(__tex_image_140, x, y); break; + case 141: r = kernel_tex_image_interp(__tex_image_141, x, y); break; + case 142: r = kernel_tex_image_interp(__tex_image_142, x, y); break; + case 143: r = kernel_tex_image_interp(__tex_image_143, x, y); break; + case 144: r = kernel_tex_image_interp(__tex_image_144, x, y); break; + case 145: r = kernel_tex_image_interp(__tex_image_145, x, y); break; + case 146: r = kernel_tex_image_interp(__tex_image_146, x, y); break; + case 147: r = kernel_tex_image_interp(__tex_image_147, x, y); break; + case 148: r = kernel_tex_image_interp(__tex_image_148, x, y); break; + case 149: r = kernel_tex_image_interp(__tex_image_149, x, y); break; + case 150: r = kernel_tex_image_interp(__tex_image_150, x, y); break; +#endif + default: kernel_assert(0); return make_float4(0.0f, 0.0f, 0.0f, 0.0f); diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index 8e844bc788e..65521103df1 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -61,11 +61,16 @@ void ImageManager::set_osl_texture_system(void *texture_system) osl_texture_system = texture_system; } -void ImageManager::set_extended_image_limits(void) +void ImageManager::set_extended_image_limits(const DeviceInfo& info) { - tex_num_images = TEX_EXTENDED_NUM_IMAGES; - tex_num_float_images = TEX_EXTENDED_NUM_FLOAT_IMAGES; - tex_image_byte_start = TEX_EXTENDED_IMAGE_BYTE_START; + if(info.type == DEVICE_CPU) { + tex_num_images = TEX_EXTENDED_NUM_IMAGES_CPU; + tex_num_float_images = TEX_EXTENDED_NUM_FLOAT_IMAGES; + tex_image_byte_start = TEX_EXTENDED_IMAGE_BYTE_START; + } + else if ((info.type == DEVICE_CUDA || info.type == DEVICE_MULTI) && info.extended_images) { + tex_num_images = TEX_EXTENDED_NUM_IMAGES_GPU; + } } bool ImageManager::set_animation_frame_update(int frame) diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index b20ff23fbbb..276420abea1 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -19,6 +19,7 @@ #ifndef __IMAGE_H__ #define __IMAGE_H__ +#include "device.h" #include "device_memory.h" #include "util_string.h" @@ -29,12 +30,15 @@ CCL_NAMESPACE_BEGIN +/* Normal Image amount */ #define TEX_NUM_IMAGES 95 #define TEX_IMAGE_BYTE_START TEX_NUM_FLOAT_IMAGES +/* Extended Image amount*/ #define TEX_EXTENDED_NUM_FLOAT_IMAGES 5 -#define TEX_EXTENDED_NUM_IMAGES 512 #define TEX_EXTENDED_IMAGE_BYTE_START TEX_EXTENDED_NUM_FLOAT_IMAGES +#define TEX_EXTENDED_NUM_IMAGES_CPU 512 +#define TEX_EXTENDED_NUM_IMAGES_GPU 145 /* color to use when textures are not found */ #define TEX_IMAGE_MISSING_R 1 @@ -60,7 +64,7 @@ public: void set_osl_texture_system(void *texture_system); void set_pack_images(bool pack_images_); - void set_extended_image_limits(void); + void set_extended_image_limits(const DeviceInfo& info); bool set_animation_frame_update(int frame); bool need_update; diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp index 7931a51b99d..adac22b64fe 100644 --- a/intern/cycles/render/object.cpp +++ b/intern/cycles/render/object.cpp @@ -47,6 +47,7 @@ Object::Object() use_motion = false; use_holdout = false; curverender = false; + motion_multiplier = 1.0f; } Object::~Object() diff --git a/intern/cycles/render/object.h b/intern/cycles/render/object.h index b3ab0e93b5c..c45d5b1d5a6 100644 --- a/intern/cycles/render/object.h +++ b/intern/cycles/render/object.h @@ -54,6 +54,8 @@ public: float2 dupli_uv; int particle_id; + + float motion_multiplier; Object(); ~Object(); diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp index a6dca62ffd0..feffa2a7971 100644 --- a/intern/cycles/render/scene.cpp +++ b/intern/cycles/render/scene.cpp @@ -63,8 +63,8 @@ Scene::Scene(const SceneParams& params_, const DeviceInfo& device_info_) else shader_manager = ShaderManager::create(this, SceneParams::SVM); - if (device_info_.type == DEVICE_CPU) - image_manager->set_extended_image_limits(); + /* Extended Image limits for CPU and Kepler GPUs */ + image_manager->set_extended_image_limits(device_info_); } Scene::~Scene() diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h index 0790d4159c5..8f5bc4ead95 100644 --- a/intern/cycles/render/scene.h +++ b/intern/cycles/render/scene.h @@ -105,8 +105,8 @@ public: /* integrator */ device_vector<uint> sobol_directions; - /* images */ - device_vector<uchar4> tex_image[TEX_EXTENDED_NUM_IMAGES]; + /* CPU images */ + device_vector<uchar4> tex_image[TEX_EXTENDED_NUM_IMAGES_CPU]; device_vector<float4> tex_float_image[TEX_EXTENDED_NUM_FLOAT_IMAGES]; /* opencl images */ |