Cycles: Match Eevee when processing ramp/camera curves
Slightly increase the number of times ramps/curves are sampled to better align with the results produced by Eevee. Pull Request: https://projects.blender.org/blender/blender/pulls/111082
This commit is contained in:
committed by
Jesse Yurkovich
parent
88a875ec3a
commit
9a1c66d503
@@ -147,13 +147,14 @@ static inline void colorramp_to_array(BL::ColorRamp &ramp,
|
||||
array<float> &ramp_alpha,
|
||||
int size)
|
||||
{
|
||||
ramp_color.resize(size);
|
||||
ramp_alpha.resize(size);
|
||||
const int full_size = size + 1;
|
||||
ramp_color.resize(full_size);
|
||||
ramp_alpha.resize(full_size);
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
for (int i = 0; i < full_size; i++) {
|
||||
float color[4];
|
||||
|
||||
ramp.evaluate((float)i / (float)(size - 1), color);
|
||||
ramp.evaluate(float(i) / float(size), color);
|
||||
ramp_color[i] = make_float3(color[0], color[1], color[2]);
|
||||
ramp_alpha[i] = color[3];
|
||||
}
|
||||
@@ -183,9 +184,10 @@ static inline void curvemapping_to_array(BL::CurveMapping &cumap, array<float> &
|
||||
{
|
||||
cumap.update();
|
||||
BL::CurveMap curve = cumap.curves[0];
|
||||
data.resize(size);
|
||||
for (int i = 0; i < size; i++) {
|
||||
float t = (float)i / (float)(size - 1);
|
||||
const int full_size = size + 1;
|
||||
data.resize(full_size);
|
||||
for (int i = 0; i < full_size; i++) {
|
||||
float t = float(i) / float(size);
|
||||
data[i] = cumap.evaluate(curve, t);
|
||||
}
|
||||
}
|
||||
@@ -204,10 +206,11 @@ static inline void curvemapping_float_to_array(BL::CurveMapping &cumap,
|
||||
|
||||
BL::CurveMap map = cumap.curves[0];
|
||||
|
||||
data.resize(size);
|
||||
const int full_size = size + 1;
|
||||
data.resize(full_size);
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float t = min + (float)i / (float)(size - 1) * range;
|
||||
for (int i = 0; i < full_size; i++) {
|
||||
float t = min + float(i) / float(size) * range;
|
||||
data[i] = cumap.evaluate(map, t);
|
||||
}
|
||||
}
|
||||
@@ -241,20 +244,21 @@ static inline void curvemapping_color_to_array(BL::CurveMapping &cumap,
|
||||
BL::CurveMap mapG = cumap.curves[1];
|
||||
BL::CurveMap mapB = cumap.curves[2];
|
||||
|
||||
data.resize(size);
|
||||
const int full_size = size + 1;
|
||||
data.resize(full_size);
|
||||
|
||||
if (rgb_curve) {
|
||||
BL::CurveMap mapI = cumap.curves[3];
|
||||
for (int i = 0; i < size; i++) {
|
||||
const float t = min_x + (float)i / (float)(size - 1) * range_x;
|
||||
for (int i = 0; i < full_size; i++) {
|
||||
const float t = min_x + float(i) / float(size) * range_x;
|
||||
data[i] = make_float3(cumap.evaluate(mapR, cumap.evaluate(mapI, t)),
|
||||
cumap.evaluate(mapG, cumap.evaluate(mapI, t)),
|
||||
cumap.evaluate(mapB, cumap.evaluate(mapI, t)));
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < size; i++) {
|
||||
float t = min_x + (float)i / (float)(size - 1) * range_x;
|
||||
for (int i = 0; i < full_size; i++) {
|
||||
float t = min_x + float(i) / float(size) * range_x;
|
||||
data[i] = make_float3(
|
||||
cumap.evaluate(mapR, t), cumap.evaluate(mapG, t), cumap.evaluate(mapB, t));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user