Unity Shader:(一)渲染流水线
一个分享着色器的网站https://www.shadertoy.com/
什么是Shader? GPU流水线上一些可高度编程的阶段。
一、渲染流水线(概念上)
应用阶段 ----输--出--渲--染--图--元----> 几何阶段 -------输--出--屏--幕--空--间--顶--点--信--息---> 光栅化阶段
准备场景数据 把顶点坐标变换到屏幕空间中 对上一阶段顶点数据进行插值,再逐像素处理
粒度剔除culling GPU上运行 决定每个渲染图元中的哪些像素应该被绘制在屏幕上
设置渲染状态 GPU上运行
CPU上运行
<-------------应用阶段:CPU和GPU之间的通信------------>
1. 把数据加载到显存中
2. 设置渲染状态
3. 调用DrawCall
DrawCall是一个Cpu发起的发向GPU的命令。这个命令会指向本次调用需要渲染的图元列表。
为什么DrawCall多了会影响帧率?渲染速度往往快于CPU提交命令的速度,DrawCall数量太多,会把大量时间花费在提交DrawCall上。
那么如何减少DrawCall?批处理,静态物体只合并一次。(避免使用大量很小的网格。避免使用过多的材质。)
二、GPU流水线(实际上)
----------------------------------------几----何----阶----段-------------------------------------------
------- 顶点着色器 -> 曲面细分着色器 -> 几何着色器 -> 裁剪 -> 屏幕映射 -------
------------------------------------------------------------------------------------------------------------
1. 流水线第一阶段:顶点着色器 Vertex Shader 完全可编程
主要工作:坐标变换、逐顶点光照
坐标变换:把顶点坐标从模型空间转换到齐次剪裁空间。例如
o.pos = mul ( UNITY_MVP, v.position );
2. 裁剪:不在摄像机视野的顶点裁减掉。可配置但不可编程。
3. 屏幕映射:把每个图元的坐标转换到屏幕坐标系。不可配置不可编程。
------------------------------------光----栅----化----阶----段-----------------------------------------
---------- 三角形设置 --> 三角形遍历 --> 片元着色器 --> 逐片元操作 ---------
------------------------------------------------------------------------------------------------------------
1. 片元着色器 Fragment Shader 完全可编程
主要工作:逐片元的着色操作。
2. 逐片元操作 执行修改颜色、深度缓冲、进行混合等等重要操作。可配置但不可编程。
-------------------------------------------------------------------------------------------------------------------------------------------------------
内容参考《UnitySahder入门精要》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署