Ascii shader

Шейдеры и все-все-все.

Ascii shader

Сообщение antonio 18 дек 2010, 03:34

Занимаюсь очередным копипастом AsciiMii шейдера
Но вот что-то он не хочет работать, помогите разобраться (ошибок при компиляции нет, но и показывать то что надо он не хочет). Предполагаемые недочеты отметил в комментариях.
В этот раз шейдер из Pixel Bender - заодно в копилку шейдерманам.
Синтаксис:
Используется glsl
Shader "ascii" {
        Properties {
                size ("size", Range (1, 32)) = 8
                charCount ("charCount", Range (1, 512)) = 256
                _MainTex ("MainTex (RGB)", 2D) = "white" {}
                _FontTex ("FontTex (RGB)", 2D) = "white" {}
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200

                CGPROGRAM
                #pragma surface surf Lambert
                #pragma target 3.0

                sampler2D _MainTex;
                sampler2D _FontTex;
               
                float size;
                float charCount;

                struct Input {
                        float2 uv_MainTex;
                        float2 uv_FontTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {

                        float sizef = float(size);
                        float charCountf = float(charCount);

                        float2 offset2 = fmod(IN.uv_MainTex, sizef);
                        half4 mosaicPixel4 = tex2D(_MainTex, IN.uv_MainTex - offset2); //sampleNearest in original AsciiMii Source Code
                       
                        float luma = 0.2126 * mosaicPixel4.r + 0.7152 * mosaicPixel4.g + 0.0722 * mosaicPixel4.b;
                       
                        float range = (1.0 / (charCountf - 1.0));
                        float fontOffset = sizef * floor(luma / range);
                        float fontmapsize = (sizef * floor(sqrt(charCountf)));
                        float yRow = floor(fontOffset / fontmapsize);
                        offset2.y = offset2.y + (sizef * yRow);
                        offset2.x = offset2.x + (fontOffset - (fontmapsize * yRow));
                        half4 charPixel4 = tex2D (_FontTex, offset2);
                       
                        o.Albedo = mosaicPixel4.rgb * charPixel4.rgb;
                        o.Alpha = mosaicPixel4.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}
 
Аватара пользователя
antonio
UNIт
 
Сообщения: 132
Зарегистрирован: 03 ноя 2009, 15:42
Откуда: Смоленск

Re: Ascii shader

Сообщение gnoblin 18 дек 2010, 11:23

Как выглядит оригинал?
не нашел по ссылке шейдера с таким названием.

ссылка прикольная :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Ascii shader

Сообщение antonio 18 дек 2010, 14:22

Так это и есть шейдер по первой ссылке AsciiMii (еще и с комментариями)
Когда offset2 вычисляю просто делением что-то шевелиться, а когда по остатку ничего.
float2 offset2 = IN.uv_MainTex/sizef;
float2 offset2 = fmod(IN.uv_MainTex, sizef);
Синтаксис:
Используется glsl
<languageVersion: 1.0;>

kernel NewFilter<
    namespace: "com.greyboxware.asciimii";
    vendor: "Richard Zurad";
    version: 1;
    description: "Filter to mimic the TEXTp effect from YouTube's 2010 April Fools joke";
>
{
    input image4 src;
    input image4 text;

    output pixel4 dst;

    parameter int size <
        minValue: 1;
        defaultValue: 8;
        maxValue: 32;
    >;

    parameter int charCount <
        minValue: 1;
        defaultValue: 256;
        maxValue: 512;
    >;

    void evaluatePixel() {
        float sizef = float(size);
        float charCountf = float(charCount);
       
        float2 offset2 = mod(outCoord(), sizef);
        pixel4 mosaicPixel4 = sampleNearest(src, outCoord() - offset2);
       
        float luma = 0.2126 * mosaicPixel4.r + 0.7152 * mosaicPixel4.g + 0.0722 * mosaicPixel4.b;

        float range = (1.0 / (charCountf - 1.0));
        float fontOffset = sizef * floor(luma / range);
        float fontmapsize = (sizef * floor(sqrt(charCountf)));
        float yRow = floor(fontOffset / fontmapsize);
        offset2.y = offset2.y + (sizef * yRow);
        offset2.x = offset2.x + (fontOffset - (fontmapsize * yRow));
        pixel4 charPixel4 = sample(text, offset2);

        dst.rgb = mosaicPixel4.rgb * charPixel4.rgb;
        dst.a = mosaicPixel4.a;
    }
}
 
Аватара пользователя
antonio
UNIт
 
Сообщения: 132
Зарегистрирован: 03 ноя 2009, 15:42
Откуда: Смоленск


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4