The Materials and Geometry Format

Version 1.0, May 1995

Greg Ward, Lawrence Berkeley Laboratory, GJWard@Lbl.Gov

Introduction

What makes MGF special?

What does MGF look like?

MGF's place in the world of standards

MGF Basics

Entities and Contexts

Hierarchical Contexts and Transformations

Detailed MGF Example

The following example of a simple room with a single door and six file cabinets shows MGF in action, with copious comments to help explain what's going on.

# "ceiling_tile" is a diffuse white surface with 75% reflectance:
# Create new named material context and clear it
m ceiling_tile =
	# Specify one-sided material so we can see through from above
	sides 1
	# Set neutral color
	c
	# Set diffuse reflectance
	rd .75
# "stainless_steel" is a mostly specular surface with 70% reflectance:
m stainless_steel =
	sides 1
	c
	# Set specular reflectance to 50%, .08 roughness
	rs .5 .08
	# Other 20% reflectance is diffuse
	rd .2

# The following materials were measured with a spectrophotometer:
m beige_paint =
	sides 1
	# Set diffuse spectral reflectance
	c
		# Spectrum measured in 10 nm increments from 400 to 700 nm
		cspec 400 700 35.29 44.87 47.25 47.03 46.87 47.00 47.09 \
			 47.15 46.80 46.17 46.26 48.74 51.08 51.31 51.10 \
			 51.11 50.52 50.36 51.72 53.61 53.95 52.08 49.49 \
			 48.30 48.75 49.99 51.35 52.75 54.44 56.34 58.00
	rd 0.5078
	# Neutral (grey) specular component
	c
	rs 0.0099 0.08000
m mottled_carpet =
	sides 1
	c
		cspec 400 700 11.23 11.28 11.39 11.49 11.61 11.73 11.88 \
			 12.02 12.12 12.19 12.30 12.37 12.37 12.36 12.34 \
			 12.28 12.22 12.29 12.45 12.59 12.70 12.77 12.82 \
			 12.88 12.98 13.24 13.67 14.31 15.55 17.46 19.75
	rd 0.1245
m reddish_cloth =
	# 2-sided so we can observe it from behind
	sides 2
	c
		cspec 400 700 28.62 27.96 27.86 28.28 29.28 30.49 31.61 \
			 32.27 32.26 31.83 31.13 30.07 29.14 29.03 29.69 \
			 30.79 32.30 33.90 34.56 34.32 33.85 33.51 33.30 \
			 33.43 34.06 35.26 37.04 39.41 42.55 46.46 51.00
	rd 0.3210
m burgundy_formica =
	sides 1
	c
		cspec 400 700  3.86  3.74  3.63  3.51  3.34  3.21  3.14 \
			  3.09  3.08  3.14  3.13  2.91  2.72  2.74  2.72 \
			  2.60  2.68  3.40  4.76  6.05  6.65  6.75  6.68 \
			  6.63  6.56  6.51  6.46  6.41  6.36  6.34  6.34
	rd 0.0402
	c
	rs 0.0284 0.05000
m speckled_grey_formica =
	sides 1
	c
		cspec 400 700 30.95 44.77 51.15 52.60 53.00 53.37 53.68 \
			 54.07 54.33 54.57 54.85 55.20 55.42 55.51 55.54 \
			 55.46 55.33 55.30 55.52 55.81 55.91 55.92 56.00 \
			 56.22 56.45 56.66 56.72 56.58 56.44 56.39 56.39
	rd 0.5550
	c
	rs 0.0149 0.15000

# 40' x 22' x 9' office space with no windows and one door

# All measurements are in inches, so enclose with a metric conversion:
xf -s .0254

# The room corner vertices:
v rc.xyz =
	p 0 0 0
v rc.Xyz =
	p 480 0 0
v rc.xYz =
	p 0 264 0
v rc.xyZ =
	p 0 0 108
v rc.XYz =
	p 480 264 0
v rc.xYZ =
	p 0 264 108
v rc.XyZ =
	p 480 0 108
v rc.XYZ =
	p 480 264 108

# The floor:
# Push object name
o floor
	# Get previously defined carpet material
	m mottled_carpet
	# Polygonal face using defined vertices
	f rc.xyz rc.Xyz rc.XYz rc.xYz
# Pop object name
o

# The ceiling:
o ceiling
	m ceiling_tile
	f rc.xyZ rc.xYZ rc.XYZ rc.XyZ
o

# The door outline vertices:
v do.xz =
	p 216 0 0
v do.Xz =
	p 264 0 0
v do.xZ =
	p 216 0 84
v do.XZ =
	p 264 0 84

# The walls:
o wall
	m beige_paint
	o x
		f rc.xyz rc.xYz rc.xYZ rc.xyZ
	o
	o X
		f rc.Xyz rc.XyZ rc.XYZ rc.XYz
	o
	o y
		f rc.xyz rc.xyZ rc.XyZ rc.Xyz do.Xz do.XZ do.xZ do.xz
	o
	o Y
		f rc.xYz rc.XYz rc.XYZ rc.xYZ
	o
o

# The door and jam vertices:
v djo.xz =
	p 216 .5 0
v djo.xZ =
	p 216 .5 84
v djo.XZ =
	p 264 .5 84
v djo.Xz =
	p 264 .5 0
v dji.Xz =
	p 262 .5 0
v dji.XZ =
	p 262 .5 82
v dji.xZ =
	p 218 .5 82
v dji.xz =
	p 218 .5 0
v door.xz =
	p 218 0 0
v door.xZ =
	p 218 0 82
v door.XZ =
	p 262 0 82
v door.Xz =
	p 262 0 0

# The door, jam and knob
o door
	m burgundy_formica
	f door.xz door.xZ door.XZ door.Xz
	o jam
		m beige_paint
		f djo.xz djo.xZ djo.XZ djo.Xz dji.Xz dji.XZ dji.xZ dji.xz
		f djo.xz do.xz do.xZ djo.xZ
		f djo.xZ do.xZ do.XZ djo.XZ
		f djo.Xz djo.XZ do.XZ do.Xz
		f dji.xz dji.xZ door.xZ door.xz
		f dji.xZ dji.XZ door.XZ door.xZ
		f dji.Xz door.Xz door.XZ dji.XZ
	o
	o knob
		m stainless_steel
		# Define vertices needed for curved geometry
		v kb1 =
			p 257 0 36
		v kb2 =
			p 257 .25 36
			n 0 1 0
		v kb3 =
			p 257 2 36
		# 1" diameter cylindrical base from kb1 to kb2
		cyl kb1 1 kb2
		# Ring at base of knob stem
		ring kb2 .4 1
		# Knob stem
		cyl kb2 .4 kb3
		# Spherical knob
		sph kb3 .85
	o
o

# Six file cabinets (36" wide each)
# ("filecab.inc" was given as an earlier example in Section 1.2)
o filecab.x
	# include a file as an array of three 36" apart
	i filecab.inc -t -36 0 0 -rz -90 -t 1 54 0 -a 3 -t 0 36 0
o
o filecab.X
	# the other three cabinets
	i filecab.inc -rz 90 -t 479 54 0 -a 3 -t 0 36 0
o

# End of transform from inches to meters:
xf

# The 10 recessed fluorescent ceiling fixtures
ies hlrs2gna.ies -t 1.2192 2.1336 2.74 -a 5 -t 2.4384 0 0 -a 2 -t 0 2.4384 0

MGF Entity Reference

MGF Translators

MGF Parser Library

Application Notes

Relation to Standard Practices in Computer Graphics

Relation to IESNA LM-63 and Luminaire Catalogs

Credits