摘要: 这篇文章被拖延得这么久是因为我没有找到合适的引言-- XXX这一篇接着讲Gamma。近几年基于物理的渲染(Physically Based Shading, 后文简称PBS)开始在游戏业界受到关注并迅速流行。10年、12年以及今年的siggraph都专门开了一个course来介绍基于物理的渲染的基本理论和工程实践,这在很大程度上推动了PBS的普及。如果你对PBS还不太了解的话,不妨先看一看龚大写的系列文章。在从传统渲染管线切换到PBS管线的过程中,一个非常基础而又重要的概念叫做伽马正确(Gamma Correct),为了保证伽马正确需要做的一个操作叫做伽马校正(Gamma Correction阅读全文
posted @ 2013-07-17 10:12 atyuwen 阅读(1763) 评论(2) 编辑
摘要: What we think of as conventional alpha-blending is basically wrong.--Tom Forsyth前段时间在Amazon上淘的三本二手书——一本Jim Blinn's Corner系列的Dirty Pixels, 另二本是Andrew Glassner's Notebook——几经周折终于是送到了,当然立刻马上是迫不及待地大致翻了一遍。相比于Andrew Glassner的天马行空笔下千秋(从几何讲到折纸和形状合成,从对称讲到织纹和拼接,甚至还有一大坨似乎是在讲量子计算),我还是更喜欢Jim Blinn的风格,简单实阅读全文
posted @ 2013-07-01 01:03 atyuwen 阅读(2168) 评论(0) 编辑
摘要: 一开始是雄性勃勃的想要写一个4k,后来写着写着悲剧的发现4k已然已经不可能了,shader还没有打进去就已经4.1k,再加上压缩后的shader总大小应该会在5k以上。要硬生生的抠出1k以上的空间,这绝对不是人干的事。所以我决定破罐子破摔,干脆把空间放松到8k好了,这样不仅仅可以把shader放进去,甚至还可以考虑直接存编译后的shader,省得每次启动都要花7~8秒的时间编译。于是把编译后的shader打进去,用crinkler一压缩,尼玛又超了,8.2k. 0.2k还比较好搞,优化了几个地方的写法,顺便猥琐的把析构函数注释掉…….然后,8,179字节,搞定。其中base大概占到1k左右,钢阅读全文
posted @ 2012-11-25 22:03 atyuwen 阅读(3095) 评论(6) 编辑
摘要: 最近没有合适的床头书可以看,于是索性把CS:APP(深入理解计算机系统)取下来放在床边,睡不着觉时随意翻一翻,以期稳故知新。在CS:APP第2.3.6小节中提到,由于整数乘法指令通常会比加减法和位运算指令会慢上许多,因此编译器有时会做一个优化:用移位和加减法的组合来代替乘以常数因子的乘法,比如x *阅读全文
posted @ 2012-08-04 16:23 atyuwen 阅读(3076) 评论(5) 编辑
摘要: 话说我最近终于一咬牙,花了一个月工资,买了块史上最强网卡:GTX670。此卡在手,心痒难忍,必须要写个demo来测一下网速,考虑了半天,决定来实现一下基于Curl Noise的流体模拟.这种流体模拟并不是基于物理的,其基本思想就是生成一个随机的速度场来控制粒子的运动。但是为了保证视觉上可信,还是需要满足不可压缩流的基本条件:这个随机的速度场需要是无源场(divergence-free),即散度处处为0。那么现在的问题是,怎么生成一个散度处处为0的速度场呢?注意到有这样一个微分恒等式:div(curl(Φ)) = 0,也即是说,旋度场的散度为0。该恒等式的满足需要Φ有连续的二阶混合偏导。于是我们阅读全文
posted @ 2012-06-22 02:33 atyuwen 阅读(3568) 评论(5) 编辑
摘要: Shader live coding是个很好玩的东西,因为只要你足够的创造力,仅用一个pixel shader几乎可以实现任意复杂的效果。正如iq所说:给我两个三角形,我就能画出整个世界。网上能够找到许多glsl的live coding tool. 但却一直没有找到hlsl的。这段时间稍微不那么忙了,于是自己写了一个hlsl版的,有兴趣的可以下载下来玩一玩。源代码在这里。最后贴一个视频,因为使用的fraps未注册,所以只能录30秒。视频中的效果是一个Sierpinski四面体,完整的ps代码可以在源码的save目录里找到。PlayPauseStop阅读全文
posted @ 2012-05-13 19:58 atyuwen 阅读(2572) 评论(1) 编辑
摘要: Filmic Tonemapping固然是个好东西,然而Jim Hejl & Burgess-Dawson的原始公式在不少显示器上都显得过于鲜艳了,另外还有不少人甚至认为完全没有任何Tonemapping的画面更对他们的口味。众口难调,我们能做的就是提供一个可配置的Tonemapping,让他们自己撸去吧。Uncharted2中的Tonemapping是可配置的,而且参数还异常丰富灵活,有A, 有B, 有C, 还有D, E, F….,具体的公式我也懒得说了,大家都知道的,不知道的自己去翻ppt。你说有这么多的参数的公式好调么?-- 我反正是搞不定了。我需要的是一个简单粗暴的公式,只能有阅读全文
posted @ 2012-03-17 14:32 atyuwen 阅读(1869) 评论(1) 编辑
摘要: 在iq的blog上看到这样一段代码:int t[] = {0x4845A956, 0x586DEE32, 0x7E6B9933, 0x0D059D58, 0};int ch = t[0] + t[1] + t[2] + t[3];t[0]^=ch;t[1]^=ch;t[2]^=ch;t[3]^=ch;char *str = (char*)t;把str打印出来是这样的:Egad! It WORKS!!而如果将t的改为这样:int t[] = {0x151ba3a, 0x10abc1a, 0x118a113, 0x1e08bc0b, 0 };那么此时str为: Hi, how are you?.看阅读全文
posted @ 2012-02-19 18:44 atyuwen 阅读(1797) 评论(1) 编辑
摘要: Minimum dot product query (最小点积查询) : 若有一个二维向量集合V, 其大小为m. 那么在集合V上的一次最小点积查询即是说任意输入一个向量x, 返回在V中与x的点积最小的元素以及相应的点积,即 min{dot(x, vi) | vi 属于 V}。 这个问题是在cstheory.stackexchange上面看到的。楼主提出的问题原本是n维的最小点积查询,然后顺便提了...阅读全文
posted @ 2011-08-21 15:15 atyuwen 阅读(1378) 评论(0) 编辑
摘要: The scientist builds in order to study, the engineer studies in order to build. -- Fred Brooks最近在忙各种毕业事项之余,一直在努力搞 Real-time GI ,可惜时间总是显得如此的不够用,搞完了 RSM 却忘了做 SRM,哈哈。为了避免长时间不思考算法问题,导致智商下降,决定弄个小问题来做一下。这个问题也是在搞 GI 的时候想到的,该问题的二维版本跟 GI 也算是有那么一丁点关系,尽管从原则上来说只用一个高度场来表示场景的话显然丢失了太多信息。前面都是废话,现在正式开始,问题是这样的:1-Dime阅读全文
posted @ 2011-03-09 21:47 atyuwen 阅读(3124) 评论(4) 编辑