ArnoldAttributes::ArnoldAttributes( const std::string &name )
	:	GafferScene::Attributes( name )
{
	Gaffer::CompoundDataPlug *attributes = attributesPlug();

	// Visibility parameters

	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:camera", new IECore::BoolData( true ), false, "cameraVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:shadow", new IECore::BoolData( true ), false, "shadowVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:shadow_group", new IECore::StringData( "" ), false, "shadowGroup" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:diffuse_reflect", new IECore::BoolData( true ), false, "diffuseReflectionVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:specular_reflect", new IECore::BoolData( true ), false, "specularReflectionVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:diffuse_transmit", new IECore::BoolData( true ), false, "diffuseTransmissionVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:specular_transmit", new IECore::BoolData( true ), false, "specularTransmissionVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:volume", new IECore::BoolData( true ), false, "volumeVisibility" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:visibility:subsurface", new IECore::BoolData( true ), false, "subsurfaceVisibility" ) );

	// Transform parameters

	attributes->addChild( new Gaffer::NameValuePlug( "ai:transform_type", new StringPlug( "value", Plug::In, "rotate_about_center" ), false, "transformType" ) );

	// Shading parameters

	attributes->addChild( new Gaffer::NameValuePlug( "ai:matte", new IECore::BoolData( false ), false, "matte" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:opaque", new IECore::BoolData( true ), false, "opaque" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:receive_shadows", new IECore::BoolData( true ), false, "receiveShadows" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:self_shadows", new IECore::BoolData( true ), false, "selfShadows" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:sss_setname", new StringPlug( "value", Plug::In, "" ), false, "sssSetName" ) );

	// Subdivision parameters

	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdiv_iterations", new IntPlug( "value", Plug::In, 1, 1 ), false, "subdivIterations" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdiv_adaptive_error", new FloatPlug( "value", Plug::In, 0.0f, 0.0f ), false, "subdivAdaptiveError" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdiv_adaptive_metric", new StringPlug( "value", Plug::In, "auto" ), false, "subdivAdaptiveMetric" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdiv_adaptive_space", new StringPlug( "value", Plug::In, "raster" ), false, "subdivAdaptiveSpace" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdiv_uv_smoothing", new StringPlug( "value", Plug::In, "pin_corners" ), false, "subdivUVSmoothing" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdiv_smooth_derivs", new BoolPlug( "value" ), false, "subdivSmoothDerivs" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:polymesh:subdivide_polygons", new BoolPlug( "value" ), false, "subdividePolygons" ) );

	// Curves parameters

	attributes->addChild( new Gaffer::NameValuePlug( "ai:curves:mode", new StringPlug( "value", Plug::In, "ribbon" ), false, "curvesMode" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:curves:min_pixel_width", new FloatPlug( "value", Plug::In, 0.0f, 0.0f ), false, "curvesMinPixelWidth" ) );

	// Volume parameters

	attributes->addChild( new Gaffer::NameValuePlug( "ai:volume:step_size", new FloatPlug( "value", Plug::In, 0.0f, 0.0f ), false, "volumeStepSize" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:volume:step_scale", new FloatPlug( "value", Plug::In, 1.0f, 0.0f ), false, "volumeStepScale" ) );

	attributes->addChild( new Gaffer::NameValuePlug( "ai:shape:step_size", new FloatPlug( "value", Plug::In, 0.0f, 0.0f ), false, "shapeStepSize" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:shape:step_scale", new FloatPlug( "value", Plug::In, 1.0f, 0.0f ), false, "shapeStepScale" ) );

	attributes->addChild( new Gaffer::NameValuePlug( "ai:shape:volume_padding", new FloatPlug( "value", Plug::In, 0.0f, 0.0f ), false, "volumePadding" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:volume:velocity_scale", new FloatPlug( "value", Plug::In, 1.0f, 0.0f ), false, "velocityScale" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:volume:velocity_fps", new FloatPlug( "value", Plug::In, 24.0f, 0.0f ), false, "velocityFPS" ) );
	attributes->addChild( new Gaffer::NameValuePlug( "ai:volume:velocity_outlier_threshold", new FloatPlug( "value", Plug::In, 0.001f, 0.0f ), false, "velocityOutlierThreshold" ) );

}
DelightOptions::DelightOptions( const std::string &name )
	:	GafferScene::Options( name )
{
	Gaffer::CompoundDataPlug *options = optionsPlug();

	// Rendering

	options->addChild( new Gaffer::NameValuePlug( "dl:bucketorder", new IECore::StringData( "horizontal" ), false, "bucketOrder" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:numberofthreads", new IECore::IntData( 0 ), false, "numberOfThreads" ) );

	// Quality

	options->addChild( new Gaffer::NameValuePlug( "dl:oversampling", new IECore::IntData( 9 ), false, "oversampling" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:quality.shadingsamples", new IECore::IntData( 64 ), false, "shadingSamples" ) );

	// Ray depth

	options->addChild( new Gaffer::NameValuePlug( "dl:maximumraydepth.diffuse", new IECore::IntData( 1 ), false, "maximumRayDepthDiffuse" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:maximumraydepth.hair", new IECore::IntData( 4 ), false, "maximumRayDepthHair" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:maximumraydepth.reflection", new IECore::IntData( 1 ), false, "maximumRayDepthReflection" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:maximumraydepth.refraction", new IECore::IntData( 4 ), false, "maximumRayDepthRefraction" ) );

	// Texturing

	options->addChild( new Gaffer::NameValuePlug( "dl:texturememory", new IECore::IntData( 250 ), false, "textureMemory" ) );

	// Network cache

	options->addChild( new Gaffer::NameValuePlug( "dl:networkcache.size", new IECore::IntData( 15 ), false, "networkCacheSize" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:networkcache.directory", new IECore::StringData( "" ), false, "networkCacheDirectory" ) );

	// Licensing

	options->addChild( new Gaffer::NameValuePlug( "dl:license.server", new IECore::StringData( "" ), false, "licenseServer" ) );
	options->addChild( new Gaffer::NameValuePlug( "dl:license.wait", new IECore::BoolData( true ), false, "licenseWait" ) );

}