Example #1
0
    def init(cls):

        #-------- Environnement:
        cls.couleur_horizon = gs.Color(1., .699, .586)
        cls.couleur_zenith = gs.Color(1., 0.978, 0.407)
        cls.couleur_ambiante = gs.Color(0.19, 0.42, 0.34)
        #cls.couleur_ambiante=gs.Color(0.5,0.5,0.5)

        #-------- Création de la scène:
        cls.scene3d = scene.new_scene()

        cls.contexte = gs.SceneLoadContext(render.get_render_system())
        cls.scene3d.Load("scene_01/Gare_test.scn", cls.contexte)
        #----------- Attend que la scène soit accessible:
        scene.update_scene(cls.scene3d, 1 / 60)

        #----------- Prise en main de la scène:
        cls.noeuds = cls.contexte.GetNodes()
        cls.components = cls.scene3d.GetComponents()

        for comp in cls.components:
            if comp.GetAspect() == "Environment":
                cls.environnement = comp
                break

        #----------- Init billboards et shaders:

        cls.init_billboards(cls.noeuds, cls.liste_sprites_scene)
        cls.init_shaders(cls.noeuds)

        #----------- Init environnement:

        cls.environnement.SetBackgroundColor(cls.couleur_horizon)
        cls.environnement.SetFogColor(cls.couleur_horizon)
        cls.environnement.SetFogNear(1)
        cls.environnement.SetFogFar(100)
        cls.environnement.SetAmbientIntensity(2)
        cls.environnement.SetAmbientColor(cls.couleur_ambiante)

        cls.camera = cls.scene3d.GetNode("Camera")
        cls.camera.GetCamera().SetZNear(.1)
        cls.camera.GetCamera().SetZFar(1000.)
        cls.camera_start_pos_mem = cls.camera.GetTransform().GetPosition()
        #cls.camera.AddComponent(gs.Target())   #Si la caméra suit une cible

        cls.lumiere_clair_obscur = cls.scene3d.GetNode("clair obscur")
        cls.lumiere_soleil = cls.scene3d.GetNode("soleil")

        cls.lumiere_soleil.GetLight().SetShadow(
            gs.Light.Shadow_Map)  #Active les ombres portées
        cls.lumiere_soleil.GetLight().SetShadowRange(100)

        cls.lumiere_soleil.GetLight().SetDiffuseIntensity(1.)
        cls.lumiere_soleil.GetLight().SetSpecularIntensity(1.)

        orientation = gs.Vector3(54 / 180 * pi, 135 / 180 * pi, 0)
        cls.lumiere_clair_obscur.GetTransform().SetRotation(orientation)

        orientation = gs.Vector3(54 / 180 * pi, -45 / 180 * pi, 0)
        cls.lumiere_soleil.GetTransform().SetRotation(orientation)

        #cls.lumiere_clair_obscur.GetLight().SetDiffuseIntensity(2.)
        #cls.lumiere_clair_obscur.GetLight().SetSpecularIntensity(2.)

        #-------- Mémorise les intensités lumineuses pour le switch des éclairages:
        noeuds = cls.scene3d.GetNodes()
        for noeud in noeuds:
            if not noeud.GetLight() == None:
                cls.lumieres_intens_mem.append(
                    noeud.GetLight().GetDiffuseIntensity())
                cls.lumieres_intens_mem.append(
                    noeud.GetLight().GetSpecularIntensity())

        #--------Init les variables de shaders:

        #Couleur d'ambiance:
        """
        for noeud in cls.noeuds:
            if not noeud.GetObject()==None:
                obj=noeud.GetObject()
                geo=obj.GetGeometry()
                n=geo.GetMaterialCount()
                i=0
                while i<n:
                    materiau=geo.GetMaterial(i)
                    materiau.SetFloat3("ambient_color",cls.couleur_ambiante.r*0.,cls.couleur_ambiante.g*0.,cls.couleur_ambiante.b*0.)
                    i+=1
        """
        #--------- Init listes des sprites:
        #cls.liste_sprites_scene.append(...)

        #--------- Inits de l'éditeur embarqué
        cls.cube_l_soleil = scene.add_cube(cls.scene3d, gs.Matrix4.Identity,
                                           0.5, 0.5, 2.)
        cls.cube_l_clair_obscur = scene.add_cube(cls.scene3d,
                                                 gs.Matrix4.Identity, 0.5, 0.5,
                                                 2.)

        cls.scene3d.SetCurrentCamera(cls.camera)

        scene.update_scene(cls.scene3d, 1 / 60)
import gs.plus.camera as camera
import gs.plus.input as input
import gs.plus.scene as scene
import gs.plus.clock as clock
from math import pi, cos, sin, asin
import codecs

filename_out = "../src/simulation"
scale_factor = 5.0

gs.plus.create_workers()
gs.LoadPlugins(gs.get_default_plugins_path())

render.init(1280, 720, "../pkg.core")

scn = scene.new_scene()
cam = scene.add_camera(scn,
                       gs.Matrix4.TranslationMatrix(gs.Vector3(0, 3.5, -12.5)))
cam.GetTransform().SetRotation(
    gs.Vector3(pi * 5.0 / 180.0, pi * -5.0 / 180.0, 0))

scene.add_light(scn, gs.Matrix4.RotationMatrix(gs.Vector3(0.65, -0.45, 0)),
                gs.Light.Model_Linear, 150)
scene.add_light(scn,
                gs.Matrix4.RotationMatrix(gs.Vector3(0.55, pi, 0.2)),
                gs.Light.Model_Linear,
                diffuse=gs.Color(0.3, 0.3, 0.4))
scene.add_physic_plane(scn)

# nodes = add_kapla_tower(scn, 0.5, 2, 2, 6, 16)
Example #3
0
def render_mask_screen():
    mask_segment_list = wireframe_json_to_segment_list(
        "@assets/exxos_mask.json")

    scn = scene.new_scene()

    while not scn.IsReady():
        scene.update_scene(scn, 0.0)

    # Add an environment to the scene
    env = gs.Environment()
    env.SetBackgroundColor(gs.Color.Black)
    scn.AddComponent(env)

    # Add a camera
    render_camera = gs.Node()
    render_camera.AddComponent(gs.Transform())
    render_camera.AddComponent(gs.Camera())
    scn.AddNode(render_camera)
    scn.SetCurrentCamera(render_camera)
    render_camera.GetTransform().SetPosition(gs.Vector3(0, 0, -50))

    # Create a (parent) node to rotate the mask
    master_node = gs.Node()
    master_node.AddComponent(gs.Transform())
    scn.AddNode(master_node)

    # Init the starfield
    starfield.init_stars()
    starfield.set_camera_velocity(gs.Vector3(0, 0, -50))

    segment_nodes_list = []
    for seg in mask_segment_list:
        node_a, node_b = gs.Node(), gs.Node()
        tr_a, tr_b = gs.Transform(), gs.Transform()
        tr_a.SetPosition(gs.Vector3(seg[0][0], seg[0][1], seg[0][2]))
        tr_b.SetPosition(gs.Vector3(seg[1][0], seg[1][1], seg[1][2]))
        tr_a.SetParent(master_node)
        tr_b.SetParent(master_node)
        node_a.AddComponent(tr_a)
        node_b.AddComponent(tr_b)
        scn.AddNode(node_a)
        scn.AddNode(node_b)
        segment_nodes_list.append([node_a, node_b])

    seq_duration = 20.0
    fx_timer = 0.0
    while fx_timer < seq_duration:

        render.clear()
        dt_sec = clock.update()

        master_node.GetTransform().SetRotation(
            master_node.GetTransform().GetRotation() +
            gs.Vector3(1, 1, 1) * dt_sec * 0.25)
        scene.update_scene(scn, dt_sec)

        # render.commit_3d()
        # render.set_depth_write3d(False)

        starfield.update_stars(dt_sec)
        starfield.draw_stars(render)

        for seg in segment_nodes_list:
            pos_a = seg[0].GetTransform().GetWorld().GetTranslation()
            pos_b = seg[1].GetTransform().GetWorld().GetTranslation()
            render.line3d(pos_a.x,
                          pos_a.y,
                          pos_a.z,
                          pos_b.x,
                          pos_b.y,
                          pos_b.z,
                          start_color=gs.Color.Blue,
                          end_color=gs.Color.Blue)

        render.flip()

        fx_timer += dt_sec
import gs.plus.camera as camera
import gs.plus.input as input
import gs.plus.scene as scene
import gs.plus.clock as clock
from math import pi, cos, sin, asin
import codecs

filename_out = "../src/simulation"
scale_factor = 5.0

gs.plus.create_workers()
gs.LoadPlugins(gs.get_default_plugins_path())

render.init(1280, 720, "../pkg.core")

scn = scene.new_scene()
cam = scene.add_camera(scn, gs.Matrix4.TranslationMatrix(gs.Vector3(0, 3.5, -12.5)))
cam.GetTransform().SetRotation(gs.Vector3(pi * 5.0 / 180.0, pi * -5.0 / 180.0, 0))

scene.add_light(scn, gs.Matrix4.RotationMatrix(gs.Vector3(0.65, -0.45, 0)), gs.Light.Model_Linear, 150)
scene.add_light(
    scn, gs.Matrix4.RotationMatrix(gs.Vector3(0.55, pi, 0.2)), gs.Light.Model_Linear, diffuse=gs.Color(0.3, 0.3, 0.4)
)
scene.add_physic_plane(scn)

# nodes = add_kapla_tower(scn, 0.5, 2, 2, 6, 16)

width, height, length = 1, 1, 1

node_list = []
stream_list = []
def convert_folder(folder_path):
    scn = None

    nml_reader = NmlReader()

    for in_file in os.listdir(folder_path):

        if os.path.isdir(os.path.join(folder_path, in_file)):
            convert_folder(os.path.join(folder_path, in_file))
        else:
            if in_file.find(".nms") > -1:
                # Found a NMS file, creates a new scene
                scn = scene.new_scene()
                links = []
                uid_dict = {}

                print("Reading file ", os.path.join(folder_path, in_file))
                nml_reader.LoadingXmlFile(os.path.join(folder_path, in_file))

                in_root = nml_reader.main_node.GetChild("Scene")
                in_items = in_root.GetChilds("Items")

                # ----------- LINKAGE ----------------------
                in_links_root = in_root.GetChild("Links")

                if in_links_root is not None:
                    in_links = in_links_root.GetChilds("Link")

                    for in_link in in_links:
                        child_item = int(get_nml_node_data(in_link.GetChild("Item"), -1))
                        parent_item = int(get_nml_node_data(in_link.GetChild("Link"), -1))

                        if child_item != -1 and parent_item != -1:
                            links.append({"child": child_item, "parent": parent_item})

                            # ----------- INSTANCES ----------------------
                for in_item in in_items:
                    #   Load instances
                    instances = in_item.GetChilds("Instance")

                    for instance in instances:
                        mitem = instance.GetChild("MItem")
                        item = instance.GetChild("Item")
                        template = instance.GetChild("Template")

                        if (
                            mitem is not None
                            and mitem.GetChild("Active") is not None
                            and mitem.GetChild("Helper") is None
                        ):
                            instance_path = get_nml_node_data(instance.GetChild("Template"))

                            if instance_path is not None:
                                # get item name
                                item_name = get_nml_node_data(mitem.GetChild("Id"), "default_name")
                                uid = int(get_nml_node_data(mitem.GetChild("UId"), -1))

                                # transformation
                                position, rotation, scale, rotation_order = parse_transformation(item)

                                new_node = gs.Node(item_name)
                                scn.AddNode(new_node)

                                node_transform = gs.Transform()
                                node_transform.SetPosition(position)
                                node_transform.SetRotation(rotation)
                                node_transform.SetScale(scale)
                                new_node.AddComponent(node_transform)

                                instance_path = instance_path.replace(".nms", ".scn")
                                instance_path = instance_path.replace("scenes/", folder_assets)

                                node_instance = gs.Instance()
                                node_instance.SetPath(instance_path)
                                new_node.AddComponent(node_instance)

                                # ----------- CAMERAS ----------------------
                for in_item in in_items:
                    #   Load cameras
                    mcameras = in_item.GetChilds("MCamera")

                    for mcamera in mcameras:
                        mitem = mcamera.GetChild("MItem")
                        if (
                            mitem is not None
                            and mitem.GetChild("Active") is not None
                            and mitem.GetChild("Helper") is None
                        ):
                            camera = mcamera.GetChild("Camera")
                            item = camera.GetChild("Item")

                            # get item name
                            item_name = get_nml_node_data(mitem.GetChild("Id"), "default_name")
                            uid = int(get_nml_node_data(mitem.GetChild("UId"), -1))

                            # transformation
                            position, rotation, scale, rotation_order = parse_transformation(item)

                            znear = float(get_nml_node_data(item.GetChild("ZNear"), 0.2))
                            zfar = float(get_nml_node_data(item.GetChild("ZFar"), 50000.0))
                            zoom = float(get_nml_node_data(item.GetChild("ZoomFactor"), 5.0)) / 2.0

                            new_node = scene.add_camera(scn)
                            new_node.SetName(item_name)
                            new_node.GetComponentsWithAspect("Transform")[0].SetPosition(position)
                            new_node.GetComponentsWithAspect("Transform")[0].SetRotation(rotation)

                            new_node.GetComponentsWithAspect("Camera")[0].SetZNear(znear)
                            new_node.GetComponentsWithAspect("Camera")[0].SetZFar(zfar)
                            new_node.GetComponentsWithAspect("Camera")[0].SetZoomFactor(zoom)

                            uid_dict[str(uid)] = new_node

                            # ----------- LIGHT ----------------------
                for in_item in in_items:
                    #   Load lights
                    mlights = in_item.GetChilds("MLight")

                    for mlight in mlights:
                        mitem = mlight.GetChild("MItem")
                        if (
                            mitem is not None
                            and mitem.GetChild("Active") is not None
                            and mitem.GetChild("Helper") is None
                        ):
                            light = mlight.GetChild("Light")
                            item = light.GetChild("Item")

                            # get item name
                            item_name = get_nml_node_data(mitem.GetChild("Id"), "default_name")
                            uid = int(get_nml_node_data(mitem.GetChild("UId"), -1))

                            # transformation
                            position, rotation, scale, rotation_order = parse_transformation(item)
                            diffuse_color, specular_color, shadow_color = parse_light_color(light)

                            new_node = scene.add_light(scn)
                            new_node.SetName(item_name)
                            new_node.GetComponentsWithAspect("Transform")[0].SetPosition(position)
                            new_node.GetComponentsWithAspect("Transform")[0].SetRotation(rotation)
                            new_node.GetComponentsWithAspect("Transform")[0].SetScale(scale)

                            # light type
                            light_type = light.GetChild("Type")
                            light_type = get_nml_node_data(light_type, "Point")

                            light_range = float(get_nml_node_data(light.GetChild("Range"), 0.0))

                            if light_type == "Point":
                                new_node.GetComponentsWithAspect("Light")[0].SetModel(gs.Light.Model_Point)
                                new_node.GetComponentsWithAspect("Light")[0].SetRange(light_range)

                            if light_type == "Parallel":
                                new_node.GetComponentsWithAspect("Light")[0].SetModel(gs.Light.Model_Linear)

                            if light_type == "Spot":
                                new_node.GetComponentsWithAspect("Light")[0].SetModel(gs.Light.Model_Spot)
                                new_node.GetComponentsWithAspect("Light")[0].SetRange(light_range)
                                new_node.GetComponentsWithAspect("Light")[0].SetConeAngle(
                                    float(get_nml_node_data(light.GetChild("ConeAngle"), 30.0))
                                )
                                new_node.GetComponentsWithAspect("Light")[0].SetEdgeAngle(
                                    float(get_nml_node_data(light.GetChild("EdgeAngle"), 15.0))
                                )

                            new_node.GetComponentsWithAspect("Light")[0].SetShadowRange(
                                float(get_nml_node_data(light.GetChild("ShadowRange"), 0.0))
                            )
                            new_node.GetComponentsWithAspect("Light")[0].SetClipDistance(
                                float(get_nml_node_data(light.GetChild("ClipDistance"), 300.0))
                            )

                            new_node.GetComponentsWithAspect("Light")[0].SetDiffuseColor(diffuse_color)
                            new_node.GetComponentsWithAspect("Light")[0].SetSpecularColor(specular_color)
                            new_node.GetComponentsWithAspect("Light")[0].SetShadowColor(shadow_color)

                            new_node.GetComponentsWithAspect("Light")[0].SetDiffuseIntensity(
                                float(get_nml_node_data(light.GetChild("DiffuseIntensity"), 1.0))
                            )
                            new_node.GetComponentsWithAspect("Light")[0].SetSpecularIntensity(
                                float(get_nml_node_data(light.GetChild("SpecularIntensity"), 0.0))
                            )

                            new_node.GetComponentsWithAspect("Light")[0].SetZNear(
                                float(get_nml_node_data(light.GetChild("ZNear"), 0.01))
                            )
                            new_node.GetComponentsWithAspect("Light")[0].SetShadowBias(
                                float(get_nml_node_data(light.GetChild("ShadowBias"), 0.01))
                            )

                            uid_dict[str(uid)] = new_node

                            # ----------- GEOMETRIES & NULL OBJECTS ----------------------
                for in_item in in_items:
                    #   Load items with geometry
                    mobjects = in_item.GetChilds("MObject")
                    for mobject in mobjects:
                        mitem = mobject.GetChild("MItem")
                        if (
                            mitem is not None
                            and mitem.GetChild("Active") is not None
                            and mitem.GetChild("Helper") is None
                        ):
                            object = mobject.GetChild("Object")
                            item = object.GetChild("Item")

                            # get item name
                            item_name = get_nml_node_data(mitem.GetChild("Id"), "default_name")
                            uid = int(get_nml_node_data(mitem.GetChild("UId"), -1))

                            # get item geometry
                            geometry_filename = None
                            if object is not None:
                                geometry = object.GetChild("Geometry")
                                if geometry is not None:
                                    geometry_filename = geometry.m_Data
                                    geometry_filename = clean_nml_string(geometry_filename)
                                    if geometry_filename.find("/") > -1:
                                        geometry_filename = geometry_filename.split("/")[-1]
                                    geometry_filename = geometry_filename.replace(".nmg", ".geo")

                                    # transformation
                            position, rotation, scale, rotation_order = parse_transformation(item)

                            new_node = None

                            if geometry_filename is not None and geometry_filename != "":
                                new_node = scene.add_geometry(scn, os.path.join(folder_assets, geometry_filename))
                            else:
                                new_node = scene.add_geometry(scn, "")

                            if new_node is not None:
                                new_node.SetName(item_name)
                                new_node.GetComponentsWithAspect("Transform")[0].SetPosition(position)
                                new_node.GetComponentsWithAspect("Transform")[0].SetRotation(rotation)
                                new_node.GetComponentsWithAspect("Transform")[0].SetScale(scale)

                                # physics
                                physic_item = mitem.GetChild("PhysicItem")
                                if physic_item is not None:
                                    physic_mode = get_nml_node_data(physic_item.GetChild("Mode"), "None")
                                    if physic_mode != "None":
                                        rigid_body = gs.MakeRigidBody()

                                        linear_damping = 1.0 - float(
                                            get_nml_node_data(physic_item.GetChild("LinearDamping_v2"), 1.0)
                                        )
                                        angular_damping = 1.0 - float(
                                            get_nml_node_data(physic_item.GetChild("AngularDamping_v2"), 1.0)
                                        )
                                        rigid_body.SetLinearDamping(linear_damping)
                                        rigid_body.SetAngularDamping(angular_damping)

                                        physic_self_mask = int(get_nml_node_data(physic_item.GetChild("SelfMask"), 1))
                                        physic_collision_mask = int(get_nml_node_data(physic_item.GetChild("Mask"), 1))

                                        new_node.AddComponent(rigid_body)

                                        # iterate on shapes
                                        physic_root_shapes = physic_item.GetChild("Shapes")
                                        if physic_root_shapes is not None:
                                            physic_shapes = physic_root_shapes.GetChilds("GColShape")
                                            if physic_shapes is not None:
                                                for physic_shape in physic_shapes:
                                                    physic_shape_type = get_nml_node_data(
                                                        physic_shape.GetChild("Type"), "Box"
                                                    )

                                                    col_type_dict = {
                                                        "Box": gs.MakeBoxCollision(),
                                                        "Sphere": gs.MakeSphereCollision(),
                                                        "Capsule": gs.MakeCapsuleCollision(),
                                                        "Cylinder": gs.MakeCapsuleCollision(),
                                                        "Mesh": gs.MakeMeshCollision(),
                                                        "Convex": gs.MakeConvexCollision(),
                                                    }

                                                    if physic_shape_type in col_type_dict:
                                                        new_collision_shape = col_type_dict[physic_shape_type]
                                                    else:
                                                        new_collision_shape = gs.MakeBoxCollision()

                                                    new_collision_shape.SetMass(
                                                        float(get_nml_node_data(physic_shape.GetChild("Mass"), 1.0))
                                                    )
                                                    new_collision_shape.SetSelfMask(physic_self_mask)
                                                    new_collision_shape.SetCollisionMask(physic_collision_mask)

                                                    position, rotation, scale, dimensions = parse_collision_shape_transformation(
                                                        physic_shape
                                                    )

                                                    # new_collision_shape.SetMatrix()

                                                    if physic_shape_type == "Box":
                                                        new_collision_shape.SetDimensions(dimensions)
                                                    elif physic_shape_type == "Sphere":
                                                        new_collision_shape.SetRadius(dimensions.x)
                                                    elif (
                                                        physic_shape_type == "Capsule"
                                                        or physic_shape_type == "Cylinder"
                                                    ):
                                                        new_collision_shape.SetRadius(dimensions.x)
                                                        new_collision_shape.SetLength(dimensions.y)

                                                    new_node.AddComponent(new_collision_shape)

                                uid_dict[str(uid)] = new_node

                                # ----------- RE-LINKAGE ----------------------
                for linkage in links:
                    if linkage["parent"] is not None and linkage["child"] is not None:

                        if str(linkage["child"]) in uid_dict and str(linkage["parent"]) in uid_dict:
                            uid_dict[str(linkage["child"])].GetComponentsWithAspect("Transform")[0].SetParent(
                                uid_dict[str(linkage["parent"])]
                            )

                            # ----------- ENVIRONMENT ----------------------
                in_globals = in_root.GetChild("Globals")

                env_global = gs.Environment()
                scn.AddComponent(env_global)

                bg_color, ambient_color, fog_color = parse_globals_color(in_globals)

                ambient_intensity = float(get_nml_node_data(in_globals.GetChild("AmbientIntensity"), 0.5))
                fog_near = float(get_nml_node_data(in_globals.GetChild("FogNear"), 0.5))
                fog_far = float(get_nml_node_data(in_globals.GetChild("FogFar"), 0.5))

                env_global.SetBackgroundColor(bg_color)

                env_global.SetAmbientIntensity(ambient_intensity)
                env_global.SetAmbientColor(ambient_color)

                env_global.SetFogNear(fog_near)
                env_global.SetFogFar(fog_far)
                env_global.SetFogColor(fog_color)

                scn.Commit()
                scn.WaitCommit()

                # Creates the output folder
                folder_out = folder_path.replace(root_in + "\\", "")
                folder_out = folder_out.replace(root_in + "/", "")
                folder_out = folder_out.replace(root_in, "")

                if folder_out != "" and not os.path.exists(os.path.join(root_out, folder_out)):
                    os.makedirs(os.path.join(root_out, folder_out), exist_ok=True)

                    # Saves the scene
                out_file = os.path.join("@out", folder_out, in_file.replace(".nms", ".scn"))
                print("saving to ", out_file)
                scn.Save(out_file, gs.SceneSaveContext(render.get_render_system()))

                # Clears the scene
                scn.Clear()
                scn.Dispose()
                scn = None
    def init(cls):

        #-------- Environnement:
        cls.couleur_horizon=gs.Color(10./255.,1./255.,5./255.,1.)
        cls.couleur_zenith=gs.Color(70./255.,150./255.,255./255.,1.)
        cls.couleur_ambiante=gs.Color(70./255.,150./255.,255./255.,1.)
        #cls.couleur_ambiante=gs.Color(1,0,0,1)

        #-------- Création de la scène:
        cls.scene3d=scene.new_scene()

        cls.contexte=gs.SceneLoadContext(render.get_render_system())
        #cls.scene3d.Load("scene_terrain_marching/Terrain_Marching.scn",cls.contexte)
        cls.scene3d.Load("scene_01/Gare_test.scn",cls.contexte)
        #----------- Attend que la scène soit accessible:
        scene.update_scene(cls.scene3d,1/60)

        #----------- Prise en main de la scène:
        cls.noeuds=cls.contexte.GetNodes()
        cls.components=cls.scene3d.GetComponents()

        for comp in cls.components:
            if comp.GetAspect()=="Environment":
                cls.environnement=comp
                break

        #----------- Init billboards et shaders:

        cls.init_billboards(cls.noeuds,cls.liste_sprites_scene)
        cls.init_shaders(cls.noeuds)

        #----------- Init environnement:

        cls.environnement.SetBackgroundColor(gs.Color(0.,0.,0.,0))
        cls.environnement.SetFogColor(cls.couleur_zenith)
        cls.environnement.SetFogNear(10)
        cls.environnement.SetFogFar(6000)
        cls.environnement.SetAmbientIntensity(.1)
        cls.environnement.SetAmbientColor(cls.couleur_ambiante)

        cls.camera=cls.scene3d.GetNode("Camera")
        cls.camera.GetCamera().SetZNear(.1)
        cls.camera.GetCamera().SetZFar(10000.)
        cls.camera_start_pos_mem=cls.camera.GetTransform().GetPosition()
        #cls.camera.AddComponent(gs.Target())   #Si la caméra suit une cible

        cls.lumiere_ciel=cls.scene3d.GetNode("clair obscur")
        cls.lumiere_soleil=cls.scene3d.GetNode("soleil")
        cls.lumiere_ciel.GetLight().SetDiffuseColor(gs.Color(77./255.,158./255.,255./255.,1.))
        cls.lumiere_ciel.GetLight().SetDiffuseIntensity(0.2)
        cls.lumiere_soleil.GetLight().SetDiffuseColor(gs.Color(255./255.,250./255.,223./255.,1.))

        cls.lumiere_soleil.GetLight().SetShadow(gs.Light.Shadow_Map)    #Active les ombres portées
        cls.lumiere_soleil.GetLight().SetShadowRange(100)

        cls.lumiere_soleil.GetLight().SetDiffuseIntensity(1.)
        cls.lumiere_soleil.GetLight().SetSpecularIntensity(1.)

        orientation=gs.Vector3(54/180*pi,135/180*pi,0)
        cls.lumiere_ciel.GetTransform().SetRotation(orientation)

        orientation=gs.Vector3(54/180*pi,-45/180*pi,0)
        cls.lumiere_soleil.GetTransform().SetRotation(orientation)

        #cls.lumiere_ciel.GetLight().SetDiffuseIntensity(2.)
        #cls.lumiere_ciel.GetLight().SetSpecularIntensity(2.)



        #-------- Mémorise les intensités lumineuses pour le switch des éclairages:
        noeuds=cls.scene3d.GetNodes()
        for noeud in noeuds:
            if not noeud.GetLight()==None:
                cls.lumieres_intens_mem.append(noeud.GetLight().GetDiffuseIntensity())
                cls.lumieres_intens_mem.append(noeud.GetLight().GetSpecularIntensity())

        #--------Init les variables de shaders:

        #Couleur d'ambiance:
        """
        for noeud in cls.noeuds:
            if not noeud.GetObject()==None:
                obj=noeud.GetObject()
                geo=obj.GetGeometry()
                n=geo.GetMaterialCount()
                i=0
                while i<n:
                    materiau=geo.GetMaterial(i)
                    materiau.SetFloat3("ambient_color",cls.couleur_ambiante.r*0.,cls.couleur_ambiante.g*0.,cls.couleur_ambiante.b*0.)
                    i+=1
        """
        #--------- Init listes des sprites:
        #cls.liste_sprites_scene.append(...)


        #--------- Inits de l'éditeur embarqué
        cls.cube_l_soleil=scene.add_cube(cls.scene3d,gs.Matrix4.Identity,0.5,0.5,2.)
        cls.cube_l_ciel=scene.add_cube(cls.scene3d,gs.Matrix4.Identity,0.5,0.5,2.)

        cls.scene3d.SetCurrentCamera(cls.camera)

        scene.update_scene(cls.scene3d,1/60)

        #------------- Filtres:
        Demo.pr_alpha_rendu=1.
        Demo.pr_alpha_aura=0.
        Demo.pr_taille_aura=50
        Demo.pr_aura_contraste=2
        Demo.pr_aura_seuil_contraste=0.6

        #-------------- Init le shader de rendu de terrain:
        cls.shader_terrain=Demo.rendu.LoadShader("shaders_marching/terrain_marching_montagnes.isl")
        cls.texture_terrain1=Demo.rendu.LoadTexture("textures/bruit_1024.png")
        cls.texture_terrain2=Demo.rendu.LoadTexture("textures/bruit_512.png")
        cls.texture_terrain3=Demo.rendu.LoadTexture("textures/bruit_512.png")

        cls.facteur_echelle_terrain_l1 = gs.Vector2(20000,20000)
        cls.facteur_echelle_terrain_l2 = gs.Vector2(1000,1000)
        cls.facteur_echelle_terrain_l3 = gs.Vector2(90,90)

        cls.amplitude_l1=1000
        cls.amplitude_l2=37
        cls.amplitude_l3=4
        cls.terrain_intensite_ambiante=0.2

        cls.facteur_precision_distance=1.01
        cls.couleur_neige=gs.Color(0.91,0.91,1)
        cls.couleur_eau=gs.Color(117./255.,219./255.,211./255.)
        cls.altitude_eau=15
    def init(cls):

        #-------- Environnement:
        cls.couleur_horizon = gs.Color(10. / 255., 1. / 255., 5. / 255., 1.)
        cls.couleur_zenith = gs.Color(70. / 255., 150. / 255., 255. / 255., 1.)
        cls.couleur_ambiante = gs.Color(70. / 255., 150. / 255., 255. / 255.,
                                        1.)
        #cls.couleur_ambiante=gs.Color(1,0,0,1)

        #-------- Création de la scène:
        cls.scene3d = scene.new_scene()

        cls.contexte = gs.SceneLoadContext(render.get_render_system())
        #cls.scene3d.Load("scene_terrain_marching/Terrain_Marching.scn",cls.contexte)
        cls.scene3d.Load("scene_01/Gare_test.scn", cls.contexte)
        #----------- Attend que la scène soit accessible:
        scene.update_scene(cls.scene3d, 1 / 60)

        #----------- Prise en main de la scène:
        cls.noeuds = cls.contexte.GetNodes()
        cls.components = cls.scene3d.GetComponents()

        for comp in cls.components:
            if comp.GetAspect() == "Environment":
                cls.environnement = comp
                break

        #----------- Init billboards et shaders:

        cls.init_billboards(cls.noeuds, cls.liste_sprites_scene)
        cls.init_shaders(cls.noeuds)

        #----------- Init environnement:

        cls.environnement.SetBackgroundColor(gs.Color(0., 0., 0., 0))
        cls.environnement.SetFogColor(cls.couleur_zenith)
        cls.environnement.SetFogNear(10)
        cls.environnement.SetFogFar(6000)
        cls.environnement.SetAmbientIntensity(.1)
        cls.environnement.SetAmbientColor(cls.couleur_ambiante)

        cls.camera = cls.scene3d.GetNode("Camera")
        cls.camera.GetCamera().SetZNear(.1)
        cls.camera.GetCamera().SetZFar(10000.)
        cls.camera_start_pos_mem = cls.camera.GetTransform().GetPosition()
        #cls.camera.AddComponent(gs.Target())   #Si la caméra suit une cible

        cls.lumiere_ciel = cls.scene3d.GetNode("clair obscur")
        cls.lumiere_soleil = cls.scene3d.GetNode("soleil")
        cls.lumiere_ciel.GetLight().SetDiffuseColor(
            gs.Color(77. / 255., 158. / 255., 255. / 255., 1.))
        cls.lumiere_ciel.GetLight().SetDiffuseIntensity(0.2)
        cls.lumiere_soleil.GetLight().SetDiffuseColor(
            gs.Color(255. / 255., 250. / 255., 223. / 255., 1.))

        cls.lumiere_soleil.GetLight().SetShadow(
            gs.Light.Shadow_Map)  #Active les ombres portées
        cls.lumiere_soleil.GetLight().SetShadowRange(100)

        cls.lumiere_soleil.GetLight().SetDiffuseIntensity(1.)
        cls.lumiere_soleil.GetLight().SetSpecularIntensity(1.)

        orientation = gs.Vector3(54 / 180 * pi, 135 / 180 * pi, 0)
        cls.lumiere_ciel.GetTransform().SetRotation(orientation)

        orientation = gs.Vector3(54 / 180 * pi, -45 / 180 * pi, 0)
        cls.lumiere_soleil.GetTransform().SetRotation(orientation)

        #cls.lumiere_ciel.GetLight().SetDiffuseIntensity(2.)
        #cls.lumiere_ciel.GetLight().SetSpecularIntensity(2.)

        #-------- Mémorise les intensités lumineuses pour le switch des éclairages:
        noeuds = cls.scene3d.GetNodes()
        for noeud in noeuds:
            if not noeud.GetLight() == None:
                cls.lumieres_intens_mem.append(
                    noeud.GetLight().GetDiffuseIntensity())
                cls.lumieres_intens_mem.append(
                    noeud.GetLight().GetSpecularIntensity())

        #--------Init les variables de shaders:

        #Couleur d'ambiance:
        """
        for noeud in cls.noeuds:
            if not noeud.GetObject()==None:
                obj=noeud.GetObject()
                geo=obj.GetGeometry()
                n=geo.GetMaterialCount()
                i=0
                while i<n:
                    materiau=geo.GetMaterial(i)
                    materiau.SetFloat3("ambient_color",cls.couleur_ambiante.r*0.,cls.couleur_ambiante.g*0.,cls.couleur_ambiante.b*0.)
                    i+=1
        """
        #--------- Init listes des sprites:
        #cls.liste_sprites_scene.append(...)

        #--------- Inits de l'éditeur embarqué
        cls.cube_l_soleil = scene.add_cube(cls.scene3d, gs.Matrix4.Identity,
                                           0.5, 0.5, 2.)
        cls.cube_l_ciel = scene.add_cube(cls.scene3d, gs.Matrix4.Identity, 0.5,
                                         0.5, 2.)

        cls.scene3d.SetCurrentCamera(cls.camera)

        scene.update_scene(cls.scene3d, 1 / 60)

        #------------- Filtres:
        Demo.pr_alpha_rendu = 1.
        Demo.pr_alpha_aura = 0.
        Demo.pr_taille_aura = 50
        Demo.pr_aura_contraste = 2
        Demo.pr_aura_seuil_contraste = 0.6

        #-------------- Init le shader de rendu de terrain:
        cls.shader_terrain = Demo.rendu.LoadShader(
            "shaders_marching/terrain_marching_montagnes.isl")
        cls.texture_terrain1 = Demo.rendu.LoadTexture(
            "textures/bruit_1024.png")
        cls.texture_terrain2 = Demo.rendu.LoadTexture("textures/bruit_512.png")
        cls.texture_terrain3 = Demo.rendu.LoadTexture("textures/bruit_512.png")

        cls.facteur_echelle_terrain_l1 = gs.Vector2(20000, 20000)
        cls.facteur_echelle_terrain_l2 = gs.Vector2(1000, 1000)
        cls.facteur_echelle_terrain_l3 = gs.Vector2(90, 90)

        cls.amplitude_l1 = 1000
        cls.amplitude_l2 = 37
        cls.amplitude_l3 = 4
        cls.terrain_intensite_ambiante = 0.2

        cls.facteur_precision_distance = 1.01
        cls.couleur_neige = gs.Color(0.91, 0.91, 1)
        cls.couleur_eau = gs.Color(117. / 255., 219. / 255., 211. / 255.)
        cls.altitude_eau = 15
def setup():
	global scn, title_music
	scn = scene.new_scene()
	scn.Load('@assets/3d/level_title.scn', gs.SceneLoadContext(render.get_render_system()))
	title_music = audio.get_mixer().Stream("@assets/sfx/sfx_cellos_loop.ogg")