从有限元到Unity——渲染管线与着色器

本文介绍了渲染管线的概念,以手机装配线为比喻,解释了CPU和GPU在渲染过程中的角色。详细阐述了渲染管线的几何阶段和光栅化阶段,包括顶点着色器、曲面细分着色器、几何着色器、裁剪、屏幕映射、图元组装、三角形遍历、片元着色器和逐片元操作。此外,还解析了Unity着色器的属性和子着色器结构,帮助理解材质效果的创建。
摘要由CSDN通过智能技术生成

从有限元到Unity

一、从有限元到Unity——有限元网格信息导出及分析
二、从有限元到Unity——Unity网格编程
三、从有限元到Unity——从abaqus网格模型文件到Unity模型数据
四、从有限元到Unity——有限元分析结果导出
五、从有限元到Unity——渲染管线与着色器



前言

  上一篇文章大概说了Abaqus如何导出分析后的场变量数据,为后期渲染作数据准备。从本文开始正式进入渲染环节。本章先对渲染管线进行基础了解,以便于后面着色器、渲染过程的理解。


一、渲染管线是什么?

  我们以手机装配流水线为例,首先生产线的前端会有原材料的投入,如机壳、PCB板、电池等,然后是员工进行各个原材料的组装、到整机测试、整机包装,最后输出成品。
  渲染管线的工作与装配流水线类似,网格、材质相当于投入到产线的原材料,CPU和GPU相当于员工,协同起来进行图像渲染和输出,最终获得屏幕上的图像。

二、渲染管线干了些什么?

  前面说了渲染管线是CPU和GPU协同下完成进行图像渲染和输出的过程,而这个过程大体可分为应用阶段、几何阶段和光栅化阶段。那这些阶段中处理些什么?CPU和GPU干了些什么?我们后面就来探讨下。

1.CPU干了些什么?

  在渲染工作中,CPU主要在应用阶段起作用,负责将渲染数据和指令发送至缓存区,GPU负责从缓存区取出数据和指令进行渲染。
  具体的话,应用阶段中CPU将场景数据(模型、光源信息、渲染数据等)、渲染状态设置等进行准备并发送给图形硬件(GPU、显存),同时调用DrawCall(CPU调用图像编程接口)向命令缓冲区依此写入命令,使GPU能依次将其取出执行。
  简而言之,CPU充当着下达渲染命令调用GPU执行的角色。

2.GPU干了些什么?

  GPU主要在几何阶段和光栅化阶段起作用,其中,在几何阶段中又包括了顶点着色器、曲面细分着色器、几何着色器、裁剪、屏幕映射几步。

2.1.几何阶段

2.1.1.顶点着色器

  顶点着色器为几何阶段必需一步,而且是完全可编程的(对应Unity着色器里面的顶点函数),这一步中主要对顶点的坐标进行空间模型转换。这几个空间包括:
  (1)模型空间:即顶点在模型上的坐标位置
  (2)世界空间:最大的空间,即顶点在世界坐标的绝对位置
  (3)视图空间:与模型空间概念类似,只不过从顶点在模型上的位置转为顶点在摄像机的位置
  (4)剪裁空间:除去摄像机视锥体外顶点的坐标空间
  顶点着色器完成顶点坐标从模型空间到世界空间(通过M矩阵转换)、世界空间到视图空间(通过V矩阵转换)、视图空间到剪裁空间(通过P矩阵转换)的一系列转换(相当于Unity的UNITY_MATRIX_MVP/UnityObjectToClipPos),也从显存中获得顶点的属性(显存中的数据也是CPU写入的),包括顶点坐标、法线、颜色等,并进行逐顶点计算。

2.1.2.曲面细分着色器和几何着色器

  这两步都是非必须步骤,曲面细分着色器主要是做了曲面细分的工作,使模型细节更丰富,看上去跟增加了顶点一样;几何着色器主要进行增加、去除某些顶点或者修改顶点属性的工作。

2.1.3.裁剪、屏幕映射

  裁剪就是对完成顶点着色器之后,对处于视锥体之外的顶点进行去除,保留可见顶点的过程(有的算法还会重新计算处于视锥体边缘的面片的顶点位置,从而平滑边缘);屏幕映射则是将剪裁空间的顶点,通过矩阵变换转换到屏幕空间中(与屏幕分辨率有关)。

2.2.光栅化阶段

  光栅化阶段主要是将屏幕空间中的顶点组装为面片、计算像素点颜色以及一些与图像输出相关的工作。其中包括了图元组装、三角形遍历、片元着色器以及逐片元操作。

2.2.1.图元组装、三角形遍历

  图元组装主要对屏幕空间中的顶点根据顶点的数据构建点、线、面的关系;而三角形遍历则是在此基础上逐行扫描屏幕像素点,像素点在三角形内的则作为片元进行片元着色器的渲染计算,否则直接忽略(这种方式会导致锯齿现象产生,抗锯齿技术是相应的有效解决方法)。

2.2.2.片元着色器

  片元着色器与顶点着色器一样,也是可由开发者完全编程的(对应Unity着色器里面的片元函数),主要根据顶点的属性计算每个片元的颜色,每个片元的颜色受其所属的三角形的顶点所影响。

2.2.3.逐片元操作

  逐片元操作中,GPU完成一系列测试,包括裁剪测试、透明度测试、模板测试、深度测试等࿰

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值