# Librarian

Members

1,418

• #### Days Won

99

Librarian had the most liked content!

747 Excellent

## 55 Followers

• Rank
Grand Master
• Birthday 03/04/1976

• Website URL

## Personal Information

• Name
Tesan Srdjan
• Location
Göteborg/Sarajevo

## Recent Profile Visitors

15,484 profile views

1. ## Houdini Workflows 001: Copy Variants

From Asia Students. VariantCopy.hiplc
2. ## Students Work 2021

New workflows and Fun indie and Happrentice with files qiita.com/advent-calendar/2021/houdini Have Fun
3. ## Every week shaping Ernest Hackel

this we gonna use soon in Chops and Vellum and some love From Asia. numbers.. float u = float(@elemnum)/(@numelem-1); vector circle_pos = 5 *pow(u,2)*set(cos(100*u),sin(100*u)); float v = 0.5-abs(0.5-u); float w = fit(abs(@Time % 1- u),0,0.05*(@Time+0.1),6,0); circle_pos += normalize (circle_pos) *float(u*w*v*cos(0.05*@elemnum+9.66)); int pt = addpoint(0,circle_pos); setpointattrib(0,"Cd",pt,set(u,v,w)); void rhombus (int n ;vector p; float offset; int bool; float rolloff){ vector p0,p1,p2,p3; if(bool){ p0={0,1,0}; p1={0.5,0.5,0}+(0.2+max(0,0.3*sin(offset)))*{1,1,0}; p2= {0.5,0.5,0}-(0.2+max(0,0.3*sin(offset)))*{1,1,0}; p3={1,0,0}; }else{ p0= 0; p1={0.5,0.5,0}+(0.2+max(0,0.3*sin(offset)))*{1,-1,0}; p2= {0.5,0.5,0}-(0.2+max(0,0.3*sin(offset)))*{1,-1,0}; p3={1,1,0}; } p0 +=p; p1 +=p; p2 +=p; p3 +=p; int pt0= addpoint(0,p0); int pt3= addpoint(0,p3); vector pos; int pt; float u; int ni = 3 *n+1; for(int i;i<ni;i++){ float u = i/float(ni-1); u = smooth(0,1,u,rolloff); pos = lerp(p1,p2,u); pt = addpoint(0,pos); addprim(0,"polyline",pt0,pt,pt3); } } vector pos; for(int i;i<10*10;i++){ pos = set(i%10,i/10,0); int bool = i%4; if(i/2%20 == 0){ rhombus(1.5,pos,1.5,!bool,0.5*noise(@Time*i*0.1)); }else{ rhombus(5.1,pos,1.5,!bool,0.5*sin(@Time*i*0.05)); } } @width = 0.001; Have FUn .."Help with some model"------- jump in
4. ## Curves distributing points

@RTHMan just feed on Magnus Example make Att-Randomize pscale than matrix rot = maketransform(0,0,0,{12,0,0},1,@P); vector temp_pos = @P +@pscale *{0,1,0}; int prim = addprim(0,"polyline",addpoint(0,temp_pos)); setprimattrib(0,"pscale",prim,@pscale); setprimattrib(0,"center",prim,@P); vector normal ; for (int i =0; i < 30;i++){ temp_pos*= rot; addvertex(0,prim,addpoint(0,temp_pos)); } removepoint(0,@ptnum); @center = prim(0,"center",@primnum); @pscale = prim(0,"pscale",@primnum); float offset = @pscale ; i[]@prims= pcfind_radius(1,"P","pscale",1,@center,@pscale,25); removevalue(@prims,i@primnum); vector n; float depth; vector near_pos; float near_pscale; float dist; vector r = @P- @center; foreach(int prim;@prims){ near_pos = point(1,"P",prim); n = normalize (near_pos-@center); near_pscale = point(1,"pscale",prim); dist = distance(@center,near_pos); offset =(@pscale / near_pscale)*dist/(1+(@pscale / near_pscale)); if (dot(n,r)-offset>0){ @P-= n*(dot (n,r)-offset); } }
5. ## workflow for modeling this tiny planet

for roads dokaitutorials.. heightfield tutos you have on Sidefx details Google .. wrap with wrangle code @P= relpointbbox(0,@P); @P.xyz = @P.zxy; @P *= {1,1,1}; vector dir = {-1,-1,0}; @P = sample_direction_cone(dir,3.14,vector2(@P)); @P += normalize(@P)*@height *0.0014; @P *= 400; @P +={1000,0,0}; or this cvex //float x – X screen coordinate in the range -1 to 1 // //float y – Y screen coordinate in the range -1 to 1 // //float Time – Sample time // //float dofx – X depth of field sample value // //float dofy – Y depth of field sample value // //float aspect – Image aspect ratio (x/y) // //export vector P – Ray origin in camera space // //export vector I – Ray direction in camera space // //export int valid – Whether the sample is valid for measuring #pragma hint x hidden #pragma hint y hidden #pragma hint Time hidden #pragma hint dofx hidden #pragma hint dofy hidden #pragma hint aspect hidden #pragma hint P hidden #pragma hint I hidden #pragma hint side oplist #pragma choice side 0 "right" #pragma choice side 1 "left" #pragma label offest "Pupil Distance" #include "math.h" cvex paronamaLens( // Inputs float x = 0; float y = 0; float Time = 0; float dofx = 0; float dofy = 0; float aspect = 1; float offest = 1; int side = 0; // Outputs export vector P = 0; export vector I = 0; ) { float halfPI = 0.5 * PI; float xa = -PI * x; float ya = halfPI * y; float sx = sin(xa); float cx = cos(xa); float sy = sin(ya); float cy = cos(ya); //correspondent position for eyes float px, pz, rotation; rotation = lerp(-halfPI, halfPI, side); px = cos(xa + rotation) * cos(ya); pz = sin(xa + rotation) * cos(ya); P = 0.5 * offest * set(px, 0 , pz); I = set(cx*cy, sy, sx*cy); }
6. ## Houdini Triangle Shape Animation Effects

that's file from wiki https://www.tokeru.com/cgwiki/index.php?title=File:Polyextrude_by_attribs.hip
7. ## Generating a new variation of object in Loop

I think that you first must assign attribute that gonna use those effects on point's ID of that line and then use for-loop to make those random changes on any plank..and this way you can manipulate anything in loops...One way @xFlaye diffLoopsFix.hipnc
8. ## Every week shaping Ernest Hackel

method in Houdini 19 that we gonna use for driving points(in Chops) and volumes, Uv's and other stuff soon. 4@m = ident(); f@d = distance(@P,(0,0,0)); f@s = chramp('speed',@d/2.4); rotate(@m,@s*@Time,2); @P*=@m; vector x, y; makebasis(x, y, v@N, {0,1,0}); p@orient = quaternion(set(x, y, v@N)); stuff-for Chops.hiplc vector pos(float u,t){ vector p = set(0,0,u); p+= u *0.2*curlnoise(p+0.1*t); return p; } int npt = 30; for (int i;i<npt;i++){ float u = i/float(npt-1); vector p= pos(u,@Time); vector next_p = pos(u+0.1,@Time); vector up = normalize(next_p-p); vector4 ori = dihedral({0,1,0},up); int pt = addpoint(0,p); setpointattrib(0,"orient",pt,ori); matrix3 r =qconvert(ori); vector v = set(r.xx,r.xy,r.xz); vector side = set(r.zx,r.zy,r.zz); setpointattrib(0,"v",pt,v); setpointattrib(0,"side",pt,side); } for Particles and Chops float pscale = chramp("pscale_ramp", float(@ptnum) / (float(@numpt)-1.0)); f@pscale = pscale; f@locate = float(@ptnum) / float(@numpt); float up_gap = radians(360.0 / float(chi("divisions_max")) * float(@ptnum)) * 0.5; vector4 quat = quaternion(up_gap, v@N); v@up = qrotate(quat, v@tangentv);
9. ## shader Where is the Mantra Specular Edge Color ?

procedural wood shader with full control for specular edge (color, intensity) based on disp Norm and more ...Play a little bit with settings if you have Time
10. ## shader Where is the Mantra Specular Edge Color ?

maybe it Helps @Elistan
11. ## Exploring FX Possibilities from Pen Art

@abhimitra its possible with regular splines and L-system (chops) and with shaders...or with regular Vellum 2d solver ..mah endless possibility and solution with Houdini...

from beauty Of Asia @thu Thanx ..Volume Domain Wrapping. function vector gumbelDistribution(vector v) { return -log(-log(v)); } // return 0 ~ 1 function vector selectedNoise(int noiseId; vector pos; float time; float flow) { int Random = 0, // random PerlinNoise = 1, // noise OriginalPerlinNoise = 2, // onoise SimplexNoise = 3, // xnoise SparseConvolutionNoise = 4, // snoise FlowNoise = 5, // flownoise CurlNoise = 6, // curlnoise ArigatorNoise = 7, // anoise WorleyNoise = 8, ManhattanDistWorleyNoise = 9, ChebyshevDistWorleyNoise = 10; if(Random == noiseId) {// 0 ~ 1 return random(set(pos.x, pos.y, pos.z, time)); } if(PerlinNoise == noiseId) { // 0 ~ 1 return noise(set(pos.x, pos.y, pos.z, time)); } if(OriginalPerlinNoise == noiseId) { // 0 ~ 1 error("Error: OriginalPerlinNoise"); } if(SimplexNoise == noiseId) { // 0 ~ 1 return xnoise(set(pos.x, pos.y, pos.z, time)); } if(SparseConvolutionNoise == noiseId) { // -1.7 ~ 1.7 return snoise(pos); } if(FlowNoise == noiseId) { // 0 ~ 1 (0.2 ~ 0.8), args(p, flow(0 ~ 1)) return flownoise(set(pos.x, pos.y, pos.z, time), flow); } if(CurlNoise == noiseId) { // -1 ~ 1.02 return curlxnoise(set(pos.x, pos.y, pos.z, time)); } if(ArigatorNoise == noiseId) { // anoise 0 ~ 1 // return anoise(pos); vector4 p = set(pos.x, pos.y, pos.z, time); return anoise(pos, 0, noise(p), noise(p) ); } if(WorleyNoise == noiseId) { vector4 p = set(pos.x, pos.y, pos.z, time); int seed; float dist1, dist2, dist3, dist4; wnoise(p, seed, dist1, dist2, dist3, dist4); return set(dist1, dist2, dist3); } if(ManhattanDistWorleyNoise == noiseId) { vector4 p = set(pos.x, pos.y, pos.z, time); int seed; float dist1, dist2, dist3, dist4; mwnoise(p, seed, dist1, dist2, dist3, dist4); return set(dist1, dist2, dist3); } if(ChebyshevDistWorleyNoise == noiseId) { vector4 p = set(pos.x, pos.y, pos.z, time); int seed; float dist1, dist2, dist3, dist4; cwnoise(p, seed, dist1, dist2, dist3, dist4); return set(dist1, dist2, dist3); } error("Error: selected"); } function vector fitTo01(int noiseId; vector vec) { int OriginalPerlinNoise = 2, // onoise SparseConvolutionNoise = 4, // snoise CurlNoise = 6; // curlnoise // -1 ~ 1 if(OriginalPerlinNoise == noiseId) return fit11(vec, {0,0,0}, {1,1,1}); // -1.7 ~ 1.7 if(SparseConvolutionNoise == noiseId) return fit(vec, {-1.7, -1.7, -1.7}, {1.7, 1.7, 1.7}, {0,0,0}, {1,1,1}); // -1 ~ 1.02 if(CurlNoise == noiseId) return fit(vec, {-1, -1, -1}, {1.02, 1.02, 1.02}, {0,0,0}, {1,1,1}); return vec; // 0 ~ 1 } function vector sampling(int fbmId; vector v) { int Normal = 1, Cauchy = 2, Sphere_Uniform = 3, Orientation_Uniform = 4, GumbelDistribution = 5; int samplingId = chi("fbm" + itoa(fbmId) + "_SamplingID"); if (samplingId == Normal) { vector vec = fitTo01(chi("fbm" + itoa(fbmId) + "_NoiseID"), v); return sample_normal(vec); } if (samplingId == Cauchy) { vector vec = fitTo01(chi("fbm" + itoa(fbmId) + "_NoiseID"), v); return sample_cauchy(vec);// -1 ~ 0 ~ 1 } if (samplingId == Sphere_Uniform) { vector vec = fitTo01(chi("fbm" + itoa(fbmId) + "_NoiseID"), v); return sample_sphere_uniform(vec); } if (samplingId == Orientation_Uniform) { vector vec = fitTo01(chi("fbm" + itoa(fbmId) + "_NoiseID"), v); return sample_orientation_uniform(vec); } if (samplingId == GumbelDistribution) { vector vec = fitTo01(chi("fbm" + itoa(fbmId) + "_NoiseID"), v); return gumbelDistribution(vec); } error("ERROR: Sampling"); } function vector fitTo11(int noiseId, samplingId; vector v) { int notSelectedSamplingId = 0; if(samplingId == notSelectedSamplingId) { int OriginalPerlinNoise = 2, // onoise SparseConvolutionNoise = 4, // snoise CurlNoise = 6; // curlnoise if( (OriginalPerlinNoise != noiseId) && (SparseConvolutionNoise != noiseId) && (CurlNoise != noiseId) ) { return fit01(v, {-1,-1,-1}, {1,1,1}); } } } function vector fbm(int octave; int noiseId; vector p; vector sft; float t; float angle; float flow) { vector pos = p; vector v = {0}; vector a = {0.5, 0.5, 0.5}; matrix mat = ident(); // float radius = 3.1415; float time = t; // float scale = 2; vector shift = sft; for (int i = 0; i < octave; ++i) { v += a * selectedNoise(noiseId, pos, time, flow); //TODO: rotate parameter rotate(mat, radians(angle), {0,1,0}); pos = mat * pos * {2,2,2} + shift; a *= 0.5; } return v / (1 - a); } function vector domainWarping(vector p; float time) { vector pos = p * chf("Scale"); // FBM 1 ------------------------------------------ vector fbm1 = fbm( chi("fbm1_Octave"), chi("fbm1_NoiseID"), pos, chv("fbm1_Shift"), time, chf("fbm1_Angle"), chf("fbm1_FlowNoise_Flow") ); if (chi("fbm1_SamplingID") != 0) { fbm1 = sampling(1, fbm1); } fbm1 *= chv("fbm1_Scale") * chf("fbm1_Uniform_Scale"); // return fbm1; //debug; // FBM 2 ------------------------------------------ vector fbm2 = fbm( chi("fbm2_Octave"), chi("fbm2_NoiseID"), pos + fbm1, chv("fbm2_Shift"), time, chf("fbm2_Angle"), chf("fbm2_FlowNoise_Flow") ); if (chi("fbm2_SamplingID") != 0) { fbm2 = sampling(2, fbm2); } fbm2 *= chv("fbm2_Scale") * chf("fbm2_Uniform_Scale"); // FBM 3 ------------------------------------------ vector fbm3 = fbm( chi("fbm3_Octave"), chi("fbm3_NoiseID"), pos * (chv("fbm3_Scale") * chf("fbm3_Uniform_Scale")) + fbm2, chv("fbm3_Shift"), time, chf("fbm3_Angle"), chf("fbm3_FlowNoise_Flow") ); if (chi("fbm3_SamplingID") != 0) { fbm3 = sampling(3, fbm3); } if(chi("is_Fit_11")) { fbm3 = fitTo11(chi("fbm3_NoiseID"), chi("fbm3_SamplingID"), fbm3); } return fbm3; } if(chi("is_Density_Attribute")) f@density = domainWarping(v@P, chf("Time")); if(chi("is_Velocity_Attribute")) v@velocity = domainWarping(v@P, chf("Time")); Have fun.
13. ## How to use Attriblist

https://forums.odforce.net/topic/20916-attribute-pull-down-list-in-otl/
14. ## Hard Surface Design

@Mexxgen Share some experiments when you Found Time. Right now trying to found some file-s from L-system shaping with boxes and MetaBall..its old file from H 9.5 I know only that can be convert to Nurbs and vice versa and combining with those Vex codes in new Curve tool oj oj .
15. ## Every week shaping Ernest Hackel

Have Fun.. 01.
×
• Donations