程序员三大浪漫之一

文章目录[隐藏]

我写博客吧,好像就正经不起来。总会夹杂点杂七杂八的东西。

先说正题吧。

所谓程序员三大浪漫嘛,编译原理,图形学,操作系统(不是我说的,逃

这次说的是图形学。

我好想有个坏毛病,发现个什么好玩的,自己其实根本不懂就喜欢拽着人乱说。

最过分的一次是表彰大会上大礼堂给全学院人讲信息安全(当时到底怎么想的简直不要脸

所以还是继续不要脸一次。

如果现在有人问我,怎样开始喜欢上编程,写点什么项目可以获得最大的成就感。答案肯定是写光线追踪。

唉,自己过去对图像以及显卡的了解真是太 Naive 了……简直等于什么都没有啊。

先上文

用 JavaScript 玩转计算机图形学(一)光线追踪入门

光线追踪的js实现,总共500行代码不到,循序渐进。

最神奇的地方在于,超简单的原理带来了超乎想象的效果。

如果有一点 3D 软件的使用经验和游戏开发经验的话,原理非常直白(当然还要懂点数学和物理,我这种渣水平就够)

但是效果实在是,出人意料。光看图感觉不到,自己敲完代码跑出来,太神奇了(或者是我太无知了 = =)

上图,为了帮助理解,自己改了 3x SSAA ,抗锯齿效果杠杠。

(下图分别是 1x,2x,3x, 反射都是3次追踪。为什么没有 4x ?因为 4x 跑了5分钟然后浏览器跪了……)

附上改的渣代码,确实就是 super-simpling 而已。

function rayTraceReflection(scene, camera, maxReflect) {

        scene.initialize();
        camera.initialize();

        var ssaa = 1; //抗锯齿等级
        var rawPixels = new Array();
        for (var i = 0; i < h * ssaa; i++) {
            rawPixels[i] = new Array();
        }

        for (var y = 0; y < h * ssaa; y++) {
            var sy = 1 - y / (h * ssaa);
            for (var x = 0; x < w * ssaa; x++) {
                var sx = x / (w * ssaa);
                var ray = camera.generateRay(sx, sy);
                rawPixels[y][x] = rayTraceRecursive(scene, ray, maxReflect);
            }
        }

        var i = 0;
        for (var y = 0; y < h * ssaa; y += ssaa) {
            for (var x = 0; x < w * ssaa; x += ssaa) {
                var color = Color.black;
                for (var yi = 0; yi < ssaa; yi++) {
                    for (var xi = 0; xi < ssaa; xi++) {
                        color = color.add(rawPixels[y + yi][x + xi])
                    };
                };
                pixels[i++] = color.r / (ssaa * ssaa) * 255;
                pixels[i++] = color.g / (ssaa * ssaa) * 255;
                pixels[i++] = color.b / (ssaa * ssaa) * 255;
                pixels[i++] = 255;
            }
        }
        ctx.putImageData(imgdata, 0, 0);
    }

接下来是希望实现正交相机,融合光线,用其他语言(比如C井)实现玩玩这样……

期待什么年代游戏可以 real-time ray tracing ,那会是怎样一番光景啊……(看看现在 tone tracing 的效果都已经如此惊艳了)

说到游戏,不得不提下一个话题。

Ori And The Blind Forest

这个游戏跟 ray tracing 没什么关系,这是一个2D游戏。

与其说游戏,不如说是艺术。第一眼看上去以为是个设计作品,类似可交互动画这样。

结果分分钟打脸,手残党被虐哭……

分分钟成为自己最喜欢的游戏。

和我一起呐喊,软人希!

(Steam平台有售,强烈推荐体验。这个主题只说了这么几句不是没话说,恰是因为实在有太多话说了)

这就是本周的Sean Talk,我们下周见!(设么鬼……什么时候有这个系列了,不要说得好像要开每周专栏了一样好吧><)

完了,书单又多了一本,PBRT……