Here is a little something thats detours from the book. Combining quantization and texture uv, I can create a mosaic effect.
Methodology
1. Have an input texture
2. quantize the uv_coordinates
3. use the quantized_uv_coordinates inside mi_lookup_texture_color
![]() |
| From top to bottom: Original, tile = 20, tile = 10, Porn?! |
MI Source
declare shader color "mosaic" ( color texture "tex", scalar "tile_count" default 4 ) apply material end declare
C Source
#include "shader.h"
struct mosaic {
miTag tex;
miScalar tile_count;
};
miBoolean mosaic(miColor *result, miState *state, struct mosaic *params) {
miVector uv_coord = {0,0,0};
miTag tex = *mi_eval_tag(¶ms->tex);
miScalar tile_count = *mi_eval_scalar(¶ms->tile_count);
uv_coord.x = fmod((miScalar)((int)(state->tex_list[0].x * tile_count))/tile_count, 1.0);
uv_coord.y = fmod((miScalar)((int)(state->tex_list[0].y * tile_count))/tile_count, 1.0);
mi_lookup_color_texture(result, state, tex, &uv_coord);
return miTRUE;
}


0 comments:
Post a Comment