Font size: +
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);
}
 
star.vfl
amber.vfl
 

Comments

No comments made yet. Be the first to submit a comment
Already Registered? Login Here
Monday, 21 April 2025