当前位置: 首页 > news >正文

Games101——光珊化——深度缓存——shading着色 1

深度缓存

如何解决远近的问题,能正确的覆盖

按照画作来说,先画出远处的物体,再画出近处的物体,近处会将其覆盖,这种算法叫做画家算法

但事实上,排序不仅要花更多的时间,而且排序并不容易,而且如果存在互相遮挡关系存在的情况下,画家算法就无法实现

为了解决这个问题,现代图形学所使用的都是深度缓存的算法,我们最后要做到的是基于每一个像素,我们存下每一个位置最前的那个像素,生成深度图,每一次计算的时候,我们会同时生成一个结果图和一个深度图

因为我们之前在定义相机的时候说过,我们的相机永远是朝向-z轴的方向,因此,我们需要定义,深度是一个距离,永远是一个正的值,离相机近深度就小,离相机远,深度就大,举一个深度图和渲染图的例子

这两张图永远是同步生成的,离相机越近的点,深度越小,那么像素值越小,那也就越黑,那么这个算法要怎么进行呢,永远只记下当前像素最小的值就可以了,一开始都是无限远,再遍历每一个三角形光栅化后的每一个像素的深度

例子如下

通过这样一个办法,我们可以通过逐像素的方法来维护深度图,我们需要明确一点,该算法只是在每次记录最小值,而并没有排序,所以在时间复杂度上并不大,而且这个算法和画出图像的顺序没有关系

在实际情况下,两个浮点数很难相等,因此,基本上不存在深度相同的情况,这个深度缓存在所有的硬件上都存在,如果有反走样的运用的话,可能记录的是采样点,不仅仅是像素点的采样

着色

目前我们所作的内容

我们目前还没解决的问题就是着色

所谓着色,意思就是引入明暗和颜色的变化,对于计算机图形学来说,就是对于不同的物体运用不同的材质叫做着色,一个相同的物体拥有不同的材质也就看起来大不相同,最基础的着色模型phong模型,或者说反射模型

例如下面的反射例子,包括高光(镜面反射),漫反射,以及间接光照(在路径追踪上详细介绍)

如何定义光照,例如一个着色点上的光照,我们可以定义法向,观察方向,光源方向,这些向量都是单位向量,仅仅表示方向,除了这几个方向以外,就需要定义这个点平面的表面属性,颜色,有多亮等

最后,着色不等于阴影,着色情况只看它自己,而并不考虑其它物体的存在,也就是具有局部性,阴影在后面解释如何生成

那么我们首先考虑简单的漫反射,漫反射的定义是当光线打在这个点上时,反射的方向不确定,是自由的

但是事实上这个并不容易,我们可以通过能量守恒的定义来推导物体表面的亮度,接受的能量是通过着色点周围的单位面积来考虑的,能量的接受度和角度的大小有关,和余弦的大小成正比

光作为一种能量,那么它是怎么产生的,例如一个点光源,我们如果认为点光源,认为辐射出来的能量在每一个方向上相同,又根据能量守恒的定理,点光源的的能量随着传播,每一个点的能量会小很多,距离和单位面积上的光的强度是衰减,并且以距离的平方成反比

那么我们就可以写出我们所在漫反射上能看到多少的能量,首先根据点光源,单位面积光照强度和距离的关系,求出此时单位面积投射出的光的能量大小,又根据余弦定理求出接受的百分比,就可以求出看到这个着色点的明暗

我们在此时有定义一个系数Kd,这个就是用来表示颜色的,因为颜色的产生是根据吸收光的多少来决定的,如果Kd为1,那就说明没有能量在这个着色点被吸收,那这个点就非常亮,根据这个就可以表示明暗,如果将Kd定义为三通道RGB,那么我们就可以定义颜色了

因为是漫反射,所以这个和我们观测角度V完全没有任何的关系,因为光线漫反射在四面八方反射的光线是完全一样的

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 旷野之间3 – CTO 应具备的技能
  • 【ARMv8/v9 GIC 系列 5.1 -- GIC GICD_CTRL Enable 1 of N Wakeup Function】
  • 记一次mysql导出到达梦数据库
  • 8.5结构体嵌套结构体
  • ONNX加载模型问题总结
  • 筛斗数据:数据提取技术,驱动业务增长的新引擎
  • 人工智能+影像组学的交叉课题,患者的临床特征如何收集与整理|顶刊专题汇总·24-07-10
  • ChatGPT 5.0:一年后的猜想
  • 为何Expo成为React Native官方推荐框架?
  • 连续6年夺冠 6项细分领域第一,中电金信持续领跑中国银行业IT解决方案市场
  • python学习-类
  • 小程序开发页面获取小程序assess文件夹下所有图片
  • 网络服务器都包含哪些方面需要维护?
  • STM32学习和实践笔记(39):I2C EEPROM实验
  • 基于单片机的温控光控智能窗帘设计探讨
  • Google 是如何开发 Web 框架的
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2019年如何成为全栈工程师?
  • ES2017异步函数现已正式可用
  • export和import的用法总结
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA多线程机制解析-volatilesynchronized
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • tab.js分享及浏览器兼容性问题汇总
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 回流、重绘及其优化
  • 近期前端发展计划
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 排序算法学习笔记
  • 数据仓库的几种建模方法
  • 一些css基础学习笔记
  • 异常机制详解
  • 译米田引理
  • 译有关态射的一切
  • 优化 Vue 项目编译文件大小
  • 主流的CSS水平和垂直居中技术大全
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​ssh免密码登录设置及问题总结
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #QT项目实战(天气预报)
  • (1)(1.13) SiK无线电高级配置(五)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (南京观海微电子)——I3C协议介绍
  • (四)鸿鹄云架构一服务注册中心
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)Unity3DUnity3D在android下调试