Hi,
In order to get a proper antialias (that is how it is called), I guess your best choice is to perform two linearly interpolated 1:2 downsamples.



Click to reveal..

Code:
#include <acknex.h>
#include <default.c>

#define PRAGMA_PATH "%EXE_DIR%templatesimages"

void main ()
{
	video_mode = 8;
	wait(1);
	level_load ( "" );
	ENTITY *entSky = ent_createlayer("skycube+6.tga", SKY | CUBE, 1);
	ENTITY *ent = ent_create(SPHERE_MDL, nullvector, NULL);
	camera->x = -30;
	camera->bmap = bmap_createblack(screen_size.x, screen_size.y, 24);
	
	VIEW *camDown[2];
	VIEW *camPrev = camera;
	int i=0;
	for (; i < 2; i += 1) {
		camDown[i] = view_create(1);
		var _fraction = pow(2, i + 1);
		camDown[i]->size_x = screen_size.x / _fraction;
		camDown[i]->size_y = screen_size.y / _fraction;
		camDown[i]->bmap = bmap_createblack(camDown[i]->size_x, camDown[i]->size_y, 24);
		MATERIAL *_mtl = mtl_create();
		_mtl->skill1 = floatv(camDown[i]->size_x);
		_mtl->skill2 = floatv(camDown[i]->size_y);
		_mtl->skin1 = camPrev->bmap;
		effect_load(_mtl, "downsample.fx");
		camDown[i]->material = _mtl;
		camDown[i]->flags |= SHOW | PROCESS_TARGET;
		camPrev->stage = camDown[i];
		camPrev = camDown[i];
	}
	VIEW *camLast = view_create(1);
	camLast->material = mtl_create();
	effect_load(camLast->material, "upsample.fx");
	camLast->flags |= SHOW | PROCESS_TARGET;
	camPrev->stage = camLast;
	
	while (!key_esc) {
		if (key_1)
			DEBUG_BMAP(camera->bmap, 1, 1);
		if (key_2)
			DEBUG_BMAP(camDown[0]->bmap, 1, 1);
		if (key_3)
			DEBUG_BMAP(camDown[1]->bmap, 1, 1);
		wait(1);
	}
	
	sys_exit(NULL);
}



downsample.fx
Code:
float4 vecSkill1;

texture mtlSkin1;
sampler ColorSampler = sampler_state { Texture = <mtlSkin1>; MipFilter = Linear; MinFilter = Linear; MagFilter = Linear; AddressU = Clamp; AddressV = Clamp;  };

float4 PS(in float2 inPos: VPOS) : COLOR0 {
	float2 coor = (inPos.xy + 0.5f) / vecSkill1.xy;
	return tex2D(ColorSampler, coor.xy);
}

technique downsample{
	pass p0 {
		VertexShader = null;
		PixelShader  = compile ps_3_0 PS();
	}
}



upsample.fx
Code:
float4 vecViewPort;

texture TargetMap;
sampler ColorSampler = sampler_state { Texture = <TargetMap>; MipFilter = Point; MinFilter = Point; MagFilter = Point; AddressU = Clamp; AddressV = Clamp; };

float4 PS(in float2 inPos: VPOS) : COLOR0 {
	float2 coor = (inPos.xy + 0.5f) / vecViewPort.xy;
	return tex2D(ColorSampler, coor.xy);
}

technique upsample {
	pass p0 {
		VertexShader = null;
		PixelShader  = compile ps_3_0 PS();
	}
}




Three downsamples from a double sized camera gives you a 8 steps gradient instead of a 4 steps gradient.



Salud!