当前位置: 首页 > news >正文

GPU渲染阶段介绍+Shader基础结构实现

GPU是什么

        (CPU)Center Processing Unit:逻辑编程

        (GPU)Graphics Processing Unit:图形处理(矩阵运算,数据公式运算,光栅化)

渲染管线

        渲染管线也称为渲染流水线,就是CPU准备一些数据,然后告诉GPU渲染出一个二维的

        图像的过程。

        渲染管道的三个阶段:应用程序阶段,几何阶段,光栅化阶段

        1.应用阶段(CPU)

                主要就是CPU将硬盘中的数据加载后,和内存进行通讯后,将需要显示的数据信息

                (顶点数据,纹理坐标,法线信息),传递GPU处理。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Process : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//从硬盘加载数据GameObject prefab = Resources.Load<GameObject>("Capsule");//将数据放置在内存中GameObject capsule = Instantiate<GameObject>(prefab);//物体上面,带有材质球,材质球会引用Shader着色器,因为Shader是GPU编程,所以就会将数据传递给GPU//注意:Unity采用了材质球调用Shader,所以Unity是通过材质球将数据传递给GPU的,别的引擎不一定是材质球实现}
}
          2.几何阶段(GPU)

                几何阶段最重要的工作就是“变换三维顶点坐标”,变换的工作由矩阵运算完成。

                空间

                        模型空间:3D物体的原始坐标,存储在模型中。

                        世界空间:物体放在场景中,才能构成整个游戏场景。

                        观察空间:需要以相机为原点的三维空间。

                        裁剪空间:物体是否在相机的渲染范围内。

                        屏幕空间:3D物体,投影到屏幕上。

                物体最终显示:需要GPU进行一系列的矩阵运算,将模型空间下的点,转换到屏间

                下(转换点的过程是并行)

                非模型顶点信息中记录的点,GPU会以线性插值的方式获得并提示

        3.光栅化阶段(GPU)

                使用上一个阶段(几何阶段)递过来的数据,对像素点进行染色,最终显示出来,

                染色过程为并行执行。

        着色器(Shader)是什么?

                给GPU编程的语言,代码会在GPU上并行执行(几何运算,光栅化)

        Unity的Shader类型

                固定管线Shader:很古老显卡的编程着色器,现在很少使用,画质不好

                顶点/片元Shader:通用的着色器类型(重点学习),可编程

                表面体Shader:Unity自己创建的着色器类型,基于顶点/片元着色器二次封装实

                现,降低了着色器的编写难度。

        材质球和Shader的关系

                Unity中Material用来关联游戏物体和Shader着色器,所以编写Shader前,需要先

                建立材质球

        建立Shader方法

                1.建立材质球

                2.建立Shader文件

                        (1)表面体Shader

                        (2)顶点/片元Shader

                        (3)图片效果Shader

                        (4)GPU运算Shader

        Pass通道和SubShader的区别

                Pass通道在SubShader内部,SubShader不执行,则内部的Pass通道也不会执行

                SubShader从上向下依次执行,每次只会执行一个,同一个SubShader中的Pass通

                道会依次向下执行。

        Shader的基本结构
//Shader名称与材质球的Shader列表对应
Shader "CreateTest/FixedColor"
{//Shader属性,会出现在关联材质球的选项里Properties{}//SubShader根据显卡等级只执行一个SubShader{//Pass依次向下执行Pass{}}SubShader{}//所有SubShader都执行失败,则最终执行FallBack效果//"Diffuse"是Unity的一个内置Shader效果FallBack "Diffuse"
}

        实现染色着色器效果(shader文件):

//Shader名称与材质球的Shader列表对应
Shader "CreateTest/FixedColor"
{//Shader属性,会出现在关联材质球的选项里Properties{//用于在材质球上面配置的颜色//属性名"_Color()"//参数1:材质面板上显示的名称//参数2:属性的类型Color//等号右边:当前属性的默认值_Color("颜色",Color)=(1,1,1,1)}//SubShader根据显卡等级只执行一个SubShader{Pass{//使用固定管线着色器染色//Color[]是固定管线着色器的染色命令Color[_Color]}}//所有SubShader都执行失败,则最终执行FallBack效果//"Diffuse"是Unity的一个内置Shader效果FallBack "Diffuse"
}

                

该系列专栏为网课课程笔记,仅用于学习参考。       

相关文章:

  • 服务治理-服务注册
  • 洛谷P1177【模板】排序:十种排序算法全解(2)
  • 23种设计模式-创建型模式之原型模式(Java版本)
  • [Java EE] Spring 配置 和 日志
  • 嵌入式面试题解析:常见基础知识点详解
  • spring Ai---向量知识库(一)
  • [Java · 初窥门径] Java API 文档使用说明
  • 青少年编程与数学 02-016 Python数据结构与算法 29课题、自然语言处理算法
  • 【家政平台开发(60)】数据驱动:数据分析与应用深度解析
  • 边生成边训练:构建合成数据驱动的在线训练系统设计实战
  • Cache优化原则
  • MCP协议用到的Node.js 和 npm npx
  • 【SAP ME 45】并发SFC拆分导致 SFC_STEP中的QTY_IN_QUEUE与SFC表中的QTY不一致
  • 【Flutter动画深度解析】性能与美学的完美平衡之道
  • PrintWriter 类详解
  • Python:使用web框架Flask搭建网站
  • php实现zip压缩
  • 作业2 CNN实现手写数字识别
  • C++入门小馆: 深入string类
  • 藏品馆管理系统
  • 广州一男子早高峰爬上猎德大桥顶部疑似要跳桥,路段一度拥堵
  • 87岁老人花3万多做“血液净化”延年益寿?医院“张主任”:我那是善意的欺骗
  • 对话地铁读书人|翻译Esther:先读原著,再看电影
  • 上海崇明“人鸟争食”何解?检察机关推动各方寻找最优解
  • 梅德韦杰夫:如果欧盟和美国 “撒手不管”,俄罗斯会更快解决俄乌冲突
  • 张巍|另眼看古典学⑩:再创作让古希腊神话重获生机——重述厄勒克特拉