sop    // context => sop type

twistScrips(float deg = 0; vector vec = {0,1,0})

{

        vector min, max, center;

        matrix3 mtx3 = {{1,0,0}, {0,1,0}, {0,0,1}};

        float rad = (deg*3.14)/180;

        

        getbbox(min, max);

        center = (min+max)/2;

        

        rad *= ((P.y-min.y) / (max.y-min.y));

        rotate(mtx3, rad, normalize(vec));

        

        P = (P-center) * mtx3 + center;

}

'Houdini > VEX' 카테고리의 다른 글

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
vex로 코딩해 본 여러가지  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
inline code노드  (0) 2012.11.17
Posted by scii
:

Optional rendering parameters

Note

When you specify a texture, such as with the "environment" keyword, you can also use the image filtering keyword arguments.


Keyword Functions Description
“scope”, string spec all

Allows an override of the scope for ray-intersections. A special scope argument, scope:self, will match the currently shading object.

“bias”, float value irradiance occlusion

The irradiance and occlusion functions take an optional bias parameter which gives control over self-intersection.

“maxdist”, float value all

Allows an override of the maximum distance the ray can travel when testing for intersections. Some functions (i.e. fastshadow()) have the maximum distance implicitly defined (by the length of the ray) and should probably avoid using this option. However, this option can be used effectively when computing reflections, global illumination, refraction etc.

“variance”, float value reflectlight refractlight fastshadow filtershadow trace

Overrides the global variance control (mantra’s -v option) which is used to determine anti-aliasing quality of ray tracing. For more information please refer to the documentation on mantra.

“angle”, float value reflectlight refractlight fastshadow filtershadow trace

Specifies a cone angle over which samples will be distributed. To be effective, the samples parameter should also be specified. The value is specified in radians.

“samples”, int value

reflectlight refractlight fastshadow filtershadow trace irradiance occlusion

How many samples should be sent out to filter rays. For the irradiance and occlusion functions, specifying a samples parameter will override the default irradiance sampling.

“environment”, string map reflectlight refractlight trace irradiance occlusion

If the ray sent out to the scene misses everything, then it’s possible to specify an environment map to evaluate.

Using the ray’s direction, the environment map specified will be evaluated and the resulting color will be returned. Most likely, it will be necessary to specify a transform space for the environment map evaluations.

In the case of refractlight and trace the Of and Af variables will be set to 0 regardless of the background color specified. the resulting color.

When an environment map is specified, the filtering options from texture() are also supported.

See how to create an environment/reflection map.

“envobject”, string objectname

“envlight”, string lightname

“envfog”, string fogname

reflectlight refractlight trace irradiance occlusion

If an environment map is used, the orientation of the environment map can be specified by transforming the ray into the space of another object, light or fog object in the scene. In Houdini, null objects can be used to specify the orientation. For example:

Cf = R*reflectlight(bias, max(R), "environment", "map.rat", "envobject", "null_object_name");

“envtint”, vector color reflectlight refractlight trace irradiance occlusion

If an environment map is used, it’s possible to “tint” the resulting color.

“background”, vector color reflectlight refractlight trace irradiance occlusion

If a ray misses all objects, it’s possible to specify the background color of the scene. In the case of refractlight and trace the Of and Af variables will be set to 0 regardless of the background color specified.

“distribution”, string style irradiance occlusion

Distribution for computing irradiance. The default is to use a cosine distribution (diffuse illumination). The possible values for the style are:

  • nonweighted - Uniform sampling

  • cosine - Cosine weighted sampling

See irradiance and occlusion for issues related to this keyword. 

'Houdini > SHOPs' 카테고리의 다른 글

fog shader 2  (0) 2013.01.17
fog shader  (0) 2013.01.17
dPds, dPdt  (0) 2013.01.14
vex shading 참고 그림  (0) 2013.01.11
Global variable access in shading contexts  (0) 2012.11.29
Posted by scii
:

Global variable access in shading contexts

Each shading context is responsible for setting or modifying different variables. For example, the displacement context can modify the position of the surface being rendered, while the light context is responsible for setting the color of the light source. The Read/Write access of the global variables for each context is summarized in this table.

Variable Type Description Displacement Surface Light Shadow Fog
Cf vector

The final color for the surface. The vector represents the RGB color for the surface.

- W - - R/W
Of vector

The final opacity for the surface. A value of {1,1,0} will be opaque in red/green, but let through blue light from behind. See opacity vs. alpha.

- W - - R/W
Af float

The final alpha for the surface. This is the value which is placed in the alpha channel of the output image. See opacity vs. alpha.

- W - - R/W
P vector

The position of the point on the surface being shaded. In light or shadow shaders, the P variable contains the point on the light source.

Although P is modifiable in the surface context, changing P will not affect rendering of the surface, only shading.

R/W R/W* R R R
Pz float

The Z component of the point being shaded.

R R - - R
Ps vector

In light & shadow shaders, this is the position of the point on the surface being illuminated.

- - R R -
I vector - R R R R
Eye vector

The position of the eye.

- R R R R
s, t float

The parametric S and T (sometimes called U and V) coordinates on the surface being shaded.

R R R R R
dPds, dPdt vector

The delta between the current position (P) and the position of the neighboring micropolygon vertex along S and T. You can use these vectors to get the approximate length of micropolygon edges.

R R R R R
N vector

The shading normal for the surface.

vector R/W R/W R R R
Ng vector

The geometric normal for the surface. This normal represents the “true” normal of the surface being shaded. For example, with Phong shading, the N variable represents the interpolated normal, while the Ng variable represents the true polygon normal

R R R R R
Cl vector

Light color.

- R/W W R/W R/W
L vector

The vector from the point on the surface to the light source. The length of this vector represents the distance to the light source. See how the L variable is initialized.

- R R/W R R
Lz vector

The Z-axis in the space of the light. This is a unit vector.

- - R R -

'Houdini > SHOPs' 카테고리의 다른 글

fog shader 2  (0) 2013.01.17
fog shader  (0) 2013.01.17
dPds, dPdt  (0) 2013.01.14
vex shading 참고 그림  (0) 2013.01.11
Optional rendering parameters  (0) 2012.11.29
Posted by scii
:

Cross Product

Houdini/Houdini etc 2012. 11. 27. 21:07 |

up x(cross) N    =>    X축.

N x(cross) X       =>    Y축.

N    =>    Z축.

'Houdini > Houdini etc' 카테고리의 다른 글

RenderMan Shader Compiles  (0) 2013.01.08
Houdini User가 갖춰야 할...  (0) 2012.12.02
후디니 내에서 쓸 수 있는 함수를 만들 때, 기본적으로 알아야 할 것들  (0) 2012.11.20
12.08.20 MON  (0) 2012.08.23
짝수 공식  (0) 2012.05.16
Posted by scii
:

후디니 내에서 쓸 수 있는 함수를 만들때의 기본 틀:

[return_type] functionName([[arg_type1] arg_name1 [, [arg_type2] arg_name2] ...])
{
...
}
반환형 타입과 인수 타입은 float,  string, vector, or matrix 를 쓸 수 있다.

#은 주석처리.


만약 반환형과 인수의 타입을 명시하지 않으면 후디니는 자료형에 float이 있는 것처럼 인식한다.

그리고, 만약 인수타입에 string을 넣어야 하는데 그것을 잊고 넣지않으면, float으로 인식해서 잠재적 버그를 

열심히 찾는다고 한다.

자료형을 꼭 명시해야겠다.



Examples

# Function to find the minimum value of two
# floating point numbers

min(v1, v2) {
    if (v1 < v2) {
        return v1;
    } else {
        return v2;
    }
}

# Function to reverse the order of a string

string strreverse(string in) {
    float len = strlen(in);
    
    string result = "";
    
    for (src = len-1; src >= 0; src--) {
        result += in[src]; return result;
    }
}

# Example to find the minimum element in a vector

float vecmin(vector vec) {
    min = vec[0];
    
    for (i = 1; i < vsize(vec); i++) {
        if (vec[i] < min)  min = vec[i];
    }
    
    return min;
}

# Example to transform a vector into the space
# of an object passed in.

vector opxform(string oname, vector v) {
    matrix xform = 1;
    
    if (index(oname, "/obj/")) {
        xform = optransform(oname);
    } else {
        xform = optransform("/obj/"+oname);
    }
    
    return v * xform;
}

# Example to find all objects which have their
# display flag set

string opdisplay() {
    string objects = run("opls /obj");
    string result = "";
    nargs = argc(objects);
    
    for (i = 0; i < nargs; i++) {
        string obj = arg(objects, i);
        if ( index(run("opset " + obj), " -d on") >= 0 ) result += " " + obj;
    }
    
    return result;
}

'Houdini > Houdini etc' 카테고리의 다른 글

Houdini User가 갖춰야 할...  (0) 2012.12.02
Cross Product  (0) 2012.11.27
12.08.20 MON  (0) 2012.08.23
짝수 공식  (0) 2012.05.16
$F, $FF 의 차이점  (0) 2012.05.04
Posted by scii
:
우선 후디니의 distance() 함수는 float 자료형 6개를 받아서 두 점간의 거리를 구해주는 함수이다.

정말 좋은 함수이다.

하지만 내가 원했던 것은 한 포인트를 중심으로 그 포인트와의 모든 포인트의 거리를 구해주는 함수가 필요했다.

그래서 기준 포인트를 기점으로 모든 포인트들의 거리를 구해주는 함수를 짜봤다.


일단 Houdini에서 제공하는 포인트간의 거리는 구해주는 distance() 함수이다.

0번 포인트와 6번포인트의 거리를 구하고있다.

보다시피 attribute create 노드로 distance() 함수를 쓰면 모든 포인트 속성에 0과 6번 포인트 거리값이 들어간다. 

하지만, 내가 원하는 것은 이런것이 아니었다. 





내가 원하는 것을 나타나기위한 함수 MyDistFunc()


기준이 되는 포인트를 0번 포인트로 잡고있다.


디테일뷰에서 보이듯이, 0번포인트를 기준으로 모든 포인트들의 거리값을 구해주었다. 0번을 기준으로 6번 포인트가 제일 멀어서 가장 높은 값이 나왔다.






컴스텀으로 만든 함수를 가지고 간단한 테스트


기준포인트가 18번 포인트다.


기준 포인트에서 가장 먼 포인트부터 차례대로 지우는 애니메이션.




기준을 잡은 포인트를 기점으로 거리가 먼곳의 포인트들은 녹색이 적게 들어가고 기준포인트의 인접한 포인트일수록 녹색이 많이 들어간다. 


그 색을 기준으로 포인트들을 지워주고 있다.




거리의 따라 색의 변화를 주었다. 기준이 되는 포인트와 가까운 포인트의 색은 녹색이고, 가장 멀리 떨어진 곳은 빨강색이다.


'Houdini > Houdini Func' 카테고리의 다른 글

숫자가 중복되는 않는 Random Function  (0) 2013.03.28
문자열 관련 함수  (0) 2012.12.19
Houdini 안에서 쓸 수 있는 함수 만들기  (0) 2012.11.20
Posted by scii
:

후디니안에서 쓸 수 있는 함수를 만들어 보았다. 

후디니안에서 존재하는 함수중에 strcmp() 함수가 있는데 두 개의 문자열을 인수로 받아서 두 문자열이 같으면 0을 리턴, 첫번째 문자열이 앞서면(ASCII 상에서) 1을 리턴, 두번째가 앞서면 -1을 리턴하는 함수이다.

그런데, 숫자말고 앞서는 문자열을 출력하고싶어서 strCompare() 라는 함수를 만들어 보았다.



현재 여기서는 bcdf라는 문자열이 앞선다.



여기서는 두 문자열의 같다.


소스코드를 만들어보니까 C++ 언어와 정말 유사하다고 생각했다.

그런데 안되는 부분이 있었다. 함수를 만들면서 반환값이 배열값(배열의 첫번째 주소값)으로 하는 함수를 만들고 싶었는데... float[] asdf() 이런식으로.. float* asdf() 이것도 안되고... 문자열 반환도 주소값을 반환하는건데 배열은 왜...?


여하튼, 컴파일 에러가 난다. 아무래도 후디니 안에서 쓰는 함수의 경우, 반환값이 배열일 필요가 없어서 그런가보다.

attribute create 노드를 봐도 자료형 타입에 배열이 없으니..

그리고, 후디니 안에서 쓰는 함수를 만들 때, int형 자료형 타입을 쓰지못한다... 계속 컴파일 에러가 나서 소스코드를 세밀히 살펴보아도 아무 문제가 안보였는데 int형 자료형 타입을 써서 그러했다.. int형을 왜 못쓰게했는지 그 까닭을 모르겠다.

또한, 변수를 만들때, 자료형 타입을 입력하지 않으면 저절로 float형이 들어간다. 

※ 변수를 초기화해주지 않으면 컴파일 에러발생.

Posted by scii
:

JEdit

Houdini/Houdini Data 2012. 11. 18. 19:52 |

vex 를 외부에서 쓸 수 있게 해주는 에디트

Windows 용 JEdit.

jedit4.3.2install.exe

수정된 xml 파일.

vex.xml


C:\Program Files\jEdit\modes\catalog 파일 열어서 vex, *.vfl 추가해주어야 한다.


수정된 catalog 파일.

catalog


Java로 만들어지고 돌아가는 에디터라 Java는 필수로 설치되어있어야 한다.


참고 사이트

http://www.jedit.org/

http://www.sidefx.com/index.php?option=com_wrapper&Itemid=137




Linux 에서는 /usr/share/jedit 에서 하면 된다.

'Houdini > Houdini Data' 카테고리의 다른 글

EditPlus v3.41.966 Potable  (0) 2012.12.03
EditPlus3로 vfl 파일을 otl로 Compile  (0) 2012.12.03
VEX 구문강조(Edit Plus3)  (0) 2012.12.03
Posted by scii
: