位置: 编程技术 - 正文

学习shader之前必须知道的东西之计算机图形学(一)渲染...(shader要学多久)

编辑:rootadmin
shader到底是干什么用的?shader的工作原理是什么? 其实当我们对这个问题还很懵懂的时候,就已经开始急不可耐的要四处搜寻有关shader的资料,恨不得立刻上手写一个出来。但看了一些资料甚至看了不少cg的语法之后,我们还是很迷茫,UNITY_MATRIX_MVP到底是个什么矩阵?它和v.vertex相乘出来的又是什么玩意?当这些问题困扰我们很久之后,我们才发现,原来我们是站在浮沙上筑高台,根基都没有打牢当然不可能盖得起高楼大厦了。 该文章来自【狗刨学习网】那根基是什么呢?大牛曰,计算机图形学。 shader中文名叫着色器,顾名思义,它的作用可以先简单理解为给屏幕上的物体画上颜色。而什么东西负责给屏幕上画颜色?当然是GPU,所以我们写shader的目的就是告诉GPU往屏幕哪里画、怎么画。说到这其实大家应该很明白了,如果我们连GPU的工作原理都不知道,何谈指挥它? 说到计算机图形学,包括我在内很多同学都非常害怕它,因为里面包含了各种艰深的理论、变换,大量的公式什么的。其实我们大可不必一开始就吓倒自己,先从基本概念开始,慢慢来,总有一天我们也会成为大牛~! 最后,这篇文章不算是原创,最多算是摘要&#;读后感,很多概念性文字都是我从书里搬过来后再加上自己的理解,算是和大家一起学习,有理解不当之处还请多多指教。 废话不多说,让我们来进入第一章的学习,GPU的渲染管线。 所谓GPU的渲染管线,听起来好像很高深的样子,其实我们可以把它理解为一个流程,就是我们告诉GPU一堆数据,最后得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。 在各种图形学的书中,渲染管线主要分为三个阶段:应用程序阶段、几何阶段、光栅阶段。 1,应用程序阶段。 这个阶段相对比较好理解,就比如我们在Unity里开发了一个游戏,其实很多底层的东西Unity都帮我们实现好了,例如碰撞检测、视锥剪裁等等,这个阶段主要是和CPU、内存打交道,在把该计算的都计算完以后,在这个阶段的末端,这些计算好的数据(顶点坐标、法向量、纹理坐标、纹理)就会通过数据总线传给图形硬件,作为我们进一步处理的源数据。 2,几何阶段。 主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,改阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。简而言之,几何阶段的主要工作就是“变换三维顶点坐标”和“光照计算”。 问题随之而来,为什么要变换顶点坐标?我是这么理解的,比如你有一个三维游戏场景,场景中的每个模型都可以用一个向量来确定它的位置,但如何让计算机根据这些坐标把模型正确的、有层次的画在屏幕上?这就是我们需要变换三维顶点坐标的原因,最终目的就是让GPU可以将这些三维数据绘制到二维屏幕上。 根据顶点坐标变换的先后顺序,主要有如下几个坐标空间:Object space,模型坐标空间;World space,世界坐标空间;Eye space,观察坐标空间;Clip and Project space,屏幕坐标空间。下图就是GPU的整个处理流程,深色区域就是顶点坐标空间的变换流程,大家了解一下即可,我们需要关注的是每个坐标空间的具体含义和坐标空间之间转换的方法。 2.1,从object space到world space object space有两层核心含义,第一,object space中的坐标&#;就是模型文件中的顶点&#;,这些&#;是在建立模型时得到的,例如一个.max文件,里面包含的数据就是object space的坐标。第二,object space的坐标与其他物体没有任何参照关系,这是object space和world space区分的关键。world space坐标的实际意义就有有一个坐标原点,物体跟坐标原点相比较才能知道自己的确切位置。例如在unity中,我们将一个模型导入到场景中以后,它的transform就是世界坐标。2.2,从world space到eye space 所谓eye space,就是以摄像机为原点,由视线方向、视角和远近平面,共同组成的一个梯形体,如下图,称之为视锥(viewing frustum)。近平面,是梯形体较小的矩形面,也是靠近摄像机的平面,远平面就是梯形体较大的矩形,作为投影平面。在这个梯形体的内的数据是可见的,超出的部分会被视点去除,也叫视锥剪裁。 例如在游戏中的漫游功能,屏幕的内容随摄像机的移动而变化,这是因为GPU将物体的顶点坐标从world space转换到了eye space。 2.3,从eye space到project and clip space eye space坐标转换到project and clip space坐标的过程其实就是一个投影、剪裁、映射的过程。因为在不规则的视锥体内剪裁是一件非常困难的事,所以前人们将剪裁安排到一个单位立方体中进行,这个立方体被称为规范立方体(CCV),CVV的近平面(对应视锥体的近平面)的x、y坐标对应屏幕像素坐标(左下角0、0),z代表画面像素深度。所以这个转换过程事实上由三步组成: (1),用透视变换矩阵把顶点从视锥体变换到CVV中; (2),在CVV内进行剪裁; (3),屏幕映射:将经过前两步得到的坐标映射到屏幕坐标系上。 2.4,primitive assembly(图元装配)和triangle setup(三角形处理) 到目前为止我们得到了一堆顶点的数据,这一步就是根据这些顶点的原始连接关系还原出网&#;结构。网&#;由顶点和索引组成,这个阶段就是根据索引将顶点链接到一起,组成线、面单元,然后进行剪裁,如果一个三角形超出屏幕以外,例如两个顶点在屏幕内,一个顶点在屏幕外,这时我们在屏幕上看到的就是一个四边形,然后把这个四边形切成两个小的三角形。 现在我们得到了一堆在屏幕坐标上的三角形面片,这些面片是用于光栅化的。 3,光栅化阶段。 经过上面的步骤之后,我们得到了每个点的屏幕坐标&#;,和我们需要绘制的图元,但此时还有两个问题: (1)屏幕坐标是浮点数,但像素是用整数来表示的,如何确定屏幕坐标&#;所对应的像素? (2)如何根据已确定位置的点,在屏幕上画出线段或者三角形? 对于问题1,绘制的位置只能接近两指定端点间的实际线段位置,例如,一条线段的位置是(., .),转换为像素位置就是(,)。 问题2,涉及到具体的画线和填充算法,有兴趣的话可以研究。 这个过程结束后,顶点和图元已经对应到像素,之后的流程就是如何处理像素,即给像素赋予颜色&#;。 给像素赋予颜色的阶段称为Pixel Operation,是在更新帧缓存之前,执行最后一系列针对每个片段的操作,其目的是计算出每个像素的颜色&#;。在这个阶段,被遮挡的面通过一个被称为深度测试的过程消除。 pixel operation包含下面这些流程: (1)消除遮挡面; (2)Texture operation,纹理操作,根据像素的纹理坐标,查询对应的纹理&#;; (3)Blending,通常称为alpha blending,根据目前已经画好的颜色,与正在计算的颜色的alpha&#;混合,形成新的颜色。 (4)Filtering,将正在计算的颜色经过某种滤镜后输出。 该阶段之后,像素的颜色&#;被写入帧缓存中。

推荐整理分享学习shader之前必须知道的东西之计算机图形学(一)渲染...(shader要学多久),希望有所帮助,仅作参考,欢迎阅读内容。

学习shader之前必须知道的东西之计算机图形学(一)渲染...(shader要学多久)

文章相关热门搜索词:shader教程,shader入门教程,shader教程,shader需要的数学知识,shader入门教程,shader入门教程,shader入门教程,shader forge还有必要学吗,内容如对您有帮助,希望把文章链接给更多的朋友!

unity 角色控制器 我们要控制角色的移动,能够所有细节都由自己来实现。控制角色模型的移动,同一时候移动摄影机,改变视角。当然Unity也提供了一些组件,能够让我

Unity3d中使用自带动画系统制作下雨效果(二) 接着昨天的(一),今天上下雨效果的后半部分。在最后附上网盘链接,有使用的素材及本次的工程源文件,想看看的童鞋可以下载~~文章出自【狗刨学习

Unity3d中使用自带动画系统制作下雨效果(一) 之前看了以前版本的unity3ddemoAngryBots,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始。文章出自【狗刨学习网】使用

标签: shader要学多久

本文链接地址:https://www.jiuchutong.com/biancheng/375797.html 转载请保留说明!

上一篇:Unity 通过脚本修改源资源(unity通过脚本控制骨骼节点让模型动起来)

下一篇:unity 角色控制器(unity 角色控制器设置isTrigger问题)

  • 企业所得税中资产折旧调整明细表中提示折旧年限
  • 利息收入纳税义务时点
  • 开票打印机可以自己买吗
  • 利润分配未分配利润借贷方表示什么
  • 计提固定资产折旧时可以先不考虑固定资产残值的方法是
  • 小企业长期股权投资的核算
  • 自建生产用机器设备领用本企业生产的产品
  • 营改增后11
  • 物业企业门禁卡如何记账?
  • 计提工资需要工资表吗
  • 会议案例分析题及答案
  • 购买银行理财产品被骗怎么办
  • 购买国债兑现时要交税吗
  • 收据换发票的会计分录
  • 决算帐表不相符怎么处理
  • 免税单位出租房产如何缴纳房产税
  • 苹果mac电脑下刻字怎么弄
  • windows10如何关闭安全中心防护
  • 银行承兑汇票背书会计分录
  • 收到服务费发票怎么做账
  • Win10宽带无法连接
  • centos7安装php7.3
  • Tip是什么意思英语
  • 苹果15手机价格和图片颜色
  • linux操作系统有哪些版本
  • 未付款的增值税发票可以抵扣吗
  • 公司出租房屋租金由承租方本人支付
  • AriaNg Native 1.2.4 Aria2图形界面下载工具 中文免费版 32/64位
  • 代理 linux
  • 应对怯场的方法
  • 入门易学
  • 企业年金在缴费阶段涉及的税种包括
  • 网络层IP协议的配套协议有哪些
  • 资产负债表中各项目的期末数应根据各账户
  • 先买入再卖出
  • php的基本知识
  • 专票电话号码不对有影响吗
  • 哪些企业可以开13点税票
  • 一般股份支付的确认计量及帐务处理怎么做?
  • 单位交的那部分医保去哪了
  • mysql5.6解压版安装教程
  • 个人所得税申报教程
  • 企业金融资产包括
  • 物业管理企业会计核算的特点如何?
  • 房东房租不开票违法吗
  • 补缴的土地价款怎么算费用
  • 实习生个人所得税需要申报吗?
  • 已核准未登记名称我可以注册吗
  • 预算收入的退付范围
  • 退货的增值税专用发票怎么开
  • 有限公司结业清算
  • 在筹建期间的费用属于什么
  • 总账科目和明细账科目有哪些
  • 管理不善存货盘亏计入什么科目
  • 银行对公账户季度
  • 长期无法收回的应收账款如何处理
  • 如果一个sql语句中包括两个名字
  • 彻底关闭windows10自动更新工具
  • ubuntu20.04关闭图形界面命令
  • nmeo.exe是什么
  • fs是什么文件夹
  • win7 ctrl+alt+del
  • win7提示内部版本7601副本不是正版
  • cocos2djs
  • js的getattribute
  • android 自定义spinner
  • Android startActivities()的使用
  • vue router 组件
  • angular创建service
  • Python 正则表达式的高级用法
  • 车辆购置税2024年政策
  • 莱钢生产什么产品
  • 关于增值税纳税人的规定,下列说法正确的是
  • pdf扫描件怎么弄
  • 动漫企业的增值税率
  • 太原市税务局电话
  • 车辆营运证去哪里审
  • 航空煤油消费税征收环节
  • 计算当期免抵退税额
  • 撤销存款证明需要什么手续
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设