学生作品選集
2023年度授業「コンピュータグラフィックス特論」の生徒作品を紹介します。一つのフラグメントシェーダーを使って蘭の花の画像を生成Aすることが目的でした。もし興味あったら宿題の説明をご覧ください。
// Naoki Nishigawa uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; float cro( in vec2 a, in vec2 b ) { return a.x*b.y - a.y*b.x; } float sdUnevenCapsule( in vec2 p, in vec2 pa, in vec2 pb, in float ra, in float rb ){ p -= pa; pb -= pa; float h = dot(pb,pb); vec2 q = vec2( dot(p,vec2(pb.y,-pb.x)), dot(p,pb) )/h; q.x = abs(q.x); float b = ra-rb; vec2 c = vec2(sqrt(h-b*b),b); float k = cro(c,q); float m = dot(c,q); float n = dot(q,q); if( k < 0.0 ) return sqrt(h*(n )) - ra; else if( k > c.x ) return sqrt(h*(n+1.0-2.0*q.y)) - rb; return m - ra; } float sdBox( in vec2 p, in vec2 b ){ vec2 d = abs(p)-b; return length(max(d,0.0)) + min(max(d.x,d.y),0.0); } vec3 capsuleColor ( float d, vec3 b, vec3 c1, vec3 c2, float g ){ return sign(d) < 0.0 ? mix(c1, c2, abs(d) * g) : b; } void main() { vec2 coord = gl_FragCoord.xy; float base_mask = 1.0; vec3 base_color = vec3(0.0); float d = 0.0; base_color = capsuleColor( sdUnevenCapsule(coord, vec2(0, 0.6), vec2(0, 0), 0.35, 0.34), base_color, vec3(1.0), vec3(1.0), 30.0); base_color = capsuleColor( sdUnevenCapsule(coord, vec2(0, 0.15), vec2(0, -0.2), 0.3, 0.37), base_color, vec3(1.0), vec3(1.0), 30.0); base_mask = 1.0; base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(-0.095, -0.55), vec2(-0.15, -0.93), 0.03, 0.01)); base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(-0.05, -0.55), vec2(-0.05, -0.95), 0.03, 0.01)); base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(0.0, -0.55), vec2(0.0, -0.95), 0.03, 0.01)); base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(0.05, -0.55), vec2(0.05, -0.95), 0.03, 0.01)); base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(0.085, -0.55), vec2(0.20, -0.9), 0.03, 0.01)); float a = -0.9, b = -0.3; float t = (clamp(coord.y, a, b) - a) / (b - a); float e = 1.0 - pow(1.0 - t, 3.0); base_color = base_mask > 0.0 ? base_color : mix(vec3(0.2, 0.2, 0.5), vec3(0.3, 0.9, 1.0), e); base_color = capsuleColor( sdBox(coord + vec2(0.0, 0.4), vec2(0.13, 0.2)), base_color, vec3(0.0, 0.5, 1.0), vec3(0.0, 0.5, 1.0), 1.0); base_color = capsuleColor( sdUnevenCapsule(coord, vec2(0, 0.61), vec2(0, -0.2), 0.24, 0.28), base_color, vec3(0.0, 0.5, 1.0), vec3(1.0, 0.2, 0.7), 3.0); base_mask = 1.0; base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(-0.1, 0.6), vec2(-0.15, 0.75), 0.05, 0.03)); base_mask *= step(0.0, sdUnevenCapsule(coord, vec2(0.1, 0.6), vec2(0.15, 0.75), 0.05, 0.03)); base_color = base_mask > 0.0 ? base_color : vec3(1.0, 0.5, 0.2); colour_out = vec4(base_color, 1.0); }
unknown by Naoki
Nishigawa
その他の学生作品
2023年の学生作品の残りは以下の通りです。なお、一部の作品は非常に計算量が多いため、お使いのブラウザで問題が発生する可能性があります。 全学生の作品を表示