Realtime Compositor: Keep interpolation in Scale node
Currently, the scale node always changes the interpolation of its result to bilinear. This was done because the scale node does not have an interpolation option, unlike the Transform node, so a default of bilinear was assumed. This turned out to be problematic, because in the pixelation use cases, a nearest interpolation is typically preferred by the user. This patch changes the default interpolation of input nodes to bilinear, makes the scale node keep the interpolation of the input it receives, and makes the pixelate node changes the interpolation to nearest. In effect, for non-pixelation use cases, the default bilinear interpolation will be used, and for pixelation use cases, the nearest interpolation will be used unless explicitly specified using a node that sets the interpolation.
This commit is contained in:
parent
cbe1c1474b
commit
1a9480cf25
|
@ -28,7 +28,7 @@ struct RealizationOptions {
|
|||
* result involves projecting it on a different domain, which in turn, involves sampling the
|
||||
* result at arbitrary locations, the interpolation identifies the method used for computing the
|
||||
* value at those arbitrary locations. */
|
||||
Interpolation interpolation = Interpolation::Nearest;
|
||||
Interpolation interpolation = Interpolation::Bilinear;
|
||||
/* If true, the result will be repeated infinitely along the horizontal axis when realizing the
|
||||
* result. If false, regions outside of bounds of the result along the horizontal axis will be
|
||||
* filled with zeros. */
|
||||
|
|
|
@ -36,7 +36,10 @@ class PixelateOperation : public NodeOperation {
|
|||
* matches its apparent size, that is, its size after the domain transformation. The pixelate
|
||||
* node has no effect if the input is scaled-up. See the compute_domain method for more
|
||||
* information. */
|
||||
get_input("Color").pass_through(get_result("Color"));
|
||||
Result &result = get_result("Color");
|
||||
get_input("Color").pass_through(result);
|
||||
|
||||
result.get_realization_options().interpolation = Interpolation::Nearest;
|
||||
}
|
||||
|
||||
/* Compute a smaller-sized domain that matches the apparent size of the input while having a unit
|
||||
|
|
|
@ -88,7 +88,6 @@ class ScaleOperation : public NodeOperation {
|
|||
get_translation(), 0.0f, get_scale());
|
||||
|
||||
result.transform(transformation);
|
||||
result.get_realization_options().interpolation = Interpolation::Bilinear;
|
||||
}
|
||||
|
||||
float2 get_scale()
|
||||
|
|
Loading…
Reference in New Issue