**TOON.ASM** ps.1.1 def c0, 0.3, 0.59, 0.11, 0 tex t0 // sample the source image tex t1 // sample offset by (-1, -1) tex t2 // sample offset by (1, 1) dp3 r0.rgba, t1, c0 // greyscale sample #1 in r0.a dp3 r1.rgba, t2, c0 // greyscale sample #2 in r1.a sub_x4 r0.a, r0, r1 // diagonal edge detect difference mul_x4_sat r0.a, r0, r0 // square edge difference to get absolute value mul r0.rgb, r0, 1-r0.a // output color * edge detect + mov r0.a, t0.a // output alpha **MATERIAL** fragment_program Ogre/Compositor/ToonFP asm { source toon.asm syntax ps_1_1 } material Ogre/Compositor/Toon { technique { pass { cull_hardware none cull_software none depth_func always_pass vertex_program_ref Ogre/Compositor/StdQuad_Tex2a_vp { } fragment_program_ref Ogre/Compositor/ToonFP { } texture_unit RT { tex_coord_set 0 tex_address_mode clamp filtering trilinear } } } } **COMPOSITOR** // Toon compositor Toon { technique { // Temporary textures texture rt0 target_width target_height PF_A8R8G8B8 target rt0 { // Render output from previous compositor (or original scene) input previous } target_output { // Start with clear output input none // Draw a fullscreen quad with the black and white image pass render_quad { // Renders a fullscreen quad with a material material Ogre/Compositor/Toon input 0 rt0 } } } }