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

渲染流程概述

渲染流程包括 CPU应用程序端渲染逻辑 和 GPU渲染管线

一、CPU应用程序端渲染逻辑

  1. 剔除操作
  2. 对物体进行渲染排序
  3. 打包数据
  4. 调用Shader SetPassCall 和 Drawcall

1.剔除操作

  • 视椎体剔除

    (给物体一个包围盒,利用包围盒和摄像机的视椎体进行碰撞检测,在视椎体外的物体被剔除)

       

  • 层级剔除

      (给物体设置层级标识,利用层级剔除物体)

       

  • 遮挡剔除

     (被遮挡的物体将不会显示渲染在屏幕中)

2.排序操作

  • 渲染队列     (先渲染不透明物体再渲染半透明物体)
  • 不透明队列  (从前到后渲染)
  • 半透明队列  (从后往前渲染)

3.打包视椎体内模型的数据

  • 模型信息 (顶点坐标、法线、UV、顶点颜色、索引列表等)
  • 变换矩阵
  • 灯光、材质参数

      ​​​

  比如一个正方体模型的信息:

      

4.提交数据到GPU端

  • SetPass Call   

      (设置渲染状态,告诉GPU端需要使用哪一个Shader/Pass、混合模式以及背面剔除的设置)

  • Draw Call     

      (CPU调用图像应用编程接口,来命令GPU进行渲染的操作)

引用自DrawCall、Batches、SetPassCalls的区别和联系_setpasscall draw call-CSDN博客

二、GPU渲染

1.顶点Shader阶段

  •     将模型空间顶点转换到裁剪空间下

        (顶点Shader并不会产生2D图像,仅使得场景中的3D图像产生变形的效果)

转换步骤:

2.图元装配以及光栅化阶段

  • 裁剪操作(针对裁剪空间下内外模型的三角面而言,不会直接丢弃整个物体)
  • 将裁剪空间下的模型的顶点坐标转换为标准化设备坐标 (-1,1)
  • 模型的背面剔除
  • 将标准化的设备坐标中的(x,y)转换为屏幕坐标(x,y)

     (以上为对顶点的操作)

  • 图元装配阶段(将各个顶点连接形成封闭的三角图元)
  • 光栅化

3.片元Shader(上色)

  (1)纹理技术
  1. 纹理采样
  2. 纹理过滤机制
  3. Mipmap
  4. 纹理寻址模式
  5. 纹理压缩格式

          纹理过滤机制:

                   为了解决小图像映射到大块区域所产生的失真的情况(如下图锯齿效果)

           

         纹理过滤机制的原理

                   根据周围四个纹素点进行插值计算(双线性插值),生成比较柔和的图像效果

           


         Mipmap:(生成多级渐远贴图)

                   为了解决大图像映射到小块区域时引起图像失真的情况

                 (可以将高级别模糊的图像应用到远处或者小块的区域上)

           

 (2)光照计算
     光照组成

           直接光照、间接光照

     光照模型

            基本的光照框架=直接光漫反射+直接光镜面反射+间接光漫反射+间接光镜面反射

4.输出合并阶段

  • 通过片元Shader输出的数据(例如片元颜色、深度值等)
  • 进行相关的测试(Alpha测试、模版测试、深度测试等)

最后总结:


http://www.kler.cn/a/524304.html

相关文章:

  • 算法的时间复杂度
  • AboutDialog组件的功能和用法
  • 编译dpdk19.08.2中example时一系列报错解决
  • Oracle迁移DM数据库
  • 【C++题解】1393. 与7无关的数?
  • STM32 LED呼吸灯
  • 【逻辑学导论第15版】A. 推理
  • Windows 系统下使用 Ollama 离线部署 DeepSeek - R1 模型指南
  • MyBatis 关联映射详解
  • OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境
  • 【实践】基于SakuraLLM的离线日文漫画及视频汉化
  • HarmonyOS:状态管理最佳实践
  • 联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署
  • 中国股市“慢牛”行情的实现路径与展望
  • 如何将 Windows 上的文件传递到 Mac 上
  • Android-音频采集
  • Python 合并 Excel 单元格
  • 望获实时Linux系统:2024回顾与2025展望
  • 代码随想录算法训练营第三十九天-动态规划-198. 打家劫舍
  • 使用kitty terminal遇到的‘xterm-kitty‘: unknown terminal type.
  • 【Convex Optimization Stanford】Lec3 Function
  • 【C++题解】1056. 所有不超过1000的数中含有数字3的自然数
  • 2025年大年初一篇,C#调用GPU并行计算推荐
  • leetcode——二叉树的中序遍历(java)
  • 机器人基础深度学习基础
  • 记忆力训练day08