![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>
> No, I don't think so...! Still, there's no time like the present - my
best
> defence here, as elsewhere, is probably laziness. That, and the fact that
> the scene was created for a purpose (to illustrate certain features of the
> Spline Macro File in an attractive way) which I think it serves.
>
> For the most accurate results, I could have defined a spline that followed
> the shape of the weft, weaving around each spine of the basket's profile,
> adding semi-random variations for thickness and stiffness, etc. Instead,
as
> I descried in povray.advanced-users, the entire basket is constructed
using
> just four splines, and the weft using a single circular spline - and I can
> still say I'm happy with the result!
>
I think the green "imperfections" are just fine, mimicing the seam on real
weaving. The red marks just look funny.
adding semi-random variations... how can we manage that with your macro?
Iterate the basic shape and peterb a tad? Use blobs so everything flows
together nicely instead of torii which have to match the spec?
--John
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Chris Colefax
Subject: Re: Basket-weaving (fun with spline objects)
Date: 15 Jan 2001 19:18:52
Message: <3a63936c@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
John M. Dlugosz <joh### [at] dlugosz com> wrote:
> I think the green "imperfections" are just fine, mimicing the seam on real
> weaving. The red marks just look funny.
>
> adding semi-random variations... how can we manage that with your macro?
> Iterate the basic shape and peterb a tad? Use blobs so everything flows
> together nicely instead of torii which have to match the spec?
The Spline Macro File offers the framework in which to create your own,
completely custom spline-based object creation routines, without having to
worry about looping through and evaluating the spline itself (if you don't
want to). This can include perturbing the shape of the spline and using
blobs, or using the torus_arc () sub macro with semi-random parameters. Or,
you could algorithmically define a spline that followed the exact shape of
the weaving, e.g.:
#declare SplinePoints = array[NumberOfStruts*2]
#declare C = 0; #while (C < NumberOfStruts)
#declare SplinePoints[C] = [alternating sides of adjacent struts];
#declare C = C + 1;
#declare SplinePoints[C] = [direction of weave];
#declare C = C + 1; #end
#declare WeaveSpline = create_spline (SplinePoints,
create_hermite_spline)
Using the hermite spline option means we can set a list of points and spline
directions/tangents. In the loop that defines the points and tangents you
can add variations to either as you like.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
> Looks nice, though rather painful to model...getting those little
> irregularities is a lot easier in real life. Maybe use a macro to
> randomly adjust size of the reeds and add a little imperfection to the
> overall shape of the basket (the eval_pattern(), eval_pigment(), and
> vwarp() functions of MegaPOV might help here)...if you won't be looking
> at it too closely, you may get away with separate parts for the bottom
> and sides, and reeds that intersect each other, but you might want to
> avoid those shortcuts just for "purist" reasons...
Thanks for the pointers to eval... I'll look them up.
Here is a first cut at weaving. This is like the bottom of the basket photo
in a few important ways. I see the splines are rippled, though -- the
individual torii don't exactly line up, I guess. It's not like other macros
where the component shapes are designed to meet perfectly. I need a =lot=
of segments to make it smooth (enough), and the rendering slows down right
off the bat, so I suspect the bounding boxes aren't working as well as they
ought to.
--John
Post a reply to this message
Attachments:
Download 'test2.jpg' (14 KB)
Preview of image 'test2.jpg'
![test2.jpg](/povray.binaries.images/attachment/%3C3a63b5f4%241%40news.povray.org%3E/test2.jpg?preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Chris Colefax
Subject: Re: Basket-weaving (fun with spline objects)
Date: 16 Jan 2001 18:23:00
Message: <3a64d7d4@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
John M. Dlugosz <joh### [at] dlugosz com> wrote:
> Here is a first cut at weaving. This is like the bottom of the basket
photo
> in a few important ways. I see the splines are rippled, though -- the
> individual torii don't exactly line up, I guess. It's not like other
macros
> where the component shapes are designed to meet perfectly. I need a =lot=
> of segments to make it smooth (enough), and the rendering slows down right
> off the bat, so I suspect the bounding boxes aren't working as well as
they
> ought to.
Each torii segment starts with the tangent that the previous segment ended
with, so the results certainly should be smooth. This continuation of
tangents, however, can cause some rippling, like a sine wave along the
spline. This is precisely the effect I used in the original basket at the
beginning of this thread, and also for the attached render. This uses torus
pipe splines for the cross bars and weft, both with slightly randomised
starting tangents so they do ripple along their lengths.
As you can see in the code below, only one spline is used, a straight line
along the x-axis. Note also the spline continuity of 1 - this ensures a
regular spacing of spline points in time and space. Without the option, the
points will bunch up at the beginning and end of the spline (a natural
property of cubic splines).
If, however, you are using a spline that follows the shape of the weft up
and down between the bars, I might suggest you look at using blob splines -
these can be squashed and stretched, and many components (spline steps) can
be used with quite reasonable render times. If you cut and paste the
contents of the blob_spline () macro into your own macro, you can modify the
spline_object () code to randomise the position, size and/or orientation of
each component, reusing a single spline rather than declaring separate
splines for each weft.
// Code for attached render
#include "spline\spline.mcr"
#declare BSpline = create_spline (array[3] {-x*5, x*0, x*5},
spline_continuity (1))
#declare BTexture = texture {
pigment {rgb 1}
normal {wood -.02 scallop_wave turbulence .3 scale <.05, .05, .5>}
finish {brilliance .8 ambient .1 diffuse .8}
}
#declare R1 = seed(0);
union {
#declare X = -4.5; #while (X < 5)
union {torus_pipe_spline (BSpline,
spline_rotate (-y*90)
+ initial_torus_tangent (z + (<rand(R1), rand(R1),
rand(R1)>-.5)*.1)
+ spline_radius (.1)
+ spline_steps (int(3 + rand(R1)*5))
)
scale <1, .7, 1>
translate x*X
texture {BTexture translate <rand(R1), rand(R1), rand(R1)>*100}
}
#declare X = X + 1; #end
#declare T = 1;
#declare Z = -4.5; #while (Z < 5)
union {torus_pipe_spline (BSpline,
initial_torus_tangent (<1, .4, 0> + (<rand(R1), rand(R1),
rand(R1)>-.5)*.1)
+ spline_radius (.05)
+ spline_steps (10)
)
scale <1, T, 6>
translate z*Z
texture {BTexture rotate y*90 translate <rand(R1), rand(R1),
rand(R1)>*100}
}
#declare T = (T = 1 ? -1 : 1);
#declare Z = Z + 1; #end
}
Post a reply to this message
Attachments:
Download 'cc_weaving.jpg' (33 KB)
Preview of image 'cc_weaving.jpg'
![cc_weaving.jpg](/povray.binaries.images/attachment/%3C3a64d7d4%40news.povray.org%3E/cc_weaving.jpg?preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: John M Dlugosz
Subject: Re: Basket-weaving (fun with spline objects)
Date: 16 Jan 2001 22:58:33
Message: <3a651869@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Chris, you sure make it look easy!
> Each torii segment starts with the tangent that the previous segment ended
> with, so the results certainly should be smooth. This continuation of
> tangents, however, can cause some rippling, like a sine wave along the
> spline.
I still don't understand what causes this. Look at this low-count version
(attached). I jumped to the conclusion that the ripples are caused by
having too few torus segments, and each ripple is one such segment. But,
they are regularly spaced, not bunched in the curved part. So that's not
it, is it?
When reading your tutorial, I had also assumed that the purpose of using the
torii was as a curve-fit for one segment, but now I don't understand how
that can be, since a torus only has one curve everywhere (making it
ellipitical, as I had been thinking, would distort the cross-section of the
pipe, too).
--John
Post a reply to this message
Attachments:
Download 'test3.jpg' (25 KB)
Preview of image 'test3.jpg'
![test3.jpg](/povray.binaries.images/attachment/%3C3a651869%40news.povray.org%3E/test3.jpg?preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Chris Colefax wrote:
> Each torii segment starts with the tangent that the previous segment ended
> with, so the results certainly should be smooth.
Just to nitpick: though not the same effect as the ripples we saw, this would
have the same problem as the "roundbox" and related shapes where it looks like
there is an irregularity in the surface. Essentially there is, because there's a
discontinuity in the curvature of the surface, it's most noticeable when a
highlight falls on the discontinuous area. But to make a truly smooth surface
would be needlessly complicated and probably slow to render.
--
David Fontaine <dav### [at] faricy net> ICQ 55354965
My raytracing gallery: http://davidf.faricy.net/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Chris Colefax
Subject: Re: Basket-weaving (fun with spline objects)
Date: 17 Jan 2001 18:40:13
Message: <3a662d5d@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
John M. Dlugosz <joh### [at] dlugosz com> wrote:
> Chris, you sure make it look easy!
>
> I still don't understand what causes this. Look at this low-count version
> (attached). I jumped to the conclusion that the ripples are caused by
> having too few torus segments, and each ripple is one such segment. But,
> they are regularly spaced, not bunched in the curved part. So that's not
> it, is it?
>
> When reading your tutorial, I had also assumed that the purpose of using
the
> torii was as a curve-fit for one segment, but now I don't understand how
> that can be, since a torus only has one curve everywhere (making it
> ellipitical, as I had been thinking, would distort the cross-section of
the
> pipe, too).
No, the torus pipe macro does not attempt to do any curve fitting. Instead,
it simply joins each pair of adjacent spline points with a circular arc,
maintaining the continuity of curvature from one arc to the next (regardless
of the spline's curvature). For the very first arc, we need a tangent, a
starting direction. By default, the initial tangent of the spline is used,
and with a suitable spline steps value this can create reasonably accurate,
fast rendering, completely smooth splines (example #1 in the attached
image).
The next two examples use the same number of spline steps, but with
different initial torus tangent options. Depending on how this is specified
and the number of spline steps, rippling can occur as in the middle example.
This rippling is precisely the effect I used in the previous renderings in
this thread, and this is why I wrote the torus pipe spline macro to behave
as it does.
If you want to use the torus pipe spline macro to smoothly follow a spline,
I'd suggest starting with a spline steps value equal to the number of spline
segments, and increasing it from there in multiples of the number of
segments. Otherwise, I'd again suggest blob splines (see the squid recently
posted under "More fun with spline objects") as an alternative.
Post a reply to this message
Attachments:
Download 'torus_spline_examples.jpg' (16 KB)
Preview of image 'torus_spline_examples.jpg'
![torus_spline_examples.jpg](/povray.binaries.images/attachment/%3C3a662d5d%40news.povray.org%3E/torus_spline_examples.jpg?preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
"John M. Dlugosz" wrote:
> When reading your tutorial, I had also assumed that the purpose of using the
> torii was as a curve-fit for one segment, but now I don't understand how
> that can be, since a torus only has one curve everywhere (making it
> ellipitical, as I had been thinking, would distort the cross-section of the
> pipe, too).
Precisely, two points and a tangent on one of them defines a circle, and the one
tangent comes from the previous segment. So curve-fitting would be impossible
with torical arcs.
--
David Fontaine <dav### [at] faricy net> ICQ 55354965
My raytracing gallery: http://davidf.faricy.net/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
And a realistic texture will add as much imperfection, anyway.
"David Fontaine" <dav### [at] faricy net> wrote in message
news:3A6527A9.E755B450@faricy.net...
> Chris Colefax wrote:
>
> > Each torii segment starts with the tangent that the previous segment
ended
> > with, so the results certainly should be smooth.
>
> Just to nitpick: though not the same effect as the ripples we saw, this
would
> have the same problem as the "roundbox" and related shapes where it looks
like
> there is an irregularity in the surface. Essentially there is, because
there's a
> discontinuity in the curvature of the surface, it's most noticeable when a
> highlight falls on the discontinuous area. But to make a truly smooth
surface
> would be needlessly complicated and probably slow to render.
>
> --
> David Fontaine <dav### [at] faricy net> ICQ 55354965
> My raytracing gallery: http://davidf.faricy.net/
>
>
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
I see the algorithm now. A torus is not really a good curve-fit for a
straight-ish curve, but cylinders would not work since they don't bend at
all. If you want undilations, like when you specify the starting tangent,
the effect is intentional and beautiful, and the spline just specifies the
positions of the links, not the overall shape.
I suppose a shape that is to a parabola as a torus is to a circle would be
good for curve fitting, making a smooth curve with very few segments.
"Chris Colefax" <chr### [at] tag povray org> wrote in message
news:3a662d5d@news.povray.org...
> John M. Dlugosz <joh### [at] dlugosz com> wrote:
> > Chris, you sure make it look easy!
> >
> > I still don't understand what causes this. Look at this low-count
version
> > (attached). I jumped to the conclusion that the ripples are caused by
> > having too few torus segments, and each ripple is one such segment.
But,
> > they are regularly spaced, not bunched in the curved part. So that's
not
> > it, is it?
> >
> > When reading your tutorial, I had also assumed that the purpose of using
> the
> > torii was as a curve-fit for one segment, but now I don't understand how
> > that can be, since a torus only has one curve everywhere (making it
> > ellipitical, as I had been thinking, would distort the cross-section of
> the
> > pipe, too).
>
> No, the torus pipe macro does not attempt to do any curve fitting.
Instead,
> it simply joins each pair of adjacent spline points with a circular arc,
> maintaining the continuity of curvature from one arc to the next
(regardless
> of the spline's curvature). For the very first arc, we need a tangent, a
> starting direction. By default, the initial tangent of the spline is
used,
> and with a suitable spline steps value this can create reasonably
accurate,
> fast rendering, completely smooth splines (example #1 in the attached
> image).
>
> The next two examples use the same number of spline steps, but with
> different initial torus tangent options. Depending on how this is
specified
> and the number of spline steps, rippling can occur as in the middle
example.
> This rippling is precisely the effect I used in the previous renderings in
> this thread, and this is why I wrote the torus pipe spline macro to behave
> as it does.
>
> If you want to use the torus pipe spline macro to smoothly follow a
spline,
> I'd suggest starting with a spline steps value equal to the number of
spline
> segments, and increasing it from there in multiples of the number of
> segments. Otherwise, I'd again suggest blob splines (see the squid
recently
> posted under "More fun with spline objects") as an alternative.
>
>
>
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |