Ogre的影子分为两类:模版阴影和基于纹理的阴影。
(1)模版阴影 SHADOWTYPE_STENCIL 分MODULATIVE,ADDITIVE两种。 不过模版阴影我不太care,没有太仔细看。大致基于闭合多边形的影子,我猜可能类似于Shadow Volume的实现(d3d sdk的那个例子我就没看懂过,干), 但是奇怪的是, Ogre的这种模版阴影的效率居然还相当高。
目测市面上一些Ogre引擎的网游,都采用过这种影子。缺点是边缘比较尖锐,也无法做模糊。
(2)纹理阴影 SHADOWTYPE_TEXTURE 也分MODULATIVE, ADDITIVE两种, Ogre本身的所谓Texture Shadow, 大概是project Shaodw的做法,按光照方向把物体渲染到texture上, 然后把这张图project到接收影子的物体上。 所谓的modulative, additive, 应该只是最后如何贴上影子texture的方法。 但似乎并不仅限于此,中间还有其他的工作。我无法从Ogre的文档中得到足够的信息。而且因为代码封装的缘故,从source上也很难看出所以然。project shadow可以只用固定管线的来实现; 当然更流行的方法还是用shader写入影子的像素。
这些在Ogre中都得到了体现。这种方法很传统,如果改进的足够好,缺点很少。 除了不支持自投影。
(3)纹理阴影可以完全改造成shadow map, 抛弃project map的做法。这个应该是当前的主流。如果要做shadow map, 阴影的cast和receive就只能用shader来做了,而且显卡要支持32F。早年因为不支持浮点精度,需要做一些解码的花哨工作,现在应该可以忽略这些trick了吧。
Ogre的shadow map的做法,和所有的SM做法都大同小异。 同样是Z buffer的比较, 同样要面临Depgth buffer精度不足、Size不够大、锯齿怎么办、Z Fighting如何处理、如何模糊、如何PCF的问题。 当然, 更麻烦的可能是如何改善perspective projection等等诸如此类让影子投出来更加好看的若干方法, 几何和数学公式在这里设置了屏障,我只好跟在不知所谓的Paper后面茫然无助。
(4)
测试用例一: 带有骨骼动画、法线贴图、深度贴图;需要投射阴影, 使用自己改造后的ogre shadow map。
这个用例很奇怪的就在程序写完之后就跑起来了。 影子很正常,连它的锯齿都很正常。 这时候我发现一件奇怪的事, 我的shader完全是按静态模型的parallax map写的, 甚至生成depth map那一段也没有经过skin matrix变换,但是ogre却依然让模型动了起来。 我日,还有这等好事。 我翻看了一些文档, 大概好像是Ogre引擎能自动识别带有skin动画的模型,并且如果发现材质通道没有提供vertex skin步骤的话,
会自动做soft blend。就是说, 传到显卡管线里的顶点,已经是软件skin好的。 而且, ogre引擎自称它会灰常高效的做这个操作。 说实话,我想不出它如何能高速的填充vertex buffer。 看起来,ogre的软件skin效率真的还不错。
通常的做法: 带有骨骼动画的模型要写depth buffer, 一般通过hardwareSkinningWeight的VS计算出顶点位置,然后写入深度信息即可。能够用硬件做应该会快一些。 我没有真的去写这个hardware skin shadow map的用例去比较,想当然会快一些。
测试用例二: 换了一个场景, 还是带骨骼动画的模型,和地面
问题来了: 不知道为什么,投射影子只有一个方块。 大概推测是light cameramatrix 有点问题, 不过我无法推测问题在哪里。 用了LiSPSM, 问题就解决了。 不过很遗憾, LiSPSM这个东西, 在Ogre本身就封装好了,所做的事情,只要创建一个对象设置到场景里去就行。我翻看了LiSPSM的Paper, 很揪心的发现,好像不认识的公式很多。 短时间内看不懂。
(5)
所谓shadow, 从来都是图形的话题。 Shadow map是更新更难缠的话题。 如果在跟Ogre搞在一起, 就更加说不清了。
Ogre的封装初衷, 是为了更加方便程序员使用。 这些确实让很多非图形程序员欣喜若狂,不需要啃3D API就能摆弄引擎,确实令很多怀着开发3D游戏梦想的人夜不能寐。 确实,有一群足够聪明的人在开发Ogre, 他们的设计让很多人快速搭建出了游戏或者Demo,几乎不需要掌握任何d3d Api。 但是,我认为,过度臃肿的封住, 也让后期的Ogre使用变得困难。 这种困难,在我做影子的尝试中,表现成各种束缚和难受,以及ogre本身的bug,或者是我无法明白的现象。
Ogre已经做的足够好, 但是它还是不像看起来的那么好。 过度的封装,越来越庞大的代码、无法解释的现象,让后期很多东西真的很难处理,让引擎本身成为束缚, 可能会陷入死角。更致命的是,会让研究Ogre这件事变得没有乐趣。
最后的结果可能是:要么抛弃它,要么完全搞明白。
需要有很多志同道合的朋友来讨论这些,解答问题。
http://blog.163.com/modingfa_002/blog/static/11092 5466201021552043708/
发表评论
-
计算字符串相似度
2012-07-06 09:51 806编程之美3.3 看完题后,毫无头绪 书上的解题思路 ... -
JAVA中使用正则表达式的若干方法
2012-07-06 09:45 576正则的具体写法不是重点,一般常用的还是比较简单的 主要 ... -
Java正则表达式(一)
2012-07-06 09:37 594正则表达式在处理文本方面用处非常大,最早像在Perl和aw ... -
js小技巧
2012-07-05 20:45 590setTimeout( "[执行的脚本 必须 ... -
Android Gallery组件实现循环显示图像
2012-07-03 13:43 568Gallery组件主要用于 ... -
Flex advanceddatagrid 验证处理
2012-07-02 10:28 562Validator,是指flex验证器,用以验证输入是否满 ... -
Flex函数一时糊涂
2012-07-02 10:28 618今天做项目,需要把itemRenderer里的data对象 ... -
Flex与.net交互
2012-07-02 10:28 630方法一: 把Flex生成的SWF文件(在目录../h ... -
Flex: AIR程序靠屏幕边缘收起 屏幕边缘吸附
2012-07-02 10:28 621让程序在靠到屏幕边缘的时候,向左或者右收起程序,类似QQ一 ... -
Flex加载
2012-07-01 00:05 562Flex生成的swf是个2 ... -
怎么去掉Flex4生成的SWF加载时的进度条
2012-07-01 00:05 635汗~AJAX感太强了 但我要一下子加载 坛子里说了 ... -
怎么去掉Flex4生成的SWF加载时的进度条
2012-07-01 00:04 583汗~AJAX感太强了 但 ... -
Flex加载文件数据流
2012-07-01 00:04 872Flex加载文件数据流 本文使用URLStream, ... -
设置Flex在加载应用的时候获取焦点
2012-07-01 00:04 759默认情况下,一个 ...
相关推荐
OGRE源代码ogre_src_v1-8-1.zip.002 part2 对照part1 放在同一个文件夹,解压即可
ogre_src_v1-8-1.exe
Ogre开发包,版本:ogre-sdk-1.11.1-vc15-x64,三维图形引擎源代码。
ogre_src_v1-8-1.rar 大名鼎鼎的开源3g引擎,ogre
ogre_src_v1-7-2.exe src ogre源码 是一个很好的ogre游戏开发资料
This is an earth demo using ogre-es. Study mobile program.
Ogre官网上的SDK下了五六次都没有下载下来,同事也是费了好大劲才搞到,分享给大家
ogre的sdk,我从官网下载的,版本1.11.6,vc15,64位
OGRE源代码ogre_src_v1-8-1.zip.001 part1 http://download.csdn.net/detail/xzx0524/4843490中把part2下过来 放在同一个文件夹,解压即可.
This is a 3D car demo using ogre-es. To study mobile programing.
Ogre最新稳定版1.12.7的安卓版的SDK。可以用Android Studio打开。里面包含安卓版的gradle工程文件。有各种范例Ogre java文件。
利用ogre和bullet开发的演示demo。
csdn上同名教程pdf版。入门好教材!
Ogre引擎的学习资料,目前ogre引擎很热,希望大家有机会学习一下,
OgreSDK_vc10_v1-7-4 编译好的开发包
节点的线程批处理,平截头体剔除和其他技术(例如正向群集) 使用AoSoA(阵列结构的阵列)内存布局进行SIMD处理 通过背景流加载纹理 这使Ogre适用于旨在在屏幕上具有大量对象或具有紧凑渲染预算(例如VR)的项目。 ...
ogre的sdk,我从官网下载的,版本v2.2.4,vc19,64位
初始学习OGRE非常有用的资料,对于配置和学习OGRE会有帮助。
OGRE SDK 1.9安装配置-附件资源
食人魔样本Ogre3D 项目模板是准备使用(制作 fork 和 pull requests 以使其可用)在实验项目中学习 Ogre3D,具有: 面向 Ogre3D 1.9、1.10(对于 Ogre3D 2.1,请看) OIS 鼠标和键盘基本的相机控制器(来自 ...