Les fichiers CSCN sont au format texte et sont donc modifiables assez facilement (pour peu que l'on comprenne quelque chose à la syntaxe )

Types de données

Les types de données qui apparaissent dans les fichiers de scène sont les suivants :
  • entier : un entier tout con
  • réel : un nombre réel, le séparateur des décimales est le point '.'
  • 2, 3, 4 entiers : 2, 3 ou 4 entiers, séparés par des ',' ou des ' '
  • 2, 3, 4 réels : 2, 3 ou 4 réels, séparés par des ',' ou des ' '
  • matrice de 2x2, 3x3, 4x4 réels : 2, 3 ou 4 groupes séparés par des ';' de 2, 3 ou 4 réels séparés par des ',' ou des ' '
  • couleur : les 4 composantes (RGBA) d'une couleur, exprimées en réels compris entre 0.0 et 1.0
  • nom : chaîne de caractère




Sections

Description

Le fichier est décomposé en sections décrites de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
[type_section] [nom_section]
{
	// informations de la section
}
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
light Light0
{
	type directional
	position 0.0 0.0 1.0
}
Certaines sections peuvent avoir des sous-sections :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
material Bronze
{
	pass
	{
		ambient 0.2125 0.1275 0.054 1.0
		diffuse 0.714 0.4284 0.12144 1.0
		emissive 0.0 0.0 0.0 1.0
		specular 0.393548 0.271906 0.166721 1.0
		shininess 25.6
	}
}

Liste des directives utilisables hors section

Certaines directives peuvent être utilisées hors section, et ne peuvent pas l'être dans une section :

  1. 'ambient_light' : couleur
    Définit la couleur de l'éclairage ambiant



Liste des sections

Les différentes sections possibles sont les suivantes:
  • light
  • scene_node
  • material
  • object



  1. Section 'light'
    Sert à définir une lumière pour la scène.
    Les informations à renseigner sont les suivantes :

    1. 'type' : nom
      3 types de lumières existent dans Castor3D :
      • directional : lumière directionnelle (telle le soleil).
      • point_light : une lumière située à un endroit et émettant dans toutes les directions.
      • spot_light : une lumière située à un endroit et émettant dans un cône orienté dans une direction.
    2. 'position' : 3 réels
      Définit la position de la source de lumière. Pour les lumières directionnelles, définit la direction d'où la lumière arrive.
    3. 'attenuation' : 3 réels, spot_light et point_light uniquement
      Définit les 3 composantes d'atténuation de la lumière en fonction de l'éloignement de la source : constante, linéaire et quadratique.
    4. 'cut_off' : 1 réel, spot_light uniquement
      Ouverture de l'angle du cône du spot.
    5. 'exponent' : 1 réel, spot_light uniquement
      Attenuation fonction de la distance entre le point éclairé et le centre du cône lumineux.
    6. 'orientation' : 4 réels, spot_light uniquement
      Orientation du spot. Il s'agit d'un quaternion.
    7. 'parent' : nom
      Définit le nom du scene_node auquel la lumière est attachée


  2. Sections 'scene_node'
    Définit les propriétés d'un SceneNode. Les lumières, géométries et caméras ont besoin d'être attachées à un SceneNode pour être affichées dans la scène.

    1. 'attach_to' : nom
      Définit le Node parent de celui-ci. Par défaut le parent est le RootNode. Le fait de transformer (tranlate, rotate, scale) un node parent transforme ses enfants.
    2. 'position' : 3 réels
      La position du node par rapport à son parent.
    3. 'orientation' : 4 réels
      Quaternion représentant l'orientation du node par rapport à son parent.
    4. 'scale' : 3 réels
      Echelle du node par rapport à son parent.


  3. Section 'material'
    1. 'pass' : nouvelle section
      Commence un nouvelle section décrivant les propriétés de la passe.



    • Section 'pass'
      Section décrivant les propriétés d'une passe

      1. 'ambient' : couleur
        Définit la couleur ambiante de cette passe.
      2. 'diffuse' : couleur
        Définit la couleur diffuse de cette passe.
      3. 'emissive' : couleur
        Définit la couleur émise par cette passe.
      4. 'specular' : couleur
        Définit la couleur réfléchie par cette passe.
      5. 'shininess' : 1 réel
        Définit la façon dont la lumière est réfléchie.
      6. 'texture_unit' : nouvelle section
        Définit une nouvelle section concernant une texture
      7. 'shader_program' : nouvelle section
        Définit une nouvelle section concernant un shader



      • Section 'texture_unit'
        Cette section décrit les informations d'une texture unit.

        1. 'image' : nom
          Définit le chemin où trouver l'image
        2. 'colour' : couleur
          Définit la couleur de base
        3. 'map_type' : entier entre 0 et 3
          Définit la façon dont l'image est mappée sur l'objet :
          • 0 : aucun effet particulier
          • 1 : reflexion mapping
          • 2 : sphere mapping


      • Section 'shader_program'
        Décrit un programme de shader (vertex + fragment/pixel)

        1. 'vertex_program' : nouvelle section
          Définit une section décrivant le programme utilisé pour la partie Vertex du shader
        2. 'pixel_program' : nouvelle section
          Définit une section décrivant le programme utilisé pour la partie Pixel (Fragment) du shader
        3. 'geometry_program' : nouvelle section
          Définit une section décrivant le programme utilisé pour la partie Geometry du shader
        4. Sections 'vertex_program', 'pixel_program', 'geometry_program'
          Décrit un programme vertex, pixel ou geometry pour le shader courant

          • 'file' : nom
            Définit le nom du fichier utilisé pour le programme utilisé
          • 'variable' : nouvelle section
            Définit une section de propriétés d'une variable à passer au shader


          • Section 'variable'
            Décrit une variable à passer au shader

            1. 'type' : nom
              Nom du type de la variable, peut être :
              • int : 1 entier
              • float : 1 réel
              • vec2i : 2 entiers
              • vec3i : 3 entiers
              • vec4i : 4 entiers
              • vec2f : 2 réels
              • vec3f : 3 réels
              • vec4f : 4 réels
              • mat2f : matrice 2x2 réels
              • mat3f : matrice 3x3 réels
              • mat4f : matrice 4x4 réels
            2. 'name' : nom
              Nom de la variable telle qu'elle apparaît dans les fichiers de shader
            3. 'value' :
              Valeur de la variable, fonction du type choisi

  4. Section 'object'
    Permet de définir un objet (géométrie). Cet objet doit être attaché à un SceneNode pour être visible et doit contenir un mesh décrivant son aspect.

    1. 'parent' : nom
      Nom du SceneNode auquel la géométrie est attachée
    2. 'mesh' : nom, nouvelle section
      Crée le mesh ayant pour nom le nom donné à la balise. Ouvre une sous-section de description du mesh


  5. Section 'mesh'
    Permet de définir un mesh (type, material, submeshes, ...)

    1. 'type' : nom
      Nom du type de mesh. Peut être:
      • custom : mesh défini manuellement ou dans un fichier .csmesh
      • cube : cube, il faut définir ses 3 dimensions par la suite
      • cone : cône, il faut définir son rayon et sa hauteur par la suite
      • cylinder : cylindre, dont il faut entrer ensuite le rayon et la hauteur
      • sphere : sphère à faces quad, il faut définir le nombre de subdivision et le rayon
      • icosaedron : sphère à faces tri, il faut définir le nombre de subdivision et le rayon
      • torus : torre, il est nécessaire de définir le nombre de subdivisions internes, externes et les rayons interne et externe
    2. 'material' : nom
      Nom d'un material défini dans un fichier .csmat ou dans ce fichier. Applique le material à tous les submeshes
    3. 'submesh' : nouvelle section
      Définit un submesh, uniquement si le type du mesh est 'custom'



    • Section 'submesh'
      Permet de définir un submesh (vertex, smoothing groups, materials)

      1. 'material' : nom
        Nom d'un material défini dans un fichier .csmat ou dans ce fichier. Applique le material au submesh
      2. 'vertex' : 3 coordonnées
        Ajoute le vertex défini par les coordonnées au submesh
      3. 'smoothing_group' : nouvelle section
        Ajoute un smoothing group à définir au submesh.



      • Section 'smoothing_group'
        Permet de définir une groupe de faces dont les normales smooth seront calculées uniquement dans le groupe

        1. ' face' : 3 ou 4 indices
          Définit une face qui utilise les 3 ou 4 indices de vertex. S'il y a plus de 3 indices, crée autant de faces triangulaires que nécessaire
        2. 'uv' : autant d'uv que d'indices de la face précédente
          Définit les uv à utiliser pour la face déclarée précédemment.


[EDIT :]
Le 23 janvier 2011
Mise à jour pour rester cohérent avec la version 0.6.1.1