【UnityShader入门精要】【总结记录】【第二章-2】

news2024/11/25 0:51:54

在这里插入图片描述

☀️博客主页:CSDN博客主页
💨本文由 萌萌的小木屋 原创,首发于 CSDN💢
🔥学习专栏推荐:面试汇总
❗️游戏框架专栏推荐:游戏实用框架专栏
⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------

在这里插入图片描述Unity 小科普

老规矩,先介绍一下Unity的科普小知识:​​​

Unity 是行业领先的实时3D开发平台。
包括游戏开发,电影,AR/VR,虚拟现实在内的所有创作者,可以将梦想照进现实。
Unity提供了一套完整完善的软件解决方案,可用于创作,运营和模拟任何2D和3D的内容,进本全平台支持。
实际上Unity就是一个游戏引擎,大名鼎鼎的原神就是用它制作的。


我是小狼君

    • @[TOC](我是小狼君)
  • 顶点着色器
    • 最基础的任务
  • 裁剪
    • 一个图元和摄像机视野的关系由3种
  • 屏幕映射
  • 三角形设置
  • 三角形遍历
  • 片元着色器
  • 逐片元操作
  • 模板测试
  • 深度测试

顶点着色器

  • 输入进来的每个顶点都会调用一次顶点着色器,不可以创建或者销毁任何顶点,而且无法获得顶点与顶点之间的关系
  • 完成坐标变换,逐顶点光照,输出后续阶段所需要的数据

最基础的任务

  • 把顶点坐标从模型空间转换到齐次裁剪空间

裁剪

一个图元和摄像机视野的关系由3种

  • 完全在视野内,部分在视野内,完全在视野外

屏幕映射

  • 屏幕映射不会对输入的z坐标做任何操作
  • 屏幕坐标系和z坐标一起构成一个坐标系,叫做窗口坐标系,一起传递到光栅化阶段
  • OpenGL把屏幕左下角当成最小窗口坐标值,DirectX则是左上角最小值

三角形设置

  • 上个阶段得到三角形每条边的两个端点,需要得到三角网格对像素的覆盖情况,必须计算每条边上的像素坐标,该过程叫做三角形设置

三角形遍历

  • 检查每个像素是否被三角网格覆盖,如果有,就生成一个片元,也叫扫描变换
  • 这一步输出是一个片元序列
  • 一个片元不是真正意义上得像素,包含了很多状态得集合,包括但不限于屏幕坐标,深度信息,伐先,纹理坐标

片元着色器

  • 可编程着色器阶段
  • 前面得光栅化阶段实际上并不会影响屏幕上每个像素得颜色值,而是会产生一系列得数据信息,用来表述一个三角网格是怎样覆盖每个像素得,每个片元就负责存储这样得一系列数据。
  • 输入是上个阶段对顶点信息插值得到得结果
  • 输出是一个或者多个颜色值
  • 可以完成纹理采样
  • 局限在于,仅可影响单个片元,当执行片元着色器时,它不可以将自己得任何结果直接发送给邻居,但是片元着色器可以访问到导数信息

逐片元操作

  • DirectX中这一阶段被称为输出合并阶段
  • 决定每个片元得可见性,涉及很多测试工作,如深度测试,模板测试
  • 如果一个一个片元通过了所有的测试,就需要把这个片元得颜色值和已经存储在颜色缓冲区中得颜色进行合并,或者混合
  • 该阶段高度可配置性在这里插入图片描述

模板测试

  • GPU首先读取(使用读取掩码)模板缓冲区中改片元位置得模板值,然后将该值和读取得模板值进行比较,比较函数可以由开发者指定,不论片元有没有通过测试,我们都可以根据模板测试和下面得深度测试结果来修改该模板缓冲区

深度测试

  • 通过模板测试之后进行深度测试
  • 可高度配置
  • 比较该片元深度值和深度缓冲区中得深度值,该函数也是由开发者设置得
    和模板测试不同得是,如果该片元没有通过测试,就没有权力修改缓冲区中的值,如果通过了,开发者可以指定是否要用这个片元的深度值覆盖掉原来的
  • 对于不透明物体,开发者可以关闭混合操作,这样片元着色器计算得到的颜色值就会直接覆盖颜色缓冲区中的像素值,但对于半透明物体,我们就需要使用混合操作来让这个物体看起来是透明的

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599358.html

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

相关文章

1901-2021年1km分辨率逐月最高气温栅格数据(全国/分省)

气温数据是我们最常用的气象指标之一,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的1901-2021年1km分辨率逐月平均气温栅格数据(可查看之前的文章获悉详情)! 本次我们分享的同样是来自国家青藏高原科学数据中心的高…

【探索】在 JavaScript 中使用 C 程序

JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑。当需要传输通信时,我们大多选择 JSON 或 XML 格式。 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进制格式。 去年的今天,在折腾…

Redis中的整数集合(IntSet)

Redis节省内存的两个优秀设计思想:一个是使用连续的内存空间,避免内存碎片开销;二个是针对不同长度的数据,采用不同大小的元数据,以避免使用统一大小的元数据,造成内存空间的浪费。IntSet便具备以上两个设计…

160套小程序源码

源码列表如下: AppleMusic (知乎日报) 微信小程序 d artand 今日更新求职招聘类 医药网 口碑外卖点餐 城市天气 外卖小程序 定位天气 家居在线 微信小程序-大好商城,wechat-weapp 微信小程序的掘金信息流 微信跳一跳小游戏源码 微票源码-demo 急救应急处…

MyBatis- plus

实战总结 1.批量插入性能 1.批量插入性能差的原因 使用saveBatch()方法时, MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入&a…

2023企业真实性能测试常见面试题分析

简述性能测试流程? 1.分析性能需求。挑选用户使用最频繁的场景来测试,比如:登陆,搜索,下单等等。确定性能指标,比如:事务通过率为100%,TOP99%是5秒,最大并发用户为1000人…

Three.js——八、坐标、更改模型原点、移除、显示隐藏模型对象

世界坐标.getWorldPosition() 基础坐标也就是模型的.position属性 世界坐标:就是模型资深.position和所有父对象.position累加的坐标 用.getWorldPosition()属性需要用三维向量表示摸个坐标后方可读取 例如: const geometry new THREE.BoxGeometry(10…

【Qt】createEditor进不去【2023.05.07】

摘要 妈卖批,因为这个函数进不去,emo了一下午。实际上就是因为函数声明和定义的地方漏了个const关键字。 1.正确✔: QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) cons…

Rocketmq面试(三)消息积压,增加消费者有用么?

目录 一.广播模式和集群模式的不同 二.延迟拉取 三.消费者延迟拉取消息的原因 四.增加消费者后是如何分配MessageQueue(引出负载策略) 一.广播模式和集群模式的不同 首先我们要强调一下。在广播模式(每条消息需要被消费者组中的每个消费者处理,也就是…

QT/PyQT/PySide 通过富文本形式实现关键词高亮

因为本质上都是QT,所以我标题带了QT,这个思路是没问题的,就是用C得换个语言。 最开始想根据之前一篇博客的思路进行高亮 PyQT/PySide 文本浏览器跳转到指定行,并高亮指定行_qt 指定行高亮_Toblerone_Wind的博客-CSDN博客https:/…

Linux 设备树文件手动编译的 Makefile

前言 通过了解 Linux 设备树的编译方法,手动写了一个可以把 dts、dtsi、设备树依赖头文件等编译为设备树 dtb 的 Makefile Makefile 如下 mkfile_path : $(abspath $(lastword $(MAKEFILE_LIST))) cur_makefile_path : $(dir $(mkfile_path))DIR_ROOT : $(cur_ma…

十三届蓝桥杯国赛2022

会得噶 A 2022B 钟表C 卡牌D 最大数字dfsF 费用报销&#xff08;不是根据收据个数&#xff0c;而是根据日期dp)H 机房&#xff08;最近公共祖先lca&#xff09;I 齿轮J 搬砖&#xff08;贪心01背包&#xff09; A 2022 #include <bits/stdc.h> using namespace std; int …

Openlayers如何设置米作为作为圆形的真实半径,解决圆形半径跟随地图缩放同时缩放的失真问题

专栏目录: OpenLayers入门教程汇总目录 前言 相信找到这篇文章的同学肯定遇到了Openlayers直接设置圆形半径( radius)单位不准确的问题,而且失真严重。这是因为默认圆形半径设置的是浏览器像素大小,而不是真实地理信息中的半径长度。那么怎么进行转换成我们现实中的“米…

python+vue校园快递代取系统的设计与实现3i0v9

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 本系统名为“基于vue快递代取系统”&#xff0c;系统主要适用于毕业设计&#xff0c;不…

【数据分享】1929-2022年全球站点的逐日最高气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

高通滤波学习(opencv)

以下代码参考视频解析 这段代码使用了二维FFT变换对输入图像进行频域处理&#xff0c;并设计了一个简单的高通滤波器。 前两行使用了numpy库中的fft2函数对输入图像image进行二维傅里叶变换&#xff08;FFT&#xff09;。接着&#xff0c;fft_shift函数将转化后的频谱数据fft…

什么是DOM和BOM?

一、什么是DOM DOM 全称是 Document Object Model&#xff0c;也就是文档对象模型。提供操作页面元素的方法和属性&#xff0c;是HTML和XML的API&#xff0c;DOM把整个页面规划成由节点层级构成的文档。 DOM 树 DOM树是Web页面的模型&#xff0c;当浏览器加载一个Web页面时&am…

A Framework for Evaluating Gradient Leakage Attacks in Federated Learning

联邦学习中梯度泄漏攻击评估框架 摘要&#xff1a; 针对问题&#xff1a;从客户端向联邦服务器共享本地参数更新也可能容易受到梯度泄漏攻击&#xff0c;并侵犯客户端关于其训练数据的隐私。 提出了一个原则性框架&#xff0c;用于评估和比较不同形式的客户端隐私泄露攻击。…

路径规划算法:基于纵横交叉优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于纵横交叉优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于纵横交叉优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

Eclipse导入项目的配置步骤说明

1.数据库创建并导入 &#xff08;1&#xff09;打开navicat&#xff0c;右击&#xff0c;选择创建数据库&#xff0c;进入新建数据库页面&#xff0c;输入数据库名称。我这里创建的是report数据库。 &#xff08;2&#xff09;右击自己创建的数据库&#xff0c;选择运行sql文件…