Step 1 - Scene

This page provides details about scene.json and its underlying validation rules along with a sample scene.json file of a Bowling Alley VR Scene for your review.

Here is the scene.json template that is to be used for filling the scene requirement specifications.

{
   "_scenename":"",
   "_sid":"",
   "_slabel":"",
      "_playarea":{
      "#pid":"",
      "#length_playarea":"",
      "#breadth_playarea":"",
      "#height_playarea":"",
	  "#comment":"",
	  "#x_scenecenter":"",
      "#y_scenecenter":"",
      "#z_scenecenter":""
   
	  },   
   "_camera":
  { 
     "IsSceneObject":"",
     "trackingorigin":""
   },
   "_initialcamerapos":{
      "#x_initialcamerapos":"0",
      "#y_initialcamerapos":"5",
      "#z_initialcamerapos":"0"
   },
   "_viewport":{
      "#x_viewport":"",
      "#y_viewport":"",
      "#w_viewport":"",
	  "#h_viewport":""
	 },
	"_clippingplane":{
	"near_cp":"",
	"far_cp":""
	}, 
   "_horizon":"",
   "_dof":"",
   "_skybox":"",
   "_controllers":
	{
		"type":"", 
		"raycast":"", 
		"raydistance":"", 
		"raythinkness":"", 
		"raycolor":"", 
		"raytype":""
		},
   "_gravity":{
     "value":""
   },
   "_interaction":"",
   "_nestedscene":{
      "#value":"",
      "#scenecount":"",
      "#sid_order":""
   },
   "_audio":"",
   "_timeline":"",
   "_Opttxt1":"",
   "@context_mock":"",
   "usertype":[
   {
	 "type": "",
	 "uplayarea":{
	 "#length_uplayarea":"",
     "#breadth_uplayarea":"",
	 "#height_uplayarea":""
	},
	"initialupos":{
      "#x_initialupos":"",
      "#y_initialupos":"",
      "#z_initialupos":""
		},
		"uplayareacenter":{
	  "#x_uplayareacenter":"",
      "#y_uplayareacenter":"",
      "#z_uplayareacenter":""
	  }
   },
	  {
	 "type": "",
	 "uplayarea":{
	 "#length_uplayarea":"",
     "#breadth_uplayarea":"",
	 "#height_uplayarea":""
	},
	"initialupos":{
      "#x_initialupos":"",
      "#y_initialupos":"",
      "#z_initialupos":""
		},
		"uplayareacenter":{
	  "#x_uplayareacenter":"",
      "#y_uplayareacenter":"",
      "#z_uplayareacenter":""
	  }
	  }
	]
}

Here is the scenevalidator.json with details about each specification along with its usage

{
    "_scenename":{
       "req":"mandatory",
       "typeof":"string",
       "repeat":"notallow",
       "%comment%":"Mention your VR Scene name here"
    },
    "_sid":{
       "req":"mandatory",
       "typeof":"string",
       "repeat":"notallow",
       "%comment%":"A fillable Unique Identifier of the scene"
    },
    "_slabel":{
       "req":"optional",
       "typeof":"string",
       "repeat":"notallow",
       "%comment%":"A fillable Optional text field for scene description in 200 words"
    },
   "#pid":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"string",
      "%comment%":"Unique identifier for playarea in the VR Scene"
   },
   "#length_playarea":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"string",
      "repeat":"notallow",
      "%comment%":"Length dimension of the playarea and it is mandatory value tag"
   },
   "#breadth_playarea":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"string",
      "repeat":"notallow",
      "%comment%":"Breadth dimension of the playarea and it is mandatory value tag"
   },
   "#height_playarea":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"string",
      "repeat":"notallow",
      "%comment%":"Height dimension of the playarea and it is mandatory value tag"
   },
   
   "#x_scenecenter":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"x-axis value of scene center of the playarea and it is mandatory value tag"
   },
   "#y_scenecenter":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"y-axis value of scene center of the playarea and it is mandatory value tag"
   },
   "#z_scenecenter":{
      "req":"mandatory",
      "root":"_playarea",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"z-axis value of scene center of the playarea and it is mandatory value tag"
   },
   
    
        "IsSceneObject":{
      "root":"_camera",
       "req":"mandatory",
       "typeof":"boolean",
       "repeat":"notallow",
       "%comment%":"true for yes, false for no. This is to set initial camera in the scene. Additional attributes include IsSceneObject which holds boolean value and trackingorigin holds string value i.e. either floor (physical real-world ground) or +/- height from the physical real-world ground. Example: 5+floor"
    },
      "trackingorigin":{
      "root":"_camera",
       "req":"mandatory",
       "typeof":"string",
       "repeat":"notallow",
       "%comment%":"true for yes, false for no. This is to set initial camera in the scene. Additional attributes include IsSceneObject which holds boolean value and trackingorigin holds string value i.e. either floor (physical real-world ground) or +/- height from the physical real-world ground. Example: 5+floor"
    },
    "#x_initialcamerapos":{
      "root":"_initialcamerapos",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"x-axis value of initial camera position of the playarea and it is mandatory value tag"
    },
    "#y_initialcamerapos":{
      "root":"_initialcamerapos",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"y-axis value of initial camera position of the playarea and it is mandatory value tag"
    },
    "#z_initialcamerapos":{
      "root":"_initialcamerapos",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"z-axis value of initial camera position of the playarea and it is mandatory value tag"
    },

    "#x_viewport":{
      "root":"_viewport",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"x-axis value of viewport of the playarea and it is mandatory value tag"
    },
    "#y_viewport":{
      "root":"_viewport",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"y-axis value of viewport of the playarea and it is mandatory value tag"
    },
    "#w_viewport":{
      "root":"_viewport",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"width value of viewport of the playarea and it is mandatory value tag"
    },
    "#h_viewport":{
      "root":"_viewport",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"allow",
      "%comment%":"height value of viewport of the playarea and it is mandatory value tag"
    },
   
   "near_cp":{
      "root":"_clippingplane",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"Used to represent near clipping plane with value ranging from 0.0 to 1000000"
   },

   "far_cp":{
      "root":"_clippingplane",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"Used to represent far clipping plane with value ranging from 0.0 to 1000000"
   },

    "_horizon":{
       "req":"mandatory",
       "typeof":"boolean",
       "repeat":"notallow",
       "%comment%":"true for yes, false for no. This is to set horizon sun to map the terrian with real world"
    },
    "_dof":{
       "req":"mandatory",
       "typeof":"number",
       "repeat":"notallow",
       "%comment%":"accepts two values 3 and 6. Throw errors for the rest of the values"
    },
    "_skybox":{
       "req":"mandatory",
       "typeof":"number",
       "repeat":"notallow",
       "%comment%":"accepts two values 3 and 6. Throw errors for the rest of the values"
    },
   
   "type":{
      "root":"_controllers",
      "req":"mandatory",
      "typeof":"string",
      "repeat":"notallow",
      "%comment%":"To decide the type of controller like Hand, fingure, gesture and other types of controllers"
   },
   "raycast":{
      "root":"_controllers",
      "req":"mandatory",
      "typeof":"boolean",
      "repeat":"notallow",
      "%comment%":"It is a Physics function that projects a Ray into the scene, returning a boolean value if a target was successfully hit. It is a true or false flag"
   },
   "raydistance":{
      "root":"_controllers",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"It is the distance represents the magnitude of the vector from the ray's origin to the impact point. Value 10 is "
   },
   "raythinkness":{
      "root":"_controllers",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"It is the thickness of ray with minimum value as 1 and max value as 10"
   },
   "raycolor":{
      "root":"_controllers",
      "req":"mandatory",
      "typeof":"string",
      "repeat":"notallow",
      "%comment%":"It is the color or ray casted in the Scene. Use color name and use transparent for no color"
   },
   "raytype":{
      "root":"_controllers",
      "req":"mandatory",
      "typeof":"string",
      "repeat":"notallow",
      "%comment%":"It is a type of ray which can be a straightline, curve line, wave etc."
   },
   "value":{
      "root":"_gravity",
      "req":"mandatory",
      "typeof":"number",
      "%comment%":"value of earth gravity. Default is 10."
   },
    "_interaction":{
       "req":"mandatory",
       "typeof":"boolean",
       "repeat":"notallow",
       "%comment%":"This describes the interaction capacity in the scene. True for interactions on and False for no interactions"
    },
   "#value":{
      "root":"_nestedscene",
      "req":"mandatory",
      "typeof":"boolean",
      "repeat":"notallow",
      "%comment%":"True if there is a scene within a scene."
   },
   "#scenecount":{
      "root":"_nestedscene",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"Number of scenes as nested scenes"
   },
   "#sid_order":{
      "root":"_nestedscene",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"the order of the nested scenes"
   },
    "_audio":{
       "req":"mandatory",
       "typeof":"boolean",
       "repeat":"notallow",
       "%comment%":"true for spatial audio, false for no spatial audio"
    },
    "_timeline":{
       "req":"mandatory",
       "typeof":"boolean",
       "repeat":"notallow",
       "%comment%":"true for timed scene with dynamic events, false for a static scene with static events"
    },
    "_Opttxt1":{
       "req":"optional",
       "typeof":"string",
       "repeat":"notallow",
       "%comment%":"For user optional text"
    },
    "@context_mock":{
       "req":"optional",
       "typeof":"string",
       "repeat":"notallow",
       "%comment%":"For external reference URLs like figma screens or other resource links"
    },
     "usertype":{
       "req":"mandatory",
       "typeof":"object",
       "repeat":"notallow",
       "%comment%":"Defines the scene as Single user or Multi-user scene along with additional values like uplayarea to define the length, breadth and height of the user along with initialupos value in x,y,z coordinates"
    },
    "type":{
  "root": "usertype",
   "req":"mandatory",
    "typeof":"string",
    "repeat":"allow",
    "%comment%":"Is the scene single user type or a multi user type. Use single or multi for value tag"
    },
 "#length_uplayarea":{
  "root": "uplayarea",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"The length of a user playarea"
    },
    "#breadth_uplayarea":{
  "root": "uplayarea",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"breadth of a user playarea"
    },
    "#height_uplayarea":{
      "root": "uplayarea",
       "proot":"usertype", 
       "req":"mandatory",
        "typeof":"number",
        "repeat":"allow",
        "%comment%":"height of a user playarea"
        },
    "#x_initialupos":{
  "root": "initialupos",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"x-axis  of a user in this user play area"
    },
    "#y_initialupos":{
  "root": "initialupos",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"y-axis of a user in this user play area"
    },
    "#z_initialupos":{
  "root": "initialupos",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"z-axis of a user in this user play area"
    },
      "#x_uplayareacenter":{
  "root": "uplayareacenter",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"x-axis initial position of a user in this user play area"
    },
    "#y_uplayareacenter":{
  "root": "uplayareacenter",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"x-axis initial position of a user in this user play area"
    },
    "#z_uplayareacenter":{
  "root": "uplayareacenter",
   "proot":"usertype", 
   "req":"mandatory",
    "typeof":"number",
    "repeat":"allow",
    "%comment%":"z-axis initial position of a user in this user play area"
    }
    
 }

Here is a sample scene.json file for a Bowling Alley VR Scene.

{
   "_scenename":"Bowlling Alley",
   "_sid":"45189",
   "_slabel":"This is a interactive game",
      "_playarea":{
      "#pid":"p1",
      "#length":"50",
      "#breadth":"50",
      "#height":"50",
	  "#comment":"Values in feets",
	  "#x_scenecenter":0,
      "#y_scenecenter":5,
      "#z_scenecenter":0
	  },   
   "_camera":
  { 
     "IsSceneObject":true,
     "trackingorigin":"floor"
   },
   "_initialcamerapos":{
      "#x_initialcamerapos":"0",
      "#y_initialcamerapos":"5",
      "#z_initialcamerapos":"0"
   },
   "_viewport":{
      "#x_viewport":"0",
      "#y_viewport":"0",
      "#w_viewport":"1",
	  "#h_viewport":"1"
	 },
	"_clippingplane":{
	"near_cp":0.01,
	"far_cp":1000
	}, 
   "_horizon":true,
   "_dof":6,
   "_skybox":1,
   "_controllers":
	{
		"type":"hand", "raycast":true, "raydistance":10, "raythinkness":1, "raycolor":"red", "raytype":"curve"
		},
   "_gravity":{
     "value":10
   },
   "_interaction":true,
   "_nestedscene":{
      "#value":false,
      "#scenecount":0,
      "#sid_order":0
   },
   "_audio":true,
   "_timeline":true,
   "_Opttxt1":"null",
   "@context_mock":"_blank",
   "usertype":[
   {
	 "type": "single",
	 "uplayarea":{
	 "#length_uplayarea":20,
     "#breadth_uplayarea":20,
	 "#height_uplayarea":50
	},
	"initialupos":{
      "#x_initialupos":-10,
      "#y_initialupos":0,
      "#z_initialupos":0
		},
		"uplayareacenter":{
	  "#x_uplayareacenter":-10,
      "#y_uplayareacenter":10,
      "#z_uplayareacenter":0
	  }
   },
	  {
	 "type": "multi",
	 "uplayarea":{
	 "#length_uplayarea":25,
     "#breadth_uplayarea":25,
	 "#height_uplayarea":50
	},
	"initialupos":{
      "#x_initialupos":-10,
      "#y_initialupos":0,
      "#z_initialupos":0
		},
		"uplayareacenter":{
	  "#x_uplayareacenter":-10,
      "#y_uplayareacenter":10,
      "#z_uplayareacenter":0
	  }
	  }
	]
}

Last updated