古剑奇谭吧 关注:812,500贴子:31,912,409

愿我中华游戏,星火世传,奋飞不辍——从技术角度浅谈古剑3

只看楼主收藏回复


Steam上33入的,经历了大概60多个小时,总算是打通了一周目。可以说是感慨颇多,古剑3也确实配得上是国产游戏天花板的荣誉了,甚至放眼世界也不差。
当然也会有很多人拿着老牌大公司的3A游戏来和古剑3比。人嘛,总是要刷刷优越感的。那么......我们应该怎么怼回去呢?
像是剧情、音乐、玩法、构图等众口难调的就不说了,因为每个人都有自己的审美,虽然我都很喜欢就是了。
烛龙能做的是在符合大多数人的审美的基础上,表达自己的审美。
我自己是从事图形学和算法研发方面的工作的,所以我打算从技术的角度来说说烛龙在古剑3上所花费的心血。


IP属地:北京1楼2020-02-20 10:53回复
    首先是引擎方面。
    游戏开始界面上,打开游戏信息,拉到下面可以看到:

    这些里面有我用过的,也有一部分没用过的
    但是,我没在这里面找到游戏引擎
    其实,当初打开游戏的时候就觉得这个像是Unreal的渲染风格。然后我去安装目录看了一眼.....
    发现这个文件名和文件夹根本就不对呀...
    而且也不是Unity的,也不是StingRay的,也不是Optix的。
    之后我才意识到....烛龙应该是自己写的游戏引擎,然后在此基础上开发的古剑3
    这个是真的勇士,也是最让我惊讶的。
    现在是2020年,做一个游戏的成本已经远远低于2010年那个时代了。
    随便下个UE4或者Unity,在素材库里面买几个素材,写点代码或者从github上抄点,随便拼拼就行。
    然而在这个年代,还有人愿意一步一步的从底层开发,这才是真的负重前行。
    然后说一下上面这几家都提供了什么:
    PopcornFX:看见FX就知道是特效。这家是提供粒子系统的。
    Havok:物理引擎。头发、布料的解算。碰撞、打击判定等。
    Nvidia:除了造显卡之外还有很多软件。太多了所以我不知道他们到底用了啥。可能是PhysX,可能是cg。
    Oodle:不知道...
    SpeedTree:游戏里的树、灌木等等。Procedural Modeling的软件,专门造植物,还能优化模型。
    YEBIS:特效
    FMOD:音效
    BINK:播视频的


    IP属地:北京2楼2020-02-20 11:18
    收起回复
      先占个楼,坐等更新,但是有一个想说的是,古剑三的引擎应该是ve,只不过自己在ve的基础上修改了很多东西,古二和古三用的是同一款引擎


      IP属地:河北3楼2020-02-20 11:29
      收起回复
        噗....好像还真是用的VE....这***尴尬了
        好吧,那后面就先简单谈谈古剑3实现了哪些功能....
        顺便容我查查VE


        IP属地:北京5楼2020-02-20 11:44
        回复
          自己魔改的VE,这个引擎本身很老了。


          IP属地:云南来自Android客户端6楼2020-02-20 11:45
          回复
            一、体积光(Volumetric Light)

            体积光的应用就是当强光(比如太阳光)穿过水汽时,出现的折射现象,让人感觉好像阳光有了体积感。
            最明显的是在树下。比如:


            IP属地:北京7楼2020-02-20 11:52
            收起回复
              等楼主


              IP属地:辽宁来自Android客户端8楼2020-02-20 11:54
              回复
                像阳光穿过树叶、建筑边缘、云层出现的“体积光”,也就是传说中的“GodRay”,其实有两种实现方法。
                1. 简单粗暴的:在会出现GodRay的位置加个片,在片上画出GodRay。
                比如一些老游戏,或者是不专业的人做的东西,例如LG的LG Simulator。
                这种方法最大的问题是,体积光一定是静态的,不会随着树叶摇摆而改变。
                同时,当阳光角度变化时,GodRay无法变化,或者变化的很难看。
                2. 基于物理的:对光线在空气中的传播进行步长采样(Ray Marching),计算体积光。
                这种方法的好处是能够实时绘制动态体积光,不受阳光角度变化及树叶变化的影响。
                古剑3就是采用的这个方法。具体可以到某个树下去看看~当树叶摇摆时,体积光会随之变化。
                具体可以参考这篇:
                Volumetric fog: Unified, compute shader based solution to atmospheric scattering, ACM Siggraph 2014
                可以从作者的主页上下载
                https://bartwronski.com/publications/


                IP属地:北京9楼2020-02-20 12:13
                回复
                  搬板凳


                  IP属地:澳大利亚来自Android客户端10楼2020-02-20 12:16
                  回复
                    乖巧地搬来沙发,饮料,零食


                    IP属地:广西来自Android客户端11楼2020-02-20 12:18
                    收起回复
                      二、SSR(Screen Space Reflection 屏幕空间反射,不是抽卡!)

                      SSR用来展现近距离不规则物体表面上的倒影。是一种较为廉价的倒影表现方式(相比于用摄像机来说)。
                      比如远处的火焰在地面上的倒影。那个倒影是会随着火焰变化而变化的。

                      比如王北洛在天鹿城金属地面附近时,金属上倒映出的腿和皮裤


                      IP属地:北京12楼2020-02-20 12:23
                      收起回复
                        SSR是业界老生常谈的问题了。几乎所有追求画面的次世代游戏都要追求一下SSR。
                        在渲染结束后,画面输送到显示屏之前,我们得到的是一张原始图片,以及深度图。
                        这张原始图片还没有经过任何的后处理,看起来非常糟糕(全是锯齿,没有任何特效,啥都没有)
                        在后效(Post-Processing)阶段,可以增加SSR来制造出“不太真实的”反射。
                        因为我们在计算反射时不是在3D空间内计算的,而是完全依赖那张深度图,相当于是在二维空间中算的。因此才叫“屏幕空间反射”。
                        SSR的优点是快速,而且可以在非屏幕的物体上展现出反射。
                        缺点也很明显:
                        1. 如果一个物体在我们的画面上没出现,那么一定不会在倒影里出现。
                        2. 因为我们使用的深度图实际上是渲染时用于做z-test所产生的z-buffer(貌似是),因此如果一个物体是半透明的,或者带有透明通道,那么SSR会高几率出BUG(对没错,说的就是你,Unity HDRP)。
                        所以为啥需要SSR?
                        我们需要反射来表现物体的反光度。但凡擦的特别亮的东西都会反光,对吧。
                        有两种东西能表现出物体的反光度:光和倒影。
                        某些材质,比如被雨水淋湿的石头还有亮亮的金属,不可能全程处于摄像机与太阳之间。
                        所以这时候就需要用反射来表现材质了。


                        IP属地:北京13楼2020-02-20 12:38
                        回复
                          先马


                          IP属地:重庆来自Android客户端14楼2020-02-20 13:10
                          回复
                            steam上不是99元吗


                            IP属地:浙江来自Android客户端15楼2020-02-20 13:25
                            收起回复
                              SSR实现方法的那个论文我好像....找不到了
                              不过相比其他游戏,在SSR的处理方面,烛龙已经做的非常好了。
                              为数不多的BUG出在了眉毛上。具体忘了是哪个过场动画了....反正眉毛是花的。
                              当然,这个BUG大家都有。
                              原因很简单,眉毛实际上是一个片,上面贴了个透明贴图。
                              比如小缨子的浮空眉

                              然而在做zTest的时候,是在Raster阶段的,因此出来的深度图里面,眉毛的透明部分也是实心的。
                              这样,在算SSR时,眉毛肯定就是错误的。同理,这类错误还会出现在树叶、灌木等带透明通道的物体上。
                              只不过烛龙忘了把眉毛剔除出SSR的范围了。


                              IP属地:北京16楼2020-02-20 13:32
                              收起回复