boxmoe_header_banner_img

希望来到这里能让你发现宝藏

加载中

游戏开发 客户端


avatar
xienia July 8, 2025
文章导读

3d数学基础

向量:

向量的叉积,通过叉积获取法向量与垂直向量 P*G=<pyqz-qypz,pzqx-pxqz,pxqy-pyqx>
向量的点积,获取一个标量为投影到向量的长度乘以被投影的向量的长度,根据正反带上正负
矩阵代数:
同比缩放和等比缩放
矩阵旋转
齐次坐标系统(更好的方式处理处理旋转和缩放)
欧拉角和四元数

几何对象
线,平面
模型网格使用 三角形网格来模拟游戏世界中的物体
摄像机投影:
透视投影和正交投影
光线绘制:
局部光照:每个物体的光照都是相互独立的,所有的光线都是从光源直接照射到物体上的。
全局光照:在考虑光源对物体的直接照明光线的同时还会考虑经过场景中其他物体反射的光线。
光源类型:
方向光:用来模拟距离非常远的光源
点光:空间中一个点向四面八方均匀发射光线
聚光:锥形光
法线向量:
兰伯特余弦定理:一束光垂直照射物体的表面必侧面照射看起来更加强烈,根据物体表面的法线和光线方向的夹角返回不同的光照强度。
漫反射:当一个物体非常粗糙时,反射光线会在不同的随机方向上分布,无论观察点位于半球体上的哪里,都能够接收到发射光线。
镜面反射:当光线照射到一个光滑表面时反射光线会分布在一个相对集中地区域。
纹理映射

图形渲染

渲染管线

渲染管线流程:
Primitive Assemby(图元装配):在内存中将需要渲染的顶点准备好传递给gpu(用户可更改)
vertex shader(顶点着色器): 进行顶点计算 (用户可更改)
Geometry shader(几何着色器) :对vs的内容进行剔除和修改,能够生产新的图元,海面,毛发都在此阶段生成(用户可更改)
stream output将GS返回的内容到vs中重新处理,让新生成的图元也能渲染正确(用户可更改)
clipping(裁剪)
视锥剔除,可见性剔除和深度剔除(用户可更改)
Screenmapping,triangle setup ,triangle traversal 将矢量三角形改成图形三角形(不可更改)
Early Z Reject 硬件优化
Fragment Shader 像素着色器 (用户可更改) 大部分的材质计算在这一阶段进行
Merge/Rop像素合并阶段 (用户可更改)

顶点处理

顶点动画:变换模型顶点播放动画

像素处理

1,贴图坐标:归一化的2d贴图 模式:warp 环绕模式 mirror 镜像模式 clamp 在uv大于0或小于1时简单取边缘像素 broder 用户制定一个颜色在0-1外使用
2,贴图过滤: 避免贴图在放大之后产生马赛克。
Nearest:点采样,使用最接近像素中心的像素
Linear:线性采样,由最近的纹素差值而成
3,当平面离相机太近,会造成精度不足的问题,当平面离相机太远,贴图采样也会造成严重的闪烁于是采用Mipmap 一次把贴图的一半, 四分之一 ,八分之一 最后到只有一个像素记录在纹理中,硬件采样时采用对应的Mipmap.
4,序列贴图

渲染状态

1,AlphaBlend和AlphaTest
Blend是混合透明度和颜色 而test是和预设的AlphaRef比较如果不通过则去除这个像素
2,深度:计算机视觉中通过深度来表述像素的相互覆盖关系;
画家算法:先按顺序绘制出图元,如果重叠检测绘制的新的图元和旧图元比是否更靠近摄像机,是则写入新图元否则放弃这个像素的着色。

光照:

光照管线:

1,Forward光照管线:在一个shader里面,循环计算所有灯对当前像素的影响,但是会有重叠,浪费大量的计算能力但是简单而直接。(实时光线)
2,Deferred光照管线:首先遍历所有的物体,把物体和光照相关的几何信息记录在RenderTarget当中,然后再执行一次屏幕空间的光照计算,每盏灯按照自己可能影响的范围,计算光照并汇总得到最后的光照,但是占带宽,主要用于PC平台。(实时光线)
3,LightMap烘焙:离线计算一次光照,并将最终的光照结果记录在贴图当中,这个贴图称为LightMap,最终渲染时,我们以LightMap的采样结果作为光照结果与Diffuse贴图运算,并且得到最终的光照结果。(只能处理静态光照)
4,点云烘焙:在LightMap的基础之上,将光照信息烘焙到空间虚拟的受光点上,这些受光点称为点云,根据人物的位置,采样这些点云,进行差值可以得到任务的受光情况。
5,影子:
烘焙影子:用lightmap的方法进行
ShadowMap:从投影灯角度渲染一次场景获得遮挡体到灯的距离,正常渲染每个物体,比较当前像素和遮挡体谁比较靠近投影灯,如果遮挡体比较靠近投影灯,则当前像素处于影子当中。 适用于动态效果,但是运行时消耗高。并且像素边缘会产生锯齿,但可通过柔滑的方式边缘模糊。

次时代渲染

1,NormalMap:通过法线贴图,在低模上实现高模的效果,但是消耗聚到
2,NPR 处理PBR以外的所有都是NPR
3,PBR:基于物理的光照渲染