2014年2月19日

Blinn-phong model importance sampling

摘要: 本文仅讨论 Blinn-phongBRDF model 的高光specular部分,其BRDF 表达式为:H 是半角向量:普通的monte carlo 方法在对BRDF 进行采样的时候是对出射光方向采样(比如phong模型),但是这里对光照结果产生影响的是半角向量,因此我们对半角向量H采样,然后再反推出出射光的方向。山寨一张GPU gem 的图:我们用θø 表示在 以N轴为Z轴的空间里H 向量的方向(球坐标), 这样只要θ按照余弦n次方的分布采样就能做到和BRDF一致实现重要性采样了;具体: 这样采样之后半角的分布就是:β 就是半角和法向量的夹角。之后转换为x y z 坐标:然后就是 阅读全文

posted @ 2014-02-19 10:25 Wen tao.Wang 阅读(809) 评论(1) 推荐(0) 编辑

2014年1月13日

最近需要总结的东西

摘要: 最近接触到和修改的东西非常多,没有时间一一细写,今天想了一下,大概有下面这些,先列出来,之后如果有时间慢慢写出来。OpenVDB代码和论文的阅读,VDB( Volumetric Dynamic B+ tree like) 存储体素的数据结构总结,和相关的工具和优化算法。C++ templates。Old topic,主要是VDB代码的heavy use 让我见识到模板这么强大,可以总结一下,比如模板类的特化。Mitsuba渲染器在windows VS上的配置,Mitsuba是个很牛逼的PBRT like 渲染器,代码注释很详细,花业余时间在VS里配置成功(python + scons),不是很 阅读全文

posted @ 2014-01-13 13:10 Wen tao.Wang 阅读(462) 评论(0) 推荐(0) 编辑

2013年12月28日

转 PIMPL

摘要: RAII 与Pimpl 源地址http://tech.uc.cn/?p=851RAIIRAII是Bjarne Stroustrup教授用于解决资源分配而发明的技术,资源获取即初始化。RAII是C++的构造机制的直接使用,即利用构造函数分配资源,利用析构函数来回收资源。我们知道,在C/C++语言中,对动态分配的内存的处理必须十分谨慎。在没有RAII应用的情况下,如果在内存释放之前就离开指针的作用域,这时候几乎没机会去释放该内存,除非垃圾回收器对其管制,否则我们要面对的将会是内存泄漏。举个例子来说明下RAII在内存分配方面的使用。12345678910111213141516structByteA 阅读全文

posted @ 2013-12-28 00:31 Wen tao.Wang 阅读(249) 评论(0) 推荐(0) 编辑

2013年12月7日

OpenVDB For Windows

摘要: OpenVDB 是梦工厂开源的体素数据格式库,虽然是开源的,但是对windows 的支持非常不好。如果想在windows上搞体素的话需要花一番功夫。写一个总结,编译中需要注意的地方。过两天整理好会写一个bat文件来一次性搞定配置。VS工程的建立就是把源代码和头文件按照文件夹的目录结构加到VS的空项目里就行,可以用CMake生成更加方便,目前测试VS08 和 VS 10 都能正确编译, 但你的依赖库和OpenVDB最好使用同一版本的VS编译器,否则编译链接会出错。OpenVDB依赖库:OPENEXRTBBZlibCPPUnit(For unittest)TBB直接网上可以下载编译好的lib,是动 阅读全文

posted @ 2013-12-07 00:40 Wen tao.Wang 阅读(2093) 评论(0) 推荐(0) 编辑

2013年12月3日

转:跨dll操作fopen的返回值导致出错

摘要: 从老板的blog那里抄来的,一个很神奇的bug,雷死:源地址http://www.cnblogs.com/len3d/p/3406294.html在设置成/MD 或 /MDd 不会导致出错设置成/MT 或 /MTd 的情况下会导致出错看了CRT的实现,估计是因为fopen创建了CriticalSection来保护文件,但是在/MT的情况下,一个DLL里面的CriticalSection是不能被另外一个DLL使用的。只是猜测啊。。。。。。。。。。。。。。。看了VS2008 里的crt 源码,发现_iob这个全局变量,而每个操作FILE指针的函数都要,操作这个变量处理多线程的功能而MD模式 把cr 阅读全文

posted @ 2013-12-03 20:43 Wen tao.Wang 阅读(356) 评论(0) 推荐(0) 编辑

Subsurface scattering

摘要: Subsurface scattering 中文就是指的是次表面散射,也就是描述半透明至透明的物体和光相互作用的一种现象,可以想象现实生活中的蜡烛 玉石等等在光照下的颜色。这些物体之所以拥有这样的外观是因为光线进入物体内部后往往经过多次散射才从物体表面另一点射出。与普通的表面反射或者是纯透明材质的折射不同。 次表面散射材质的基于物理的渲染一直是个很难的课题,这是因为在应用光线路径追踪方法去追踪光线时,往往需要追踪几百次上千次的物体内的散射情况,这是个极度昂贵的行为。此外,采样对于次表面材质的计算也是个大问题。后面会说到。描述次表面散射可以用一个叫BSSRDF的函数来表示,理论上来说对它积分(用 阅读全文

posted @ 2013-12-03 20:42 Wen tao.Wang 阅读(912) 评论(0) 推荐(0) 编辑

DLL/LIB 静态与动态链接 MT/MD的区别

摘要: 这些东西算是编写C++大型软件在处理互相之间的依赖关系,或者编译开源库的时候会经常用到的知识,有时候经常会遇到一些让人崩溃的链接错误,比如 error LNK 201 205 等等,往往是配置不对引起的。在《Game Engine Architecture》中也专门花了一个章节讲这些事情,因此写下来仅供以后参考。我们都知道C++ 编译过之后会生成目标文件 也就是.obj 或者.o格式的文件。目标文件就是编译器翻译过的机器代码,但是目标文件并不能被机器执行,因为其内部的内存地址并没有被确定,同时所有的外部符号没有被解释(也就是没有连接) 而静态库lib就是obj文件的打包,linker用lib生 阅读全文

posted @ 2013-12-03 20:39 Wen tao.Wang 阅读(857) 评论(0) 推荐(0) 编辑

上海NV面试被虐经历

摘要: WARP随便说说Skip to content首页上海NV面试被虐经历Byadmin|2013年8月17日0 Comment职位:Mobile Graphic Tools Engineer.这个职位主要对C++要求很高,对OpenGL API 要求很了解,面的很水,本身自己很紧张,对原理了解的也不够多。靠回忆写了点。。C++:1.类的初始化列表这个东西大家都用,也知道能提高效能,但是关于它的原理。。。好吧,看这个:三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况;二,需要初始化const修饰的类成员;三,需要初始化引用成员数据;对于第一点,当我们的类成员里有个对象,而我们 阅读全文

posted @ 2013-12-03 20:38 Wen tao.Wang 阅读(716) 评论(0) 推荐(0) 编辑

导航