function Node_Ambient_Occlusion(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
	name = "Ambient Occlusion";
	
	newInput(0, nodeValue_Surface("Height Map", self));
	
	newInput(1, nodeValue_Float("Intensity", self, 4))
		.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 8, 0.1 ] });
	
	newInput(2, nodeValue_Bool("Active", self, true));
		active_index = 2;
	
	newInput(3, nodeValue_Float("Height", self, 8));
	
	newInput(4, nodeValue_Bool("Pixel Sweep", self, true));
	
	input_display_list = [ 2, 0, 
		["Effect",		false], 3, 1, 4, 
	];
	
	newOutput(0, nodeValue_Output("Surface out", self, VALUE_TYPE.surface, noone));
	
	attribute_surface_depth();
	
	static processData = function(_outSurf, _data, _output_index, _array_index) {
		var _map = _data[0];
		var _int = _data[1];
		var _hei = _data[3];
		var _pxs = _data[4];
		
		var _dim = surface_get_dimension(_map);
		
		surface_set_shader(_outSurf, sh_sao);
			shader_set_f("dimension", _dim);
			shader_set_f("intensity", _int);
			shader_set_f("height",    _hei);
			shader_set_i("pixel",     _pxs);
			
			draw_surface_safe(_map);
		surface_reset_shader();
		
		return _outSurf;
	}
}