学习UnityShader入门精要笔记1——渲染流程概述

时间:2021-12-08 10:22:52

常规将渲染流程分为三个阶段,应用阶段--几何阶段--光栅化阶段。

应用阶段我理解为数据准备阶段,包括位置信息,光照信息等,并设置模型材质、shader等,书中把这些定义为渲染状态。最后应用阶段会输出渲染所需的几何信息即渲染图元,交由几何阶段做渲染绘制处理。

几何阶段我理解就是shader中的vert 和 frag,逐顶点逐片元对渲染图元做处理并将结果丢给第三阶段。

光栅化阶段实现具体绘制,对得到的逐顶点数据做插值再进行逐像素处理。

书中把应用阶段的工作分为三步:加载数据到显存——设置渲染状态——调用dc通知gpu开始上班。

【误,完全不知道怎么总结这些,把书中的流程大致摘出来给自己留个印象吧

————————————————————————————————————————————————————————————————

以下是摘抄小tip:

OpenGL坐标原点在屏幕左下,DirectX坐标原点在左上,可能由于此区别导致图像倒转。


HLSL——DirectX

GLSL——OpenGL

Cg——NVIDIA

GLSL优点在于其跨平台性,此特性是由于OpenGL未提供着色编译器,由显卡驱动完成着色器编译工作。即显卡驱动支持编译GLSL就可以运行。GLSL依赖硬件而不是操作系统级别。也可能导致不同硬件商编译实现的效果不尽相同。

HLSL由微软控制着色器编译,不会由于硬件不同造成效果差异。故而支持平台相对有限。

Cg则是真正意义的跨平台,会根据平台不同编译成相应的中间语言。其跨平台型性很大原因取决于和微软的合作,故而Cg语法和HLSL相似,Cg语言可以无缝移植成HLSL

代码,但可能无法完全发挥出OpenGL最新特性。


DC中造成性能问题的元凶往往是CPU,如果DC太多,CPU会把大量时间花费在提交DC上造成CPU过载,故开发过程需要尽可能减少dc进行优化。常用的优化方法是批处理(batching),把很多小DC合并成一个大DC。

开发过程中尽量避免用大量很小的网格,或者考虑合并他们;避免使用过多材质,尽量去share一个材质。