马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
实验方式:主动完成
图元装配主动化流程
顶点坐标存入装配区 → 按绘制模式毗连顶点 → 天生完备多少图元
示例:gl.drawArrays(gl.TRIANGLES, 0, 3)主动天生三角形
会主动主动裁剪超出屏幕范围(NDC空间外)的三角形,仅生存可见部分
光栅化
将多少图元转换为屏幕上的片断(Fragment),即潜伏的像素候选
在此阶段举行插值盘算(如纹理坐标、颜色插值)
光栅化阶段焦点步调详解
一、空间转换阶段
- 齐次裁剪空间 → NDC空间
通过透视除法将顶点坐标归一化至[-1,1]范围(OpenGL/Unity)或[0,1]范围(Direct3D)
x_ndc = x_clip / w_clip,y_ndc = y_clip / w_clip
- 视口变动
将NDC坐标映射到屏幕坐标系:- x_{screen} = (x_{ndc} + 1) * 0.5 * screenWidth
- y_{screen} = (1 - y_{ndc}) * 0.5 * screenHeight
复制代码 生存z值用于深度测试
二、图元处理处罚阶段
3. 三角形设置
- 输入:屏幕坐标下的三个顶点
- 盘算三角形边方程、法线方向
- 构建三角形困绕盒(Bounding Box)确定潜伏覆盖像素范围
- 三角形遍历
- 遍历困绕盒内全部像素
- 通过重心坐标判断像素是否在三角形内:
- α + β + γ = 1 \quad (α,β,γ ≥ 0)
复制代码 - 天生片元(Fragment)数据
三、数据插值阶段
5. 属性插值盘算
- 使用透视校正插值(Perspective-Correct Interpolation):
- f = \frac{αf_0/w_0 + βf_1/w_1 + γf_2/w_2}{α/w_0 + β/w_1 + γ/w_2}
复制代码 - 对UV坐标、法线、深度等顶点属性举行插值
四、优化处理处罚阶段
6. 裁剪与反面消隐
- 视锥文体剪:剔除屏幕外图元
- 反面剔除:通过三角形法线与视线的夹角判断可见性
if(dot(normal, viewDir) < 0) cull;
- 深度测试(Z-Test)
- 比力片元深度值与深度缓冲区
- 采取LESS/EQUAL等比力规则决定是否更新像素
五、像素天生阶段
8. 片断着色处理处罚
- 输入插值后的片元属性
- 实验光照盘算(Phong/BRDF等模子)
- 纹理采样与颜色混淆
- 输出归并
- Alpha混淆:finalColor = srcColor * alpha + dstColor * (1-alpha)
- 写入帧缓冲(思量颜色缓冲、深度缓冲、模板缓冲)
关键技能与留意事项
- 抗锯齿处理处罚:MSAA通过子采样提升边沿质量
- Early-Z优化:在片元着色前实验深度测试,镌汰无效盘算
- 透视失真:必须使用透视校正插值制止纹理扭曲
- 困绕盒优化:通过min/max盘算镌汰遍历范围
根据Unity官方数据,公道优化的光栅化流程可使移动端渲染服从提升40%+。发起联合工具举行分阶段性能分析。
|