动态多光源 Light-Pre-Pass Lighting 实现
来源:互联网 发布:spring源码解读视频 编辑:程序博客网 时间:2024/05/16 01:44
辛苦数天,终于有所突破。在rendermonkey里用glsl实现的代码请去这里下载
关于渲染器结构设计可参见
http://www.cnblogs.com/cloudffx/archive/2011/08/31/2160208.html
关于deferred rendering (延迟渲染)、light pre-pass rendering(怎么翻译?)的优缺点详细分析可参见
http://www.cnblogs.com/hmxp8/archive/2012/01/29/2331292.html
体会。先说一下法线贴图,本来以为已经够了解它了,结果还是摔了个跟头。
- 从bumpMap(NormalMap)里取出的法线是在“切空间”里的,变换到哪个坐标系下取决于光照在哪里计算。如果是在世界里计算,法线需要乘以matTBN先变换到模型坐标系下,再乘以matWorld到世界坐标系下。在片断shader里如下,其中v_tange v_binormal v_normal均是模型坐标系下的量。
mat3 tbn; tbn[0] = v_tangent; tbn[1] = v_binormal; tbn[2] = v_normal; vec3 bump = normalize( ( texture2D( bumpMap, v_tex_coord).xyz * 2.0 ) - 1.0 ); bump = tbn * bump; vec4 normal = matWorld * vec4(bump, 0);
- 然后是 gl_NormalMatrix。 如果法线与它相乘,得到的法线是在视图坐标下。
Light Pre Pass 场景需要draw两次。
- 第一遍首先把几何体法线和深度信息写在normal rendertarget,然后渲染光,每盏光渲染一次,从normal rendertarget里取得顶点信息进行光照计算,将结果保存在light rendertarget里,然后下盏光,此时打开混合,将结果叠加在一起,第一遍结束。
- 第二遍再次渲染几何体,将light rendertarget做为输入,与原来的纹理颜色混合处理,并最终输出。
在渲染光的时候,将光当做一个几何体。如果是方向光,则绘制一个视口大小的面。如果是点光或聚光,是各自的包围体。对于这两种,要考虑摄像机在包围体内的情况。
样图如下
- 动态多光源 Light-Pre-Pass Lighting 实现
- Deferred Lighting (延迟光照) + Light Pre-Pass 实现多光源动态阴影
- Deferred Lighting (延迟光照) + Light Pre-Pass 实现多光源动态阴影
- Deferred Lighting (延迟光照) + Light Pre-Pass 实现多光源动态阴影
- Light Pre-Pass 渲染器----为多光源设计一个渲染器
- Light Pre-Pass 渲染器----为多光源设计一个渲染器
- Light Pre-Pass 渲染器----为多光源设计一个渲染器
- Light Pre-Pass 渲染器----为多光源设计一个渲染器
- Light Pre-Pass Renderer
- 光源(Light)
- Cg Programming/Unity/Many Light Sources多光源
- OpenGL学习脚印:光源类型和使用多个光源(Light source and multiple lights)
- OpenGL学习脚印:光源类型和使用多个光源(Light source and multiple lights)
- Unity烘焙动态光照实现光源优化
- Unity烘焙动态光照实现光源优化
- osg多光源的实现
- Unity3D深入浅出 - 光源组件(Light)
- Unity3D深入浅出 - 光源组件(Light)
- codeforces 154A Hometask 贪心 dp
- 向HDFS 中写数据
- ThinkPHP邮件发送函数
- 海监111钓鱼岛维权 原属海军5000吨级破冰船
- switch(expr1)char byte short int [整数表达式或者枚举常量]
- 动态多光源 Light-Pre-Pass Lighting 实现
- 在htaccess文件中隐藏index.php
- JDBC
- 2012-12-19 - 12-20 11gR2 "Performance Tuning Guide" page 50 - 69
- FCoE模块设计与实现
- 关于两个程序的基本框架的肤浅理解
- cookie用法示例
- C++操作符总结
- Keep the Customer Satisfied poj 2786