/IMML

IMML stands for Immersive Media Markup Language and is an XML based language for describing virtual worlds, immersive spaces and more!

Primary LanguageC#MIT LicenseMIT

IMML

Immersive Media Markup Language

Abstract, lightweight, flexible

IMML aims to be a lightweight, lean and mean specification that supports spatial presentation of media, without being tied to any particular format or device.

To achieve this, IMML provides an abstract series of elements as its foundation that represent common media types including 3d models, primitive models (box, sphere, etc), sounds, text, video and images.

All elements are defined within an xsd file that can be used to validate markup in any editor that supports xsd files, such as Visual Studio:

vs-associate-xsd

Visit the wiki for code samples that show how to use the library.

Runtime Implementations

While this repository contains an implementation of the IMML specificaion in C#, it does not contain bindings to a 3d renderer which is typically where you would want to use IMML.

Below are some runtimes that support IMML:

  • IMMLjs - JavaScript runtime powered by Babylon.js
  • IMMLSharp - C# runtime powered by UrhoSharp or Unity

Examples

Hello world with an image
	<IMML Camera="Camera" xmlns="http://schemas.vastpark.com/2007/imml/">
		<Camera Name="Camera" Position="0,0,-5" />
		
		<Primitive Type="Box">
			<MaterialGroup Id="-1">
				<Texture Source="hello-world.jpg" />					
			</MaterialGroup>
		</Primitive>
	</IMML>
Stack of elements

In addition to elements representing various media types, the specification provides several layout elements that can be used to arrange child elements with ease, such as stack or grid layout.

	<IMML Camera="Camera" xmlns="http://schemas.vastpark.com/2007/imml/">
		<Camera Name="Camera" Position="0,0,-5" />
		
		<Stack Spacing="0,1,0">
			<Model Source="robot-head.model" Size="1,1,1" />
			<Model Source="robot-body.model" Size="1,2,1" />
			<Model Source="robot-legs.model" Size="1,2,1" />
		</Stack>
	</IMML>
Compose from multiple independent documents

For increased flexibility, multiple IMML files can be combined to form a single scene via the Include element.

	<IMML Camera="Camera" xmlns="http://schemas.vastpark.com/2007/imml/">
		<Camera Name="Camera" Position="0,0,-5" />
		
		<Include Source="file1.imml" />
		<Include Source="file2.imml" />
		<Include Source="file3.imml" />
	</IMML>

License

IMML was developed at VastPark under the VastPark Open Specification Promise and has been made available on GitHub under the MIT license.