![](/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) |
Hi everyone,
Years ago, somebody posted a swirly pigment. It resembled the swirls you
see in clouds sometimes. I have tried looking for the code many times,
but to no avail. The code has been lost.
Every once in a while I try to recreate that code using pigment
functions. Every time I've tried, I've failed. Until today.
I based my work on the premise that the target pattern must be
translated according to another pattern, in this case crackle form x.
What I have arrived at must be different from the aforementioned
poster's code, since his tended to have small gray boxes right at the
center of each crackle cell. There is no such artifact in my code, and I
can't be sure just how close my effect comes to his.
Here is some code:
#macro pcc(pgmt, Mod)
#local pgmt2=function{pigment{pgmt}}
#local pg1=
function{
pigment{
crackle form x
scale .25
}
}
pigment_pattern{
function{
pgmt2(
(pow(pg1(x+Mod,y,z).grey,2)-pow(pg1(x-Mod,y,z).grey,2))/(Mod*64),
(pow(pg1(x,y+Mod,z).grey,2)-pow(pg1(x,y-Mod,z).grey,2))/(Mod*64),
z
).grey
}
}
#end
#declare my_pigment=
pigment{
pcc(
pigment{
spiral1 1
sine_wave frequency 1
scale .125
}
,.085
)
}
The macro takes two arguments. The first is the pigment you wish to have
copied into each crackle cell. The second indicates how sharp you want
the edges to be. Smaller values = sharper edges. The macro returns a
pigment_pattern, so it can be used in any pattern block (pigment,
normal, texture, etc.)
I hope some of you find a use for this. I had hoped to use it for making
height fields. I'll post any interesting results I might get.
Sam
Post a reply to this message
Attachments:
Download 'pcc1.jpg' (123 KB)
Preview of image 'pcc1.jpg'
![pcc1.jpg](/povray.binaries.images/attachment/%3C488e5300%40news.povray.org%3E/pcc1.jpg?ttop=443866&toff=3100&preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Paolo Gibellini
Subject: Re: Copying pigments with crackle (124k jpg)
Date: 29 Jul 2008 04:20:43
Message: <488ed2db$1@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Mmmm...
Interesting pigment: to be evaluated...
;-)
Paolo
>stbenge on date 29/07/2008 01:14 wrote:
> Hi everyone,
>
> Years ago, somebody posted a swirly pigment. It resembled the swirls you
> see in clouds sometimes. I have tried looking for the code many times,
> but to no avail. The code has been lost.
>
> Every once in a while I try to recreate that code using pigment
> functions. Every time I've tried, I've failed. Until today.
>
> I based my work on the premise that the target pattern must be
> translated according to another pattern, in this case crackle form x.
> What I have arrived at must be different from the aforementioned
> poster's code, since his tended to have small gray boxes right at the
> center of each crackle cell. There is no such artifact in my code, and I
> can't be sure just how close my effect comes to his.
>
> Here is some code:
>
> #macro pcc(pgmt, Mod)
> #local pgmt2=function{pigment{pgmt}}
> #local pg1=
> function{
> pigment{
> crackle form x
> scale .25
> }
> }
> pigment_pattern{
> function{
> pgmt2(
> (pow(pg1(x+Mod,y,z).grey,2)-pow(pg1(x-Mod,y,z).grey,2))/(Mod*64),
> (pow(pg1(x,y+Mod,z).grey,2)-pow(pg1(x,y-Mod,z).grey,2))/(Mod*64),
> z
> ).grey
> }
> }
> #end
>
> #declare my_pigment=
> pigment{
> pcc(
> pigment{
> spiral1 1
> sine_wave frequency 1
> scale .125
> }
> ,.085
> )
> }
>
> The macro takes two arguments. The first is the pigment you wish to have
> copied into each crackle cell. The second indicates how sharp you want
> the edges to be. Smaller values = sharper edges. The macro returns a
> pigment_pattern, so it can be used in any pattern block (pigment,
> normal, texture, etc.)
>
> I hope some of you find a use for this. I had hoped to use it for making
> height fields. I'll post any interesting results I might get.
>
> Sam
>
> ------------------------------------------------------------------------
>
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) |
This is really nifty, I'm trying to bend my brain around how it works :)
This reminds me of something I ran into a while back that Rune Johansen
did with pigments, though I think the methods are different:
http://runevision.com/3d/povgoodies/#216
I haven't tried it, but it might be slightly faster if you eliminate
some interim pigments and some of the grayscale conversions, and return
the function:
#macro pcc(pgmt, Mod)
#local pgmt2 =
function{
pattern {
pigment_pattern {pgmt}
}
}
#local pg1=
function{
pattern {
crackle form x
scale .25
}
}
function{
pgmt2(
(pow(pg1(x+Mod,y,z),2)-pow(pg1(x-Mod,y,z),2))/(Mod*64),
(pow(pg1(x,y+Mod,z),2)-pow(pg1(x,y-Mod,z),2))/(Mod*64),
z
)
}
#end
Just a possibility.
--
-The Mildly Infamous Blue Herring
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: stbenge
Subject: Re: Copying pigments with crackle (124k jpg)
Date: 29 Jul 2008 16:34:06
Message: <488f7ebe@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Blue Herring wrote:
> This is really nifty, I'm trying to bend my brain around how it works :)
To be honest, I only have a vague idea myself, though I still managed to
get what I was after... Perhaps my subconscious mind knows all the
details...
> This reminds me of something I ran into a while back that Rune Johansen
> did with pigments, though I think the methods are different:
> http://runevision.com/3d/povgoodies/#216
Yeah, that's not the same at all. I think those patterns may use
functions as well, or possibly pattern warps or looped pigment_maps.
> I haven't tried it, but it might be slightly faster if you eliminate
> some interim pigments and some of the grayscale conversions, and return
> the function:
Thanks for pointing that out! Here's an updated version of the macro:
#macro pcc(pgmt, Mod)
#local pgmt2 =
function{
pattern{
pigment_pattern {pgmt}
}
}
#local pg1=
function{
pattern{
crackle form x*.75
}
}
function{
pgmt2(
(pow(pg1(x+Mod,y,z),2)-pow(pg1(x-Mod,y,z),2))/(Mod*1.2),
(pow(pg1(x,y+Mod,z),2)-pow(pg1(x,y-Mod,z),2))/(Mod*1.2),
(pow(pg1(x,y,z+Mod),2)-pow(pg1(x,y,z-Mod),2))/(Mod*1.2)
)
}
#end
It now works in all three dimensions, and the underlying crackle pattern
is scaled 100%, allowing you to do stuff like this more easily:
plane{z,0
pigment{
crackle
pigment_map{
[0 rgb 0]
[.5
pcc(
pigment{
spiral1 1 sine_wave scale 0.75
}
,.00001
)
color_map{[0 rgb<0,.3,.4>][1 rgb<.5,1,.75>]}
]
}
}
}
Sam
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) |
Awesome! I wanted something like that ages ago when I did my procedural
crackle based city. I couldn't figure out how to do it. Now I'm just trying
to understand your code!
Is there any way to make it work with metric 1?
--
Tek
http://evilsuperbrain.com
"stbenge" <THI### [at] hotmail com> wrote in message
news:488e5300@news.povray.org...
> Hi everyone,
>
> Years ago, somebody posted a swirly pigment. It resembled the swirls you
> see in clouds sometimes. I have tried looking for the code many times,
> but to no avail. The code has been lost.
>
> Every once in a while I try to recreate that code using pigment
> functions. Every time I've tried, I've failed. Until today.
>
> I based my work on the premise that the target pattern must be
> translated according to another pattern, in this case crackle form x.
> What I have arrived at must be different from the aforementioned
> poster's code, since his tended to have small gray boxes right at the
> center of each crackle cell. There is no such artifact in my code, and I
> can't be sure just how close my effect comes to his.
>
> Here is some code:
>
> #macro pcc(pgmt, Mod)
> #local pgmt2=function{pigment{pgmt}}
> #local pg1=
> function{
> pigment{
> crackle form x
> scale .25
> }
> }
> pigment_pattern{
> function{
> pgmt2(
> (pow(pg1(x+Mod,y,z).grey,2)-pow(pg1(x-Mod,y,z).grey,2))/(Mod*64),
> (pow(pg1(x,y+Mod,z).grey,2)-pow(pg1(x,y-Mod,z).grey,2))/(Mod*64),
> z
> ).grey
> }
> }
> #end
>
> #declare my_pigment=
> pigment{
> pcc(
> pigment{
> spiral1 1
> sine_wave frequency 1
> scale .125
> }
> ,.085
> )
> }
>
> The macro takes two arguments. The first is the pigment you wish to have
> copied into each crackle cell. The second indicates how sharp you want
> the edges to be. Smaller values = sharper edges. The macro returns a
> pigment_pattern, so it can be used in any pattern block (pigment,
> normal, texture, etc.)
>
> I hope some of you find a use for this. I had hoped to use it for making
> height fields. I'll post any interesting results I might get.
>
> Sam
>
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) |
Using the code modified to work in three dimensions, I applied a
radiating crackle pattern to each cell. The resulting isosurface
resembles aragonite.
Don't mind the really low-quality aa settings. Isosurfaces render very
slowly...
Sam
Post a reply to this message
Attachments:
Download 'crystal_mass.jpg' (63 KB)
Preview of image 'crystal_mass.jpg'
![crystal_mass.jpg](/povray.binaries.images/attachment/%3C488f9aa2%40news.povray.org%3E/crystal_mass.jpg?ttop=443866&toff=3100&preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: stbenge
Subject: Re: Copying pigments with crackle (124k jpg)
Date: 29 Jul 2008 18:36:13
Message: <488f9b5d@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Tek wrote:
> Awesome! I wanted something like that ages ago when I did my procedural
> crackle based city. I couldn't figure out how to do it. Now I'm just trying
> to understand your code!
It pays off to keep trying. I can't tell you how many times I've tried
to get this to work.
> Is there any way to make it work with metric 1?
Yes, you can get some interesting effects. Here, try this out:
#macro pcc(pgmt, Mod)
#local pgmt2 =
function{
pattern{
pigment_pattern {pgmt}
}
}
#local pg1=
function{
pattern{
crackle form x*.75
metric 1
}
}
function{
pgmt2(
(pow(pg1(x+Mod,y,z),2)-pow(pg1(x-Mod,y,z),2))/(Mod*1.2),
(pow(pg1(x,y+Mod,z),2)-pow(pg1(x,y-Mod,z),2))/(Mod*1.2),
(pow(pg1(x,y,z+Mod),2)-pow(pg1(x,y,z-Mod),2))/(Mod*1.2)
)
}
#end
plane{z,0
pigment{
pcc(
pigment{
radial rotate x*90+z*45
triangle_wave frequency 2
color_map{[0 rgb 0][1 rgb 1]}
}
,.05
)
}
}
It makes rectangular masses all over the place. Nest a few of those with
different translation values, and a cityscape might be possible.
Sam
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) |
"stbenge" <THI### [at] hotmail com> wrote in message
news:488f9b5d@news.povray.org...
> Tek wrote:
>> Awesome! I wanted something like that ages ago when I did my procedural
>> crackle based city. I couldn't figure out how to do it. Now I'm just
>> trying to understand your code!
>
> It pays off to keep trying. I can't tell you how many times I've tried to
> get this to work.
>
>> Is there any way to make it work with metric 1?
>
> Yes, you can get some interesting effects. Here, try this out:
Yeah but it distorts the pattern, one of the things that's great about your
first post is that it duplicates my pattern into every cell, but with metric
one it breaks it.
> It makes rectangular masses all over the place. Nest a few of those with
> different translation values, and a cityscape might be possible.
I've already got the city:
http://news.povray.org/povray.binaries.images/thread/%3C47e997a1%40news.povray.org%3E/?ttop=280683&toff=150
But I really need a perpendicular pattern to the crackle, something like the
radial example in your original post, but perpendicular to metric 1.
I don't think it's possible though :(
--
Tek
http://evilsuperbrain.com
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) |
stbenge napsal(a):
> Using the code modified to work in three dimensions, I applied a
> radiating crackle pattern to each cell. The resulting isosurface
> resembles aragonite.
>
> Don't mind the really low-quality aa settings. Isosurfaces render very
> slowly...
>
> Sam
>
> ------------------------------------------------------------------------
>
beautiful. There are a few disconnected speckles but these may be
difficult to remove.
--
the ultimate time-killer:
+a0.0 +am2 +r9
Johnny D
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) |
Jan Dvorak wrote:
> beautiful. There are a few disconnected speckles but these may be
> difficult to remove.
Thanks. Yeah, those disconnected parts are always hard to remove.
Sam
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) |