Technical‎ > ‎Houdini‎ > ‎COP‎ > ‎

SSAOVEX

//
// VEX Code Generated by Houdini 11.0.446.9
// Date: Mon Jun 04 20:21:14 2012
//

#define VOP_OP
#define VOP_COP2

#pragma opname SSAO
#pragma oplabel "Local Vop Code"
#pragma opmininputs 1
#pragma opmaxinputs 4
#pragma label MatriceSize MatriceSize
#pragma range MatriceSize 0 100
#pragma label end "End Value"
#pragma range end 1 100


#include <voptype.h>
#include <voplib.h>

#include <voptype.h>
#include <voplib.h>

cop2
SSAO(float MatriceSize = 50;
     int end = 10)
{
    int bound_end;
    int bound_MatriceSize;
    float input1;
    float result;
    vector val;
    vector nvec;
    float rand;
    float subed;
    float div;
    float product;
    float sum;
    int added;
    float rand1;
    float subed1;
    float div1;
    float product1;
    float sum1;
    vector val1;
    vector val2;
    vector diff;
    float dotprod;
    float clamp;
    float One;
    float dist;
    float added1;
    float div2;
    float product2;
    int constant;
    float output1;
    float max;
    float sum2;
    float input2;
    float div3;
    float diff1;
    
    // Code produced by: input1
    input1 = 1;
    
    // Code produced by: end
    bound_end = isbound("end");
    
    // Code produced by: result
    result = 0;
    
    // Code produced by: for1
    int _i = 0;
    int _end = end;
    int _step = 1;
    float _result = result;
    for( ; _i < _end; _i += _step )
    {        
        // Code produced by: for1/normalInput
        int plane = 0 ? 0 : PL;
        int array = 0 ? 0 : AI;
        int f = 0 ? 0 : F;
        #if !strcmp("vu", "fu") || !strcmp("vu", "fp")
            #if !strcmp("vu", "fu")
                float upos = 0 ? 0.0 : X;
                float vpos = 0 ? 0.0 : Y;
                val = cinput(0, plane, array, 0,upos, vpos, f);
            #else
                int upos = 0 ? 0.0 : IX;
                int vpos = 0 ? 0.0 : IY;
                val = cinput(0, plane, array, 0,upos, vpos, f);
            #endif
        #else
            #if !strcmp("vu", "vu") || !strcmp("vu", "v4u")
                float upos = 0 ? 0.0 : X;
                float vpos = 0 ? 0.0 : Y;
                val = cinput(0, plane, array, upos, vpos, f);
            #else
                int upos = 0 ? 0.0 : IX;
                int vpos = 0 ? 0.0 : IY;
                val = cinput(0, plane, array, upos, vpos, f);
            #endif
        #endif
        
        // Code produced by: for1/normalize1
        nvec = normalize(val);
        
        // Code produced by: for1/random3
        #ifdef __vex
            rand = random(_i);
        #else
            rand = cellnoise(_i);
        #endif
        
        // Code produced by: for1/subconst1
        subed = rand - 0.5;
        
        // Code produced by: for1/MatriceSize
        bound_MatriceSize = isbound("MatriceSize");
        
        // Code produced by: for1/divide4
        div = MatriceSize / XRES;
        
        // Code produced by: for1/multiply2
        product = subed * div;
        
        // Code produced by: for1/add4
        sum = product + X;
        
        // Code produced by: for1/addconst2
        added = _i + 1;
        
        // Code produced by: for1/random4
        #ifdef __vex
            rand1 = random(added);
        #else
            rand1 = cellnoise(added);
        #endif
        
        // Code produced by: for1/subconst2
        subed1 = rand1 - 0.5;
        
        // Code produced by: for1/divide5
        div1 = MatriceSize / YRES;
        
        // Code produced by: for1/multiply3
        product1 = subed1 * div1;
        
        // Code produced by: for1/add5
        sum1 = product1 + Y;
        
        // Code produced by: for1/positionRandom
        int plane1 = 0 ? 0 : PL;
        int array1 = 0 ? 0 : AI;
        int f1 = 0 ? 0 : F;
        #if !strcmp("vu", "fu") || !strcmp("vu", "fp")
            #if !strcmp("vu", "fu")
                float upos1 = 1 ? sum : X;
                float vpos1 = 1 ? sum1 : Y;
                val1 = cinput(1, plane1, array1, 1,upos1, vpos1, f1);
            #else
                int upos1 = 1 ? sum : IX;
                int vpos1 = 1 ? sum1 : IY;
                val1 = cinput(1, plane1, array1, 1,upos1, vpos1, f1);
            #endif
        #else
            #if !strcmp("vu", "vu") || !strcmp("vu", "v4u")
                float upos1 = 1 ? sum : X;
                float vpos1 = 1 ? sum1 : Y;
                val1 = cinput(1, plane1, array1, upos1, vpos1, f1);
            #else
                int upos1 = 1 ? sum : IX;
                int vpos1 = 1 ? sum1 : IY;
                val1 = cinput(1, plane1, array1, upos1, vpos1, f1);
            #endif
        #endif
        
        // Code produced by: for1/positionInput
        int plane2 = 0 ? 0 : PL;
        int array2 = 0 ? 0 : AI;
        int f2 = 0 ? 0 : F;
        #if !strcmp("vu", "fu") || !strcmp("vu", "fp")
            #if !strcmp("vu", "fu")
                float upos2 = 0 ? 0.0 : X;
                float vpos2 = 0 ? 0.0 : Y;
                val2 = cinput(1, plane2, array2, 1,upos2, vpos2, f2);
            #else
                int upos2 = 0 ? 0.0 : IX;
                int vpos2 = 0 ? 0.0 : IY;
                val2 = cinput(1, plane2, array2, 1,upos2, vpos2, f2);
            #endif
        #else
            #if !strcmp("vu", "vu") || !strcmp("vu", "v4u")
                float upos2 = 0 ? 0.0 : X;
                float vpos2 = 0 ? 0.0 : Y;
                val2 = cinput(1, plane2, array2, upos2, vpos2, f2);
            #else
                int upos2 = 0 ? 0.0 : IX;
                int vpos2 = 0 ? 0.0 : IY;
                val2 = cinput(1, plane2, array2, upos2, vpos2, f2);
            #endif
        #endif
        
        // Code produced by: for1/subtract1
        diff = val1 - val2;
        
        // Code produced by: for1/dot1
        dotprod = vop_dot(nvec, diff);
        
        // Code produced by: for1/clamp1
        clamp = clamp(dotprod, 0, 1);
        
        // Code produced by: for1/One
        One = 1;
        
        // Code produced by: for1/distance1
        dist = distance(val1, val2);
        
        // Code produced by: for1/addconst1
        added1 = dist + 1;
        
        // Code produced by: for1/divide3
        div2 = One / added1;
        
        // Code produced by: for1/multiply1
        product2 = clamp * div2;
        
        // Code produced by: for1/ZERO
        constant = 0;
        
        // Code produced by: autoconvert
        output1 = constant;
        
        // Code produced by: for1/max1
        max = max( product2 , output1 );
        
        // Code produced by: for1/add3
        sum2 = _result + max;
        
        // Code produced by: for1/suboutput1
        _result = sum2;
    }
    
    // Code produced by: input2
    input2 = 80;
    
    // Code produced by: divide1
    div3 = _result / input2;
    
    // Code produced by: subtract1
    diff1 = input1 - div3;
    
    // Code produced by: output1
    float tempR = diff1;
    float tempG = diff1;
    float tempB = diff1;
    R = tempR;
    G = tempG;
    B = tempB;
}

Comments