CG_9.24

试了一下多模型渲染,理论上可以渲染复杂的场景了,设置了最基本的点光源,贴图目前不打算尝试,精力放在交互和物理上。不显示坐标轴和模型坐标和旋转信息,交互起来有点晕。

接下来看看怎么搞一下UI,模型参数可以交互式编辑,逐渐向一个基本的场景编辑器发展。想试试有没有可能用Electron和SDL搞多窗口,用js来编写UI和操作逻辑,不太想写imgui。

另外得把坐标轴和平面网格渲染出来。

恢复博客

从archive.org把博客恢复了出来,写作日期也都还原了,不过正文中的链接地址应该都是经过转换的,懒得修正了,以后一年备份一次出来。

最近空闲时候写计算机图形学的代码,写着写着又跑到读数学书去了,有点回到学生时代和刚毕业前两年的感觉。大环境差,公司环境也差,近期多读读书写写代码是最能让人心静的。

写东西依然有严重的情绪障碍,原来这几年下来竟然没有半点好转,就流水账写一点吧。

基向量

用OpenGL列向量的方式讨论。

关键点:

  • 矩阵表示坐标空间变换。
  • 矩阵的列相当于是基向量。
  • 矩阵乘法(坐标空间变换)就是换基向量。

别无其他。基向量的解读方式真是简单透彻。

基础设定

看了100页3D数学基础,左右手坐标系、正负旋转方向、行列矢量乘法,是用图形库和引擎需要了解的几个前提。

OpenGL使用右手坐标系,DirectX使用左手坐标系,如果屏幕右边x、上边y,OpenGL屏幕朝里是-z,逆时针是正向旋转。

OpenGL使用列矢量,DirectX使用行矢量,矩阵乘法顺序是反的。

此外还有什么?

CG_9.18

完成了类Blender默认的视图操作,没看书没找资料,涂涂画画绕了挺久,有几个东西需要澄清。

Camera有Position,有Up和Direction。Blender有个有用的概念叫Cursor,是操作旋转时的中心点。

按住鼠标上下左右移动,是调整World围绕Cursor的旋转,Camera本身的位置和方向都不动,即该视角下,不论怎样旋转,LookAt矩阵都不用变化:

glm::lookAt(_position, _position + _direction, _up)

World围绕Cursor转动花了两个小时功夫,步骤是先位移到Cursor位置,然后绕X轴旋转,再绕Y轴旋转,再移回原位置。

一开始绕Y轴水平旋转时轴不对,不是物体实际的Y轴,而总是(0,1,0)。这里忽略的是绕X旋转后,Y轴已经被旋转了,需要计算新坐标系中“原Y轴”的向量,画一画就知道,应该是(0, cos, sin)。

CG_9.17

写了一个Camera,鼠标移动可以旋转,WASD可以移动摄像机位置,类似于Blender里的Walk Navi View。公式是自己推导的,能work,但好像跟学术做法不一致。

Camera的关键是三个参数:“位置向量”、“朝向向量”、“UP向量”,然后朝向和UP叉乘是垂直的左右向量。移动是调整“位置”,旋转是调整“朝向”,UP似乎不用变化。

建模或者地图编辑的视图是另一种,把整个World当成一个Model,目标跟随是另一种,Camera搞清楚够喝一壶,有哪些分类?

CG_9.15

写点3D图形学代码。

今天写:按Tab顺序变换选中的SceneNode,变色。支持按上下左右,调整被选中的SceneNode的位置。算是支持简单的交互。

“游戏类”的东西与图形渲染代码怎么剥离做抽象?

数据的路该往哪走?

上周跟组里同学说,想写一篇《数据的路该往哪走?》的文章,论述一下我们的思考和看法,面向不懂大数据的高层和业务方,也把我们一到两年的发展方向确定下来。只是现在写作障碍越来越严重,怎么也连贯不起来,对着一闪一闪的光标长久的挣扎和发呆,先流水账记录一些偏技术的内容吧。

这一年多数据处理方面的进展,应该说每一步进展都在预料之内,都是在理论层面论证清楚后进行的。执行更像是验证。有趣的是,单纯看落地出来的结果,并不显得多么复杂和高明,方案简单粗暴到极点。对外分享,每每让我有种在下象棋,思考了几十分钟,最后走了一步“拱卒”的感觉。不过同是简单,是否是“有理有据,有意为之”,差别是根本性的——艺术是不是也是这样?

回顾整个思考过程,核心是三篇:

当然要理解这三篇的内容,需要大量知识储备,许多references要提前熟悉。

第一阶段的目标是解决我们自身的问题。当时面临的问题是研发效率低,组里同学工作机械重复,难度不大却费时费力,实实在在是在“搬砖”。错误在于不该按做业务需求的思路做数据需求 ,应该从数据方案出发,挑战Shasta中说得很清楚:

  • First, user query latencies must be low.
  • Second, underlying transactional data stores have complex “read-unfriendly” schemas, placing significant transformation logic between stored data and the read-only views that Shasta exposes to its clients.
  • Finally, Shasta targets applications with strong data freshness requirements.

解决的核心思路,就是变pre-processing优先为post-processing优先,利用硬件和引擎强大的在线计算能力(主要是在线join),把预处理工作消除。仅这一点,做惯了传统数仓建模的人至今也很难接受,相比之下,平台的接受度反而更高一些。

这一阶段还主要是从纯技术角度来说。当前除了类似头条这种纯信息化的业务,“互联网+”型业务对于数据应用面临的困境是,所有人都知道数据有价值,但不知道应该如何利用。加之现在DL和AI概念火得一塌糊涂,造成一个很滑稽的局面,人们拿着DL这个锤子,却找不到合适的钉子。各方能做的,就是“先收集数据”,然后依然做些初级的洞察分析。于是引出第二阶段的思考,也即文章的标题,数据技术方案的发展方向是什么?数据如何发挥价值?终态是什么?

前段时间一直在调研WolframAlphaPalantir这两家传奇公司的方案,资料很少,只是判断大方向应该如此。经过一段时间的广泛阅读,从这个slides中了解到Palantir的核心策略竟是IA,后来经Quora指点在archive.is里挖出一篇Palantir官博里已经不存在的那篇重要文章,整理思路,发觉一直以来忽视了“人”的重要性,也忽视了“人”造成混乱的能力。

IA(Intelligence amplification)是一个很老的概念,可以直译为“智能增强”,与AI对应。这个场景下的AI指的是AI的终极形态,而非简单的算法应用。AI以机器为中心,IA以人为中心。现阶段除某些纯信息类的封闭场景(如围棋),绝大部分是无法做到完全AI自主工作的,IA的思路更为贴近现实:以领域专家为核心,系统作为其大脑的扩展,提供数据支持,快速响应他提出的各类问题,步步逼近答案,逻辑思考和决策仍在人脑中进行。

Palantir文章中的数学模型很好的解释了这个思路:a(h,c) = h*c。其中a表示系统发挥的效用,h表示人的能力,c表示系统能力。效用等于人乘机器的能力,这是理想情况,现实中是不可能的,比如分析师向Hive发出一个数据查询请求,可能要两个小时才能返回结果,效用大打折扣。所以需要修正一下公式,增加一个参数f,friction,表示人机交互成本:a(h,c,f) = h*c/(1+f)

更进一步,可以认为人的能力是个常量,于是公式可以简化为:a(c,f) = H*c/(1+f) 。

我们目前的现状是,H不止一个(很多数据产品)且绝对值很低(能力不够),f值非常大(数据问题作为需求来处理,每个N天)。所以数据不太能发挥出来很大价值。这是根本原因。

根据公式可以很容易看到三个优化方向:

  1. 提升h:找个对数据敏锐的业务领域专家,带着明确目标利用系统
  2. 提升c:提升系统计算能力
  3. 降低f:降低人机交互成本

初看起来H是比较难搞定的,但实际上未必会构成瓶颈。如果f够低,普通的H也可以发挥很大价值,而且人是会成长的。这个问题有点“鸡生蛋蛋生鸡”的意味,重点还是系统要够强大,人机交互成本要足够低。然后在人机互动的过程中,双方都会有持续提升的动力,飞轮就转起来了。

按这个模型可以回答前面的问题:

  1. 技术发展方向?降低f
  2. 发挥价值的方法?以人为中心,通过低成本、高频率的人机交互
  3. 终态?f等于0

所以,第三个阶段核心是如何降低f。理想情况不难想象,就是Elon Musk的公司Neuralink想要干的事情,把电脑和人脑无缝连接起来。这个进程需要多少年我们无法预测。姑且先退一步,现阶段能做到通过自然语言交互,做到秒级响应就已经非常理想了。目前比较成熟的系统,能了解到的,只有WolframAlpha、Palantir、IBM Watson以及前些日子看到的Google Analyza,Siri和各种优秀的智能音箱产品也算,不过Siri是基于WolframAlpha的,另外百度阿拉丁(在我看来)算是一个生硬的失败版本。

从我们面临的实际问题出发,降低f其实是在解决“需求预处理”的问题。这是一个做得越多负担越大、效率越低、错得越多的事情。造成当前格局的表象原因是,多个团队按照自己的粗浅理解设想数据需求,不系统、不深入、不专业,一段时间下去,必然趋于同质化,边界模糊,互相扯皮,在一个非常初级的层次内耗。这其中,人的能力和组织架构合理性是主因。但若论本质,却与第一阶段技术方案的问题相同,我们不应该按”需求预处理“的方式做事。

怎么理解“需求预处理”,说得理论化一点,若以整个数据服务能力作为核心,当前的做事方式就是一种对Query(需求)的穷举(预处理)。不可能穷尽,事情也就不可能做完,做不到对未来查询需求的提前满足,也就不可能提效并降低friction。当需求垂直进行的时候,甚至在不同团队进行的时候,期望做到系统复用、保证指标一致性根本是天方夜谭。可惜这个道理,在团队外很难给人讲明白,给不懂技术的产品和业务团队讲清楚就更难了。

技术的发展方向是搭建一个框架,使得随着数据需求的不断迭代,系统能力持续增强,数据、指标、算法、可视化持续集成进去,产生累积效应,变加为乘。这个框架一个很好的例子就是Analyza,回到我们自身,配合第一阶段形成的在线计算能力,预期可以做到提高c的同时极大的降低f。还在紧张论证当中。

最后说点题外话,近期因为各种原因被动思考了一下“画饼”的问题。当然这个能力还是要有,即所谓的愿景,所谓的Vision。马云天天挂在嘴边“使命、愿景、价值观”,当然很重要,但我越来越觉得,根基应该还是技术突破,否则会陷入一群人反复拿一坨固定大小的事情不断重新切饼分饼的滑稽局面。我们应该做的,是将马车工业的饼升级为汽车工业的饼,螺旋攀升,而不是在马车工业里内耗——全部马车产业也比不上如今一个汽车轮胎产业体量大。

放空与几本书

快两个月了,大脑一直在放空。这应该是自上大学以来首次,尤其是工作后。突然慢下来,慢得让人不安。

不过也并非完全什么都没想,只是近期不如此前总是反复思索同一件事、同一个问题,思维可以被抢占了。所谓放空,用计算机的语言来说,就是大脑被idle线程抢占了,说抢占是因为实在仍有许多重要的事情需要思考。这当然不是正常机制,但人也当然不是机器。

除了什么都不思考,发呆数小时,有时也会想一些琐事,坚持运动,认真吃饭,同时也在持续阅读。

最近读了几本书——似乎依然有心理障碍,无法深入品评,简单记录备忘一下。

重读了《孤独及其所创造的》。“一个隐形人的画像”部分,发现作者父亲的性格和自己很相似,但是读大学时我并非目前这个德行,所以当时为何喜欢这书,百思不得其解。第二部分仍然故弄玄虚,没有读完。另外此次重读不觉得翻译的好了。

重读《金阁寺》。也不知为何,没有读完,书仍放在书桌上。搞了一套三岛由纪夫全集,以后慢慢读。说来奇怪,我发现比起三岛,我对译者唐月梅的兴趣更大。

读了《李健熙传》,发现一个现象,第二代通常是奠定宏伟基业的人,比如摩根,比如万豪的比尔·马里奥特,比如李世民,比如邓小平,比如优衣库柳井正。第一代创始人通常不具备第二代的视野和大局观,第二代在成长过程中,躲在后面看到了所有细节和问题,看到了一个个决策的过程和结果,在安全的环境和平静的心态下,潜移默化,形成了自己的思维,让人羡慕。

读了《索罗斯传》,最近又在读《原则》,对比索罗斯和达里奥,可以明显感受到两个获得相似成就的人截然不同的性格和思维模式,非常有趣。索罗斯是一个糊涂的哲学家,他对金融运作原理有极为出色且有效的直觉,这直觉深藏于他的大脑中,但他无法准确说出这直觉背后的机理,尽管他在努力。而达里奥是一个科学家,他的直觉有着完整的方法论支撑,并且可以系统化的讲解给其他人。我有一种感觉:索罗斯不太可能培养出来一个接班人,除非遇到一个同样的天才,但那不是培养出来的,反之达里奥可以将一个聪明人培养成接班人。最近觉得金融投资蛮有趣,投资这种“玄学”其实同样需要经验和思辨,而思辨本身乐趣无穷——经过痛苦思考,形成深度直觉。

读了《林肯传》和《活下去的理由》,读这两本原因是最近在试图理解抑郁症。林肯是一个彻头彻尾的悲剧老头,终其一生与快乐无缘。《活》是一本不错的书,许多另类视角和精彩洞见,也有许多在其他书籍中很难看到的引用。我从没想过抑郁症竟是这么普遍的一种疾病,最近常常感到,大脑真是一种极端复杂的化学装置,需要各种原料来维持平衡,想要在一生当中都正常运转太难了。

读了《当我谈跑步时我谈些什么》。有天晚上歪在东方广场太平洋咖啡喝了一杯新款,想不到回来后睡意全无,坐在餐桌旁读了个通宵。好多年前站在老祖书屋读过半本,那时候心不在焉,这次很认真,书很有意思。33岁那年,村上开始跑步,一直跑到今天。发现自己脑子里记了许多年龄。如村上29岁开始写小说,37岁时写了《挪威的森林》,金庸33岁开始写武侠,耶稣33岁时被定上十字架,印象里楚留香出场也是33岁,三岛由纪夫45岁刨腹,古龙46岁喝酒喝死了,等等等等。

另外在读茨威格的《巴尔扎克传》,读了很久。想了解巴尔扎克是因为古龙,想知道对古龙影响很大的这个名字很熟悉作品却不熟悉的巨匠,到底是一个什么样的人。总结来说,巴尔扎克是一个出身卑微、精力充沛、矮胖粗鄙、阅女无数、一生喝了五万杯高浓度咖啡、渴望攀龙附凤俗不可耐又实实在在充满天才的工作狂。

最近买了许多传记类图书,够读一个季度了。计划将在读的两本读完后,了解一下古典音乐和古典音乐史,增加除后摇外另一种大脑放空时可听的音乐。

《挪威的森林》

好多年没重读《挪威的森林》了。

回想以前,非刻意的,居然可以整段整段背诵书中某些段落,尤其开头直子和井那部分。算起来,这次应该是第六次或第七次重读,且不算上学时偶尔“信手翻开一页,读上一段”。但是,从研究生开始,再没翻开读过超过一页——从某个时刻起,大脑某处似乎发生了结构性变化,《挪》的魔力也随之消失了。读来索然无味,体会全靠记忆,十分悲哀。

此后读书只能读功利性质的,历史、政治、传记、家书一类,以及学术专著和科普一类,偶尔会读一点侦探小说。总之,只能看得进去理性的读物,需要感性的东西,就似同极磁铁靠近一般,不自觉的十分排斥,厌烦不已。写记录和博客,也不像以前总是三岛由纪夫的味道,冗长的句子、复杂的修辞,叠床架屋,还时而悲哀一把。现在记点东西,词句总是删减再删减。不过也不是工作以后养成的习惯,从“那时候”就开始了。对待亲人也是如此,想不起亲人的生日,总是临近才发觉,节日也几乎不记得,一切矫情之事都很厌恶,看电影从不感动,冷漠至极。像一条蛇。

搬到望京后,重新拿出《挪》,每晚端坐在空旷客厅的沙发的一角,一边喝酒,一边固定读完一整章,加上序共十二章,读了两周。一边读一边用铅笔在本子上记笔记——读《挪威的森林》还认真记笔记的,想来只有我一个吧。这一次感受大不相同,读出很多以前从未发觉的东西。我猜想,应该每个人读小说都会不自觉的进行代入吧,尤其是第一人称的书。但是对于这本书,代入似乎也是错乱的,高中时候很自然地代入了渡边,忧伤不已,然而上大学后,却更像永泽,“所做的,不是自己想做之事,而是自己应做之事”,且一直奉行至今,那几年,脑袋里总是回荡“不要同情自己,同情自己是卑劣懦夫的勾当”,就这样一直持续了不知道多少年。

这次重读,稍微找回一点昔日的感受,可惜那种强烈的感受在写记录的此刻已经荡然无存了。凭记忆写写吧,富有感情不指望了,仅仅是真的很想记录。

这次感触很不一样,尤其是绿子和初美,我发觉十几岁二十出头时候的我根本无法理解她们,肤浅的如同书皮上的介绍,“野性未脱,活泼迷人的绿子”。以前我也这样以为,并总是以我的那位代入,现在发觉真是天大的谬误。绿子的可爱,绝不是性格的表象那般肤浅,她的坦然、成熟、缺爱和坚强,对亲人、爱人的负责和胡闹,每一样都是深刻的、令人感伤的,没有一点娱乐性也不该有。她说自己是“砍柴女,悲哀不起来”,但心里其实很透彻。与渡边一起饭后看火灾时,渡边提议收拾东西,绿子说:

……
“不要紧,我不跑的。”
“这里烧着了也不跑?”
“嗯。”绿子说,“死了就死了呗!”

读到这,我内心一阵难以抑制的酸苦,我能理解绿子,她是真的想死了就死了呗。多么轻松,又多么沉重。

……
“不是累,”绿子说,“只是好久都没这么放松身体了,呼的一下子。”

才二十岁,母亲早几年脑癌去世,家里折腾的一塌糊涂,现在父亲又患了同样的病,家里积蓄也所剩无几,每一样事都要自己操办,每周去医院照顾父亲,擦汗、取痰、接尿、喂饭,其中的孤独和艰辛可想而知。高中时候上的那个贵族女校,体会拮据的难堪,却依然纯真,父母不愿意做饭,自己用买胸罩的钱买厨具,从书本上学做关西菜,这一样一样,都难得至极、可爱至极。这么多年来,我们都喜欢绿子,却不理解她。读书时候我在想,村上到底是以谁为原型塑造了绿子的,以村上自己小资的生活状态,难以理解这些生活艰辛才是,我在笔记本上写着,“村上是理解生活的,《挪》的沉重不只是直子,绿子也是。”

另外是初美。以前读到初美的结局——永泽离开去德国两年后,结了婚,又过了两年,用剃刀割断了手腕动脉——并没有特别的感受,只是觉得是一段凄美短暂的插曲,一个俗套的人物设定。而这次读,却是不胜悲哀,久久无法平静下来。村上写道:

当我恍然领悟到其为何物的时候,已是十二三年以后的事了。那时,我为采访一位画家来到新墨西哥州的圣菲城。傍晚,我走进附近一家意大利披萨饼店,一边喝啤酒嚼意式披萨饼,一边眺望美丽的夕阳。天地间的一切全都是红彤彤一片。我的手、碟子、桌子,凡是目力所及的东西,无不被染成了红色,而且红得非常鲜艳俨然被特殊的果汁从上方直淋下来。就在这种气势夺人的暮色当中,我猛然想起了初美,并且这时才领悟她给我带来的心灵震颤究竟是什么东西–那类似一种少年时代的憧憬,一种从来不曾实现而且永远不可能实现的憧憬。这种直欲燃烧般的天真烂漫的憧憬,我在很早以前就已遗忘在什么地方了,甚至在很长时间里我连它曾在我心中存在过都未曾记起。而初美所摇撼的恰恰就是我身上长眠未醒的「我自身的一部分」。当我恍然大悟时,一时悲怆之极,几欲涕零。她的确、的的确确是位特殊的女性,无论如何都应该有人向她伸出援助之手。

“当来到人生某一阶梯的时候,像突然想起似的自行中断了生命。”12月中旬,回北京的火车上,我翻看以前的记事本,那一刻也是同样的感受,我拉下帽子遮住眼睛,眼泪再也止不住。

记录到此为止,脑袋又是一片空白,再也写不下去了。

这次重读,深深觉得《挪威的森林》从头到尾,每一段文字、每一段情节、每一个人物都无可挑剔,独一无二。从青涩自我的十七岁,到阅历已算丰富、读书已极为挑剔的三十岁的此刻,仍然是这样的评价,替自己和村上感到高兴。