Unity的渲染流程
Unity中坐标空间的转换:
Unity的渲染流程:
渲染到设备屏幕的每一帧画面都要经历如下几个阶段:
应用程序阶段(CPU):将材质和模型数据发送给GPU
几何阶段(GPU):进行顶点变换计算
光栅化(GPU):将三角形转化为片元,并对片元着色。
Cpu:准备需要渲染的对象。
- 把可视的对象,进行遮挡剔除和视椎体剔除,并将渲染对象排序。
- 设置渲染对象的渲染状态,包括材质,模型,着色器
- 发送drawcall
会为每一个渲染兑现的每一个材质生成一个渲染批次batch,(合批就是将多个材质合成一个批次)
setPass Call是在渲染状态发生改变时才会被调用,和drawcall相伴产生。在某些特定情况也不一定对等,如一个batch中用到了多个pass,不同的pass,cpu将发送新的setpass call和drawcall。而在静态批处理中,由于顶点限制而不能再同一批次处理而被分割的紧邻的多个批次,因为使用的是相同的渲染设置,所以只产生一个set pass call
Setpass call 是告诉gpu接下来要用到哪些资源,需抓经准备。执行时,会向显存中传入大量的资源信息,包括纹理。
Drawcall 是要求gpu根据顶点数据进行绘制
Fbx(里面包含了uv,顶点位置,法线,切线等信息)加载到内存中,通过mesh render 渲染出来
Skindned mesh render : 带蒙皮的骨骼,把物体的顶点,法线,切线等信息传个gpu渲染出来。
Mesh filter:将模型信息传递给gpu
Mesh render :将顶点等渲染信息传递给GPU
Skinned mesh render 和 mesh render 的区别就是,前者用于有蒙皮动画的mesh, 后者用于静态的mesh。
Gpu:
渲染管线: 顶点着色器、光栅化、片段着色器(alpha测试、模板测试、深度测试、blend、gbuffer、brondbuffer,framebuffer)、显示器
顶点着色器:1.计算顶点的颜色;2. 将物体坐标系转换到相机坐标系;
每个顶点执行一次顶点着色器,在此阶段可以进行透视投影,顶点光照,纹理计算,蒙皮。也可以修改顶点位置生成程序式动画,例如模拟风吹草动,碧波荡漾。
光栅化:将顶点转换成像素,一一对应
片段着色器:将顶点围起来的像素着色(运行次数远大于顶点着色器,尽量将运算放在顶点着色器中。例如:quad中四个顶点坐标为((0,0)(0,100)(100,100)(100,0))顶点着色器执行4次,片段着色器执行10000次)
片段着色器中处理的事情:逐片元操作
- 纹理采样 即给Quad赋予贴图或材质球,把纹理像素付给原来的像素,把原来的像素覆盖掉了
- 像素跟灯光进行计算,
- alpha测试:挑选合格的alpha像素显示。(RGBA)
- 模版测试: 像素还可以携带 模板信息 达到条件的模板值会显示出来
- 深度测试:符合条件的(一般是像素距离相机的距离)像素 就通过,不然就丢弃
- 以上三个测试 决定像素能否被显示出来,挑选合格的像素
- Blend:将当前 要 渲染的像素 和 已经渲染出来的像素混合运算
- GBuffer :一个像素 存的(RGBA 模板值 深度值 )等信息,只要是审核通过了以后,Gbuffer做的中转把这些信息传给FrontBuffer(Buffer其实是缓存区)Float[720*1280*4]数组存的信息比较多
- Front Buffer:由Gbuffer往Front Buffer写完以后,Front Buffer推向显示器显示过程中,Front Buffer,此时变成了framebuffer,由Gbuffer往Front Buffer写完以后,FrameBuffer会交换到后面去变成Front Buffer(Float[720*1280])缓存区
- FrameBuffer:Float[720*1280]缓存区
- 其实 Front Buffer和FrameBuffer在交替显示,一帧帧的看着好像在动一样,所以两个是相对的
Unity的渲染流程相关推荐
- Unity渲染流程概述
本篇的任务是回答:在Untiy的渲染流程中CPU和GPU分别做了什么. 渲染到设备屏幕显示的每一帧的画面,都经历几个阶段的加工过程: 应用程序阶段(CPU):识别出潜在可视的网格实例,并把他们及其材质 ...
- Unity渲染流程(渲染管线)(渲染流水线)
Unity渲染流程(渲染管线)(渲染流水线) 一 渲染的任务 二 三个概念阶段 三 应用阶段 1 准备好需要被渲染的场景数据,做粗粒度剔除 2 设置每个对象的渲染状态. 3 发送DrawCall. 四 ...
- 【逆向】UE4 渲染流程分析
UE4作为当今商业引擎界的大佬,渲染和图形质量一直是首屈一指的水准,但是相对于unity来说UE4基本上是一套完整方案提供,不通过源码修改对渲染进行定制的可能性比较小,而且同时UE4这方面的文档很少, ...
- 不同几种剔除(Culling)在渲染流程中的使用总结
前提 最近在阅读<Real-Time Rendering>Third Edition时,发现对于渲染管线中不同剔除部分的具体含义和生效阶段不甚明了,遂做了一点研究,在这里做一个记录. 涉及 ...
- 泛泛而谈的菜鸟学习记录(一)—— GPU渲染流程
GPU渲染流程大概整理 主要是unity方面的 1.mesh render把CPU处理好的顶点信息传给GPU处理. 2.shader中自带的顶点着色器可以对这些顶点的法线.纹理坐标和位置等信息进行处理 ...
- Unity管线渲染中的三大测试之模板测试
我感觉将近一个月没有写技术文档了,最近了可能能在研究一些比较抽象计算机图形学,知识点太多,也过于零碎.我个人认为管线渲染流程当中三大测试是控制效果的一个关卡.这篇文章今天本来写了个开头,回到家看了题目 ...
- Unity引擎渲染模块知识Tree
渲染效果是游戏表现力的核心卖点之一.尤其近几年随着引擎技术的革命翻新,硬件技术的突飞猛进,以及玩家愈发挑剔的要求,游戏的表现力正在进入到崭新的层面.有哪些主流的Shader.自阴影.后处理技术?如何加 ...
- 庄懂老师TA学习笔记 - 渲染流程
视频链接 庄懂的技术美术入门课(美术向)-直播录屏-第1课_哔哩哔哩_bilibili 首先我们用一张图来看一下基础的渲染流程 第一步:读取模型的结构 大家都知道,在建模软件中,我们是通过创建一个一个 ...
- react16 渲染流程
前言 react升级到16之后,架构发生了比较大的变化,现在不看,以后怕是看不懂了,react源码看起来也很麻烦,也有很多不理解的地方. 大体看了一下渲染过程. react16架构的变化 react ...
最新文章
- 2021-07-29 labelme注释、分类和Json文件转化(转化成彩图mask)
- Python 存储字符串时是如何节省空间的?
- 学习go语言国内最全资料链接
- 深入浅出BI——搭建环境
- html调用接口_Spring 自调用事务失效,你是怎么解决的?
- 【英语学习】【WOTD】borne 释义/词源/示例
- SAP License:关联方跨公司交易的自动清帐与实现
- php求平均值的函数_最全计算机二级函数关键知识点汇总整理!
- python和c语言的区别-python和c语言的区别是什么
- 计算机数据网络说课稿,2017年教师考试备考:中学计算机说课稿《工作表中的数据管理》...
- 如何征服“支付”这个磨人的小妖精
- 地震数据的获取与处理
- win10在哪里找到计算机,win10计算器在哪里?win10怎么调出计算器?
- 鹏业安装算量软件合并计算项目操作
- 最难忘的一节计算机课,最难忘的一节课作文(3篇)
- 分享一个Github逆天级别的彩蛋
- 【云原生】SpringCloud系列之服务调用OpenFeign(日志配置、异常解码器、更改负载均衡策略、替换默认通信组件等)
- Simulink 3D Animation的使用(V_realm builder2.0)
- Pairwise(FCC算法)
- oracle 生僻字 转码,Oracle 生僻字乱码解决方案
热门文章
- 双非本科字节跳动Android面试题分享,吐血整理
- 《Android状态栏微技巧,带你真正理解沉浸式模式(转载)》
- JS 常见面试题 - 事件循环机制
- Xftp:No matching outgoing encryption algorithm found问题
- mysql视图怎么加字段_mysql视图添加字段
- Android开发-WebView/WebViewClient/WebChromeClient简介 API详述 【一】
- intel realsense 深度视野范围与模组硬件说明
- SQL Server 存储过程 迪杰斯特拉算法 大规模 表格存储 不是矩阵
- 信号分选c语言,一种信号精确分选方法与流程
- JQuery获取元素的方法总结