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