POV-Ray : Newsgroups : povray.binaries.images : I've seen the light! Server Time
7 Nov 2024 06:24:29 EST (-0500)
  I've seen the light! (Message 1 to 10 of 32)  
Goto Latest 10 Messages Next 10 Messages >>>
From: clipka
Subject: I've seen the light!
Date: 1 Dec 2016 10:07:50
Message: <58403cc6@news.povray.org>
Hi folks,

another variant of POV-Ray has seen the light of day. Please welcome...
(Ta-da!)

    MiniPOV
    =======

A truly minimalistic version of POV-Ray that works without all the stuff
nobody really needs: The Virtual Front-End module, the front-end module,
the message-massing layer, the user-defined functions virtual machine,
the back-end thread control module -- heck, even the parser had to go.

Because let's face it: All we really need is a bare-bones render engine.
We'll hack in the scene description in C++, and re-compile the binary
every time we make a change. And who needs fancy image output when we
can have a text mode preview?

And guess what: It works! YAY! :D


There's a serious background to this though: That sorry little excuse of
a renderer will serve as a testbed to find out how successful I've been
in separating POV-Ray's modules. With the project set up entirely from
scratch, all it uses from the official projects is the source code of
the base module and core render engine module.

Turns out the core module is already better than I had feared. Still, it
has highlighted various issues that still need sorting out -- mostly
expected (such as failure to set various default values upon object
construction), but a few I did not expect, like some compile-time config
settings that don't come with defaults.


Post a reply to this message


Attachments:
Download 'minipov.png' (9 KB)

Preview of image 'minipov.png'
minipov.png


 

From: scott
Subject: Re: I've seen the light!
Date: 1 Dec 2016 12:16:40
Message: <58405af8$1@news.povray.org>
> Turns out the core module is already better than I had feared. Still, it
> has highlighted various issues that still need sorting out -- mostly
> expected (such as failure to set various default values upon object
> construction), but a few I did not expect, like some compile-time config
> settings that don't come with defaults.

I guess you noticed already, but your checkered plane didn't seem to 
work properly either ;-)


Post a reply to this message

From: Jörg "Yadgar" Bleimann
Subject: Re: I've seen the light!
Date: 1 Dec 2016 13:10:10
Message: <58406782$1@news.povray.org>
Hi(gh)!

On 01.12.2016 16:07, clipka wrote:
> Hi folks,
>
> another variant of POV-Ray has seen the light of day. Please welcome...
> (Ta-da!)
>
>     MiniPOV
>     =======
>
> A truly minimalistic version of POV-Ray that works without all the stuff
> nobody really needs: The Virtual Front-End module, the front-end module,
> the message-massing layer, the user-defined functions virtual machine,
> the back-end thread control module -- heck, even the parser had to go.
>
> Because let's face it: All we really need is a bare-bones render engine.
> We'll hack in the scene description in C++, and re-compile the binary
> every time we make a change. And who needs fancy image output when we
> can have a text mode preview?
>
> And guess what: It works! YAY! :D

This is how POV-Ray should look on the Commodore 64! Block graphic font 
in 40 by 25 characters! No image bigger than 1000 bytes!

Retrocomputing rules! There should be a POV-Ray version for each of the 
1980s' 8-bit classic machines!

See you in Khyberspace!

Yadgar


Post a reply to this message

From: clipka
Subject: Re: I've seen the light!
Date: 1 Dec 2016 14:26:33
Message: <58407969$1@news.povray.org>
Am 01.12.2016 um 18:16 schrieb scott:
>> Turns out the core module is already better than I had feared. Still, it
>> has highlighted various issues that still need sorting out -- mostly
>> expected (such as failure to set various default values upon object
>> construction), but a few I did not expect, like some compile-time config
>> settings that don't come with defaults.
> 
> I guess you noticed already, but your checkered plane didn't seem to
> work properly either ;-)

Bah - checkered planes are for wussies. I'm much more worried about the
gamma handling... ;)


Post a reply to this message


Attachments:
Download 'minipov.png' (17 KB)

Preview of image 'minipov.png'
minipov.png


 

From: Cousin Ricky
Subject: Re: I've seen the light!
Date: 1 Dec 2016 14:30:01
Message: <web.584079e760a82d8ee8ae267f0@news.povray.org>
=?UTF-8?Q?J=c3=b6rg_=22Yadgar=22_Bleimann?= <yaz### [at] gmxde> wrote:
> This is how POV-Ray should look on the Commodore 64! Block graphic font
> in 40 by 25 characters! No image bigger than 1000 bytes!
>
> Retrocomputing rules! There should be a POV-Ray version for each of the
> 1980s' 8-bit classic machines!

Apple II: 280 x 192 (effective color resolution 140 x 192), 6 colors

TRaSh 80: 80 x 24 (IIRC), black and white

IBM PC-XT with CGA: 320 x 200, 4 colors unevenly distributed on the color wheel

P.S.  Examining the IBM CGA color selections, it was clear that it was designed
for engineering shortcuts rather than for the end user.  This would not be the
first time IBM chose an engineering shortcut over utility: their RANDU
pseudorandom number generator was a clever hack that saved many CPU cycles, and
churned out a stream that was horrifyingly non-random, even by LCG standards.
(Imagine running a simulation on that system, getting it published in a
peer-reviewed scientific journal, and then discovering that your entire study is
utterly worthless because some engineer over at IBM cleverly solved the wrong
problem.)


Post a reply to this message

From: clipka
Subject: Re: I've seen the light!
Date: 1 Dec 2016 14:37:49
Message: <58407c0d$1@news.povray.org>
Am 01.12.2016 um 20:26 schrieb clipka:
> Am 01.12.2016 um 18:16 schrieb scott:
>>> Turns out the core module is already better than I had feared. Still, it
>>> has highlighted various issues that still need sorting out -- mostly
>>> expected (such as failure to set various default values upon object
>>> construction), but a few I did not expect, like some compile-time config
>>> settings that don't come with defaults.
>>
>> I guess you noticed already, but your checkered plane didn't seem to
>> work properly either ;-)
> 
> Bah - checkered planes are for wussies. I'm much more worried about the
> gamma handling... ;)

BTW, here's a demonstration of why I think general-purpose programming
languages are ill-suited for scene description:

	pov::Sphere* pSphere(new pov::Sphere);
	pSphere->Center = pov::Vector3d(0,0,0);
	pSphere->Radius = 1;
	pSphere->Texture = new pov::TEXTURE();
	pSphere->Texture->Type = pov::PLAIN_PATTERN; // TODO shouldn't need this
	pSphere->Texture->Pigment = new pov::PIGMENT();
	pSphere->Texture->Pigment->Type = pov::PLAIN_PATTERN; // TODO shouldn't
need this
	pSphere->Texture->Pigment->colour =
pov_base::TransColour(pov_base::MathColour(1));
	pSphere->Texture->Finish = new pov::FINISH();
	pSphere->Texture->Finish->Ambient = pov_base::MathColour(0.05);
	pSphere->Texture->Finish->Diffuse = 0.1;
	pSphere->Texture->Finish->Brilliance = 1.0;
	pSphere->Texture->Finish->BrillianceAdjust = 1.0;
	pSphere->Texture->Finish->Specular = 2.0;
	pSphere->Texture->Finish->Roughness = 100;
	pSphere->Texture->Finish->Reflection_Min = pov::MathColour(0.0);
	pSphere->Texture->Finish->Reflection_Max = pov::MathColour(1.0);
	pSphere->Texture->Finish->Reflect_Exp = 1.0;
	pSphere->Texture->Finish->Reflect_Metallic = true;
	pSphere->Texture->Finish->Reflection_Fresnel = false;
	pScene->objects.push_back(pSphere);

	pov::Plane* pPlane(new pov::Plane);
	pPlane->Normal_Vector = pov::Vector3d(0, 1, 0).normalized();
	pPlane->Distance = 1;
	pPlane->Texture = new pov::TEXTURE();
	pPlane->Texture->Type = pov::PLAIN_PATTERN;
	pPlane->Texture->Pigment = new pov::PIGMENT();
	pPlane->Texture->Pigment->Type = pov::GENERIC_PATTERN;
	pPlane->Texture->Pigment->pattern = pov::PatternPtr(new
pov::CheckerPattern);
	pov::ColourBlendMap* pCheckerMap(new pov::ColourBlendMap);
	pov::ColourBlendMapEntry CheckerMapEntry;
	CheckerMapEntry.value = 0;
	CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(0, 0,
0, 0, 0));
	pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
	CheckerMapEntry.value = 1;
	CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(1, 1,
1, 0, 0));
	pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
	pPlane->Texture->Pigment->Blend_Map =
pov::GenericPigmentBlendMapPtr(pCheckerMap);
	pPlane->Texture->Finish = new pov::FINISH();
	pPlane->Texture->Finish->Ambient = pov_base::MathColour(0.1);
	pPlane->Texture->Finish->Diffuse = 0.7;
	pPlane->Texture->Finish->Brilliance = 1.0;
	pPlane->Texture->Finish->BrillianceAdjust = 1.0;
	pPlane->Texture->Finish->Specular = 0.0;
	pPlane->Texture->Finish->Roughness = 100;
	pScene->objects.push_back(pPlane);

	pov::LightSource* pLight(new pov::LightSource);
	pLight->Center = pov::Vector3d(-1, 1, 1).normalized() * 100;
	pLight->colour = pov_base::MathColour(0.7);
	pLight->index = 0; // TODO shouldn't need this
	pScene->lightSources.push_back(pLight);

Yup, that's just a plain simple RSOCP scene.


Post a reply to this message

From: Mike Horvath
Subject: Re: I've seen the light!
Date: 1 Dec 2016 15:24:37
Message: <58408705$1@news.povray.org>
On 12/1/2016 2:37 PM, clipka wrote:
> Am 01.12.2016 um 20:26 schrieb clipka:
>> Am 01.12.2016 um 18:16 schrieb scott:
>>>> Turns out the core module is already better than I had feared. Still, it
>>>> has highlighted various issues that still need sorting out -- mostly
>>>> expected (such as failure to set various default values upon object
>>>> construction), but a few I did not expect, like some compile-time config
>>>> settings that don't come with defaults.
>>>
>>> I guess you noticed already, but your checkered plane didn't seem to
>>> work properly either ;-)
>>
>> Bah - checkered planes are for wussies. I'm much more worried about the
>> gamma handling... ;)
>
> BTW, here's a demonstration of why I think general-purpose programming
> languages are ill-suited for scene description:
>
> 	pov::Sphere* pSphere(new pov::Sphere);
> 	pSphere->Center = pov::Vector3d(0,0,0);
> 	pSphere->Radius = 1;
> 	pSphere->Texture = new pov::TEXTURE();
> 	pSphere->Texture->Type = pov::PLAIN_PATTERN; // TODO shouldn't need this
> 	pSphere->Texture->Pigment = new pov::PIGMENT();
> 	pSphere->Texture->Pigment->Type = pov::PLAIN_PATTERN; // TODO shouldn't
> need this
> 	pSphere->Texture->Pigment->colour =
> pov_base::TransColour(pov_base::MathColour(1));
> 	pSphere->Texture->Finish = new pov::FINISH();
> 	pSphere->Texture->Finish->Ambient = pov_base::MathColour(0.05);
> 	pSphere->Texture->Finish->Diffuse = 0.1;
> 	pSphere->Texture->Finish->Brilliance = 1.0;
> 	pSphere->Texture->Finish->BrillianceAdjust = 1.0;
> 	pSphere->Texture->Finish->Specular = 2.0;
> 	pSphere->Texture->Finish->Roughness = 100;
> 	pSphere->Texture->Finish->Reflection_Min = pov::MathColour(0.0);
> 	pSphere->Texture->Finish->Reflection_Max = pov::MathColour(1.0);
> 	pSphere->Texture->Finish->Reflect_Exp = 1.0;
> 	pSphere->Texture->Finish->Reflect_Metallic = true;
> 	pSphere->Texture->Finish->Reflection_Fresnel = false;
> 	pScene->objects.push_back(pSphere);
>
> 	pov::Plane* pPlane(new pov::Plane);
> 	pPlane->Normal_Vector = pov::Vector3d(0, 1, 0).normalized();
> 	pPlane->Distance = 1;
> 	pPlane->Texture = new pov::TEXTURE();
> 	pPlane->Texture->Type = pov::PLAIN_PATTERN;
> 	pPlane->Texture->Pigment = new pov::PIGMENT();
> 	pPlane->Texture->Pigment->Type = pov::GENERIC_PATTERN;
> 	pPlane->Texture->Pigment->pattern = pov::PatternPtr(new
> pov::CheckerPattern);
> 	pov::ColourBlendMap* pCheckerMap(new pov::ColourBlendMap);
> 	pov::ColourBlendMapEntry CheckerMapEntry;
> 	CheckerMapEntry.value = 0;
> 	CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(0, 0,
> 0, 0, 0));
> 	pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
> 	CheckerMapEntry.value = 1;
> 	CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(1, 1,
> 1, 0, 0));
> 	pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
> 	pPlane->Texture->Pigment->Blend_Map =
> pov::GenericPigmentBlendMapPtr(pCheckerMap);
> 	pPlane->Texture->Finish = new pov::FINISH();
> 	pPlane->Texture->Finish->Ambient = pov_base::MathColour(0.1);
> 	pPlane->Texture->Finish->Diffuse = 0.7;
> 	pPlane->Texture->Finish->Brilliance = 1.0;
> 	pPlane->Texture->Finish->BrillianceAdjust = 1.0;
> 	pPlane->Texture->Finish->Specular = 0.0;
> 	pPlane->Texture->Finish->Roughness = 100;
> 	pScene->objects.push_back(pPlane);
>
> 	pov::LightSource* pLight(new pov::LightSource);
> 	pLight->Center = pov::Vector3d(-1, 1, 1).normalized() * 100;
> 	pLight->colour = pov_base::MathColour(0.7);
> 	pLight->index = 0; // TODO shouldn't need this
> 	pScene->lightSources.push_back(pLight);
>
> Yup, that's just a plain simple RSOCP scene.
>


Can't you use shorthand object notation?

pPlane =
{
	Texture =
	{
		Finish =
		{
			Ambient = pov_base::MathColour(0.1),
			Diffuse = 0.7,
			Brilliance = 1.0,
		}
	}
}

And so on...

Mike


Post a reply to this message

From: clipka
Subject: Re: I've seen the light!
Date: 1 Dec 2016 15:28:10
Message: <584087da$1@news.povray.org>
Am 01.12.2016 um 20:28 schrieb Cousin Ricky:
> =?UTF-8?Q?J=c3=b6rg_=22Yadgar=22_Bleimann?= <yaz### [at] gmxde> wrote:
>> This is how POV-Ray should look on the Commodore 64! Block graphic font
>> in 40 by 25 characters! No image bigger than 1000 bytes!
>>
>> Retrocomputing rules! There should be a POV-Ray version for each of the
>> 1980s' 8-bit classic machines!
> 
> Apple II: 280 x 192 (effective color resolution 140 x 192), 6 colors
> 
> TRaSh 80: 80 x 24 (IIRC), black and white
(According to Wikipedia it was 128x48. Alternatively, 64x16 "greyscale"
using characters.)

Amstrad CPC: 160x200, 16 colours from a palette of 27 FTW!
(alternatively 320x200, 4 colours from the same palette)

I still have one of those buggers at home, including some RAM expansion
and an EPROM board, for a whopping 512+48 kB of usable physical RAM and
about 128 kB of hard-wired software, so it might actually have the
capacity to run a (arguably fairly limited) port of our famous
raytracing software. Don't expect any renders to finish before the
zombie apocalypse hits though ;)

(Also, burning the software into a set of EPROMS might actually be the
only reasonable way to get it into the computer; it doesn't have
anything in terms of standardized external interfaces.)

> IBM PC-XT with CGA: 320 x 200, 4 colors unevenly distributed on the color wheel

PC-XT doesn't cout; it's a 16 bit system, and therefore far too advanced
to run interesting software.


Post a reply to this message

From: clipka
Subject: Re: I've seen the light!
Date: 1 Dec 2016 15:51:52
Message: <58408d68@news.povray.org>
Am 01.12.2016 um 21:24 schrieb Mike Horvath:
> On 12/1/2016 2:37 PM, clipka wrote:
>> Am 01.12.2016 um 20:26 schrieb clipka:
>>> Am 01.12.2016 um 18:16 schrieb scott:
>>>>> Turns out the core module is already better than I had feared.
>>>>> Still, it
>>>>> has highlighted various issues that still need sorting out -- mostly
>>>>> expected (such as failure to set various default values upon object
>>>>> construction), but a few I did not expect, like some compile-time
>>>>> config
>>>>> settings that don't come with defaults.
>>>>
>>>> I guess you noticed already, but your checkered plane didn't seem to
>>>> work properly either ;-)
>>>
>>> Bah - checkered planes are for wussies. I'm much more worried about the
>>> gamma handling... ;)
>>
>> BTW, here's a demonstration of why I think general-purpose programming
>> languages are ill-suited for scene description:
>>
>>     pov::Sphere* pSphere(new pov::Sphere);
>>     pSphere->Center = pov::Vector3d(0,0,0);
>>     pSphere->Radius = 1;
>>     pSphere->Texture = new pov::TEXTURE();
>>     pSphere->Texture->Type = pov::PLAIN_PATTERN; // TODO shouldn't
>> need this
>>     pSphere->Texture->Pigment = new pov::PIGMENT();
>>     pSphere->Texture->Pigment->Type = pov::PLAIN_PATTERN; // TODO
>> shouldn't
>> need this
>>     pSphere->Texture->Pigment->colour =
>> pov_base::TransColour(pov_base::MathColour(1));
>>     pSphere->Texture->Finish = new pov::FINISH();
>>     pSphere->Texture->Finish->Ambient = pov_base::MathColour(0.05);
>>     pSphere->Texture->Finish->Diffuse = 0.1;
>>     pSphere->Texture->Finish->Brilliance = 1.0;
>>     pSphere->Texture->Finish->BrillianceAdjust = 1.0;
>>     pSphere->Texture->Finish->Specular = 2.0;
>>     pSphere->Texture->Finish->Roughness = 100;
>>     pSphere->Texture->Finish->Reflection_Min = pov::MathColour(0.0);
>>     pSphere->Texture->Finish->Reflection_Max = pov::MathColour(1.0);
>>     pSphere->Texture->Finish->Reflect_Exp = 1.0;
>>     pSphere->Texture->Finish->Reflect_Metallic = true;
>>     pSphere->Texture->Finish->Reflection_Fresnel = false;
>>     pScene->objects.push_back(pSphere);
>>
>>     pov::Plane* pPlane(new pov::Plane);
>>     pPlane->Normal_Vector = pov::Vector3d(0, 1, 0).normalized();
>>     pPlane->Distance = 1;
>>     pPlane->Texture = new pov::TEXTURE();
>>     pPlane->Texture->Type = pov::PLAIN_PATTERN;
>>     pPlane->Texture->Pigment = new pov::PIGMENT();
>>     pPlane->Texture->Pigment->Type = pov::GENERIC_PATTERN;
>>     pPlane->Texture->Pigment->pattern = pov::PatternPtr(new
>> pov::CheckerPattern);
>>     pov::ColourBlendMap* pCheckerMap(new pov::ColourBlendMap);
>>     pov::ColourBlendMapEntry CheckerMapEntry;
>>     CheckerMapEntry.value = 0;
>>     CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(0, 0,
>> 0, 0, 0));
>>     pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
>>     CheckerMapEntry.value = 1;
>>     CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(1, 1,
>> 1, 0, 0));
>>     pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
>>     pPlane->Texture->Pigment->Blend_Map =
>> pov::GenericPigmentBlendMapPtr(pCheckerMap);
>>     pPlane->Texture->Finish = new pov::FINISH();
>>     pPlane->Texture->Finish->Ambient = pov_base::MathColour(0.1);
>>     pPlane->Texture->Finish->Diffuse = 0.7;
>>     pPlane->Texture->Finish->Brilliance = 1.0;
>>     pPlane->Texture->Finish->BrillianceAdjust = 1.0;
>>     pPlane->Texture->Finish->Specular = 0.0;
>>     pPlane->Texture->Finish->Roughness = 100;
>>     pScene->objects.push_back(pPlane);
>>
>>     pov::LightSource* pLight(new pov::LightSource);
>>     pLight->Center = pov::Vector3d(-1, 1, 1).normalized() * 100;
>>     pLight->colour = pov_base::MathColour(0.7);
>>     pLight->index = 0; // TODO shouldn't need this
>>     pScene->lightSources.push_back(pLight);
>>
>> Yup, that's just a plain simple RSOCP scene.
>>
> 
> 
> Can't you use shorthand object notation?
> 
> pPlane =
> {
>     Texture =
>     {
>         Finish =
>         {
>             Ambient = pov_base::MathColour(0.1),
>             Diffuse = 0.7,
>             Brilliance = 1.0,
>         }
>     }
> }
> 
> And so on...

/If/ the language in question supports such a notation, it typically
gets you as far as the point where you want to apply a series of
transformations.

Also, "pov_base::MathColour(0.1)" is a very cumbersome way of writing
"rgb 0.1", and "pov::Vector3d(-1,1,1)" is a very cumbersome way of
writing "<-1,1,1>".

I agree that C++ is probably one of the more ill-suited languages for an
SDL, but other general-purpose languages all suffer from similar
problems to some extent.


Post a reply to this message

From: Stephen
Subject: Re: I've seen the light!
Date: 1 Dec 2016 16:09:34
Message: <5840918e$1@news.povray.org>
On 12/1/2016 8:27 PM, clipka wrote:
> (Also, burning the software into a set of EPROMS might actually be the
> only reasonable way to get it into the computer; it doesn't have
> anything in terms of standardized external interfaces.)

How about using a lump hammer and two 12" shifting spanners?
That usually solves most problems. ;)


-- 

Regards
     Stephen


Post a reply to this message

Goto Latest 10 Messages Next 10 Messages >>>

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.