渲染流程概述

news2025/1/30 21:34:02

渲染流程包括 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.coloradmin.cn/o/2286608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

libOnvif通过组播不能发现相机

使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…

项目集成GateWay

文章目录 1.环境搭建1.创建sunrays-common-cloud-gateway-starter模块2.目录结构3.自动配置1.GateWayAutoConfiguration.java2.spring.factories 3.pom.xml4.注意:GateWay不能跟Web一起引入! 1.环境搭建 1.创建sunrays-common-cloud-gateway-starter模块…

2025年01月28日Github流行趋势

项目名称:maybe 项目地址url:https://github.com/maybe-finance/maybe项目语言:Ruby历史star数:37540今日star数:1004项目维护者:zachgoll, apps/dependabot, tmyracle, Shpigford, crnsh项目简介&#xff…

使用Ollama本地部署DeepSeek R1

前言 DeepSeek是一款开源的智能搜索引擎,能够通过深度学习技术提高搜索的智能化水平。如果你正在寻找一种方式来将DeepSeek部署在本地环境中,Ollama是一个非常方便的工具,它允许你在本地快速部署并管理各种基于AI的模型。 在本篇博客中&…

单片机基础模块学习——超声波传感器

一、超声波原理 左边发射超声波信号,右边接收超声波信号 左边的芯片用来处理超声波发射信号,中间的芯片用来处理接收的超声波信号 二、超声波原理图 T——transmit 发送R——Recieve 接收 U18芯片对输入的N_A1信号进行放大,然后输入给超声…

使用 OpenResty 构建高效的动态图片水印代理服务20250127

使用 OpenResty 构建高效的动态图片水印代理服务 在当今数字化的时代,图片在各种业务场景中广泛应用。为了保护版权、统一品牌形象,动态图片水印功能显得尤为重要。然而,直接在后端服务中集成水印功能,往往会带来代码复杂度增加、…

Elastic Agent 对 Kafka 的新输出:数据收集和流式传输的无限可能性

作者:来 Elastic Valerio Arvizzigno, Geetha Anne 及 Jeremy Hogan 介绍 Elastic Agent 的新功能:原生输出到 Kafka。借助这一最新功能,Elastic 用户现在可以轻松地将数据路由到 Kafka 集群,从而实现数据流和处理中无与伦比的可扩…

Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解

上一讲,我们讲解了 Loadgen 的极简部署方式、配置文件、快速使用从 0 到 1 方式。 本讲,我们主要解读一下 Loadgen 的丰富的命令行及参数含义。 有同学可能会说,上面不是介绍很清楚了吗?但,咱们还是有必要详细中文解读…

书生大模型实战营3

文章目录 L0——入门岛git基础Git 是什么?Git 中的一些基本概念工作区、暂存区和 Git 仓库区文件状态分支主要功能 Git 平台介绍GitHubGitLabGitee Git 下载配置验证下载 Git配置 Git验证 Git配置 Git常用操作Git简易入门四部曲Git其他指令 闯关任务任务1: 破冰活动…

【玩转全栈】----靓号管理系统实现

先赞后看,养成习惯。。。 目录 数据库设置 基本功能 路由器 靓号显示 靓号添加 靓号编辑 视图函数 额外功能 搜索功能 分页 一般逻辑 动态页码 上下页 首尾页 数据库设置 新建一个数据库(或者就用之前部门、用户管理的也行),用Dja…

【Attention】KV Cache

1 什么是KV Cache? 定义:KV Cache 即 Key-Value Cache,是用于加速 Transformer 模型推理长序列过程的一种技术。 核心原理:在 Transformer 的自注意力机制中,将历史输入 token 中的 Key 和 Value 缓存下来&#xff0c…

【Proteus仿真】【51单片机】多功能计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、加减乘除,开方运算 4、带符号运算 5、最大 999*999 二、使用步骤 基于51单片机多功能计算器 包含:程序&…

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里, 伟大的祖国风调雨顺、国泰民安、每个人齐心协力,共同经历这百年未有之大变局时代(国际政治、AI技术……) 祝福亲友同事孩子们平安健康(安全、安全、安全)、巳巳如意! 背景需…

leetcode——二叉树的最大深度(java)

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1,null,2] 输…

Java创建项目准备工作

新建项目 新建空项目 每一个空项目创建好后都要检查jdk版本 检查SDK和语言级别——Apply——OK 检查当前项目的Maven路径,如果已经配置好全局,就是正确路径不用管 修改项目字符集编码,将所有编码都调整为UTF-8 创建Spingboot工程 创建Spring…

汽车免拆诊断案例 | 2007 款日产天籁车起步加速时偶尔抖动

故障现象  一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机…

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…

单片机基础模块学习——PCF8591芯片

一、A/D、D/A模块 A——Analog 模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital 数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号) 下面是模拟信号和连续信号的区别 为什么需要进行模拟信号和数字信号之…

Vue5---

目录 一、学习目标 1.自定义指令 2.插槽 3.综合案例:商品列表 4.路由入门 二、自定义指令 1.指令介绍 2.自定义指令 3.自定义指令的语法 三、自定义指令-指令的值 1.需求 2.语法 3.代码示例 五、插槽-默认插槽 1.作用 2.需求 4.使用插槽的基本语法…

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径, 旨在将强化学习(RL)和代码即策略相结合, 以解决大语言模型&#xff08…