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