RADIANCE Scene Description Language Altogether there are at least 4 "languages" involved with Radiance scene descriptions: the basic scene input language, the function file language, the data file language and the font language. Scene Input =========== scenefile: /* nothing */ | statement scenefile statement: primitive | alias | command | comment primitive: modifier type STRING INTEGER string_args INTEGER integer_args INTEGER real_args alias: modifier alias STRING STRING modifier: "void" | "inherit" | STRING command: '!' STRING string_args command_end command_end: '\n' | '\\' '\n' string_args command_end comment: '#' string_args '\n' string_args: /* nothing */ | STRING string_args integer_args: /* nothing */ | INTEGER integer_args real_args: /* nothing */ | REAL real_args type: "polygon" | "cone" | "sphere" | "texfunc" | "ring" | "cylinder" | "instance" | "cup" | "bubble" | "tube" | "mesh" | "plastic" | "metal" | "glass" | "trans" | "dielectric" | "plastic2" | "metal2" | "trans2" | "interface" | "plasfunc" | "metfunc" | "brightfunc" | "brightdata" | "brighttext" | "colorpict" | "glow" | "source" | "light" | "illum" | "spotlight" | "mist" | "mirror" | "transfunc" | "BRTDfunc" | "plasdata" | "metdata" | "transdata" | "colorfunc" | "antimatter" | "colordata" | "colortext" | "texdata" | "mixfunc" | "mixdata" | "mixtext" | "prism1" | "prism2" Function File ============= funcfile: /* nothing */ | decl funcfile decl: ';' | function_decl ';' | variable_decl ';' function_decl: ID '(' id_list ')' assign_op e1 variable_decl: ID assign_op e1 id_list: ID | ID ',' id_list assign_op: '=' | ':' e1: e1 '+' e2 | e1 '-' e2 | e2 e2: e2 '*' e3 | e2 '/' e3 | e3 e3: e4 '^' e3 | e4 e4: '+' e5 | '-' e5 | e5 e5: '(' e1 ')' | ID | ID '(' id_list ')' | REAL | '$' INTEGER Comments may appear between any two tokens set off by curly braces {}, and may be nested to any level. Data File ========= data: dimensions value_list dimensions: INTEGER dim_list dim_list: dim | dim dim_list dim: REAL REAL INTEGER | '0' '0' INTEGER indep_list indep_list: REAL | REAL indep_list value_list: /* nothing */ | REAL value_list Comments begin with a pound sign ('#') and continue to the end of line. Font File ========= glyph_list: /* nothing */ | glyph glyph_list glyph: INTEGER INTEGER coord_list coord_list: /* nothing */ | INTEGER INTEGER coord_list Comments begin with a pound sign ('#') and continue to the end of line. -------------------------------------------------------------- With regards to your topics, I have the following comments. Specification of scene parameters: - Radiance uses a right-hand coordinate system - The eyepoint and view direction are given as options to the renderers, and can be stored in a separate file Supported primitives: - N-sided polygons - spheres - cones, cylinders, rings - hierarchical instancing for very complex geometries Lighting models: - Completely general - Converter provided for IES luminaire specification Participating media: - Single-scatter approximation - Mist zones may have different scattering/absorption properties Textures: - I break "textures" into two kinds, patterns and textures - Patterns are variation in color, and can be specified as pictures, data or functions in any combination - Textures are perturbations in surface normal, and can be specified in the same ways as patterns - A light source distribution is a pattern Bit Mapping: - Usually given as a picture-type pattern (ie. "colorpict" type) - True bit-maps (ie. 1-bit depth images) may also be produced using a special bit font CSG: - Radiance has an "antimatter" type which supports some rudimentary CSG subtraction, but otherwise we are strictly B-rep Looping constructs or Recursion: - The function file language supports recursion - The "xform" program provides iteration for repeated objects Functions or Procedures: - The function file language supports functions without side effects User extensibility: - The user may create function files, data files and font files, or provide his/her own images for patterns - General bidirectional reflection distribution functions may also be specified in the same way as patterns and textures