「UnityShader入门精要」第二章 渲染流水线

2.3 GPU流水线

2.3.2 顶点着色器

  输入来自于CPU,处理顶点数据。输入的每个顶点都会调用一次顶点着色器,所以每次都是对单个顶点进行运算。

  主要任务:坐标变换、逐顶点光照。

  坐标变换:修改顶点的位置,例如模拟水面波纹效果、果冻效果等。

必须完成的工作,把顶点坐标从模型空间转换到齐次裁剪空间。

常见的如:o.pos = mul(UNITY_MVP, v.position);

2.3.3 裁剪

  摄像机视野有限,视野外的物体不需要被处理,可以直接裁剪掉。

2.3.4 屏幕映射

  将单位立方体内的三维坐标转换到二维屏幕坐标,与分辨率有较大关系。

2.3.5 三角形设置

   将网格点连成线,计算得到三角形网格。

2.3.6 三角形遍历

  计算每个像素是否被三角网格覆盖,覆盖则生成片元。

2.3.7 片元着色器

  输入:上一个阶段(顶点着色器)对顶点信息插值的结果

  输出:一个或多个颜色值

  渲染技术:纹理采样

2.3.8 逐片元操作

  1.决定每个片元的可见性,例如,深度测试、模版测试

  2.将通过测试的片元颜色值与缓冲区内的颜色进行混合

  3.混合,不透明物体直接覆盖原缓冲区的像素值,透明物体与原缓冲区像素值进行混合。

2.4 一些容易困惑的地方

2.4.3 什么是Draw Call

  CPU调用图像编程接口命令GPU进行渲染的操作,Draw Call多了导致CPU大量执行重复的命令而过载,掉帧。

时间: 2024-10-15 17:48:29

「UnityShader入门精要」第二章 渲染流水线的相关文章

UnityShader入门精要-第二章 渲染流水线笔记

渲染流程包括:应用阶段.几何阶段和光栅化阶段. 1.应用阶段 应用阶段是由我们的应用主导的,通常由CPU负责. 在这一阶段开发者有三个主要任务 首先 需要准备好场景的数据. 其次  为了提高渲染的性能,我们往往要做一个粗粒度剔除,把那些看不见的物体剔除出去,这样就不需要交给几何阶段去处理. 最后需要设置好每个模型的渲染状态.这些渲染状态包括但不仅限于它使用的材质(漫反射的颜色.高光反射的颜色).使用的纹理.使用的shader等.这一阶段最重要的是输出渲染所需要的几何信息,即渲染图元.渲染图元可以

Jenkins入门系列之——02第二章 Jenkins安装与配置

2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之--03PDF文档下载 第二章 Jenkins安装与配置 2 Jenkins安装 在最简单的情况下,Jenkins 只需要两个步骤: 1.下载最新的版本(一个 WAR 文件).Jenkins官方网址: http://Jenkins-ci.org/ 2.运行 java -jar jenkins.war 注意:

UnityShader入门精要-3.3 UnityShader的结构

一个UnityShader的基础结构如下所示: Shader "ShaderName"{ Properties{ //属性 } SubShader{ //显卡A使用的子着色器 } SubShader{ //显卡B使用的子着色器 } Fallback "VertexLit" } Unity在背后根据使用的平台来吧这些结构编译成真正的代码和Shader文件,开发者只需要和UnityShader打交道即可.(Unity编写Shader的语言是ShaderLab) 属性:在

UnityShader入门精要-3.5 UnityShader的形式

UnityShader可以做的事情非常多(例如设置渲染状态等),但是其最重要的任务还是指定各种着色器所需的代码.这些着色器代码可以写在SubShader语义块中(表面着色器的做法),也可以写在Pass语义块中(定点/片元着色器和固定函数着色器的做法). 在Unity中,我们可以使用下面3中形式来编写UnityShader.而不管使用哪种形式,真正意义上的Shader代码都需要包含在ShaderLab语义块中,如下所示: Shader "MyShader"{ Properties{ //

ORACLE PL/SQL 实例精解之第二章 通用编程语言基础

通用编程语言基础 2.1PL/SQL编程基础 1. 字符类型:支持四中类型字符:字母,数字,符号和空格,组合一个或多个字符就会创建一个词汇单元 2. 词汇单元 a.标识符必须以字符开头 b.保留字是pl/sql专用词 c. 定界符只对pl/sql有特殊含义的字符(算数操作和引号) d.注解单行(--)多行(/**/) 2.1.1 利用语言组件 字符类和词汇单元相当于字母和拼写单词 2.1.2 利用PL/SQL变量 a v_a 和V_A是相同的变量名,PL/SQL不区分大小写 b. 可以使用coa

《Python编程从入门到实践》第二章_变量和简单数据类型

什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Python! 这里的message就是变量.在程序中可随时修改变量的值,而python将始终记录变量的最新值. 变量命令的规则有哪些呢? 变量只能包含字母数字下划线. 变量名不能包含空格,但可以使用下划线来分割其中的单词 不要将python关键字和函数名作为变量名 变量名应既简单又具有描述性 慎用小写字符l和大写字

MyBatis从入门到精通:第二章数据的创建与插入文件

数据库表的创建: create table sys_user ( id bigint not null auto_increment, user_name varchar(50), user_password varchar(50), user_email varchar(50), user_info text, head_img blob, create_time datetime, primary key(id) ); create table sys_role ( id bigint no

《Python编程:从入门到实践》第二章 变量和简单数据类型 习题答案

#2.1 print("Hello world!"); #2.2 message="Hello,Python!"; print(message); #2.3 name="tian jiale"; print(name+",would you like to learn some Python today?"); #2.4 #小写 print(name.lower()+",would you like to learn

第一章 渲染流水线

1 综述 好吧,既然是从最基础开始说起,那我们就有必要了解什么是Shader,即着色器.与之关系非常紧密的就是渲染流水线.可以说如果不了解渲染流水线的工作流程,就无法说自己真正的了解Shader. 1.1 什么是流水线 要想学会怎么使用Shader,我们首先要了解Shader是怎么工作的.实际上,Shader仅仅是渲染流水线的一个环节,想要让我们的Shader发挥出它的作用,我们就需要知道它在流水中扮演了怎样的角色. 理想情况下,如果把一个非流水线系统分成n个流水线阶段,并且每个阶段耗费时间相同