|
学而不思则罔,思而不学则殆。
一,3d引擎是一个工程与数学相互妥协的艺术结晶;
1.1 工程要堆代码的
仅在windows上一个实现一个简单的d3d demo就上千行的代码,任何一个状态的设置问题都有可能渲染错误,需要工程的思想与代码的水平,便引发下面的填坑技能:
C++的坑,C++11的坑;C++调试的坑,图形调试的坑,VS,renderdoc,nsight的坑。多线程的坑,dll的坑; (不展开)
字符串的坑,有几个人知道,char,TChar, unicode, uft8,utf-16,UCS2,utf-32, gb2312,这些编码规则之间的联系与区别;
编译的坑,链接器的坑;每次编译工程要3个小时,习惯了就好。
这些需要基本的功力,需要自己亲自动手去写的,需要时间的,不是一两本书就可能学会的。 (问题是没有书讲这个)
1.2 数学:
1.2.1最简单的: 图形学最基本的数学类型,float,这个大家都用过吧,但是IEEE-754的标准有多少人研究过,正负位,对数位,有效位,为什么(16,777,219.0f >= 16,777,221.0f),这些坑要爬过才能说是了解最基本的数学。
1.2.2图形学的坑,
1.2.2.1 简单测试模型总得会做吧
不可能是个模型都从网上下吧,也不可能是个模型都让美术去做(分裂顶点的测试用例,UV镜像的测试用例,多个骨骼影响顶点的用例),3ds max, Maya的基本操作要会,做个带骨骼的小人会跑动应该会的。
1.2.2.2 材质总得会制作
基本的ps操作应该会,通道要熟悉,格式类型要熟悉,更不用说DDS,BC,DXT,ETC,AST的格式了,BC一共7个系,带不带alpha,哪个用来压diffuse,哪个用来压normal,哪个用来压mask,这个要知道,加压算法是什么,这个也要知道。
1.2.2.3 模型总得会导入
fbx的文档要读很多遍,FbxNode的11个变换矩阵每个是什么含义要了解,顶点,法线,光滑组,uv,材质,骨骼导入,蒙皮,morph,这些导入要会写,否则连模型都没有更不用谈图形学了。然后是对模型的处理,根据光滑组,材质分mesh,算normal,算Tangent,等等。 SpeedTree的一堆,AbcModel的一堆,加起来所有光模型导入的代码UE就2W行,没这2W行的代码,导进去的模型(特别是tangent)都不一定是对的,谈什么渲染。
1.2.2.4 Tangent
渲染的核心在于Tangent,因为光照需要Tangent。但是这个Tangent怎么算为什么要这么算,为什么ue,u3d,vray,xNormal, hoduni等都用业界标准算法Mikkt? 估计题主看完PBRT都不知道Geometry那章里,mesh shape里有很精确关于Tangent的定义,这是我见到过的最精确的Tanget空间的定义,参数化表面方程可以解决很多问题。不知道题主注意了没。说到Tangent就会说到BumpMap中的NormalMap,NormalMap与模型是depenent的而不是随手拿一个扰动下是个意思,自己写代码烘焙一个NormalMap就知道了,首先要保证低模的Tangent空间与渲染的目标Tangent空间一致。这就是UE文档中写到要用XNormal来烘NormalMap,因为XNormal用的是Mikkt算法,UE用的也是Mikkt算法,保证能还原出烘NormalMap的当时的Tangent。
1.2.2.5 动画
动画最基本的就是旋转了,有矩阵,四元数与欧拉角。矩阵,四元数是个标准旋转量,应该都知道。那骨骼动画曲线中一般存的是欧拉角(fbx),那么问题来了,欧拉角(Euler Angle)有6种轴序,2种表示方法:内旋外旋,Maya默认的轴序,3ds max默认的轴序,自己引擎的轴序,弄不明白这个连旋转都不对,就不要谈动画了,因为导进去就不动,动作肯定有问题。
1.2.2.6 Render
1.2.2.6.1 Rasteration
1.2.2.6.1.1 Forward Deffer Forward+ TilledDeffer 基础知识
1.2.2.6.1.2 ProjectionMatrix
1.2.2.6.1.2.1 透视投影矫正,这个要知道吧
1.2.2.6.1.2.2 解决Z-bias,使用Reverse Z的投影矩阵要会算吧
1.2.2.6.1.3 Transparent. 半透明混合公式,一般都是从后向前渲,从前向后渲怎么设。
1.2.2.6.1.4 Rasteration里的黑科技,为什么要这样子算,公式优化,等等,不展开。。源头都是Raytrace.
1.2.2.6.1.5 只用DrawPix实现一个软件光栅话,基本上Rasteration就没问题了,剩下的就是去抄Shader,就是个体力活。
1.2.2.6.2 Raytrace
1.2.2.6.2.1 BVH,Octree,KD-Tree自己手撸一个,撸一遍就知道自己哪里没理解了。
1.2.2.6.2.2 RayTrace剩下的细节(我也没看懂,就实现了个简单的,不会就是不会);
二 怎么做
按照下图一步一个脚印的写一遍,写不了找UE抄一遍
Cite from GameEngineArchitechure
就会了,很简单。
纸上学来终觉浅,绝知此事要躬行!!共勉 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|