Grass improvements

This commit is contained in:
Joshua Barretto 2019-06-23 14:55:54 +01:00
parent 0734529ef6
commit 325fa41d7e
3 changed files with 36 additions and 20 deletions

View File

@ -167,7 +167,7 @@ void main() {
//vec4 fxaa_color = texture(src_color, uv);
vec4 hsva_color = vec4(rgb2hsv(fxaa_color.rgb), fxaa_color.a);
hsva_color.y *= 1.4;
hsva_color.y *= 1.3;
hsva_color.x -= 0.015;
hsva_color.z *= 0.85;
//hsva_color.z = 1.0 - 1.0 / (1.0 * hsva_color.z + 1.0);

View File

@ -83,6 +83,7 @@ impl<'a> SamplerMut for BlockGen<'a> {
water_level,
river,
surface_color,
sub_surface_color,
tree_density,
forest_kind,
close_trees,
@ -143,8 +144,13 @@ impl<'a> SamplerMut for BlockGen<'a> {
let water = Block::new(1, Rgb::new(100, 150, 255));
let warm_stone = Block::new(1, Rgb::new(165, 165, 130));
let block = if (wposf.z as f32) < height - 3.0 {
let col = Lerp::lerp(dirt_col, stone_col, (height - 4.0 - wposf.z as f32) * 0.15);
let grass_depth = 2.0;
let block = if (wposf.z as f32) < height - grass_depth {
let col = Lerp::lerp(
sub_surface_color.map(|e| (e * 255.0) as u8),
stone_col,
(height - grass_depth - wposf.z as f32) * 0.15,
);
// Underground
if (wposf.z as f32) > alt - 32.0 * chaos {
@ -154,9 +160,9 @@ impl<'a> SamplerMut for BlockGen<'a> {
}
} else if (wposf.z as f32) < height {
let col = Lerp::lerp(
dirt_col.map(|e| e as f32 / 255.0),
sub_surface_color,
surface_color,
(wposf.z as f32 - (height - 4.0)) * 0.25,
(wposf.z as f32 - (height - grass_depth)).div(grass_depth).powf(0.5),
);
// Surface
Some(Block::new(1, col.map(|e| (e * 255.0) as u8)))

View File

@ -97,15 +97,17 @@ impl<'a> Sampler for ColumnGen<'a> {
let wposf3d = Vec3::new(wposf.x, wposf.y, alt as f64);
let marble = (0.0
+ (sim.gen_ctx.hill_nz.get((wposf3d.div(48.0)).into_array()) as f32).mul(0.75)
+ (sim.gen_ctx.hill_nz.get((wposf3d.div(3.0)).into_array()) as f32).mul(0.25))
.add(1.0)
.mul(0.5);
let marble_small = (sim.gen_ctx.hill_nz.get((wposf3d.div(3.0)).into_array()) as f32)
.add(1.0)
.mul(0.5);
let marble = (sim.gen_ctx.hill_nz.get((wposf3d.div(48.0)).into_array()) as f32).mul(0.75)
.add(1.0)
.mul(0.5)
.add(marble_small.mul(0.25));
// Colours
let cold_grass = Rgb::new(0.0, 0.3, 0.15);
let warm_grass = Rgb::new(0.2, 0.8, 0.05);
let cold_grass = Rgb::new(0.05, 0.2, 0.1);
let warm_grass = Rgb::new(0.15, 0.65, 0.05);
let cold_stone = Rgb::new(0.55, 0.7, 0.75);
let warm_stone = Rgb::new(0.65, 0.65, 0.35);
let beach_sand = Rgb::new(0.93, 0.84, 0.4);
@ -116,10 +118,18 @@ impl<'a> Sampler for ColumnGen<'a> {
let sand = Rgb::lerp(beach_sand, desert_sand, marble);
let cliff = Rgb::lerp(cold_stone, warm_stone, marble);
let dirt = Lerp::lerp(
Rgb::new(0.2, 0.1, 0.05),
Rgb::new(0.4, 0.25, 0.0),
marble_small,
);
let turf = grass;
let ground = Rgb::lerp(
Rgb::lerp(
snow,
grass,
turf,
temp.sub(CONFIG.snow_temp)
.sub((marble - 0.5) * 0.05)
.mul(256.0),
@ -128,7 +138,7 @@ impl<'a> Sampler for ColumnGen<'a> {
temp.sub(CONFIG.desert_temp).mul(32.0),
);
// Work out if we're on a path
// Work out if we're on a path or near a town
let near_0 = sim_chunk.location.as_ref().map(|l| l.near[0].block_pos).unwrap_or(Vec2::zero()).map(|e| e as f32);
let near_1 = sim_chunk.location.as_ref().map(|l| l.near[1].block_pos).unwrap_or(Vec2::zero()).map(|e| e as f32);
@ -140,12 +150,10 @@ impl<'a> Sampler for ColumnGen<'a> {
.abs()
.div(near_0.distance(near_1));
let (alt, ground) = if dist_to_path < 5.0 {
(alt - 1.5, Lerp::lerp(
Rgb::new(0.15, 0.075, 0.05),
Rgb::new(0.4, 0.25, 0.0),
marble,
))
let on_path = dist_to_path < 5.0 || near_0.distance(wposf_turb.map(|e| e as f32)) < 150.0;
let (alt, ground) = if on_path {
(alt - 1.0, dirt)
} else {
(alt, ground)
};
@ -204,6 +212,7 @@ impl<'a> Sampler for ColumnGen<'a> {
// Beach
((alt - CONFIG.sea_level - 2.0) / 5.0).min(1.0 - river * 2.0),
),
sub_surface_color: dirt,
tree_density,
forest_kind: sim_chunk.forest_kind,
close_trees: sim.gen_ctx.tree_gen.get(wpos),
@ -226,6 +235,7 @@ pub struct ColumnSample<'a> {
pub water_level: f32,
pub river: f32,
pub surface_color: Rgb<f32>,
pub sub_surface_color: Rgb<f32>,
pub tree_density: f32,
pub forest_kind: ForestKind,
pub close_trees: [(Vec2<i32>, u32); 9],