星际2的DS和Shadow学习笔记。

来源:互联网 发布:数据分析培训课程excel 编辑:程序博客网 时间:2024/05/16 10:53

最近,随着外包告一段落,开始整理和重构GC了,顺手整理一下GC的MRT。

之前没有认真读完的星际2的白皮书,这次至少是把MRT部分和Shadow部分读了一下。

先说MRT吧:

星际2的MRT大约如下配置:

SC2MRT

具体就不解释了,看样子,为了保证精度,每个MRT应该都是64-bit的,0、2、3三个MRT保存表面颜色信息,1用来保存对于DS而言最重要的Normal Depth,还不错。

关于MRT,其用途可能比看起来的要大得多。其实很多效果都可以通过MRT来实现,例如Killzone2就把SH球谐光照编码到Lighting Accumulation域里,这个Lighting Accumulation在我感觉可能很像Emissive,稍有不同吧——很可能最后用的是与Albedo的乘法?也就是公式是:

Albedo * LightingAccumulation + Albedo * dot(N,L) + Specular* dot(N,H)

Lighting Accumulation主要是用来存储静态光照图、Decal和球谐光照。SC这里面没有Lighting Accumulation,其实很多工作也是可以做的,比如SH光照,可以编到Emissive里嘛,然后Albedo给0000,这样加出来的效果跟Lighting Accumulation的最终效果可能也差不了多少。这样的公式是:

Emissive + Albedo * dot(N,L) + Specular * dot(N,H)

由于GC是一个为了学习而创造的工具,因此也无所谓商业应用的问题,所以就大胆使用了SC的64位MRT,只不过稍微改了一下:

1、Normal Depth这里,SC2用的是3个half描述Normal,1个half描述深度。我比较担心half描述深度的精度问题,所以我这里用的是第一个32位float编码深度,第二个32位float,拆解为高16和低16,分别存储NormalX和NormalY。

2、Emissive和Specular,同样的,我并没有分到两个MRT上,用总共6个Half描述,而是放到了一个MRT里,Emissive使用前32位,Specular用后32位,均使用RGBE编码。这样就剩下来整一个MRT,准备用来做一些后期特效——例如SS Motion Blur等等。

这一点从SC2学到了不少,32位的MRT太纠结了,类如查询表等很多麻烦的事情需要处理,64位显然这里好一些。

 

第二个学到的部分,是半透明Shadow的处理:

SC2TShadow2

半透明阴影确实能带来很多真实感,效果看起来也很不错。如果烟雾没有投影,给人最深刻的感觉就是这些半透明的东西,很可能是“浮”的,似乎不存在于世界之中。

星际2Shadow部分的处理,是把整个Shadow Map分成两个组成部分,一个是不透明物的Opaque Shadow Map,一个是透明物的Translucent Shadow Map+Translucent Shadow Color,分两个批次来渲染投影。

 

不透明物的就不用说的,老算法,开Opaque Shadow Map的RenderTarget,光照空间——渲染物体——记录深度。

 

半透明这里稍微有点不同:

首先,别清空DepthStencil,因为半透明这里还需要获取不透明物体的Depth Stencil。但是这里,需要把半透明物的Translucent Shadow Map和Translucent Shadow Color设置为Render Target。

然后,半透明那套设置方法,开Blend。

渲染的时候,算法是像下面这样:不断的“滤除”颜色分量。例如,青的物体(0,1,1),滤除的将是红色,如果阴影过来,那么红色分量就会被无视掉。然后,黄色的物体(1,1,0),滤除的将是蓝色。这样,上一个Stage经过的(0,1,1)就会进一步只剩下(0,1,0)。这个应该是自然界投影的一个原则。

SC2TShadow

Shadow Map渲染完后,在最后场景渲染的时候就好办了:

如果被半透明深度遮挡,就从半透明颜色Translucent Shadow Color中读取颜色进行Shadow着色。

否则,如果被不透明深度遮挡,就根据光源的Shadow颜色进行着色。

 

把GC根据这个原则大概整理了一下,因为要重构,就没写的太深,效果可能还不是太对,大概齐吧,发图:

image

 

中间那个蓝色的物体是个半透明物体,光照为它投了一个半透明的影子在后面的模型上,本意是模拟肥皂泡那种感觉的Shadow,参数调的还不是太好。

等全部重构完了,然后再贴正常一点的图吧。

最近真的太懒了,嘿嘿。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 社保晚交了1天怎么办 个人社保忘交了怎么办 个人社保晚交了怎么办 医保晚交了几天怎么办 辞职后转为灵活就业养老怎么办 公司名称变更提取不了公积金怎么办 五险合一软件已经减员怎么办 法人社保不在投标单位怎么办 换工作单位后社保怎么办 在北京孩子没有一老一小怎么办 深户小孩怎么办社保卡 社保卡没办下来去医院住院怎么办 老年社保卡丢了怎么办 外墙掉瓷砖伤车伤人怎么办 医保卡姓名弄错了怎么办 走工伤和走社保怎么办 公司在朝阳社保在海淀怎么办 公司没缴纳个税怎么办 报个税工资报少了怎么办 医院预约单丢了怎么办 肛瘘手术后太疼怎么办 低位保肛手术后吻合口瘘怎么办 做完痔疮手术后大便困难怎么办 20岁长痔疮了怎么办 孕妇痔疮痒的难受怎么办 痔疮术后伤口不愈合怎么办 剖腹产液化伤口长的慢怎么办 内痔斑痕怎么办了能消化 油条面和稀了怎么办 解脲支原体感染怀孕怎么办 怀孕了检查出解脲支原体感染怎么办 大便是黑色的要怎么办 大人直肠给药不好意思怎么办 肛周脓肿长肉芽怎么办 二岁宝宝有直肠息肉怎么办 87岁老人得直肠息肉怎么办 做b超查出囊肿怎么办 解大便时肛门痒怎么办 生完孩子肛门痒怎么办 把达克宁软膏摸到肛门怎么办 痔疮手术后肛门痒怎么办