渲染流水线与Shader概念(一)

本系列文章系学习 唐福幸《Unity ShaderLab 新手宝典》的笔记,包含个人理解,如有错误欢迎批评指出

模型是怎么渲染到屏幕上的?

2.1 渲染流水线概念

模型从3D渲染成2D(显示到屏幕上)中间需要经历一系列过程,这个过程就像是一个魔术盒一样,里面包含一系列步骤(既渲染流水线)

为了实现灵活的效果,中间有些步骤允许自定义,有些不允许

2.2 3D图形渲染完整流水线

不同引擎在使用中多多少少会有不一样,以下来自《3D数学基础:图形与游戏开发》的通用流水线

  1. 建立场景
    先建立要渲染的场景
    例如:摄像机位置、视角,灯光设置,雾化设置等
  2. 可见性检测
    根据摄像机视角检测哪些些物体,物体的哪些部分需要渲染(全部渲染太浪费时间和性能了)
  3. 设置渲染状态
    物体A,B分别要使用哪个顶点着色器/片元着色器、光源属性、材质等,如果A、B使用的渲染状态一样,那么它们的外观看起来好像是一样的,比如:都是一样的不锈钢
  4. 几何体生成与提交
    向渲染API提交几何体数据(几何体一般是由许许多多的三角面构成的模型),既三角面的顶点数据、法线向量、UV等
  5. 变换与光照
    渲染API获取到几何体数据后,把几何体(模型)从模型空间转换到摄像机空间,并对顶点进行光照计算
  6. 背面剔除与裁切
    变换到摄像机空间后,对几何体(模型)中,背对摄像机的三角面进行剔除,变换到裁切空间,对超出摄像机范围的三角面进行裁切
  7. 投影到屏幕空间
    在裁切空间中经过裁切之后的多边形会通过投影从三维变成平面,输出到屏幕空间中
  8. 光栅化
    2k分辨率的屏幕一般是由(横)2560*(竖)1440个像素点(小正方形)组成,光栅化就是把每个三角面转变成一个个片元(2D像素(像素点)信息)
    在这里插入图片描述

片元其实已经很接近像素了,但是它还不是像素。片元包含了比RGBA更多的信息,比如可能有深度值,法线,纹理坐标等等信息。片元需要在通过一些测试(如深度测试)后才会最终成为像素。可能会有多个片元竞争同一个像素,而这些测试会最终筛选出一个合适的片元,丢弃法线和纹理坐标等不需要的信息后,成为像素。

  1. 像素着色
    最后,计算每个像素的颜色,把颜色信息输出到屏幕上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值