On 2016-07-19 23:16:48 +0000, clipka said:
Ok, folks -- I've just submitted an update to the macro caching
mechanism. The 64k (Windows) / 0.5k (Linux) buffer is now bypassed,
further increasing the parsing speed of Thomas' demo scene on my machine
from 60 to 50 seconds.
Please test intensively.
And on Macintosh:
- 3.7.0
allInside: 32,957 sec
allOutside: 96,369 sec
rodOutsideRandInside: 481,025 sec !! (8minutes)
- av155
allInside: 37,021 sec
allOutside: 36,480 sec
rodOutsideRandInside: 36,869 sec
Files used:
// Persistence of Vision Ray Tracer Scene Description File
// File: Clipka_cached macros_test.pov
// Vers: 3.7.1 Cached Macros version
// Desc: Basic Scene Example
// Date: mm/dd/yy
// Auth: ?
//
#version 3.7;
#include "colors.inc"
#declare allInside = 1;
#declare allOutside = 2;
#declare rodOutsideRandInside = 3;
#declare MacroType = allInside;
#if ( (MacroType = allInside) | (MacroType = rodOutsideRandInside))
#debug "\nRand inside"
#macro VRand_In_Box(Mn, Mx, RS) (< rand(RS), rand(RS), rand(RS)>*(Mx-Mn) + Mn) #end
#macro RRand(Min, Max, RS) (rand(RS)*(Max-Min) + Min) #end
#macro VRand_In_Obj(Obj, RS)
#local Mn = min_extent(Obj);
#local Mx = max_extent(Obj);
#local Pt = VRand_In_Box(Mn, Mx, RS);
#local J = 0;
#while(inside(Obj, Pt) = 0 & J < 1000)
#local Pt = VRand_In_Box(Mn, Mx, RS);
#local J = J + 1;
#end
(Pt)
#end
#end //if (MacroType = allInside || MacroType = rodOutsideRandInside)
#if (MacroType = allInside )
#debug "\nRod inside"
#macro Rods()
#ifndef(Box)
#declare Box =
box {
<-10, 0, -10>,<10, 0.2, 10>
translate 10*y
}
#declare Rand = seed(1101);
#end //#ifndef(Box)
#declare Norm = <0, 0, 0>;
#declare Start = VRand_In_Obj(Box, Rand);
#declare Pos = trace (Surface, Start, -y, Norm);
#declare Cyl =
cylinder {
0, <0,1,0>, 0.05
scale <1, RRand(0.5, 1.5, Rand), 1>
translate Pos
pigment {srgb <RRand(0.1, 0.9, Rand), RRand(0.1, 0.9, Rand), RRand(0.1, 0.9, Rand)>}
}
#end // #macro Rods()
#end //#if (MacroType = allInside || MacroType = allOutside)
#if (MacroType = allOutside | MacroType = rodOutsideRandInside)
#include "rods.inc"
#end
global_settings {
assumed_gamma 1.0
}
// ----------------------------------------
camera {
location <0.0, 5, -40.0>
direction 1.5*z
right x*image_width/image_height
look_at <0.0, 0.0, 0.0>
}
sky_sphere {
pigment {
gradient y
color_map {
[0.0 srgb <0.6,0.7,1.0>*1.3]
[0.7 srgb <0.0,0.1,0.8>*1.3]
}
}
}
light_source {
<0, 0, 0> // light's position (translated below)
color rgb <1, 1, 1> // light's color
translate <-3, 3, -3>*1000
}
// ----------------------------------------
#declare Surface =
plane {
y, 0
pigment { color srgb <0.7, 0.5, 0.3> }
}
object {Surface}
#declare I=0;
#for (I, 0, 1000000)
Rods()
object {Cyl}
#if (mod(I,10000) = 0)
#debug concat("\nRods: ", str(I,4,0))
#end
#end
----------------------------------------------------------------------------------------------------------------------
//File: rods.inc
#if (MacroType = allOutside)
#debug "\nRand outside"
#macro VRand_In_Box(Mn, Mx, RS) (< rand(RS), rand(RS), rand(RS)>*(Mx-Mn) + Mn) #end
#macro RRand(Min, Max, RS) (rand(RS)*(Max-Min) + Min) #end
#macro VRand_In_Obj(Obj, RS)
#local Mn = min_extent(Obj);
#local Mx = max_extent(Obj);
#local Pt = VRand_In_Box(Mn, Mx, RS);
#local J = 0;
#while(inside(Obj, Pt) = 0 & J < 1000)
#local Pt = VRand_In_Box(Mn, Mx, RS);
#local J = J + 1;
#end
(Pt)
#end //#macro VRand_In_Obj(Obj, RS)
#end //#if (MacroType = allOutside)
#if (MacroType = allOutside | (MacroType = rodOutsideRandInside))
#debug "\nRod outside"
#macro Rods()
#ifndef(Box)
#declare Box =
box {
<-10, 0, -10>,<10, 0.2, 10>
translate 10*y
}
#declare Rand = seed(1101);
#end
#declare Norm = <0, 0, 0>;
#declare Start = VRand_In_Obj(Box, Rand);
#declare Pos = trace (Surface, Start, -y, Norm);
#declare Cyl =
cylinder {
0, <0,1,0>, 0.05
scale <1, RRand(0.5, 1.5, Rand), 1>
translate Pos
pigment {srgb <RRand(0.1, 0.9, Rand), RRand(0.1, 0.9, Rand), RRand(0.1, 0.9, Rand)>}
}
#end
#end
--
-------------------------------------------------------------------------------------------
POV-Ray 3.7 unofficial: http://megapov.inetart.net/povrayunofficial_mac/
UberPOV Mac: http://megapov.inetart.net/uberpov_mac/index.html#Mac
MegaPOV: http://megapov.inetart.net
E-mail: yvo(DOT)s(AT)gmx.net