博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
渲染流程替换
阅读量:4495 次
发布时间:2019-06-08

本文共 1106 字,大约阅读时间需要 3 分钟。

  年后替换了Ogre的主要渲染流程,一直没有机会梳理,如今都已经有一些淡忘了.当时想替换它的渲染流程有两个 原因,第一是美术对实时灯光的需求越来越大,包括是场景,特效都会有实时灯光的需求,而以前的是前向渲染,对 灯光复杂度高的场景支持不好(灯光数,场景复杂度与灯光复杂度成几何倍数关系).第二是Ogre的通用性带来了很 多效率上的浪费,比如说pass的设置会有大量的不必要判断,rs切换浪费.于是我将他替换为后向渲染来支持灯光 复杂度,将渲染物件分类来达到rs切换的不浪费,并且将renderable的组织方式由stl容器组合变成了renderable 内部串联的list方式.

  在修改的过程中有些地方让我犹豫很久,比如说做direcitonal light的阴影时.我现在是将directional  lighting,ambient 和 shadow 放在一个全屏幕pass上的,而没有将它们分开为2个全屏幕pass,一个lighting,一个shadow,ambient.这样做的目的主要是为了节约pixel fill.但是如果有些物体接受lighting,但不被shadow的话,第一种方式就会有问题,因为就算我知道哪个pixel是不被shadow的,我也拿它没办法.why?这样来说,我能想到判断pixel不被shadow的办法有两种,第一是stencil buffer,但是它会完全去掉direction light的计算,这个是不能接受的.第二是在gbuffer上打标记,但是我们的gbuffer已经很拥挤了,我无法再将它挤进去.如果增 加gbuffer的数量,那合并directional lighting,ambient 和 shadow的意义就没有了.当然还有个方法来处理 那种不接受shadow的renderable,就是它不走后向渲染,走前向渲染.这个方法比较适合不接受光照的物体.还 有一个地方思考了很久,就是对透明物体的处理,这个是后向渲染的死穴.很多书对后向的透明处理有一些独特 的解决方案,比如说shaderX7里面就用交叉行来存储前后混合物体的gbuffer,但是这些方式都只能用于很特殊的 地方,有使用环境的限制.最直接的方式就是后向不处理透明,透明直接走前向.不知道有没有其他更好的方式 ,希望大家多多指导一下.

  现在还是有一些问题有待解决,比如说overdraw过大,rs的切换,和render device event还是有点多

转载于:https://www.cnblogs.com/pbblog/archive/2012/05/11/2495868.html

你可能感兴趣的文章
界面与后台逻辑完全分离,单例模式,接口
查看>>
redis安装及测试
查看>>
38-系统标准模块与第三方模块(1)
查看>>
[转]Android U 盘功能实现和分析
查看>>
dedecms织梦副栏目名称和链接调用
查看>>
iOS 离屏渲染学习笔记
查看>>
iOS Xib布局某些控件显示或隐藏<约束的修改>
查看>>
软件工程第一次作业
查看>>
乘法逆元+模的运算规则
查看>>
.net 实现微信公众平台的主动推送信息
查看>>
线程池ThreadPool详解
查看>>
宝石TD迷宫设计器
查看>>
DOM对象和JQuery对象的区别
查看>>
vue脚手架安装笔记
查看>>
P2146 [NOI2015]软件包管理器
查看>>
像素与DPI之间的关系
查看>>
druid监控配置
查看>>
css颜色代码大全
查看>>
物理系统(二)
查看>>
css3中-moz、-ms、-webkit与盒子模型
查看>>