Korchy (korchy) wrote,
Korchy
korchy

OSL-шейдер "Brick 3D"

Шейдер с трехмерной текстурой на примере банальных кирпичиков.
На кубические объекты ложится хорошо, на сферические - не очень т.к. на выгнутой поверхности получается срез, а не наложение. На сферу нужно натягивать обычную 2D-текстуру.







shader Brick3D (
 vector Vector = P,
 float SizeX = 0.2,
 float SizeY = 0.2,
 float SizeZ = 0.1,
 float OffsetX = 0.5,
 float OffsetY = 0.5,
 color BrickColor = color(1.0,0.0,0.0),
 color MortarColor = color(0.0,1.0,0.0),
 output float Factor = 1.0,
 output color Color = color(0.0,0.0,1.0)
 )
{
 vector Pl = P;
 Pl = transform("object",Vector);
 float Px = Pl[0]/SizeX;
 float Py = Pl[1]/SizeY;
 float Pz = Pl[2]/SizeZ;
 if(fmod(ceil(Pz),2)==0) Px += clamp(OffsetX,0,1);
 if(fmod(ceil(Pz),2)==0) Py += clamp(OffsetY,0,1);
 Px = fmod(Px,1); // отбросить целую часть
 Py = fmod(Py,1);
 Pz = fmod(Pz,1);
 float Ux = 1.0;
 if(Px>0.95||Px<0.05) Ux = 0;
 float Uy = 1.0;
 if(Py>0.95||Py<0.05) Uy = 0;
 float Uz = 1.0;
 if(Pz>0.95||Pz<0.05) Uz = 0;
 Color = mix(MortarColor,BrickColor,Ux*Uy*Uz);
 Factor = Ux*Uy*Uz;
}

Ноды




Скомпилированный OSL-шейдер: Brick3D

Tags: blender_tips, cycles, osl
Subscribe

Comments for this post were disabled by the author