"""Tutorial 03 - First simulation: a bare-soil RGB image, then one maize plant."""
import less

scene = less.Scene()
scene.size = 10.0
scene.terrain = less.Terrain(property=less.Lambertian(reflectance=0.3))
scene.illumination = less.Illumination(
    source=less.Sun(zenith=30, azimuth=150),
    atmosphere=less.SimpleSpectralAtmosphere(turbidity=2.0),
)

sensor = less.OpticalImager(less.Orthographic(image_size=256), bands=[650, 550, 450], quality=64)
image = scene.simulate(sensor)
image.save("03_bare_soil_rgb.png")
print("BRF per band:", image.to_brf().data.mean(axis=(0, 1)))

# A lower sun, without rebuilding anything.
scene.illumination = less.Illumination(
    source=less.Sun(zenith=60, azimuth=90),
    atmosphere=less.SimpleSpectralAtmosphere(turbidity=2.0),
)
scene.simulate(sensor).save("03_bare_soil_low_sun.png")

# One maize plant in the middle of the plot.
maize = less.Object("maize", mesh=less.asset_path("maize.obj"))
maize.set_property(less.Prospect(cab=40, car=8, cw=0.012, cm=0.006, N=1.5))
scene.add(maize, positions=[[5.0, 5.0, 0.0]])
scene.simulate(sensor).save("03_one_maize.png")
