About planets

An area for discussing new ideas and additions to Oolite.

Moderators: winston, another_commander

User avatar
submersible
Commodore
Commodore
Posts: 264
Joined: Thu Nov 10, 2011 7:49 am

Re: About planets

Post by submersible »

Kaks wrote:
Well, I couldn't resist the challenge, and I did get the code to compile with NEW_PLANETS set to 1.
Still, though the seas are better than I remembered (Ahruman did some extra work on the seas which I didn't notice at the time), all the NEW_PLANETS land portion is very much featureless now, so we can't see the 3D mountain ranges anymore...

I'll look some more into the matter, hopefully I'll figure out what happened between then (2 years - & change - ago) and now.

PS: Yes, bug #5254 seems to be a typo, can't quite figure out what bug Ahruman was referring to.

PPS: The NEW_PLANETS stuff now compiles in rev4805, so if you really, really want to you can start playing with that code now! :)
Fantastic - thank you , that works for me. I'm picking through the other classes now trying to determine how to pickup dictionaries from planetinfo and try applying those.

Code: Select all

materials = {

};
shaders = {

};
User avatar
Cmd. Cheyd
---- E L I T E ----
---- E L I T E ----
Posts: 934
Joined: Tue Dec 16, 2008 2:52 pm
Location: Deep Horizon Industries Manufacturing & Research Site somewhere in G8...

Re: About planets

Post by Cmd. Cheyd »

Just to confirm, Kaks - This means we CAN use materials for planets in trunk (with NEW_PLANETS set to 1), or is it just an improvement of the algorithms and stuff for the auto-generated textures?
User avatar
Kaks
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 3009
Joined: Mon Jan 21, 2008 11:41 pm
Location: The Big Smoke

Re: About planets

Post by Kaks »

As I've said, all I've done so far is to make it compile without errors. I haven't had the time to look at what still works and what doesn't - well, apart from noticing the absence of land: where there should be land all I saw was a featureless grey waste. So clearly all is not well with that part of the code.

Once upon a time you could indeed apply different specular & normal maps to new_planets , BUT, when I did it, that was done by changing the various maps directly inside the source code.
IIRC, we were going to look at new retexturing options only after the new_planets were done properly. Ahruman might have a semi done API somewhere on his hard disk though! ;)


Anyway, so far I've just made the new_planet stuff compatible with the changed underlying classes, and we're still playing catch up with all we had working 2 and a bit years ago...
If submersible is having a go at the code - as indeed seems to be the case - we might be able to get there faster! :)
Hey, free OXPs: farsun v1.05 & tty v0.5! :0)
Greyth
---- E L I T E ----
---- E L I T E ----
Posts: 286
Joined: Wed Feb 08, 2012 1:57 am

Re: About planets

Post by Greyth »

:shock: :D
Oolite 1.76
Debian 6 : Ubuntu 12.04
NVidia 6200 : Radeon/AMD thang
Abit AN7 : Packard Bell TJ74
User avatar
submersible
Commodore
Commodore
Posts: 264
Joined: Thu Nov 10, 2011 7:49 am

Re: About planets

Post by submersible »

Kaks wrote:
Anyway, so far I've just made the new_planet stuff compatible with the changed underlying classes, and we're still playing catch up with all we had working 2 and a bit years ago...
If submersible is having a go at the code - as indeed seems to be the case - we might be able to get there faster! :)
I'm looking - though I have to admit my c is pretty lame and my objective c non-existent. There are a lot of interrogations of dictionaries in there that I don't recognise.

One thing is fairly apparent - PlanetEntity/Drawable look like prime candidates for refactoring into several implementations of the same interface. Not my goal right now :)

Wish me luck
User avatar
Kaks
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 3009
Joined: Mon Jan 21, 2008 11:41 pm
Location: The Big Smoke

Re: About planets

Post by Kaks »

Good luck! You won't need it though, just 'a bit' of perseverance!! :D
Hey, free OXPs: farsun v1.05 & tty v0.5! :0)
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: About planets

Post by Eric Walch »

submersible wrote:
One thing is fairly apparent - PlanetEntity/Drawable look like prime candidates for refactoring into several implementations of the same interface. Not my goal right now :)

Wish me luck
Just one thing: its is not PlanetEntity that handles the new_planet stuff, but OOPlanetEntity. I am completely unaware how all the classes are linked, but when the new-planets were active in the trunk builds, two years ago, I noticed they rotated around the wrong axis. Rotation axis was not through the poles. It must always have been wrong, but without white poles, you just never noticed it. I fixed that but was badly surprised that in the following Oolite release version, the rotation was wrong again. For the release, the new_planet stuff was disabled again and planets used PlanetEntity instead of OOPlanetEntity were I made my fixes. In current oolite those rotational fixes are copied to PlanetEntity.
User avatar
Kaks
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 3009
Joined: Mon Jan 21, 2008 11:41 pm
Location: The Big Smoke

Re: About planets

Post by Kaks »

Yep. Any resemblance between OOPlanetEntity.m & PlanetEntity.m is purely coincidental!

Well, not quite... The first was developed as a drop in replacement for the latter, so all the external methods need to be identical - until we wave goodbye to the old one, that is... :)


Mind you, if you think PlanetEntity is bad now, you should have seen rev2098! Ooh, that was a 'good' one! :D

Anyway, OOPlanetEntity contains the as-yet unfinished code, as Eric has already said.

Still, PlanetEntityDrawable, is a completely new and as yet unfinished beast, I expect a liberal amount of copy & paste 'goodness' was lavished on that one... ;)
Hey, free OXPs: farsun v1.05 & tty v0.5! :0)
User avatar
submersible
Commodore
Commodore
Posts: 264
Joined: Thu Nov 10, 2011 7:49 am

Re: About planets

Post by submersible »

Kaks wrote:
Yep. Any resemblance between OOPlanetEntity.m & PlanetEntity.m is purely coincidental!

Well, not quite... The first was developed as a drop in replacement for the latter, so all the external methods need to be identical - until we wave goodbye to the old one, that is... :)


Mind you, if you think PlanetEntity is bad now, you should have seen rev2098! Ooh, that was a 'good' one! :D

Anyway, OOPlanetEntity contains the as-yet unfinished code, as Eric has already said.

Still, PlanetEntityDrawable, is a completely new and as yet unfinished beast, I expect a liberal amount of copy & paste 'goodness' was lavished on that one... ;)
Yup - I got that far.
Here is my brutal cheat to load materials and shaders from planet info, currently only applies to the planet surface geometry.

Code: Select all

Index: src/Core/Entities/OOStellarBody.h
===================================================================
--- src/Core/Entities/OOStellarBody.h	(revision 4809)
+++ src/Core/Entities/OOStellarBody.h	(working copy)
@@ -32,7 +32,7 @@
 
 
 #ifndef NEW_PLANETS
-#define NEW_PLANETS 0
+#define NEW_PLANETS 1
 #endif
 
 
Index: src/Core/Entities/OOPlanetEntity.m
===================================================================
--- src/Core/Entities/OOPlanetEntity.m	(revision 4809)
+++ src/Core/Entities/OOPlanetEntity.m	(working copy)
@@ -45,6 +45,7 @@
 #import "OOPlanetTextureGenerator.h"
 #import "OOSingleTextureMaterial.h"
 #import "OOShaderMaterial.h"
+#import "OOMaterialConvenienceCreators.h"
 
 
 @interface OOPlanetEntity (Private)
@@ -78,7 +79,23 @@
 	if (self == nil)  return nil;
 	
 	scanClass = CLASS_NO_DRAW;
-	
+	NSDictionary *materials = [dict oo_dictionaryForKey:@"materials"];
+        NSDictionary *shaders   = [dict oo_dictionaryForKey:@"shaders"];
+	OOLog(@"new planets", @"Materials %@", materials);
+        OOLog(@"new planets", @"Shaders %@", shaders);
+
+
+	OOMaterial *planet_material = [OOMaterial materialWithName:@"planet_surface"
+							   	  cacheKey:nil
+							materialDictionary:materials
+							 shadersDictionary:shaders
+							   macros:OODefaultShipShaderMacros()
+							   bindingTarget:self
+								    forSmoothedMesh:YES
+
+							];
+	OOLog(@"new planets",@"OOMaterial %@", planet_material );
+
 	// Load random seed override.
 	NSString *seedStr = [dict oo_stringForKey:@"seed"];
 	if (seedStr != nil)
@@ -147,7 +164,11 @@
 										// EW: NO, setting orientation should be handled by the code that adds the planet, not by planetEntity itself.
 										// just start with a default value.
 	[_planetDrawable setRadius:collision_radius];
-	
+	if ( planet_material != nil )	{
+		OOLog(@"new planets" , @"set planet material");
+		[_planetDrawable setMaterial:planet_material];
+	}
+
 	// set speed of rotation.
 	if ([dict objectForKey:@"rotational_velocity"])
 	{
@@ -499,6 +520,8 @@
 	OOTexture *normalMap = nil;
 	NSDictionary *macros = nil;
 	NSDictionary *materialDefaults = [ResourceManager materialDefaults];
+
+
 	
 #if OO_SHADERS
 	OOShaderSetting shaderLevel = [UNIVERSE shaderEffectsLevel];
Index: src/Core/Materials/OOTexture.m
===================================================================
--- src/Core/Materials/OOTexture.m	(revision 4809)
+++ src/Core/Materials/OOTexture.m	(working copy)
@@ -722,7 +722,7 @@
 					else if ([extractChannel isEqualToString:@"a"])  options |= kOOTextureExtractChannelA;
 					else
 					{
-						OOLogWARN(@"texture.load.extractChannel.invalid", @"Unknown value \"%@\" for extract_channel (should be \"r\", \"g\", \"b\" or \"a\").", extractChannel);
+						OOLogWARN(@"texture.load.extractChannel.invalid", @"Unknown value \"%@\" for extract_channel in specifier \"%@\" (should be \"r\", \"g\", \"b\" or \"a\").", extractChannel,specifier);
 					}
 				}
 			}
And the planetinfo.plist from my testing OXP looks like

Code: Select all

{
  "0 7" = {
      description = "Lave is a testing planet.";
            "percent_land" = "50";
      "land_hsb_color" = "0.333 1.0 1.0";
      "sea_hsb_color" =  "0.667 0.7 0.6";
      materials = {
          planet_surface = {
	    diffuse_map = {
		 name = "ll_planet_surface_diffuse.png";
            };
            emission_map = {
                 name = "ll_planet_surface_emission.png";
            }; 
            normal_and_parallax_map  = {
                 name = "ll_planet_surface_normpara.png";
            };
            specular_map = {
                 name = "ll_planet_surface_specular.png";
            };
            parallax_scale = "-0.02";
            //parallax_bias  = "-0.02";
            specular_color = "1.0 1.0 1.0 1.0";
            shininess = "10";
          };
          planet_atmosphere = {
              diffuse_map = "planet_clouds.png";
          };
      };
/*
      shaders =
            {
            planet_surface = {
                                shininess = 64;
                                specular_color = "( 1.0 , 1.0 , 1.0 , 0.5 )";
                                uniforms = {
                                        uCubeMap = { type = texture; value = 0; };
                                        uSpecularMap = { type = texture; value=1 };
                                        uEmissionMap = { type = texture; value=2 };
                                        uNormalMap = { type = texture ; value=3 };
                                        uCloudMap = { type = texture ;value=4 };
                                        //uParallaxScale = { type = float ; value=0.15 };
                                        //uParallaxBias =  { type = float ; value=0.0 };
                                };
                                fragment_shader = "cube_map_planet.fs";
                                vertex_shader = "ahruman_cube_map_test.vs";
                                textures =
                                (
                                        { name = "planet_surface_diffuse.png";  cube_map = yes; },
                                        { name = "planet_surface_specular.png"; cube_map = yes; },
                                        { name = "planet_surface_emission.png"; cube_map = yes; },
                                        { name = "planet_surface_normpara.png"; cube_map = no; },
                                        { name = "planet_clouds.png" ; cube_map = yes; },
                                );

            };
            planet_atmosphere =
                        {
                            vertex_shader = "SkyFromSpace.vertex";
                            fragment_shader = "SkyFromSpace.fragment";
                            uniforms =
                                        {

                                        };
                        };

      };
	*/
   };
}

All currently unfinished.
User avatar
Kaks
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 3009
Joined: Mon Jan 21, 2008 11:41 pm
Location: The Big Smoke

Re: About planets

Post by Kaks »

Ooh, very tantalising! I believe Cmdr Cheyd might be fairly keen to experiment 'a little' with your code. ;)

Cheers,

Kaks.
Hey, free OXPs: farsun v1.05 & tty v0.5! :0)
User avatar
Cmd. Cheyd
---- E L I T E ----
---- E L I T E ----
Posts: 934
Joined: Tue Dec 16, 2008 2:52 pm
Location: Deep Horizon Industries Manufacturing & Research Site somewhere in G8...

Re: About planets

Post by Cmd. Cheyd »

Sign me up! Having those options is enough to make me want to start texturing again...
User avatar
submersible
Commodore
Commodore
Posts: 264
Joined: Thu Nov 10, 2011 7:49 am

Re: About planets

Post by submersible »

Cmd. Cheyd wrote:
Sign me up! Having those options is enough to make me want to start texturing again...
You can patch trunk with the above and get started playing around. I am putting together a reference OXP at the moment which should make use of all the default synthesised material features (except illumination maps, not too sure how helpful they are for planets).

I suspect that the OOPlanetEntity will need some shader uniform bindings before the default shaders work correctly. Lots more work and debugging to be done.

A couple of early screenshots, Working emission maps, specular maps which are not correctly aligned with the specular light , broken parallax and normal mapping :)

http://swarm.perlide.org/static/oolite-124.png
http://swarm.perlide.org/static/oolite-125.png
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: About planets

Post by Eric Walch »

submersible wrote:
(except illumination maps, not too sure how helpful they are for planets.
Illumination maps are usefull at the shadow side of a planet. To show cities in light and shorelines.
User avatar
submersible
Commodore
Commodore
Posts: 264
Joined: Thu Nov 10, 2011 7:49 am

Re: About planets

Post by submersible »

Eric Walch wrote:
submersible wrote:
(except illumination maps, not too sure how helpful they are for planets.
Illumination maps are usefull at the shadow side of a planet. To show cities in light and shorelines.
Oh - I have been using emission maps for cities and in the super-shader version , modulating the emission intensity by the diffuse lighting so the lit cities are only 'lit' when in the dark.

Shorelines? What effect would illumination mapping perform for shorelines ?
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: About planets

Post by Eric Walch »

submersible wrote:
Oh - I have been using emission maps for cities and in the super-shader version , modulating the emission intensity by the diffuse lighting so the lit cities are only 'lit' when in the dark.
You are right, emission maps will be as useful for adding city lights to a map.
submersible wrote:
Shorelines? What effect would illumination mapping perform for shorelines ?
In most worlds would a big concentration in population live close to the shorelines. At least in worlds with lots of water for transportation. Look for example at the map of the earth in night view. You see bands of light along the shores, along rivers and along main traffic roads. e.g. the river Nile in Egypt is very visible and the european shore is very clearly lit. Also in northers asia, you see clearly bands of light running east-west. Rivers running north-south there, so that must be main transportation routes. Trans siberia railway? A large portion of towns settles along those routes.
Post Reply