请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 6669|回复: 58

3D图形引擎(DX9): FX [复制链接]

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2016-6-27 02:58:22 |显示全部楼层
本帖最后由 sincrystal 于 2016-6-27 02:56 编辑

做图形程序已经很多年了,积累了一些经验。
来这个论坛也有好几年了,遇到问题的时候,也会在这里发帖子问,也很感谢大家的回答与帮助,希望能多认识一些朋友,大家多交流、分享。
做这款项目也有蛮多年了,终于上线了,端游,整整6年的时间耗费在这上面,身心疲惫,不过总算是有收获,上线了,也算给了自己一个交代。这款项目,图形这块花了大概3年多,后面2年多基本就是在做管理了,顺便改改Bug,增加一些美术提的小需求。这个文档去年就整理了,但是游戏没上线,没有经过验证,也是没有心思来处理这事,就放下了。今年产品上线了,7月台湾版本也要上了,今天在公司整理资源时,发现了这篇文档,也就来这里发一下帖子。
以下是引擎的相关技术文档:


写在前面:图形引擎技术是为游戏服务的,所以它的宗旨是:在目前主流硬件的基础上做与之相应的功能。所有技术都应该考虑效率,如果在效果与效率两者之间选择,那么我的选择是:效率。

经过几年的技术积累,工具非常齐全,包括场景编辑器,技能编辑器,关卡编辑器,剧情编辑器等,这些编辑器都应该属于图形引擎。寻路系统集成了Google的recast导航网格,物理碰撞系统集成了intel的havok物理引擎。在需要的时候,可以再增加很多的功能,让画面更好,让功能更强。因为美术成本的问题,放弃了NormalMap。


1,DeferredShading,支持无限多盏灯光,在游戏场景中最多时会有几百盏实时点光源存在,且角色、怪物本身或者法术都可能带有实时的点光源。如下图,每一个蓝色线框球都是一盏点光源。

2,无缝LOD地形技术,根据视点远近以及地形起伏坡度判定网格细密程度,在避免画面突变的情况下,尽量减少三角面的数量。并且在整个地形设计时采用贴图与地块分离技术,即地块的贴图数量和地块本身无关,而是与其贴图格相关,这样能让地块使用无限贴图,让美术能制作更加多样化的地形。

3,真实水体、海洋。倒影、水波、水体边缘、泡沫、阳光反射等构成了我们真实的水体。也能很方便的制作真实的河流,即把已经制作好的场景导回3dmax中,然后根据其河床,按照规范制作河流模型,再导出给场景编辑器使用,则可制作出有流向的河流。

4,PSSM,把整个视锥分割成几个部分,最后整合成一个屏幕级别的阴影图,再贴回场景。在此基础上,还做了几个变种,比如根据视距让阴影生成变频;对物件分类,增加大阴影图等,以提升效率。【并且对于点光源,也能使其产生能够有阴影的错觉,这样能方便做室内场景】



5,SSAO,根据屏幕空间的Normal以及Depth图,生成一张遮蔽图,再贴回场景,让场景立体感更强。并且在真实场景中做到了,在移动中肉眼很难感知遮蔽抖动的问题。



6,体积光,太阳光或者强光源通过一些物件的遮罩,出现类似光线的效果。



7,Edge-FXAA,关于抗锯齿,我们采用的是快速边缘抗锯齿的方法,FXAA是Nvidia主推的一种基于图像的抗锯齿的方法,在此基础上我们做了改进,不仅性能得到大幅提升,并且避免了其造成画面模糊的不好现象。


  


8,滤镜,让画面变得更清晰,参照CryEngine的类似效果。在游戏中一对比就会有很明显的感觉,下左图是原始画面,下右图是通过滤镜后的画面。



9,HDR,提升画质,下左图为关闭HDR,下右图为开启HDR的效果。



10,植被系统,我们有专门的植被系统,用于大规模铺设地面的植被,给予场景丰满的感受,且分等级让植被显示,适应于不同机器。当玩家在植被中走过时,植被会被玩家推向两边,造成动态植被的感觉。



11,OcclusionCulling,遮挡剪裁,对于大规模场景来说,需要用遮挡剪裁来大幅提升性能。如下图,把场景分成很多遮挡块(紫色线框),当一个遮挡块被场景挡住时,则整个遮挡块都不会被渲染,甚至更新,这样能极大提升性能。而这个功能是完全对美术屏蔽的,是引擎内部自动根据美术刷出的场景,以及摆放的物体的绑定盒而自动生成的。而对于角色、怪物来说,我们也给予其一个与之匹配的AABB,让它参加遮挡剪裁过程,如果当前帧不在视野内,它不会参与更新和渲染,这样也能极大的提升性能。



12,寻路系统。无缝3D地形的寻路是一个非常麻烦的事情,我们采用了路点+Recast的方式来做,使用Recast生成很多单独的导航网格,用路点把这些导航网格连接起来,这样就可以在无缝地形上进行寻路。如下图,红色线连接白色路点,这是路点的连通关系;绿色线框是地块,它会生成导航网格,最终这些红色连通路点线以及导航网格构成了我们的寻路系统。



13,碰撞系统。我们的碰撞系统采用Intel的havok物理系统,通过对Intel的havok以及Nvidia的Physx两个物理系统的评估后,Intel的havok是最适合做无缝地形的物理碰撞系统。在大规模物件的场景中,特别是主城中,如果采用老的碰撞box来堆积,对美术来说,这是噩梦,所以为了方便美术制作场景,以及性能上能满足我们需求,采用havok是很好的选择。美术可以直接对物体做简模,和物体一起放到场景中,并不需要其他额外的操作,引擎会自动识别且生成碰撞数据,提供给客户端使用。



14,区域系统。为了方便策划编辑区域,定义一些玩法,我们增加了区域系统。在场景我们给予黄色线构成的未填充的方格来确定区域,蓝色填充方格的地方为当前使用的区域。策划可以给予这样的区域以属性。



15,三维高度数据系统【服务器使用】。红色、绿色、蓝色等线框分别代表不同的层级,最终会生成一组组的数据提供给服务器使用,使之可以简单的判定高度层级、阻挡以及做一些逻辑处理。



16,角色Avartar系统,整个角色的身体,除去头发以及肩膀外,都合并成一个部件,且在贴图上采用了我们独特的方法,在贴图尽量小的基础上,让整个画质更好。如下图角色,整个角色的贴图只有一张512*512的Base图,以及与之配套的Specular图,并且还有优化空间,比如Specular图可以减少为256或者128。如下图,虽然才512的贴图,但是实际精度并不差。

17,角色动作系统,我们做了3dmax导出插件,使之与引擎匹配识别Bip骨骼,把角色分为上下半身,让整个角色可以做到完美的上下半身分离,在动作合并的时候,让玩家可以在移动中战斗。


18,航拍,能够把整个地形按照地块拍照,且能生成大地图,提供给美术以及客户端使用。



19,整体场景物件的两套坐标系系统,因为无缝地形太大,所以坐标会很大,如果用很大的坐标浮点数去shader里面计算顶点位置,可能会造成角色蒙皮的抖动、阴影的抖动等,所以我们采用了双坐标系系统,即:实际world坐标提供给客户段使用,而渲染坐标系的零点根据摄像机world坐标在移动,让渲染坐标系下的参与计算的顶点坐标数据尽量小。


其他,还有很多其他的功能,细节等,比如:DOF、倒影优化、触发器、物件链接、地形高度图使用、shader合并渲染等小功能、小系统就不一一列出了。


Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-6-26
积分
1061
发表于 2016-6-27 09:43:12 |显示全部楼层
恭喜大牛终于修成正果 不能更赞了!!!

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2010-2-23
积分
1760
发表于 2016-6-28 09:11:21 |显示全部楼层
楼主好棒,你11点那个自动计算遮挡的体的算法大概是怎样的?

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-11-14
积分
1591
发表于 2016-6-28 16:25:36 |显示全部楼层
路过赞一个,我们产品还不知道啥时候呢

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2016-6-29 13:38:44 |显示全部楼层
To tigerssj:
其实就是一个AABB,很好弄的,最后把这个AABB做OC检测就行了,非常粗略的检测。如果需要精确的话,也可,每个物体做检测就行。不过角色、怪物、NPC的OC检测(因为要做骨架的Update),其他场景物件和地形就是地块的OC检测(大概16*16米一个地块)。

To All:
有可能的话,愿意的话,各位朋友把联系方式私聊给我啊,一起分享交流。 :)

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2016-5-6
积分
239
发表于 2016-6-29 19:15:21 |显示全部楼层
我这里只说些自己的一些可能比较片面的看法。
截图里水面下的折射效果是错误的。
关于遮挡剔除,楼主其实可以去了解下PVS,也可以去看下U3D是怎么做的。
角色的贴图其实不用合并在一起,这种合并所带来的减少DPI对性能的贡献其实很小。
从截图来看PSSM的效果并没有很好的体现出来,另外即使在完全的室内场景,只用PSSM的方向光阴影只能让场景的光照变的怪异。
地形LOD,可以直接上DX11,LOD的过程可以用曲面细分在GPU里做,省去了CPU的遍历地形顶点的负担,现在地形精度需求在提升,多边形的数量在增加,如果要跟上时代的话,可能是要抛弃楼主的这种老做法。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-6-26
积分
1061
发表于 2016-6-30 13:45:21 |显示全部楼层
网游的折射一般都是backbuffer做扭曲,没觉得有什么错。PSSM与其说效果倒不如分析一下4层分别存4通道的做法的优劣势会显得更专业一点,毕竟大家都是程序。
关于合并贴图,首先只要是真正做过优化的人都知道,脱离测试环境谈优化都是业余表现,应该先问问LZ,同屏多少角色?每个角色几个部件(SubMesh)(分析是否批次压力)?每个角色多少面(分析是否产生顶点压力,顶点压力是否会盖过批次压力成为主瓶颈)?每个部件的贴图分别多大,合并后整体多大(分析是否产生纹理填充率压力)?综合评估之后,结合实际测试,才能说一个优化手段是否有用,并不是想当然的有用没有,没有任何一项优化是白做的,都是环境不同优化程度不同。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-6-26
积分
1061
发表于 2016-6-30 13:48:08 |显示全部楼层
我很欣赏LZ这种有自己想法并把想法结合到项目里的引擎,虽然可能国外在解决相同的问题上已经有了很先进的做法,但是自研引擎,说到底,不是自抄引擎(我个人把完全临摹论文也归类为抄),国内的自研行情早已悲剧,这种研究精神无论结果如何,都值得称赞。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-6-26
积分
1061
发表于 2016-6-30 13:49:21 |显示全部楼层
最后对升级君同学说一句,看过你做的东西的视频和截图,非常不错,同样很赞。

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2016-5-6
积分
239
发表于 2016-6-30 18:00:37 |显示全部楼层
焚花祭朝阳 发表于 2016-6-30 13:45
网游的折射一般都是backbuffer做扭曲,没觉得有什么错。PSSM与其说效果倒不如分析一下4层分别存4通道的做法 ...

折射的确是要扰动backbuffer,但这里的折射贴图混合的并不正确,水下的物体不应该是一片粉白。
第二点,我指的是PSSM并不适用于室内,不过鉴于是国内网游,所以不用强求去做真室内。
PSSM的优化这方面,4层存4通道的做法 我实在看不出有何意义,用增加shader复杂度,换取降低drawcall吗。

合并贴图已经是淘汰的优化做法,早年的魔兽世界可能是这么做,但现在可能不会太有效,现在场景的搭建都是小物件拼接,引擎更应该专注在动态的合并批次和剔除的精度上,静态的合并贴图对于动态的场景来说没有意义,这只能让美工白忙乎。

关于角色问题,一般渲染角色其实在像素填充率的压力方面并不高,最费像素填充率的是那些占据屏幕范围最大的大物件和地形,角色的问题是面数太多,所以层主更应该关心角色的LOD。

引擎优化固然离不开实际具体的测试,但优化的理念的都是相似,至于不断测试,瞎猫捉死耗子是不行的。
一个游戏引擎所谓的优化,就是在不折损画面的前提下,避免做任何无故浪费资源的事。

国内自研的确悲剧,不过少有反省,只是我觉得这是一种不思进取。
国产游戏路漫漫,祝国内做游戏的人好运吧。




使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-6-26
积分
1061
发表于 2016-6-30 19:46:45 |显示全部楼层
4层存4通道,分别存4张rt,或者像unity一样存一张四倍大小的rt,都无法降低drawcall。4通道做法的优点在于:1、对于切换rt非常昂贵的移动平台可以减少多次rt切换节省效率。2、画接收时一次采样得到4层节省纹理填充率。缺点在于投射阶段的带宽压力成倍增长。这个例子也说明了,做效率优化,要看最大瓶颈,不能根据你所谓的优化理念,因为第一,你的理念未必正确,也未必完整,第二,引擎要应付各种各样的项目,千奇百怪的场景,你的理念未必适应所有情况。所谓的理念,说的夸张点,昨天正确,今天都未必正确。你的理念其实来自于前辈们不断在各种不同场景不同硬件平台上profile获得的经验(当然也有硬件厂商给出的建议),你用这些经验来否定优化需要根据profile来执行,这完全就是本末倒置。其他的几个点,我也懒得具体指出问题了,总而言之,当你优化过的环境足够多,足够复杂,也足够多样化时,你真的会发现你所谓的理念在有些时候就是误导你的罪魁祸首。

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2016-6-30 23:44:52 |显示全部楼层
本帖最后由 sincrystal 于 2016-6-30 23:53 编辑

1, 水下折射效果应该没有大的问题,它不是粉白的(应该是蓝白的吧),而是给予深水和浅水的颜色,以及深度透明的参数,这3个参数以及水下物体的颜色决定了这个物体在水下的颜色. 图上蓝白色的这个石头因为离水面比较近,所以它基本是由浅蓝色的浅水颜色来决定,而大部分海的颜色是深蓝色,是因为水比较深,所以是深蓝色. 不过可能是截图的问题吧,有机会看看录制一段视频来看看这个水.

2, PVS了解过,但是由于我们是无缝大世界的地图(游戏地图大概7*7公里),场景满复杂的,而且感觉PVS满麻烦的,我当时的想法就是越简单越好,对比了一下,感觉硬件OC挺好,比较适合我们,后来做下来的结果还是挺让我们满意的.

3, 角色贴图合并在一起,其实主要是因为换装avatar, 角色模型是要合并的,即:头,身体,手,腿,脚等身体全部合并成一个模型来渲染, 比如100个角色,如果不合并角色模型的话,需要渲染500次,但是如果合并了,则只需要渲染100次,这对于Drawcall来说,我觉得是一个很大的提升.我们同屏做2,3百人的战斗没有问题(i3 + GTS 450的机器,包括各种特效全屏放).

4, PSSM的那个图是我特意渲染的阴影图,它不是游戏中最终的图,只是阴影,用不同的颜色表现阴影层级,我的PSSM用了5层,其中4层是场景的PSSM(1~2层包括所有的角色每帧渲染,后面两层就不是每帧渲染了,还有一层是大的物件,基本上每秒只渲染1,2帧),这样做的好处是极大的提升阴影渲染的性能,在我们场景中实测,开启和关闭阴影的帧率相差15%左右.但是就是一个问题,主角在天上飞时,阴影质量就不太好了,考虑后面改成CSM.为了降低shader的复杂度,我专门多做了一次全屏阴影的draw,这次draw的结果就是上面介绍PSSM的那一层黄绿相间的图(在游戏中,这是一层黑白图,用于最终"披"到屏幕上)

5, 我觉得最好还是暂时不用DX11,因为对于一些低档显卡,就无法兼容了,这款引擎是从10年开始弄的,当时流行的还是XP,DX11不太现实,就算是现在,我觉得都还是别完全只兼容DX11,不然产品出来,市场那块肯定会找我们麻烦. 要不然就是写几套底层,根据不同的显卡和系统自动选择兼容.

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2015-6-17
积分
1095
发表于 2016-7-1 10:02:58 |显示全部楼层
台湾还在用dx9?

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2016-5-6
积分
239
发表于 2016-7-1 11:30:10 |显示全部楼层
本帖最后由 升级君 于 2016-7-1 11:43 编辑
sincrystal 发表于 2016-6-30 23:44
1, 水下折射效果应该没有大的问题,它不是粉白的(应该是蓝白的吧),而是给予深水和浅水的颜色,以及深度透明的 ...

关于折射 如果是深水物体就直接应该被混合掉,而不应该有任何颜色。根据高度从浅水到深水区域做线性淡化。
PVS是根据 视点的可见度进行计算的,通常把场景划分为规格的采样区域(通常是一个立方体格子),离线计算每个采样区域的可见集合最后存在文件里,实际游戏运行的时候直接提取所在位置的可见集,对于具有复杂遮挡关系的场景有很高的剔除精度和效率。

合并角色贴图要求把所有身体部件合并起来,在一次drawcall里完成,其实这里存在一些问题,因为一次传进shader的常量数限制,一个角色总的骨骼数量不能太多,美工不能给角色添加更多的骨骼,这其实也是隐形的在降低动画的效果。
角色合并这块,其实楼主可以去了解下SkinnedInstancing,这种方案可以让大规模数量的角色在一个drawcall里绘制完,原理是通过把所有角色以及所有的骨骼矩阵 写入纹理,然后在VS里根据实例ID进行采样,其实就是把 常量数组替换成 顶点纹理,纹理的优势就是存储量大采样速度快,突破了shader的常量数的限制,对于大规模角色这种十分适用。
另外合并批次,可以多用DX的Instancing,对于相同材质相同的非动画模型有很高的合并效率。

PSSM,后两层一秒只绘制几帧的做法虽然看上去会提高帧数,但也会出现间隔卡顿的问题(帧数不是线性平滑的),这种得出来的阴影质量可能不会太好。
pssm(其实和CSM是一个东西),最多只用分三层,不用分太多层,分的层越多,与层边界交叉的模型被重复绘制的就越多,动态PSSM的优化,可以考虑与静态shadowmap结合,对大物件用一个常规的静态方案的shadowmap代替,因为地形和大物件是绘制shadowmap像素填充率瓶颈的主要源头,这种好处就是大部分时候不用重复绘制大物件的shadowmap,只有在有动态物体影响的时候再更新绘制。
最后一种方案,就是在上面的基础之上,把动态物体与静态物体 分成两组shadowmap,动态物体大部分是角色一类,像素填充率低,大部分情况只需要绘制动态物体的shadowmap,最后再与静态物体的shadowmap混合,不过这种方案只是用静态的shadowmap,不能用于动态的PSSM。

DX11是可以不用,大部分功能DX9还是可以满足的,兼容性的问题倒是不大,主要是替换起来会比较费事。

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2016-7-2 18:25:09 |显示全部楼层
DX9和台湾没啥关系吧,只是感觉目前dx9足够用了,免得做几套方案,我是一个比较懒的一个人。

合并身体部件,一个mesh不超过70根骨头,留下46个寄存器给其他参数使用,足够了。所以我们和美术定了规范,头、身体、腿、脚、手这些部件合并,而一些额外骨头所套用的mesh是单独的,比如头发我们是没有算在合并部件里面,至于翅膀等外加部件,我们是用Link来做的,让翅膀的骨头动作和角色的骨头动作匹配上,但是往往这样做有一些问题,动作切换(如果有好几个动作在混合,又是类魔兽上下半身分离时)偶尔会有一点点不协调,不过玩家往往不会在意这一点,因为很快就会切换成正常状态。我们没有用Skininstancing的方案,主要是性能能满足我们这款产品的需求了,就没有用更复杂的方式来做了。

经过我们实际项目的验证,PSSM这种分层间隔帧的方式来做效率,以及效果都很好,玩家不会觉得奇怪。我们也的确是把动态物体和静态物体分组来做的。

嗯,现在DX9足够了,至少在window系统下。

使用道具 举报

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2010-3-27
积分
5788
发表于 2016-7-4 13:24:45 |显示全部楼层
咨询一个疑惑:有关无穷大地形。距离观察者较远处的模型必须简化才能在保证帧率,想问下,简化的工作在CPU端完成,再传递到GPU,还是直接全部由GPU完成。如果在DX9下实现模型在GPU端的简化,个人认为较困难。

使用道具 举报

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2010-3-27
积分
5788
发表于 2016-7-4 14:24:49 |显示全部楼层
咨询一个疑惑:有关无穷大地形。距离观察者较远处的模型必须简化才能在保证帧率,想问下,简化的工作在CPU端完成,再传递到GPU,还是直接全部由GPU完成。如果在DX9下实现模型在GPU端的简化,个人认为较困难。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2015-6-17
积分
1095
发表于 2016-7-5 09:11:13 |显示全部楼层
dx9可以设置mipmap,dx会自动切

使用道具 举报

Rank: 8Rank: 8

注册时间
2013-12-12
积分
178
发表于 2016-7-6 08:59:43 |显示全部楼层
弱弱的问一下这是什么游戏啊, 能不能那些资源出来用啊? 模型和材质的

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2016-7-6 22:48:14 |显示全部楼层
地形的LOD是在CPU做的,都是很现成的一些算法。根据视距以及场景复杂度两个因子来计算的,这样可以尽力避免地形突变。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2015-9-22
积分
1690
发表于 2016-7-7 11:17:45 |显示全部楼层
居然看不到图片 ? !!

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2010-4-7
积分
1226
发表于 2016-7-7 11:18:42 |显示全部楼层
喔!效果很赞。 请问一下PSSM4层存4通道,这里用的是浮点纹理吗?发现RGBA每个通道的精度貌似不够用啊

使用道具 举报

Rank: 12Rank: 12Rank: 12

注册时间
2010-7-6
积分
798
发表于 2016-7-7 22:32:29 |显示全部楼层
RT是 32F 的,一共5张.

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

注册时间
2009-10-21
积分
2609
发表于 2016-8-11 13:12:04 |显示全部楼层
升级君 发表于 2016-7-1 11:30
关于折射 如果是深水物体就直接应该被混合掉,而不应该有任何颜色。根据高度从浅水到深水区域做线性淡化。 ...

我真看不下去了,说实话,引擎这东西,确实是实践出真知,比那些做几个demo就觉得很牛逼的人强太多了。
你先说说,市面上的游戏,那个引擎是你做的?
我的经验告诉我,LZ做的很好,而且引擎是为了游戏,不是为了技术展示。有几个问题我就要问问你了?

弄了半天你说人家水折射有bug 你也没指出哪里的原因,怎么解决?最后扯到深水潜水颜色过渡上去了,和折射毛关系没有,我就问,我做一个水一定要用深水潜水过渡?没必要吧,水这东西看起来自然就可以,想怎么做都行。

听你说分批次,单个角色骨头不够用,就知道门外汉!一般引擎里面支持蒙皮的骨头至少60-70根,记住是蒙皮的,不参与蒙皮的不算,所以实际骨头100多根都是支持的,你去看看街霸5,一个角色多少根骨头。还有每个角色的submesh 你以为美术是分开做的?都是和角色一起做的,然后分开导出的,用的一套人物骨架。

你没看明白楼主的PSSM算法,它就分2层。角色2层,静态物体2层,大的静态物体1层,然后混合起来的,实质上就是最多就用2层,而静态物体不动,所以不用经常画,不是原始的csm一下子分了4层,交叉的地方重复花好多那种。

还有地形动态LOD 还是CPU的天下,它和GPU细分还是两码事,地形最高层级一般就是编辑地形时候网格密度,而最低层级是在最高层级下减少面数的,编辑地形的时候需要很高的面数,美术才能编辑好的地形效果,游戏里面只有离的近显示原始地形的面数,最远的层次自动减少面数,呈现的不是原始地形的面数,是一个低模版本,曲面细分只能在原始面数上增加,如果你原始面数不够,美术根本不能调节出好的地形效果,如果用高面数的网格来编辑地形,那么细分只能增加更多的三角形,毫无意义。

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2014-10-8
积分
7144
发表于 2016-8-11 13:20:40 |显示全部楼层
希望楼主能整理成pdf文档,大家可以下载保存,谢谢!

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2016-5-6
积分
239
发表于 2016-8-11 20:20:01 |显示全部楼层
32220937 发表于 2016-8-11 13:12
我真看不下去了,说实话,引擎这东西,确实是实践出真知,比那些做几个demo就觉得很牛逼的人强太多了。
...

第一个问题,折射贴图和反射贴图不根据高度做过渡,要如何做深水潜水?你真的写过水体?
第二个问题,我原文指的是shader常量寄存器数量限制问题。把角色模型合并在一个批次里,DX9下能用的骨骼数量必然超不过80根左右(非蒙皮的模型如果不合并,那用于挂载的骨骼就不算进这个批次里),更别说那些单角色超过400多根骨骼的3A游戏。层主却在纠结 “引擎最大支持的蒙皮骨骼数”?把角色模型都拆分成多个部件分开渲染,只要每个蒙皮的骨骼分配合理,你想一个角色支持多少根骨骼不都可以?

第三个问题,PSSM的分三层是指 根据每帧摄像机的视椎做分割,分别从近到远三个层级,解决了传统因为深度纹理分辨率不足导致的阴影质量粗糙的问题,你说的“角色2层,静态物体2层,大的静态物体1层”这是什么?你真的写过PSSM吗?另外我原文写的静态阴影方案你真的看懂了?

第四个问题,你说“地形动态LOD 是CPU的天下”,这种话你居然也能说出来,你是有多久没关注过图形技术了?

游戏圈子里,一知半解 不懂装懂的人 无知不可怕,这些人做不出东西不可耻,但无知的人居然无自知自明,尽发些不负责的技术水货贴,这只能让真正想学习想交流技术的氛围变的糟糕。

层主请收起你的无知,好好去打基础吧。


使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2012-6-26
积分
1061
发表于 2016-8-11 23:33:27 |显示全部楼层
32220937 发表于 2016-8-11 13:12
我真看不下去了,说实话,引擎这东西,确实是实践出真知,比那些做几个demo就觉得很牛逼的人强太多了。
...

如果你的水就是小水湾小溪流的话,的确没有必要去做什么“过渡”,并不是说这样原理正确,而是因为太浅,水又清,近似正确。但是如果是海水、湖水这种浑浊的水,光在水内部散射消光,必然是随着深度的增加返回人眼的光线逐渐减少,所以是需要“过渡”的,否则的话,那又为什么要做雾,做大气呢。
其他的几个问题,我也懒得扯了,说句实在的,层主或许使用引擎做游戏的经验很丰富,但这里讨论的这些东西都很底层,还是亲自做过讨论起来才会有共鸣,实践出真知嘛。。。同样建议层主还是补一下基础比较好吧。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2015-6-17
积分
1095
发表于 2016-8-12 08:42:15 |显示全部楼层
没有代码的瞎扯是谁也说服不了谁的,一个dx9还有这么多打嘴炮的,那得多没劲

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

注册时间
2009-10-21
积分
2609
发表于 2016-8-12 15:10:27 |显示全部楼层
升级君 发表于 2016-8-11 20:20
第一个问题,折射贴图和反射贴图不根据高度做过渡,要如何做深水潜水?你真的写过水体?
第二个问题,我 ...

1.水的作法太多了,flow map ,海水,普通 那种折射 反射 深度颜色 浅度颜色  那个没做过,做多了你就知道,水的形态太多了,没有水规定一定要用深度 浅度 过度的,那是写实游戏才爱这搞。我的问题是在 你 说人家有错误但不指正,而弄到 深度水浅度水 上去,跑题了。
2.你给我找一个 400多根骨头的 游戏  我来看看? LZ作法 是游戏业界的成熟作法,多个模型最后肯定要合并的,他们共用同一个骨架。
3.PSSM 一定要用3层?我2层游戏就够用,RT的分辨率,渲染的影子照样清晰,我为啥用3层? LZ作法 相当不错了,角色和静态物体 分别画 最后合并到一起。
4,来来你说说看,为什么unity unreal4 还是 CPU的lod?

老子在公司搞游戏引擎 搞 这么多年 还搞不过你一个业余的。

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

注册时间
2009-10-21
积分
2609
发表于 2016-8-12 15:13:40 |显示全部楼层
焚花祭朝阳 发表于 2016-8-11 23:33
如果你的水就是小水湾小溪流的话,的确没有必要去做什么“过渡”,并不是说这样原理正确,而是因为太浅, ...

我就做底层的,编辑 都搞过,哪些技术 适不适合 游戏,适不适合当前的市场,都需要考虑的 ,LZ,所有的作法,都是最实际的。

而且 说 LZ的水 有错误,跟深度 浅度 有啥关系? 那个 白的 我估计 应该是 折射 的时候 没判断深度 信息,采样 延迟渲染的 折射 贴图,出现错误

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-3-29 17:07 , Processed in 0.093271 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部