zoukankan      html  css  js  c++  java
  • 《Unity Shader入门精要》读书笔记(一)

    第一章

    第一章内容是做书籍目录介绍,此处跳过

    第二章: 渲染流水线

    渲染流程分为3个阶段:应用阶段(Application Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage)。

    应用阶段输出渲染图元到几何阶段,几何阶段输出屏幕空间的顶点信息到光栅化阶段。

    如图所示:

    渲染流水线

    CPU和GPU的通信

    所谓CPU和GPU的通信,实际上就是应用阶段CPU做的事。也就是CPU流水线。

    CPU在应用阶段经过3个步骤:

    1. 把数据加载到显存
    2. 设置渲染状态
    3. 调用Draw Call

    1. 把数据加载到显存

    实际上就是把渲染需要的数据,从硬盘加载到内存(RAM),然后网格和纹理等数据再被加载到显存(VRAM)。

    为什么还要把它们加载到VRAM呢?因为很多显卡不能直接从RAM读数据,所以要加载到VRAM,一旦加载到VRAM,RAM中的对应数据就可以被移除了。

    在这之后,我们要通过设置渲染状态来指导GPU干活。

    2. 设置渲染状态

    简单说,渲染状态就是,你要用哪个顶点着色器、片段着色器、光源、材质等对网格进行渲染。

    如果不设置,所有物体都是同一个渲染结果。

    设置好后,我们要调用Draw Call命令来让GPU开始整活。

    3. 调用Draw Call

    CPU->“Draw Call"->GPU,意思就是CPU给GPU发送Draw Call命令,它仅指向一个图元列表,当给定后,GPU会根据渲染状态和顶点数据,进行计算,最后输出屏幕上显示的像素点。

    而计算过程,则是GPU的流水线。

    GPU流水线

    GPU主要负责后面两个阶段,也就是几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage)。

    GPU接受之前CPU在应用阶段输出的顶点数据,通过几何阶段、光栅化阶段,最后输出屏幕图像。

    上图中:

    绿色实线->必须由开发者编程实现,完全可编程

    绿色虚线->可选,完全可编程

    黄色->可以配置,但不能编程

    蓝色->GPU固定,开发者没有控制权

    1. 顶点着色器 (Vertex Shader)

    顶点着色器的主要工作内容:坐标变换和逐顶点光照。

    • 坐标变换: 顶点从模型空间转到齐次裁剪空间,再转为NDC(Normalized Device Coordinates),也就是归一化设备坐标
    • 逐顶点光照: 计算每一个顶点接受光照以后的颜色值。

    2. 裁剪 (Clipping)

    在单位立方体外的部分将受到裁剪,裁剪产生新的顶点。

    3. 屏幕映射 (Screen Mapping)

    把每个图元的xy坐标转换到屏幕坐标系(Screen Coordinates)。

    而屏幕坐标系和z坐标构成了窗口坐标系(Window Coordinates)。

    这些值将会被一起传送到光栅化阶段。

    4. 三角形设置


    恰饭去了...待续...

  • 相关阅读:
    关于浏览器类型和版本号的思考
    safari浏览器cookie问题
    整理轻量级的前端分离规范
    【jquery插件】-网页下雪效果
    剑指offer——面试题15.2:判断两个整数m和n的二进制中相差多少位
    剑指offer——面试题15.1:判断一个数是否为2的整数次方
    剑指offer——面试题15:二进制中 1的个数
    剑指offer——面试题14:剪绳子
    剑指offer——面试题11:旋转数组的最小数字
    剑指offer——面试题11:快速排序
  • 原文地址:https://www.cnblogs.com/lazy-v/p/12594616.html
Copyright © 2011-2022 走看看