引擎设计跟踪(九.14.3.3) Deferred shading的一些小细节
1.ambient light
之前的shader里面, 方向光会加上ambient 的计算. 但是如果没有方向光, 就没有ambient. 这是把全局方向光改为点光源之后发现的, 因为透明物体的forward shading是正常的, 其他的全是黑的.
解决方法: 如果没有方向光, 就专门画一个单独quad来计算ambient lighting.
//GBuffer color
float2 colorUV = UV * colorUVSpace.zw + colorUVSpace.xy;
float4 albedo = tex2D(colorBuffer, colorUV);
#if defined(AMBIENT)
return light_ambient*albedo;
#endif
//GBuffer normal
float2 normalUV = UV * normalUVSpace.zw + normalUVSpace.xy;
float4 normal = tex2D(normalBuffer, normalUV);
float3 worldNormal = normalize(expand_vector(normal).xyz);
#if defined(DIRECTIONAL)
float4 diffuse = light_ambient;
2.uv flip
这个是因为DX9的纹理坐标系和OGL的相反, 而他们的屏幕坐标系却一样所导致. OGL的屏幕坐标系和UV坐标系都是向右X为正, 向上Y为正轴, 而DX9的屏幕坐标系和OGL一样, 但是UV坐标系相反, 所以render target中的内容是和正常使用贴图相比是Y反转的.
在vertex shader里面flip一下屏幕坐标就可以了.
IGraphicsManager有一个关于图像朝向的标记, 不同的API是不一样的, 这个flip的值通过CPU端计算再传入shader. 来保证API兼容.
scalar flip = IGraphicsResourceManager::getSingleton().getGraphicsConfig().TextureDir == IMGO_TOP_DOWN ? -1.0f : 1.0f;
mViewSize[] = flip;
另外, 因为现在所有光源都使用了quad, 所以可以在vertex shader 里面计算uv. 之前point light和spot light使用的volume, 因为要做perspective correction 之后才能在pixel shader里面做perspective divide( /w), 现在因为是平面, 不需要再pixel shader里面计算, vertex shader里面 /w 就可以了.
3. half pixel/texel offset
这个也是为了兼容性: 目前只有DX9需要这个trick, DX10+以及OGL都不需要. 现在在IGraphicsResourceManager里面加了一个flag, runtime做判断, 根据API的设置来确定是否要计算, 这样可以兼容所有的API.
scalar fHalfPixelOffsetX = ;
scalar fHalfPixelOffsetY = ;
if (IGraphicsResourceManager::getSingleton().getGraphicsConfig().HalfTexel2Pixel)
{
fHalfPixelOffsetX = 0.5f / (scalar)width;
fHalfPixelOffsetY = 0.5f / (scalar)height;
}
引擎设计跟踪(九.14.3.3) Deferred shading的一些小细节的更多相关文章
- 引擎设计跟踪(九.14.3.2) Deferred shading的后续实现和优化
最近完成了deferred shading和spot light的支持, 并作了一部分优化. 之前forward shading也只支持方向光, 现在也支持了点光源和探照光. 对于forward sh ...
- 引擎设计跟踪(九.14.3.1) deferred shading: Depthstencil as GBuffer depth
问题汇总 1.Light support for Editor编辑器加入了灯光工具, 可以添加和修改灯光. 问题1. light object的用户互交.point light可以把对应的volume ...
- 引擎设计跟踪(九.14.2a) 导出插件问题修复和 Tangent Space 裂缝修复
由于工作很忙, 近半年的业余时间没空搞了, 不过工作马上忙完了, 趁十一有时间修了一些小问题. 这次更新跟骨骼动画无关, 修复了一个之前的, 关于tangent space裂缝的问题: 引擎设计跟踪( ...
- 引擎设计跟踪(九.14.3) deferred shading 准备
目前做的一些准备工作 1.depth prepass for forward shading. 做depth prepass的原因是为了完善渲染流程, 虽然架构上支持多个pass, 但实际上从来没有测 ...
- 引擎设计跟踪(九.14.2 final) Inverse Kinematics: CCD 在Blade中的实现
因为工作忙, 好久没有记笔记了, 但是有时候发现还得翻以前的笔记去看, 所以还是尽量记下来备忘. 关于IK, 读了一些paper, 觉得之前翻译的那篇, welman的paper (http://gr ...
- 引擎设计跟踪(九.14.2i) Android GLES 3.0 完善
最近把渲染设备对应的GLES的API填上了. 主要有IRenderDevice/IShader/ITexture/IGraphicsResourceManager/IIndexBuffer/IVert ...
- 引擎设计跟踪(九.14.2g) 将GNUMake集成到Visual Studio
最近在做纹理压缩工具, 以及数据包的生成. shader编译已经在vs工程里面了, 使用custom build tool, build命令是调用BladeShaderComplier, 并且每个文件 ...
- 引擎设计跟踪(九.14.2f) 最近更新: OpenGL ES & tools
之前骨骼动画的IK暂时放一放, 最近在搞GLES的实现. 之前除了GLES没有实现, Android的代码移植已经完毕: [原]跨平台编程注意事项(三): window 到 android 的 移植 ...
- 引擎设计跟踪(九.14.2d) [翻译] shader的跨平台方案之2014
Origin: http://aras-p.info/blog/2014/03/28/cross-platform-shaders-in-2014/ 简译 translation: 作者在2012年写 ...
随机推荐
- 小练习_num1
题目:将一个正整数分解质因数.例如:输入90,打印输出90=2*3*3*5. /* 分解质因数 */ import java.util.*; class num1 { public static vo ...
- python logging模块使用流程
#!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...
- ResNet网络再剖析
随着2018年秋季的到来,提前批和内推大军已经开始了,自己也成功得当了几次炮灰,不过在总结的过程中,越是了解到自己的不足,还是需要加油. 最近重新复习了resnet网络,又能发现一些新的理念,感觉很f ...
- mongo aggregate 删除重复数据
$group 按照什么排序, 关照 _id 这个是排序的依据 $match 这个从排序的结果内抽取 count 大于一的 allDiskUse 如果内存配置比较小, 设置这个才能运行, 否则会崩. ...
- Js的运算符
JS的运算符 1.运算符的分类: a) 算数运算符 b) 字符串运算符 c) 赋值运算符 d) 比较运算符 e) 逻辑运算符 f) 位运算符 g) 其他运算符 2.算数运算符 + 加法运算符 - 减法 ...
- 网站优化之Apache2.4GZIP功能
现在主流浏览器都支持资源文件压缩传输(通过设置http header的Content-Encoding=gzip). 网站优化之一就是开通服务器端的gzip功能,通过对资源文件压缩传输,加快了页面响应 ...
- MySQL数据库需进行修改密码问题解决方案
两种方式可供大家进行参考: 第一种: 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码pass123: 首先在DOS下进入目录mysql\bin,然 ...
- 说一下syslog日志吧~~~
# -*- coding:utf-8 -*-from logging.handlers import *import loggingimport logging.handlers class MySo ...
- OpenGL 3D旋转的木箱
学习自: https://learnopengl-cn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/#3d 0,首先添加glm ...
- wps 邮件 通讯小灵通 长沙杭州
记得在天涯上看过一个热贴,关于贵族与世家的,文中提到号称当今贵族的六大世家,什么“汝南周氏”.“吴兴沈氏”之类,更有甚者,为了比拼,追本溯源,把孔子他老人家也抬了出来,号称孔夫子的多少多少代传人,当时 ...