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

深度缓存

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

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

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

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

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

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

例子如下

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

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

着色

目前我们所作的内容

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章

RIP路由协议概述

RIP【Routing Information Protocol】 RIP是为TCP/IP 环境中开发的第一个路由选择协议标准 RIP是一个【距离——矢量】路由选择协议 当路由器的更新周期为30s到来时,向邻居发送路由表 RIP以跳数作为唯一度量值 RIP工作原理 RIP路由协议向邻居发送整个路由表信息RI…

农场资源的获取

一、网站 资源 二、搜索土壤资源 1、找到类别,点击Browse Texture 2、搜索、选择 3、搜索Brown Mud Dry 4、搜索Brown Mud 三、

[web]-图片上传、文件包含-图片上传

题目内容提示:上传图片试试吧,注意统一时区问题 打开页面如图,源码没有过滤,随便输入,进入上传目录 根据链接可以看到是文件包含,可以利用编码读取源码,这里只列出有用页面的编码(?…

【Hive SQL 每日一题】在线峰值人数计算

文章目录 测试数据需求说明需求实现 测试数据 -- 创建 user_activity 表 DROP TABLE IF EXISTS user_activity ; CREATE TABLE user_activity (user_id STRING,activity_start TIMESTAMP,activity_end TIMESTAMP );-- 插入数据 INSERT INTO user_activity VALUES (user1, 2024…

银河麒麟高级服务器操作系统 V10 SP3 2403

系统简介 银河麒麟高级服务器操作系统V10是一款为企业级关键业务设计的新一代自主服务器操作系统,它满足虚拟化、云计算、大数据等时代需求,具备高可靠性、安全性、性能和扩展性。该系统基于CMMI5级标准开发,支持多种国产处理器平台&#xf…

UDP网络通信(发送端+接收端)实例 —— Python

简介 在网络通信编程中,用的最多的就是UDP和TCP通信了,原理这里就不分析了,网上介绍也很多,这里简单列举一下各自的优缺点和使用场景 通信方式优点缺点适用场景UDP及时性好,快速视网络情况,存在丢包 与嵌入…

【JavaEE】网络编程——TCP

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 前言1.网络编程套接字1.1流式套接字(TCP)1.1.1特点1.1.2编码1.1.2.1ServerSo…

华为USG6000V防火墙v1

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…

电影《头脑特工队2》观后感

上周看了电影《头脑特工队2》,整体是非常不错的,一个大脑中,想象的世界。 (1)人格-多元政体理论 记得前几年是看过《头脑特工队1》的,当时电影是非常出名的,当时有很多研究理论,都…

【练习】分治--归并排序

🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 归并排序 代码实现 交易逆序对的总数 题目描述 ​编辑 题解 代码实…

JAVA从入门到精通之入门初阶(二)

1. 自动类型转换 自动类型转换:类型范围小的变量可以赋值给类型范围大的变量 byte->int public class java_7_10 {public static void main(String[] args) {//自动类型转换//类型范围小的变量可以赋值给类型范围大的变量 byte->intbyte a 12;int b a;//自动…

C语言 ——— 输入两个正整数,求出最小公倍数

目录 何为最小公倍数 题目要求 代码实现 方法一:暴力求解法(不推荐) 方法二:递乘试摸法(推荐) 何为最小公倍数 最小公倍数是指两个或者多个正整数(除了0以外)的最小的公共倍数…

【LeetCode】205. 同构字符串

认真地分类讨论,评判复杂度,再决定是否要写代码执行。整套流程干净利落,不存在主观臆想,也不会有对事实结果计算的巨大偏差。 1. 题目 2. 分析 这里提供一版可以解题的思路。 定义两个词典,这两个词典分别记录s字符串…

DHC2-2多时段电子式时间继电器 带底座 约瑟JOSEF

DHC2多时段电子式时间继电器 DHC2-H多时段电子式时间继电器 DHC2-1多时段电子式时间继电器 DHC2-2多时段电子式时间继电器 DHC2-3多时段电子式时间继电器 一、特点 超小型面板尺寸DIN 36X36mm(DHC1)、DIN 48X48m(DHC2) 有延时吸合、延时释放、等周期循环三种规格 可替代…

kibana连接elasticsearch(版本8.11.3)

前言 elasticsearch在8版本之后就出现了很大变化,由于kibana版本需要需elasticsearch进行版本对象,kibana连接方式也出现了很大变化。我在这里记录下自己的踩坑记录。 服务部署 本文中的服务都是在docker环境中部署的。其中elasticsearch版本和kibana版…

5G-A通感融合赋能低空经济-RedCap芯片在无人机中的应用

1. 引言 随着低空经济的迅速崛起,无人机在物流、巡检、农业等多个领域的应用日益广泛。低空飞行器的高效、安全通信成为制约低空经济发展的关键技术瓶颈。5G-A通感一体化技术通过整合通信与感知功能,为低空网络提供了强大的技术支持。本文探讨了5G-A通感…

OpenCV 寻找棋盘格角点及绘制

目录 一、概念 二、代码 2.1实现步骤 2.2完整代码 三、实现效果 一、概念 寻找棋盘格角点(Checkerboard Corners)是计算机视觉中相机标定(Camera Calibration)过程的重要步骤。 OpenCV 提供了函数 cv2.findChessboardCorners…

什么? CSS 将支持 if() 函数了?

CSS Working Group 简称 CSSWG, 在近期的会议中决定将 if() 添加到 CSS Values Module Level 5 中。 详情可见:css-meeting-bot 、[css-values] if() function 当我看到这个消息的时候,心中直呼这很逆天了,我们知道像 less 这些 css 这些预…

用Speedtest-Tracker跟踪上网速度(续)

什么是 Speedtest Tracker ? Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查。 之前老苏介绍的另一个 https://github.com/henrywhitaker3/Speedtest-Tracker 已被放弃。现在这个是积极维护的替代品&#…

STM32编写代码之嵌入式常用位操作

在单片机编程的过程中&#xff0c;经常会遇到位操作进行赋值&#xff0c;例如 //程序1 int a 0,b 0x5b,c 0; //1 for (i 0; i < 8; i ) { //2a b & (0x80 >> i)); //3 c | (0x80 >> i); //4 } 这些位操作是什么意思呢&#xff1f…