日常笔记-1 unity技术美术流程
概述
主要功能:
给定虚拟相机、三维对象、光源
生成二维图像
物体外观的决定因素:
材质属性
光源
贴图
着色方程
渲染速度表示:
每秒帧数FPS:每秒渲染的图像数量
赫兹HZ:渲染一帧需要的时间
坐标变换:
(模型坐标系)---模型变换(M)--->(世界坐标系)-----视图变换(V)------->(视锥坐标系)--------投影变换(P)-------->(投影坐标系)--------视口变换-------(视口坐标系)
并行执行
提高性能
最慢的阶段影响整个管线速度
流程
应用阶段 Application
CPU上,由应用程序驱动
准备场景中的基本数据
场景物体数据
物体变换数据
位置
旋转
缩放
物体网格数据
顶点位置
UV贴图
摄像机数据
位置、方向、远近裁剪平面
正交/透视(FOV)
视口比例/尺寸
光源及阴影数据
设置光源
方向光
颜色
方向
点光源
颜色
位置
范围
聚光源
颜色
位置
方向
内外圆锥角
设置阴影
是否需要阴影
判断该光源可见范围内是否有可投射阴影的物体
阴影参数
对应光源序号
阴影强度
级联参数
深度偏移(优化相关)
近平面偏移(优化相关)
逐光源绘制阴影贴图
近平面偏移
逐级联
计算当前光源+级联对应的观察矩阵、投影矩阵、以及对应到阴影贴图里的视口区域
绘制到阴影贴图
其他全局数据
加速算法,粗粒度剔除
碰撞检测
加速算法
遮挡剔除
可见光裁剪
可见场景物体裁剪
八叉树
BSP树
K-D树
BVH
其他算法
设置渲染状态,准备渲染参数
绘制设置
使用着色器
合批方式
绘制物体的顺序
相对摄像机的距离
材质RenderQueue
UICanvas
其他方式等
渲染目标(输出到哪)
FrameBuffer
RenderTexture
渲染模式
前向渲染
延迟渲染
调用 Drawcall,输出渲染图元到显存
顶点数据
位置
颜色
法线
纹理UV坐标
其他顶点数据
其他数据
MVP变换矩阵
纹理贴图
其他数据
几何阶段 Geometry Processing
GPU
顶点着色器 Vertex Shading (可编程)
视图变换
顶点着色
曲面细分(可选)
外壳着色器 Hull Shader
曲面细分 tesselator
域着色器 domain shader
几何着色器(可选)
基于图元的操作
投影 Projection
正交
透视
裁剪 Clipping
CVV
正面或背面剔除(可配置)
屏幕映射 Screen Mapping
从连续到离散
坐标系差异(OpenGL/D3D)
光栅化阶段 Rasterization
GPU
三角形设置 Triangle Setup
计算微分、边方程和其他三角形数据
三角形遍历 Triangle Traversal
抗锯齿(MSAA)
SSAA
渲染到 一个分辨率放大n倍的buffer
对放大n倍的buffer下采样
MSAA
在光栅化阶段
计算多个覆盖样本
FXAA/TXAA
后处理技术
逐片元操作 Pixel Processing
GPU
片元着色 Fragment Shader
颜色混合 Color Blending
透明度测试 Alpha test
模板测试 stencil test
深度测试 depth test
混合 blending
目标缓冲区 FrameBuffer
后处理
Bloom
HDR
FXAA
Depth of View
边缘检测
径向模糊