摘要: 实际案例:bullet holes基本原理就是偏移当前像素UV,形成高度差。基本公式:UV + ViewDir.xy *( depth * scale + bias) / viewDir.z;(ViewDir是贴图空间, depth为深度图中储存值,scale看实际的最大深度,比如(贴图覆盖2*2M的范围,并且最大高度差为0.02M,则scale为0.02/2 = 0.01), bias不固定,得看实际情况,一般情况下,-0.01会看起来下陷一些,而+0.01就抬高一些。)reliefMap是指NormalMap中w值为depth。steepMap技术是指更细微的搜索实际深度。(其中currP 阅读全文
posted @ 2012-09-09 17:45 ActionFG 阅读(401) 评论(0) 推荐(0)
摘要: 例子来源:Nvidia openGL SDK10——instanced_Tesslation主要原理:openGL并没有和DX一样,采用硬件方式,而是采用UniformBuffer +EXT_draw_instanced扩展的方式实现Tesslator1、将模型所有控制点存入UniformBuffer当中2、绘制时所用顶点位置VB,存的是Tesslation所需的辅助信息,类似DX中SV_TessFactor,而IndexVB形成instance绘制所需的primitive type而已。当然这两个buffer大小都根据tesslation的程度扩展。3、在绘制时,每个顶点都被绘制了insta 阅读全文
posted @ 2012-09-09 17:42 ActionFG 阅读(474) 评论(0) 推荐(0)
摘要: 1 CelShading卡通渲染关键部分shader代码:Vert部分vec3 n = normalize(inNormal); vec3 l = lightPosition - inPosition; diffuse = max(dot(n, l), 0.0); vec3 e = normalize( eyePosition - inPosition); vec3 H = normalize(l + e); specular = pow(max(dot(H, n), 0.0), 10); if(diffuse == 0.0) { specul... 阅读全文
posted @ 2012-09-09 17:41 ActionFG 阅读(406) 评论(0) 推荐(0)
摘要: 源码见F:\NVIDIA Direct3D SDK 10\Source\Lightning以围栏fence为例1、StreamOutput迭代:以初始16条线段开始,通过分叉(fork)或抖动(jitter)的方式生成额外线段,用此方式反复迭代5到6次。2、渲染:每条线段扩充成Quad(两个三角形)绘制,两个Quad之间的缝隙通过增加额外三角形的方式缝合3、blow后处理 阅读全文
posted @ 2012-09-09 17:36 ActionFG 阅读(176) 评论(0) 推荐(0)
摘要: 详细资料:http://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.pdf ;http://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf主要计算方式:在屏幕空间进行射线检测,比较其与XY平面的夹角Sin值,最后进行积分,获得整个半球面的AO值。图示如下:ao计算公式需要补充几点:法线是基于像素的,不能插值 ,但可通过ddx/ddy微分计算角度加个偏移值,防止采样点的 阅读全文
posted @ 2012-09-09 17:28 ActionFG 阅读(461) 评论(0) 推荐(0)
摘要: 引擎官方站点http://jmonkeyengine.org/IntelliJ IDEA搭建JME3平台步骤:从http://jmonkeyengine.org/wiki/doku.php 中通过subVision工具从代码库中同步代码,得到完整Engine文件夹在Intellij 中新建project,选择第二项:从已有source中创建;路径则直接设为同步代码所得Engine文件夹路径在IntelliJ中设置 JBullet文件夹为 “Exclude”,因其和Bullet文件夹代码重复;在IntelliJ的Setting菜单中,选择Compiler - ResourcePatterns 编 阅读全文
posted @ 2012-09-09 17:25 ActionFG 阅读(309) 评论(0) 推荐(0)
摘要: const float MIDDLE_GREY = 0.72;const float FUDGE = 0.001;const float L_WHITE = 1.5;/** Tone mapping function@note Only affects rgb, not a@param inColour The HDR colour@param lum The scene lumninence@returns Tone mapped colour*/vec4 toneMap(in vec4 inColour, in float lum){ // From Reinhard et al ... 阅读全文
posted @ 2012-09-09 14:43 ActionFG 阅读(256) 评论(0) 推荐(0)
摘要: 公司GPU优化主要摘录:Geometry Instance:所有静态物体,远处全部代以PointSprite方式绘制,大大减少DrawCallUniform buffer Object :对于每帧渲染所需的ViewMatrix、projectionMatrix及主光源颜色等信息,放入Uniform buffer object中,能大大减少各类数据的创建和GPU带宽消耗。Mipmap相关:JME3的LwjglRenderer在切换FrameBuffer,会根据其绑定贴图的配置进行mipmap生成。(像全屏幕filter之类的就可以关闭输出RenderTarget的mipmap。) 阅读全文
posted @ 2012-09-09 14:41 ActionFG 阅读(384) 评论(0) 推荐(0)
摘要: DX10 sdk例子:Tutorial 13: Geometry Shaders (DX到DX10才支持Geometry Shader,即shader model 4.0)该例子主要实现爆炸效果:实际上就是将三角形中心点和其他三点连接(一个三角形变成四个三角形),并沿发现方向拉伸struct VS_INPUT { float3 Pos : POSITION; float3 Norm : NORMAL; float2 Tex : TEXCOORD0; };struct GSPS_... 阅读全文
posted @ 2012-09-09 14:40 ActionFG 阅读(420) 评论(0) 推荐(0)
摘要: from cywater:传统Z-Test其实是发生在PS之后的,因此仅仅依靠Z-Test并不能加快多少渲染速度。而EZC则发生在光栅化之后,调用PS之前。EZC会提前对深度进行比较,如果测试通过(Z-Func),则执行PS,否则跳过此片段/像素(fragment/pixel)。不过要注意的是,在PS中不能修改深度值,否则EZC会被禁用。这样,在整个流水线阶段,深度比较发生了2次,一次是EZC,一次是传统Z-Test(注: 区别可能在于EZC无法写入深度)。除了利用EZC帮助传统Z-Test加速之外(硬件自动调用,我称其为隐式用法),目前还有2个显示引申用法:一个类似于Deferred Sha 阅读全文
posted @ 2012-09-09 14:39 ActionFG 阅读(305) 评论(0) 推荐(0)