Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Broadfoot <gbroadfoot@hotmail.com>2013-04-16 01:38:31 +0400
committerStuart Broadfoot <gbroadfoot@hotmail.com>2013-04-16 01:38:31 +0400
commit638b084f824bc345468bc8e02422b5da65a641a7 (patch)
tree0e5e9cd1bcdc09492ac6c5966dcc2b7c28b5f96b /intern/cycles/render
parentceb61eb14d86132522e38c238bf249dbeb84b237 (diff)
Cycles Hair: Strand Minimum Pixel Size
Code is added to restrict the pixel size of strands in cycles. It works best with ribbon primitives and a preset for these is included. It uses distance dependent expansion of the strands and then stochastic strand removal to give a fading. To prevent a slowdown for triangle mesh objects in the BVH an extra visibility flag has been added. It is also only applied for camera rays. The strand width settings are also changed, so that the particle size is not included in the width calculation. Instead there is a separate particle system parameter for width scaling.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/camera.cpp1
-rw-r--r--intern/cycles/render/camera.h1
-rw-r--r--intern/cycles/render/curves.cpp6
-rw-r--r--intern/cycles/render/curves.h5
-rw-r--r--intern/cycles/render/nodes.cpp8
-rw-r--r--intern/cycles/render/session.cpp2
6 files changed, 22 insertions, 1 deletions
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp
index 3ca19496b72..c88b0f3dfbc 100644
--- a/intern/cycles/render/camera.cpp
+++ b/intern/cycles/render/camera.cpp
@@ -236,6 +236,7 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene)
/* render size */
kcam->width = width;
kcam->height = height;
+ kcam->resolution = resolution;
/* store differentials */
kcam->dx = float3_to_float4(dx);
diff --git a/intern/cycles/render/camera.h b/intern/cycles/render/camera.h
index 197a4da588c..fa4a9487af0 100644
--- a/intern/cycles/render/camera.h
+++ b/intern/cycles/render/camera.h
@@ -66,6 +66,7 @@ public:
/* screen */
int width, height;
+ int resolution;
BoundBox2D viewplane;
/* border */
diff --git a/intern/cycles/render/curves.cpp b/intern/cycles/render/curves.cpp
index 9fa867ae723..3fcd78b0152 100644
--- a/intern/cycles/render/curves.cpp
+++ b/intern/cycles/render/curves.cpp
@@ -89,6 +89,8 @@ CurveSystemManager::CurveSystemManager()
normalmix = 1.0f;
encasing_ratio = 1.01f;
+ minimum_width = 0.0f;
+ maximum_width = 0.0f;
use_curves = true;
use_smooth = true;
@@ -149,6 +151,8 @@ void CurveSystemManager::device_update(Device *device, DeviceScene *dscene, Scen
kcurve->normalmix = normalmix;
kcurve->encasing_ratio = encasing_ratio;
+ kcurve->minimum_width = minimum_width;
+ kcurve->maximum_width = maximum_width;
kcurve->subdivisions = subdivisions;
}
@@ -172,6 +176,8 @@ bool CurveSystemManager::modified(const CurveSystemManager& CurveSystemManager)
use_tangent_normal_correction == CurveSystemManager.use_tangent_normal_correction &&
use_tangent_normal_geometry == CurveSystemManager.use_tangent_normal_geometry &&
encasing_ratio == CurveSystemManager.encasing_ratio &&
+ minimum_width == CurveSystemManager.minimum_width &&
+ maximum_width == CurveSystemManager.maximum_width &&
use_backfacing == CurveSystemManager.use_backfacing &&
normalmix == CurveSystemManager.normalmix &&
use_smooth == CurveSystemManager.use_smooth &&
diff --git a/intern/cycles/render/curves.h b/intern/cycles/render/curves.h
index 3527998339c..42f0498617e 100644
--- a/intern/cycles/render/curves.h
+++ b/intern/cycles/render/curves.h
@@ -37,7 +37,8 @@ typedef enum curve_presets {
CURVE_TANGENT_SHADING,
CURVE_TRUE_NORMAL,
CURVE_ACCURATE_PRESET,
- CURVE_SMOOTH_CURVES
+ CURVE_SMOOTH_CURVES,
+ CURVE_SMOOTH_RIBBONS
} curve_presets;
typedef enum curve_primitives {
@@ -107,6 +108,8 @@ public:
float normalmix;
float encasing_ratio;
+ float minimum_width;
+ float maximum_width;
bool use_curves;
bool use_smooth;
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index b4ff6e3152b..083b79e8aaf 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -2281,6 +2281,8 @@ HairInfoNode::HairInfoNode()
add_output("Intercept", SHADER_SOCKET_FLOAT);
add_output("Thickness", SHADER_SOCKET_FLOAT);
add_output("Tangent Normal", SHADER_SOCKET_NORMAL);
+ /*output for minimum hair width transparency - deactivated*/
+ /*add_output("Fade", SHADER_SOCKET_FLOAT);*/
}
void HairInfoNode::attributes(AttributeRequestSet *attributes)
@@ -2322,6 +2324,12 @@ void HairInfoNode::compile(SVMCompiler& compiler)
compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_TANGENT_NORMAL, out->stack_offset);
}
+ /*out = output("Fade");
+ if(!out->links.empty()) {
+ compiler.stack_assign(out);
+ compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_FADE, out->stack_offset);
+ }*/
+
}
void HairInfoNode::compile(OSLCompiler& compiler)
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 075f5eb6bab..569c29e0b09 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -719,10 +719,12 @@ void Session::update_scene()
Camera *cam = scene->camera;
int width = tile_manager.state.buffer.full_width;
int height = tile_manager.state.buffer.full_height;
+ int resolution = tile_manager.state.resolution_divider;
if(width != cam->width || height != cam->height) {
cam->width = width;
cam->height = height;
+ cam->resolution = resolution;
cam->tag_update();
}