简单的环绕散射 Simple Wrap Diffuse From GPU GEMS1

  简单的环绕漫反射光照,实现起来特别简单,在Shader中加入以下几行:
  float diffuse = max(0,dot(L,N));
  float wrap_diffuse = max(0, (dot(N,L) + wrap)/(1+wrap));
  其实本质上是一个很虚假的方法,应该算是一个向量光照的Tips。本质上,环绕光照应该和全局照明模型,以及电磁热辐射理论相关。下面是调整调整系数得到的效果。光源在CameraSpace的(0,0,0)处,也就是,眼睛的位置就是射向大象模型的光源位置。



Wrap系数为0.25



Wrap系数为0.45

  另外,使用lib3ds的时候发现它的向量计算功能是在不尽人意,我就直接用NVIDIA Normal Plugins从纹理贴图转换成了向量图,不过发现好像结果还是不对头,怎么都是蓝蓝的一片。所以不得不把所有的向量计算都移到了Fragment Shader里面,没有发疯用Vertex Texture Fetch,那样就多此一举了。

  看到往下下载的3ds模型里附带的那么多零碎地小纹理,我想起了John Camark发明的MetaTexture,不知道究竟是如何实现的。

posted on 2007-04-18 10:13  Bo Schwarzstein  阅读(1267)  评论(0编辑  收藏  举报