3 minutes reading time
(588 words)
dottet.vfl
/* * Shader Info : edge에 circle을 그려주는 shader 입니다. (uv필요) * Modified by : 정현준 */ #pragma label uv "UV Coordinates" #pragma hint uv hidden #pragma hint uv vector #pragma label dotnum "Number of dots" #pragma range dotnum 0 10 #pragma label dotsize "Dot size" #pragma range dotsize 0 1 #pragma label edgecolor "Edge Color" #pragma hint edgecolor color #pragma label facecolor "Face Color" #pragma hint facecolor color surface hjcDottet( vector2 uv = {0, 0}; // uv vector edgecolor = {1, 1, 1}; // 점 색상 vector facecolor = {0.5,0.5,0.5}; // surface 색상 float dotsize = 0.5; // 점 크기 int dotnum = 5; // 점 갯수 ) { float tempS; float tempT; if(isbound("uv")) // uv가 있는경우 { // uv값 추출해서 tempS와 tempT에 적용tempS = uv.x; tempT = uv.y; assign(tempS, tempT, uv); } else // uv가 없는경우 s, t 사용한다. { tempS = s; tempT = t; } vector n = normalize(N); // 노말벡터 정규화 vector nf = frontface(n, I); vector i = normalize(-I); // 시선벡터 반전, 정규화 vector diffusecolor = diffuse(nf, i, 0.1); vector ambientcolor = ambient(); vector surfcolor; //패턴 float fdotnum = dotnum; float colwidth = 1 / fdotnum; float ss = (tempS * dotnum) % 1; float tt = (tempT * dotnum) % 1; float sss; vector _edgecolor = facecolor; vector v1, v2; float dist, ttt; if (tempS < colwidth && tempT < colwidth) { v1 = set(ss, tt, 0); v2 = set(0,0,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempS < colwidth && tempT > 1 - colwidth) { v1 = set(ss, tt, 0); v2 = set(0,1,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempS > 1 - colwidth && tempT < colwidth) { v1 = set(ss, tt, 0); v2 = set(1,0,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempS > 1 - colwidth && tempT > 1 - colwidth) { v1 = set(ss, tt, 0); v2 = set(1,1,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempS < colwidth && tempT > colwidth/2 && tempT < 1 - colwidth/2) { ttt = (fit(tempT, colwidth/2, 1 - colwidth/2, 0, 1) * fdotnum) % 1; v1 = set(ss, ttt, 0); v2 = set(0,.5,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempS > 1 - colwidth && tempT > colwidth/2 && tempT < 1 - colwidth/2) { ttt = (fit(tempT, colwidth/2, 1 - colwidth/2, 0, 1) * fdotnum) % 1; v1 = set(ss, ttt, 0); v2 = set(1,.5,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempT < colwidth && tempS > colwidth/2 && tempS < 1 - colwidth/2) { sss = (fit(tempS, colwidth/2, 1 - colwidth/2, 0, 1) * fdotnum) % 1; v1 = set(sss, tt, 0); v2 = set(.5,0,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } if (tempT > 1- colwidth && tempS > colwidth/2 && tempS < 1 - colwidth/2) { sss = (fit(tempS, colwidth/2, 1 - colwidth/2, 0, 1) * fdotnum) % 1; v1 = set(sss, tt, 0); v2 = set(.5,1,0); dist = distance(v1, v2); if(dist < dotsize) { _edgecolor = edgecolor; } } surfcolor = tt % 2 > .25 || tt % 2 < .75 ? _edgecolor : facecolor; Cf = surfcolor * (ambientcolor + diffusecolor); }
Comments