ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

渲染流水线总览

2022-09-15 00:00:48  阅读:276  来源: 互联网

标签:__ 颜色 渲染 m128 阶段 顶点 流水线 总览 着色器


1.Color Basics

  • 计算机以红绿蓝三色光的强度表示颜色,alpha分量则是表示颜色的不透明度,如此以4D分量(r,g,b,a)表示颜色,每个分量的范围都在0~1,0表示没有强度,1表示最高强度

  • 颜色通常可以表示成32位整数和128位实数,32位颜色常用于存储,128位则用于计算。把32位颜色的各个分量分别除以255即可转为范围为[0,1]的128位颜色,即为归一化。因为在计算机领域,由于计算机只能存储有限的小数位数,实数经常用浮点数来表示

    typedef __m128 XMVECTOR;
    //__m128为128位.union特点:共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。
    //__declspec(align(16))是设定内存对齐方式
    typedef union __declspec(intrin_type) __declspec(align(16)) __m128 {
         float               m128_f32[4];
         unsigned __int64    m128_u64[2];
         __int8              m128_i8[16];
         __int16             m128_i16[8];
         __int32             m128_i32[4];
         __int64             m128_i64[2];
         unsigned __int8     m128_u8[16];
         unsigned __int16    m128_u16[8];
         unsigned __int32    m128_u32[4];
     } __m128;
    
  • 我们常常用XMVECTOR借助SIMD技术进行高精度的颜色值计算,而颜色的存储则以XMCOLOR存储

  • 获取 XMCOLOR类型实例并返回其对应XMVECTOR类型值:

    XMVECTOR XM_CALLCONV PackedVector::XMLoadColor(
    	const XMCOLOR* pSource);
        
    //XMVECTOR转换为XMCOLOR
    void XM_CALLCONV PackedVector::XMStorColor(
    	XMCOLOR* pDestination,
    	FXMVECTOR V);
    
  • 点积叉积的运算法则并不适用于颜色向量,而其拥有自己的分量式乘法:
    $$
    (c_r,c_g,c_b) \bigotimes (k_r,k_g,k_b) = (c_rk_r,c_gk_g,c_bk_b)
    $$

2.Graphics Pipeline

  • 渲染管线主要是决定在给定虚拟相机、三维物体、光源、照明模式,以及纹理等诸多条件的情况下,生成或绘制一幅二维图像的过程

  • 而渲染管线主要可分为三个阶段:

    • 应用程序阶段
    • 几何阶段
    • 光栅化阶段
  • 每个阶段本身也可能是一条管线。还可以对有的阶段进行全部或者部分的并行化处理

  • 最慢的管线阶段决定绘制速度,即图像的更新速度,用FPS来表示

  • image-20220914180954140

    • 输入装配器阶段:从显存读取几何数据,再将此装配为几何图元
    • 顶点着色器阶段:顶点需要执行的变换、位移贴图、光照处理
    • 外壳着色器阶段:将模型的单个表面分解为许多三角形
    • 曲面细分阶段:增加和移动物体表面的三角形
    • 域着色器阶段:基于外壳着色器 (HS) 阶段细化器 (TS) 阶段中的输入,输出修补程序中细分点的顶点位置
    • 几何着色器阶段:处理整个基元
    • 流输出阶段:将管道中的基元数据沿着到光栅器的路线流到内存中
    • 光栅化阶段:为投影至屏幕上的3D三角形计算出对应的像素颜色
    • 像素着色器阶段:将常变量、纹理数据、内插的每顶点值和其他数据组合起来以生成每像素输出
    • 输出合并阶段:使用管道状态的组合、像素着色器生成的像素数据、呈现目标的内容以及深度/模具缓冲区的内容的组合生成最终呈现的像素颜色
  • image-20220914181639826

3.Transformation

  • 三角形是最基础的多边形,任何物体都可以用三角形网格表示。三个顶点确定一个三角形,而顶点除了定义每个顶点的坐标位置以外,还含有颜色等其他信息

  • 通过顶点缓冲区将顶点与渲染管线相绑定

  • 图元(geometric primitive):如线条和三角形这种构成多边形的基本元素

  • 图元拓扑:告知Direct3D如何用顶点数据表示几何图元.。用enum D3D_PRIMITIVE_TOPOLOGY表示

  • 具有邻接数据的图元拓扑:每个n边形都有n个与之相邻的邻接n边形

  • MVP矩阵:

    • Model transformation (placing objects)

      世界坐标系下有很多Object,用一个变化矩阵把它们的顶点坐标从Local坐标系(相对)转换到世界Global坐标系(绝对)

    • View transformation (placing camera)

      我们看到的画面由摄像机捕捉,摄像机参数决定了我们在屏幕上看到的东西,这一步可以将世界坐标系转换到摄像机坐标系

    • Projection transformation

      摄像机坐标系,视锥体,再规整一下

  • 世界空间的y轴方向与虚拟摄像机“向上”向量的方向相同

  • 只要给定摄像机的位置、观察目标点和世界空间中“向上”方向的向量,就能构建对应的局部坐标系并推导出观察矩阵

  • Viewing (观测) transformation

    • View (视图) / Camera transformation
    • Projection (投影) transformation
      • Orthographic projection (cuboid to “canonical” cube [-1, 1]^3)
      • Perspective projection (frustum to “canonical” cube)
        • First “squish” the frustum into a cuboid
        • Then Do orthographic projection
  • 正射投影矩阵定义了一个类似立方体的平截头箱,它定义了一个裁剪空间,在这空间之外的顶点都会被裁剪掉,投影完没有透视效果。创建一个正射投影矩阵需要指定可见平截头体的宽、高和长度

  • 透视投影:把透视投影变成正射投影,再用之前正射投影的办法得到标准化设备坐标

  • 裁剪:丢弃完全位于视锥体之外的集合体。方法:找到平面与多边形的所有交点,并将这些顶点按顺序组织成新的裁剪多边形

标签:__,颜色,渲染,m128,阶段,顶点,流水线,总览,着色器
来源: https://www.cnblogs.com/chenglixue/p/16695078.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有