paysages : Configurable and improve terrain shadows.
git-svn-id: https://subversion.assembla.com/svn/thunderk/paysages@351 b1fd45b6-86a6-48da-8261-f70d1f35bdcc
This commit is contained in:
parent
203dd0ab12
commit
1fecbf414e
8 changed files with 27 additions and 9 deletions
|
@ -13,6 +13,7 @@ Scenery :
|
|||
* Added clouds hardness to light.
|
||||
* Added sun halo control.
|
||||
* New cloud model with 2 noises : one for the global shape and one for edges.
|
||||
* Terrain shadows have been improved and are now configurable.
|
||||
|
||||
Rendering :
|
||||
* New texture model (perpendicular displacement and thickness).
|
||||
|
|
4
TODO
4
TODO
|
@ -1,9 +1,5 @@
|
|||
Technology Preview 2 :
|
||||
- InputInt doesn't honor small_step.
|
||||
- Improve shadow smoothness
|
||||
=> Configurable smoothness factor
|
||||
=> Smoothness depends on distance to hit
|
||||
=> Smoothness stays the same when quality changes, but has better resolution
|
||||
- Fix the fog impression when cloud layer overlaps with ground range.
|
||||
- Remove color gradations (replace with automatic boolean and simple colors).
|
||||
- Replace zone ranges with curves (with curve input and curve dialog).
|
||||
|
|
|
@ -151,6 +151,7 @@ FormTerrain::FormTerrain(QWidget *parent):
|
|||
addInputNoise(tr("Noise"), _definition.height_noise);
|
||||
addInputDouble(tr("Height"), &_definition.height_factor, 0.0, 20.0, 0.1, 1.0);
|
||||
addInputDouble(tr("Scaling"), &_definition.scaling, 1.0, 20.0, 0.1, 1.0);
|
||||
addInputDouble(tr("Shadow smoothing"), &_definition.shadow_smoothing, 0.0, 0.3, 0.003, 0.03);
|
||||
|
||||
revertConfig();
|
||||
}
|
||||
|
|
|
@ -678,6 +678,11 @@ Maintenir Ctrl : Plus rapide</translation>
|
|||
<source>Scaling</source>
|
||||
<translation>Echelle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gui_qt/formterrain.cpp" line="154"/>
|
||||
<source>Shadow smoothing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FormTextures</name>
|
||||
|
|
|
@ -148,6 +148,7 @@ void autoGenRealisticLandscape(int seed)
|
|||
noiseAddLevelsSimple(terrain.height_noise, 10, 1.0, 1.0);
|
||||
terrain.height_factor = 12.0 / noiseGetMaxValue(terrain.height_noise);
|
||||
terrain.scaling = 20.0;
|
||||
terrain.shadow_smoothing = 0.03;
|
||||
scenerySetTerrain(&terrain);
|
||||
terrainDeleteDefinition(&terrain);
|
||||
|
||||
|
|
|
@ -251,11 +251,11 @@ static inline Color _getFinalPixel(RenderArea* area, int x, int y)
|
|||
{
|
||||
if (pixel_data->flags.edge)
|
||||
{
|
||||
col = COLOR_RED;
|
||||
col = COLOR_GREY;
|
||||
}
|
||||
else
|
||||
{
|
||||
col = COLOR_GREY;
|
||||
col = COLOR_WHITE;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -602,8 +602,10 @@ void* _renderPostProcessChunk(void* data)
|
|||
fragment->data.color.g = col.g;
|
||||
fragment->data.color.b = col.b;
|
||||
|
||||
mutexAcquire(chunk->area->lock);
|
||||
fragment->flags.dirty = 0;
|
||||
_setDirtyPixel(chunk->area, x, y);
|
||||
mutexRelease(chunk->area->lock);
|
||||
}
|
||||
/* chunk->area->progress_pixels++; */
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ void terrainSave(PackStream* stream, TerrainDefinition* definition)
|
|||
noiseSaveGenerator(stream, definition->height_noise);
|
||||
packWriteDouble(stream, &definition->height_factor);
|
||||
packWriteDouble(stream, &definition->scaling);
|
||||
packWriteDouble(stream, &definition->shadow_smoothing);
|
||||
|
||||
packWriteInt(stream, &definition->height_modifiers_count);
|
||||
for (i = 0; i < definition->height_modifiers_count; i++)
|
||||
|
@ -43,6 +44,7 @@ void terrainLoad(PackStream* stream, TerrainDefinition* definition)
|
|||
noiseLoadGenerator(stream, definition->height_noise);
|
||||
packReadDouble(stream, &definition->height_factor);
|
||||
packReadDouble(stream, &definition->scaling);
|
||||
packReadDouble(stream, &definition->shadow_smoothing);
|
||||
|
||||
while (definition->height_modifiers_count > 0)
|
||||
{
|
||||
|
@ -68,6 +70,7 @@ TerrainDefinition terrainCreateDefinition()
|
|||
definition.height_factor = 0.0;
|
||||
definition.scaling = 1.0;
|
||||
definition.height_modifiers_count = 0;
|
||||
definition.shadow_smoothing = 0.0;
|
||||
|
||||
terrainValidateDefinition(&definition);
|
||||
|
||||
|
@ -92,6 +95,7 @@ void terrainCopyDefinition(TerrainDefinition* source, TerrainDefinition* destina
|
|||
noiseCopy(source->height_noise, destination->height_noise);
|
||||
destination->height_factor = source->height_factor;
|
||||
destination->scaling = source->scaling;
|
||||
destination->shadow_smoothing = source->shadow_smoothing;
|
||||
|
||||
for (i = 0; i < destination->height_modifiers_count; i++)
|
||||
{
|
||||
|
@ -206,9 +210,9 @@ Color terrainLightFilter(TerrainDefinition* definition, Renderer* renderer, Colo
|
|||
}
|
||||
|
||||
inc_factor = (double)renderer->render_quality;
|
||||
inc_base = 1.0;
|
||||
inc_base = definition->height_factor / definition->scaling;
|
||||
inc_value = inc_base / inc_factor;
|
||||
smoothing = 0.03 * inc_factor;
|
||||
smoothing = definition->shadow_smoothing;
|
||||
|
||||
light_factor = 1.0;
|
||||
length = 0.0;
|
||||
|
@ -222,7 +226,14 @@ Color terrainLightFilter(TerrainDefinition* definition, Renderer* renderer, Colo
|
|||
diff = location.y - height;
|
||||
if (diff < 0.0)
|
||||
{
|
||||
light_factor += diff / smoothing;
|
||||
if (length * smoothing > 0.000001)
|
||||
{
|
||||
light_factor += diff * v3Norm(inc_vector) / (length * smoothing);
|
||||
}
|
||||
else
|
||||
{
|
||||
light_factor = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
if (diff < inc_base / inc_factor)
|
||||
|
|
|
@ -20,6 +20,7 @@ typedef struct
|
|||
double scaling;
|
||||
int height_modifiers_count;
|
||||
HeightModifier* height_modifiers[TERRAIN_MAX_MODIFIERS];
|
||||
double shadow_smoothing;
|
||||
|
||||
double _max_height;
|
||||
} TerrainDefinition;
|
||||
|
|
Loading…
Reference in a new issue