Skip to content

Commit 924fb56

Browse files
committed
Limb darkening for stars
1 parent 734a031 commit 924fb56

File tree

5 files changed

+23
-6
lines changed

5 files changed

+23
-6
lines changed

src/celengine/render.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1828,6 +1828,9 @@ static void renderSphereUnlit(const RenderInfo& ri,
18281828
textures.push_back(ri.overlayTex);
18291829
}
18301830

1831+
if (ri.isStar)
1832+
shadprop.lightModel = LightingModel::StarModel;
1833+
18311834
// Get a shader for the current rendering configuration
18321835
auto* prog = r->getShaderManager().getShader(shadprop);
18331836
if (prog == nullptr)
@@ -1838,6 +1841,8 @@ static void renderSphereUnlit(const RenderInfo& ri,
18381841
prog->textureOffset = 0.0f;
18391842
prog->ambientColor = ri.color.toVector3();
18401843
prog->opacity = 1.0f;
1844+
if (ri.isStar)
1845+
prog->eyePosition = ri.eyePos_obj;
18411846

18421847
Renderer::PipelineState ps;
18431848
ps.depthMask = true;
@@ -2388,6 +2393,7 @@ void Renderer::renderObject(const Vector3f& pos,
23882393
}
23892394
else
23902395
{
2396+
ri.isStar = obj.isStar;
23912397
renderSphereUnlit(ri, viewFrustum, planetMVP, this);
23922398
}
23932399
}
@@ -3014,6 +3020,7 @@ void Renderer::renderStar(const Star& star,
30143020
surface.appearanceFlags |= Surface::ApplyBaseTexture;
30153021
surface.appearanceFlags |= Surface::Emissive;
30163022

3023+
rp.isStar = true;
30173024
rp.surface = &surface;
30183025
rp.rings = nullptr;
30193026
rp.radius = star.getRadius();

src/celengine/render.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -472,12 +472,15 @@ class Renderer
472472
Surface* surface{ nullptr };
473473
const Atmosphere* atmosphere{ nullptr };
474474
RingSystem* rings{ nullptr };
475+
LightingState::EclipseShadowVector* eclipseShadows{ nullptr };
476+
477+
Eigen::Quaternionf orientation{ Eigen::Quaternionf::Identity() };
478+
Eigen::Vector3f semiAxes{ Eigen::Vector3f::Ones() };
475479
float radius{ 1.0f };
476480
float geometryScale{ 1.0f };
477-
Eigen::Vector3f semiAxes{ Eigen::Vector3f::Ones() };
481+
478482
ResourceHandle geometry{ InvalidResource };
479-
Eigen::Quaternionf orientation{ Eigen::Quaternionf::Identity() };
480-
LightingState::EclipseShadowVector* eclipseShadows;
483+
bool isStar{ false };
481484
};
482485

483486
struct DepthBufferPartition

src/celengine/renderinfo.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ class Texture;
2121

2222
struct RenderInfo
2323
{
24-
Color color{ 1.0f, 1.0f, 1.0f };
24+
Eigen::Quaternionf orientation{ Eigen::Quaternionf::Identity() };
25+
2526
Texture* baseTex{ nullptr };
2627
Texture* bumpTex{ nullptr };
2728
Texture* nightTex{ nullptr };
2829
Texture* glossTex{ nullptr };
2930
Texture* overlayTex{ nullptr };
31+
Color color{ 1.0f, 1.0f, 1.0f };
3032
Color specularColor{ 0.0f, 0.0f, 0.0f };
3133
float specularPower{ 0.0f };
3234
Eigen::Vector3f sunDir_eye{ Eigen::Vector3f::UnitZ() };
@@ -36,10 +38,9 @@ struct RenderInfo
3638
Color sunColor{ 1.0f, 1.0f, 1.0f };
3739
Color ambientColor{ 0.0f, 0.0f, 0.0f };
3840
float lunarLambert{ 0.0f };
39-
Eigen::Quaternionf orientation{ Eigen::Quaternionf::Identity() };
4041
float pixWidth{ 1.0f };
4142
float pointScale{ 1.0f };
43+
bool isStar{ false };
4244
};
4345

4446
extern LODSphereMesh* g_lodSphere;
45-

src/celengine/shadermanager.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,6 +2093,11 @@ ShaderManager::buildFragmentShader(const ShaderProperties& props)
20932093
source += "gl_FragColor.rgb = gl_FragColor.rgb * scatterEx + scatterColor;\n";
20942094
}
20952095

2096+
if (props.lightModel == LightingModel::StarModel)
2097+
{
2098+
source += "gl_FragColor.rgb = gl_FragColor.rgb - vec3(1.0 - NV) * vec3(0.56, 0.61, 0.72);\n";
2099+
}
2100+
20962101
source += "}\n";
20972102

20982103
DumpFSSource(source);

src/celengine/shadermanager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ enum class LightingModel : std::uint16_t
6262
EmissiveModel = 0x0100,
6363
ParticleModel = 0x0200,
6464
UnlitModel = 0x0400,
65+
StarModel = 0x0800,
6566
};
6667

6768
ENUM_CLASS_BITWISE_OPS(LightingModel);

0 commit comments

Comments
 (0)