/usr/share/pybik/shaders/lighting.frag is in pybik 2.1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | // Copyright © 2013-2015 B. Clausius <barcc@gmx.de>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
uniform sampler2D tex;
varying vec4 position;
varying vec3 normal;
varying vec3 color;
varying vec2 texcoord;
varying vec3 barycentric;
const vec3 bevel_color = vec3(pow(15./255., 2.2));
const vec3 pointlight = vec3(0., 0., 0.);
// diffuse+ambient+specular is the maxintensity
const float diffuse = 1.4;
const float ambient = .3;
const float shininess = 20.;
const float attenuation = 0.001;
const vec3 specular = vec3(5., 4.5, 3.) * .1;
const vec3 invgamma = vec3(1./2.2);
vec3 lighting(vec3 col_face)
{
vec3 norm = normalize(normal);
vec3 lightvector = pointlight - position.xyz;
vec3 dirtolight = normalize(lightvector);
float cos_angle = dot(norm, dirtolight);
cos_angle = clamp(cos_angle, 0, 1);
// attenuation
float light_distance_sqr = dot(lightvector, lightvector);
float attenfactor = 1. / (1.0 + attenuation * light_distance_sqr);
// combine color components
vec3 col = ambient * col_face;
col += specular * attenfactor * pow(cos_angle, shininess);
col += diffuse * col_face * cos_angle;
return col;
}
void main()
{
vec3 col;
vec4 col_tex = texture2D(tex, texcoord);
float bary_min = min(min(barycentric.x, barycentric.y), barycentric.z);
float bary_width = fwidth(bary_min);
if (barycentric == vec3(0.)) {
// unlabeled part
col = bevel_color;
} else if (bary_min <= 0.02) {
// frame around the label
col = bevel_color;
} else {
// the label
col = mix(color.rgb, col_tex.rgb, col_tex.a);
bary_min = (bary_min - 0.02) / 1.1;
if (bary_min < bary_width) {
// smooth at the frame
col = mix(bevel_color, col, bary_min / bary_width);
} }
col = lighting(col);
gl_FragColor = vec4(pow(col, invgamma), 1.);
}
|