#VRML2NodeCatalog
# This file describes PhBRML extension nodes to VRML'97.
# It is processed through nodegen in order to create basic C++ code
# for these nodes. The contents of this file were
# literally copied from the specifications
# http://www.cg.tuwien.ac.at/~philippe/PhBRML/nodes.html
# + manually added specification of parent node classes and
# S|MFNode field values

#####################################################################
# Standard nodes: delete the resulting .[CH] files. Make sure the
# descriptions here are in sync to those in standard.nodes.
Transform {
}

TextureTransform {
}

Bindable {
  eventIn      SFBool   set_bind
  eventOut     SFBool   isBound
}

Children {
}

# Appearance base exists both in standard.nodes and here: delete one of the
# two generated implementations.
AppearanceBase {
}

#####################################################################
# PhBRML node base-classes

PhBSurface {
}

PhBMedium {
}

PhBDistortion {
}

PhBTextureProjection {
}

PhBBackgroundProjection {
}

PhBSpectrum {
}

PhBEmitter {
}

PhBTexture {
}

PhBTextureFilter {
}

PhBSDF {
}

PhBScatterer {
}

PhB3DTexture {
}

PhBPhaseFunction {
}

PhBBackground [ Bindable ] {
  eventIn SFBool set_bind
  eventOut SFBool isBound
}

################################################################
# PhBRML node leaf classes

PhBAppearance [ AppearanceBase ] {
  exposedField SFNode [ PhBSurface ] surface              NULL
  exposedField SFNode [ PhBMedium ] medium               NULL
  exposedField SFNode [ PhBDistortion ] bumpMap              NULL
  exposedField SFNode [ PhBDistortion ] displacementMap      NULL
  exposedField SFNode [ PhBTextureProjection ] textureProjection    NULL
  exposedField SFNode [ TextureTransform ] textureTransform   NULL
  exposedField SFNode [ PhB3DTextureTransform ] textureTransform3D   NULL
}

PhBHomogeneousSurface [ PhBSurface ] { 
  exposedField MFNode [ PhBEDF ]  edf                   [ ] 
  exposedField MFNode [ PhBSDF ]  bsdf                  [ ] 
}

PhBHeterogeneousSurface [ PhBSurface ] { 
  exposedField MFNode [ PhBSDF ]  bsdf                  [ ] 
}

PhBEDF { 
  exposedField SFFloat intensity        1.     # (-infty,infty)
  exposedField SFNode [ PhBSpectrum ]  spectrum         NULL
  exposedField SFNode [ PhBEmitter ]  emitter          NULL
}

PhBProceduralEmitter [ PhBEmitter ] { 
#  eventIn  SFVec3f  direction               # [-1,1]
#  eventIn  SFVec2f  sampleNum               # [0,1]
#  eventIn  SFInt32  glossinessRange         # [0,7]
  field    MFString url               [ ]
#  eventOut SFFloat  value                   # [0,infty)
#  eventOut SFFloat  pdf                     # [0,infty)
#  eventOut SFVec3f  sampleDir               # [-1,1]
#  eventOut SFFloat  emittance               # [0,infty)
}

PhBDiffuseEmitter [ PhBEmitter ] { 
#  field SFFloat normalisation        1.      # [0,infty)   
}

PhBPhongEmitter [ PhBEmitter ] { 
  exposedField SFFloat sharpness        0.      # [0,infty)   
#  field SFFloat normalisation    1.      # [0,infty)   
}

PhBSampledIsotropicEmitter [ PhBEmitter ] { 
  exposedField MFFloat samples        [ ]      # [0,infty)
  exposedField SFFloat minAngle       0.       # [0,pi]
  exposedField SFFloat maxAngle       3.141592 # [0,pi]
#  field SFFloat normalisation  1.       # [0,infty)   
}

PhBTextureEmitter [ PhBEmitter ] { 
  exposedField SFNode [ PhBTexture ]  texture         NULL
  exposedField SFInt32 channel         1     # [1,infty)
#  field SFFloat normalisation   1.    # [0,infty)   
}

PhBSimpleBSDF [ PhBSDF ] {
  exposedField SFFloat intensity        1.     # (-infty,infty)
  exposedField SFNode [ PhBSpectrum ]  spectrum         NULL
  exposedField SFNode [ PhBScatterer ] scatterer        NULL
}

PhBFresnelBSDF [ PhBSDF ] {
  exposedField SFFloat intensity        1.     # (-infty,infty)
  exposedField SFNode [ PhBSpectrum ]  spectrum         NULL
  exposedField SFNode [ PhBScatterer ] scatterer        NULL
}

PhBProceduralScatterer [ PhBScatterer ] { 
#  eventIn  SFVec3f  inDir                   # [-1,1]
#  eventIn  SFVec3f  outDir                  # [-1,1]
#  eventIn  SFVec2f  sampleNum               # [0,1]
#  eventIn  SFInt32  glossinessRange         # [0,7]
  field    MFString url                 [ ]
#  eventOut SFFloat  value                   # [0,infty)
#  eventOut SFFloat  pdf                     # [0,infty)
#  eventOut SFVec3f  sampleDir               # [-1,1]
#  eventOut SFFloat  reflectance             # [0,infty)
#  eventOut SFFloat  transmittance           # [0,infty)
}

PhBDiffuseReflector [ PhBScatterer ] { 
#  field SFFloat normalisation   1.    # [0,infty)
}

PhBPerfectSpecularReflector [ PhBScatterer ] {
#  field SFFloat normalisation   1.    # [0,infty)
}

PhBPhongReflector [ PhBScatterer ] {
  exposedField SFFloat sharpness        0.      # [0,infty)
#  field SFFloat normalisation    1.      # [0,infty)
}

PhBWardReflector [ PhBScatterer ] {
  exposedField SFFloat standardDeviationX	1.	# (0, infty)
  exposedField SFFloat standardDeviationY	1.	# (0, infty)
#  field SFFloat normalisation	1.	# [0, infty)
}

PhBSchlickReflector [ PhBScatterer ] {
  exposedField SFFloat 	roughness	1.	# (0,infty)
  exposedField SFFloat 	isotropy	1.	# (0,infty)
  exposedField SFBool	selfShadowing	TRUE	# TRUE or FALSE
}

PhBLafortuneReflector [ PhBScatterer ] {
  exposedField SFVec3f  C  		-1 -1 1 # (-infty,infty)
  exposedField SFFloat  n		10.	# (0,infty)
}

PhBAshikminReflector [ PhBScatterer ] {		# aka Shirley reflector
  exposedField SFFloat  nv		1	# [0, infty)
  exposedField SFFloat	nu		1	# [0, infty)
}

PhBNeumannReflector [ PhBScatterer ] {		# aka Stretched Phong reflector
  exposedField SFFloat 	sharpness	0.	# [0, infty)
}

PhBDiffuseRefractor [ PhBScatterer ] {
#  field SFFloat normalisation   1.    # [0,infty)
}

PhBPerfectSpecularRefractor [ PhBScatterer ] {
#  field SFFloat normalisation   1.    # [0,infty)
}

PhBPhongRefractor [ PhBScatterer ] {
  exposedField SFFloat sharpness        0.      # [0,infty)
#  field SFFloat normalisation    1.      # [0,infty)
}

PhBTexturedSurface [ PhBSurface ] {
  exposedField SFNode [ PhBTexture ] texture             NULL
  exposedField MFNode [ PhBSurface ] surfaces            [ ]
  exposedField SFNode [ TextureTransform ] textureTransform    NULL
  exposedField SFNode [ PhBTextureProjection ] textureProjection   NULL
}

PhB3DTexturedSurface [ PhBSurface ] {
  exposedField SFNode [ PhB3DTexture ] texture             NULL
  exposedField MFNode [ PhBSurface ] surfaces            [ ]
  exposedField SFNode [ PhB3DTextureTransform ] textureTransform3D NULL
}

PhBInterpolatedSurface [ PhBSurface ] { 
  exposedField SFFloat fraction      0.     
  exposedField MFFloat key           [ ]    
  exposedField MFNode  [ PhBSurface ] keySurfaces   [ ]    
}

PhBHomogeneousMedium [ PhBMedium ]{
  exposedField SFVec2f indexOfRefraction          1. 0.
  exposedField SFFloat scatteringCrossSection     0.      # [0,infty)
  exposedField SFFloat absorptionCrossSection     0.      # [0,infty)
  exposedField MFNode [ PhBPhF ] phaseFunction              [ ]
  exposedField SFNode [ PhBSpectrum ] selfEmittedFluxDensity     NULL
}

PhBPhF {
  exposedField SFFloat intensity        1.     # (-infty,infty)
  exposedField SFNode [ PhBSpectrum ] spectrum         NULL
  exposedField SFNode [ PhBPhaseFunction ]  phaseFunction    NULL
}

PhBIsotropicPhaseFunction [ PhBPhaseFunction ] {
#  field SFFloat normalisation    1.      # [0,infty)   
}

PhBHenyeyGreensteinPhaseFunction [ PhBIsotropicPhaseFunction ] {
   exposedField SFFloat  g        0       # (-1, 1)
}

PhBSchlickPhaseFunction [ PhBIsotropicPhaseFunction ] {
   exposedField SFFloat  k        0       # (-1, 1)
}

PhBProceduralPhaseFunction [ PhBPhaseFunction ] { 
#  eventIn      SFFloat  alpha
#  eventIn      SFFloat  sampleNum
  field        MFString url               [ ]
#  eventOut     SFFloat  value
#  eventOut     SFFloat  pdf
#  eventOut     SFFloat  sampleAlpha
#  eventOut     SFFloat  normalisation
}

PhBTexturedMedium [ PhBMedium ] { 
  exposedField SFNode [ PhB3DTexture ] texture             NULL
  exposedField MFNode [ PhBMedium ] media               [ ]
  exposedField SFNode [ PhB3DTextureTransform ] textureTransform3D  NULL
}

PhBInterpolatedMedium [ PhBMedium ] { 
  exposedField SFFloat fraction      0.     
  exposedField MFFloat key           [ ]    
  exposedField MFNode  [ PhBMedium ] keyMedia      [ ]    
}

PhBSurfaceDistortion [ PhBDistortion ] {
  exposedField SFNode [ PhBTexture ] texture                NULL
  exposedField SFNode [ Transform ] transform              NULL
}

PhBBumpMap [ PhBSurfaceDistortion ] {
  exposedField SFNode [ PhBTexture ] texture                NULL
  exposedField SFNode [ Transform ] transform              NULL
  exposedField SFFloat 	height 1.
}

PhBNormalMap [ PhBSurfaceDistortion ] {
  exposedField SFNode [ PhBTexture ] texture                NULL
  exposedField SFNode [ Transform ] transform              NULL
}

PhBBrushMap [ PhBSurfaceDistortion ] {
  exposedField SFNode [ PhBTexture ] texture                NULL
  exposedField SFNode [ Transform ] transform              NULL
}

PhBShadingFrameDistortion [ PhBSurfaceDistortion ] {
  exposedField SFNode [ PhBTexture ] texture                NULL
  exposedField SFNode [ Transform ] transform              NULL
}

PhBVolumeDistortion [ PhBDistortion ] {
  exposedField SFNode [ PhB3DTexture ] texture                NULL
  exposedField SFNode [ Transform ] transform              NULL
}

PhBProceduralTexture [ PhBTexture ] { 
#  eventIn  SFVec2f  textureCoordinate
  field    MFString url                    [ ]
#  eventOut MFFloat  textureValues
}

PhBNoiseTexture [ PhBTexture ] {
  exposedField SFFloat	k 1
}

PhBBilinearInterpolation [ PhBTexture ] {
  exposedField SFNode [ PhBImageTextureBase ] texture        NULL
}

PhBImageTextureBase [ PhBTexture ] {
  field MFString url	[]
#  exposedField SFNode [ PhBTextureFilter ] filter	NULL
  exposedField SFBool clamping	FALSE
  exposedField SFBool repeating	TRUE
}

PhBImageTexture [ PhBImageTextureBase ] {
  field MFString url	[]
#  exposedField SFNode [ PhBTextureFilter ] filter	NULL
  exposedField SFBool clamping	FALSE
  exposedField SFBool repeating	TRUE
}

PhBPixelTexture [ PhBImageTextureBase ] {
  field SFInt32 channels 1
  field SFInt32 width 0
  field SFInt32 height 0
  field MFFloat pixels []
#  exposedField SFNode [ PhBTextureFilter ] filter	NULL
  exposedField SFBool clamping	FALSE
  exposedField SFBool repeating	TRUE
}

PhBToggleTexture [ PhBImageTextureBase ] {
  field MFString url	[]
#  exposedField SFNode [ PhBTextureFilter ] filter	NULL
  exposedField SFBool clamping	FALSE
  exposedField SFBool repeating	TRUE
}

PhBProcedural3DTexture [ PhB3DTexture ] { 
#  eventIn  SFVec3f  textureCoordinate
  field    MFString url                    [ ]
#  eventOut MFFloat  textureValues
}

PhB3DCheckerTexture [ PhB3DTexture ] {
}

PhB3DSpiralTexture [ PhB3DTexture ] {
}

PhB3DNoiseTexture [ PhB3DTexture ] {
  exposedField SFFloat	k 1
}

PhBProceduralTextureProjection [ PhBTextureProjection ] { 
#  eventIn  SFVec3f  coordinate
  field    MFString url                    [ ]
#  eventOut SFVec2f  textureCoordinate
}

PhBLandscapePhotoBackground [ PhBBackgroundProjection ] {
}

PhBSphereTextureProjection [ PhBTextureProjection ] {
  exposedField SFFloat radius	1	# [0, infty)
}

PhBBoxTextureProjection [ PhBTextureProjection ] {
  exposedField SFVec3f size 2 2 2	# (0, infty)
}

PhBConeTextureProjection [ PhBTextureProjection ] {
  exposedField SFFloat bottomRadius	1	# (0, infty)
  exposedField SFFloat height		2	# (0, infty)
  field SFBool side	TRUE
  field SFBool bottom	TRUE
}

PhBCylinderTextureProjection [ PhBTextureProjection ] {
  exposedField SFFloat height	2	# (0, infty)
  exposedField SFFloat radius	1	# (0, infty)
  field SFBool bottom	TRUE
  field SFBool side 	TRUE
  field SFBool top	TRUE
}

PhB3DTextureTransform {
  exposedField SFVec3f     center           0 0 0     # (-infty,infty)
  exposedField SFRotation  rotation         0 0 1 0   # [-1,1],(-infty,infty)
  exposedField SFVec3f     scale            1 1 1     # (0,infty)
  exposedField SFRotation  scaleOrientation 0 0 1 0   # [-1,1],(-infty,infty
  exposedField SFVec3f     translation      0 0 0     # (0,infty)
}

PhBTexturedBackground [ Children Bindable PhBBackground ] {
  eventIn SFBool set_bind
  eventOut SFBool isBound
  exposedField SFNode [ PhBTexture ]  texture          NULL
  exposedField MFNode [ PhBSpectrum ]  spectralBasis    [ ]
  exposedField MFFloat spectralWeights  [ ]
  exposedField SFRotation viewOrientation  0 0 1 0
  exposedField SFNode [ TextureTransform ] textureTransform 	NULL
  exposedField SFNode [ PhBBackgroundProjection ] textureProjection NULL
}

PhBHomogeneousBackground [ Children PhBBackground ] {
  eventIn SFBool set_bind
  eventOut SFBool isBound
  exposedField MFNode [ PhBSpectrum ]  spectralBasis	[ ]
  exposedField MFFloat spectralWeights  [ ]
}

PhBBackgroundLight [ Children PhBBackground ] {
  eventIn SFBool set_bind
  eventOut SFBool isBound
  exposedField MFNode [ PhBSpectrum ]  spectralBasis	[ ]
  exposedField MFFloat spectralWeights  [ ]
  exposedField SFRotation orientation 0 0 1 0
  exposedField SFFloat	angle .01	# [0, 2pi)	
}

PhBProceduralBackground [ Children Bindable PhBBackground ] {
  eventIn SFBool set_bind
  eventOut SFBool isBound
  field    MFString url                    [ ]  
}

PhBAtmosphere [ Children Bindable ] { 
  eventIn SFBool set_bind
  eventOut SFBool isBound
  exposedField SFNode [ PhBMedium ] medium       NULL
}

PhBLxySpectrum [ PhBSpectrum ] { 
  exposedField SFVec2f xy         0.3333333 0.3333333   # [0,1]
  exposedField SFFloat luminance  1.                    # [0,infty)
}

PhBXYZSpectrum [ PhBSpectrum ] { 
  exposedField SFVec3f xyz        1. 1. 1.                  # [0,infty)
}

PhBMonochromaticSpectrum [ PhBSpectrum ] { 
  exposedField SFFloat wavelength 550.                  # [0,infty)
  exposedField SFFloat luminance  1.                    # [0,infty)
}

PhBBlackBodySpectrum [ PhBSpectrum ] { 
  exposedField SFFloat temperature 0.                    # [0,infty)
  exposedField SFFloat luminance   1.                    # [0,infty)
}

PhBSampledSpectrum [ PhBSpectrum ] {
  exposedField MFFloat samples    [ ]
  exposedField SFFloat scale      1.                    # [0,infty)
  exposedField SFFloat min        380.                  # [380.,770]
  exposedField SFFloat max        770.                  # [380.,770]
}

PhBTabulatedSpectrum [ PhBSpectrum ] { 
  exposedField MFFloat wavelengths     [ ]              # [380.,770.]
  exposedField MFFloat values          [ ]              # [0,infty)
  exposedField SFFloat scale           1.               # [0,infty)
}

PhBProceduralSpectrum [ PhBSpectrum ] { 
#  eventIn      SFFloat  wavelength                       # [380.,770.]
  field        MFString url        [ ]
#  eventOut     SFFloat  spectralValue                    # [0,infty)
}

PhBMixedSpectrum [ PhBSpectrum ] { 
  exposedField MFNode [ PhBSpectrum ]  spectra    [ ]                   
  exposedField MFFloat weight     [ ]                   
}

PhBInterpolatedSpectrum [ PhBSpectrum ] { 
  exposedField SFFloat fraction      0.     
  exposedField MFFloat key           [ ]    
  exposedField MFNode [ PhBSpectrum ]  keySpectra    [ ]    
}

PhBRGBSpectrum [ PhBSpectrum ] {
  exposedField SFColor	rgb	0 0 0			# [0,infty)
}

PhBMonitorCalibration [ Children Bindable ] {
  eventIn      SFBool   set_bind
  eventOut     SFBool   isBound
  exposedField SFNode [ PhBSpectrum ] red NULL
  exposedField SFNode [ PhBSpectrum ] green NULL
  exposedField SFNode [ PhBSpectrum ] blue NULL
  exposedField SFNode [ PhBSpectrum ] white NULL
  exposedField SFColor gamma 1 1 1			# (0,infty)
  exposedField SFFloat maxLuminance 100			# (0,infty)
  exposedField SFFloat maxContrast 50			# (0,infty)
}
