Games101--shading 3

news2024/11/16 17:59:17

1.重心坐标

为什么要进行插值?(因为有很多的计算实在三角形内部进行的,而我们需要形成一个平滑的过渡)

插值需要插值什么内容?(颜色,纹理映射,法线插值,可以对三角形的任意属性进行插值)

        重心坐标定义在三角形上,三角形所在平面的点都可以由重心坐标表示,有三个数的线性组合来表示。如果点在三角形内,这三个系数都必须是非负,只有这样,才表达的是这个点一定在三角形内部

        要得到任意一个点的重心坐标,可以通过面积比得到

        重心是将三角形均分为三份

如果要计算任意一个点的重心坐标,有一个公式

        在知道如何计算重心坐标后,那么就可以通过重心坐标来表示三角形中的任何一个点,这是一个三角形其余三个顶点组成的线性组合,那么同时也就说明三角形内任意一个点的属性也就可以通过这个线性组合来表示

        有一点需要注意的是,重心坐标虽然运用简单,但有一个问题,在投影的变换下无法保证重心坐标不变、

2.纹理帖图

        我们要怎么应用呢,屏幕上任意的采样点都有一个位置,据此计算出uv、在纹理上找到这个相应的值

        但这样做会有各种各样的问题

      问题1,如果纹理很小怎么办?

        纹理本身太小,我们本身会在纹理上找到对应的值,这种纹理上的像素可以被称为 texel(纹理元素),可以使用简单的四舍五入,也就是说如果取到了小数将其整数化,会形成一个一个的格子,这样就会形成下图中左边这张图的效果

        这种效果比较差,因为虽然纹理很小,但我们仍然希望得到一个连续的值,这样就又有了第二种方法,双线性插值,所谓的双线性插值,可以认为就是下图中我们需要解决的问题,我们该如何确定红点的值是多少

        双线性插值的操作就是我们可以找到相邻的四个点,定义两个操作,第一个是线性插值,就是定义一个点x位于v0(0)和v1(1)之间,lerp就可以由这三个点表示,要实现双线性插值,就是先对水平或者数值方向上做一次插值,然后再根据插值得到的两个点,再做一次另外一个方向上的插值就可以了

        最后得到的效果就是中间图片的效果,格子消失了,相比于双线性插值外,还有更好的方法,比如说图片中的第三种方法,取周围的16个点做三次插值

     问题二 如果纹理太大呢?

        这样引起的问题反而会更加严重,例如下面这个问题,如果取简单的操作,根据uv找纹理,就会产生走样

        为什么会产生这样的现象,根据下面这张图就可以很好的解释,我们可以看到在近处的时候,每一个像素覆盖的很小,而随着越来越远,每一个像素都会覆盖很大一片的纹理,如果覆盖的范围越来越大,还认为中心的点采样作为整个面的值,那肯定是不行的

        对于走样的问腿,我们之前的做法就是超采样,MSAA的方法,用更多的采样点

        采样会引起走样,我们能不能使用一个方法避免采样,这是一个经典算法问题,范围查询,我们需要做到范围查询能查到任意大小的范围平均值,例如下面这张图,若是同一张图,近处的像素覆盖就很小,远处的覆盖范围就会很大

        为了解决这个问题,图形学所使用的范围查询方法就是Mipmap,这个方法(快,近似,且只有正方形的范围查询),什么是mipmap,就是从一张图生成一系列的图,生成多层纹理,每高一层纹理,缩小一倍的分辨率

  那么拿到图片后,我们需要先生成mipmap,相当于形成了一个图片金字塔,最后全部土拍你的存储量求出来是原来的4/3,我们需要得到近似的正方形,那么怎么得到每一个像素映射到纹理上时,所覆盖面积的大小呢,我们可以首先取像素自己本身的中心映射到uv上,然后取它邻居的像素中心映射到uv上,求出uv上两点之间的距离

此时再得到区域的大小后,根据这个像素的覆盖面积大小,可以去查在第几层这个给面积代表的就是一个像素,然后在mipmap中取出这个平均值就可以了,再做可视化

但是呢,如果仅仅只分这些层就会出现很明显的不连续的现象,比如1.8层,那么要得到1.8层的值,我们就可以取第一层,再取第二层,再两次双线性插值的基础上再做一次线性插值

这样就可以得到面积内的平均,这种插值的方法叫做三线性插值,本身的开销也不是很大

但是使用mipmap的缺点是,在远处会出现过分模糊的情况,如下图所示

        怎么解决这个问题呢,可以使用一个方法叫做各向异性过滤,在每一行中,只变化宽度,而在每一列中,只会变化高度,比起mipmap中每一个都是方形,而现在就是有了一种矩形的选择

这在下面图中可以明显的看到为什么,有矩形的区域范围查询会更好,但这样其实也只是解决了部分问题

例如EWA方法,使用圆形去覆盖不规则的形状

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

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

相关文章

计算机毕业设计选题推荐-C语言学习辅导网站-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

springboot工程,无法访问index.html主页

1、问题概述? 我们使用springboot开发了工程后,会将项目打包成jar包或者war包放到服务器端进行发布,但是在打包后,时长会出现index.html主页无法访问的情况。 先分析几种常见的主页无法访问的解决方案,助你解决问题&…

【wiki知识库】08.添加用户登录功能--后端SpringBoot部分

目录 一、今日目标 二、SpringBoot后端实现 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代码 2.4 创建用户上下文工具类 2.5 通过token校验用户(重要) 2.6 创建WebMvcConfig 2.7 用户权限校验拦截器 一、今日目标 上篇…

职业本科大数据实训室

一、职业本科大数据实训室建设背景 在数字化浪潮汹涌澎湃的今天,大数据已跃升为引领社会进步和经济发展的新引擎。随着《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的深入实施,数字化转型作为国家战略的重要组成部分&…

微信小程序登录获取 session_key 和 openid

一、申请测试小程序,只要微信扫码授权就可以申请了。 二、调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识&#xf…

黔东南苗族文化展示小程序的设计与实现-计算机毕业设计源码85589

摘要 黔东南苗族文化作为中国传统文化的重要组成部分之一,具有悠久的历史和丰富的民俗传统。然而,随着社会的发展和现代化进程,苗族文化面临着传承和保护的挑战。为了更好地传播和展示黔东南苗族文化,本研究设计并实现了一款专注…

leetcode-119-杨辉三角II

原理: 1、初始化每行一维数组nums[1]; 2、从第2行开始,在nums的头插入0(因为杨辉三角每行的第一个1相当于是上一行的1与其前面的0相加之和)后进行相加操作。 代码:

MySQL——数据库的操作,数据类型,表的操作

MySQL——数据库的操作,数据类型,表的操作 1. 数据库的操作1.1 显示当前数据库1.2 创建数据库舍弃当前所写的SQL语句查看当前数据库服务全局的默认字符集 1.3 使用数据库1.4 查看当前操作的数据库查看MySQL的帮助 1.5 删除数据库 2. 常见数据类型2.1 数值…

Java生成Word->PDF->图片

文章目录 引言I Java生成Word、PDF、图片文档获取标签渲染数据生成文档案例II 工具类封装2.1 word 渲染和word 转 pfd2.2 pdf转成一张图片III poi-tl(word模板渲染) 标签简介文本标签{{var}}图片标签表格标签IV poi-tl提供了类 Configure 来配置常用的设置标签类型前后缀see al…

【Vue3】图片未加载成功前占位

背景 在写项目时,加载图片未成功前,会出现空白页面,太影响美观和体验感 解决方案 1. element ui通过slot占位符解决 2. 自定义指令 原生img标签可以通过自定义指令解决,img标签有onload和onerror事件,都是在渲染成…

svg封装使用

1、安装库 "vite-plugin-svg-icons": "^2.0.1" 2、配置svg vite.config中配置: 主要是配置createSvgIconsPlugin import react from vitejs/plugin-react import viteESLintPlugin from vite-plugin-eslint import { loadEnv } from vite im…

VLSI | 计算CMOS反相器的负载电容在BSIM4中的相关参数

ref. SPICE Model Parameters for BSIM4.5.0 (ubc.ca)PTM (umn.edu) 来自UMN的Microelectronics Co-design Research Group给出了晶体管PTM模型可以在SPICE仿真中使用:PTM (umn.edu),但是由于使用Google才能下载,因此搬运到了这里&#xff…

电机制造业MES系统:直面行业痛点,引领智能化发展趋势

在电机制造业中,MES的应用具有重要意义。由于该行业的产品种类繁多,生产工艺复杂多变,生产现场的信息化管理难度较大。而通过引入MES,企业可以实现对生产现场的实时监控、生产进度的准确把握以及产品质量的有效控制。 电机行业信息…

什么是Docker | Docker入门及应用

1 Docker简介 1.1 什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 …

【ZooKeeper】ZooKeeper快速入门

1.ZooKeeper的概念 Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务。Zookeeper 翻译过来就是动物园管理员,它是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管…

CSAPP B站陪跑视频学习笔记

视频地址 How program run- overview 栈(stack) 栈的作用: 局部变量和参数:当函数被调用时,函数的局部变量和参数会被分配到栈上。这是因为这些变量的生命周期通常只限于函数执行期间。 函数调用链:栈用于管理函数调用链&#x…

Thinkphp5x远程执行命令及getshell

一.环境配置 靶场:vulhub/thinkphp/5-rce docker-compose up -d #启动环境 访问靶场: 漏洞利用: 漏洞根本源于 thinkphp/library/think/Request.php 中method⽅法可以进⾏变量覆盖,通 过覆盖类的核⼼属性filter导致rce&#xf…

手把手教你OpenCV实现Canny边缘检测 C++

1,原理 canny边缘检测算子是传统边缘检测算子中最优秀的,canny检测基于下面三个目标: (1)低错误率。即所有边缘都应该找到,并且没有虚假边缘。 (2)准确的定位边缘。即检测到的边缘应该接近真…

几款设计师必备的AI抠图软件工具分享给你!

前言 在图像处理领域,抠图是一项基本而关键的技能。传统上,PS是作为抠图的首选工具,但其操作复杂性往往令初学者望而却步。幸运的是,随着AIGC技术的发展,现在有多款AI软件和在线网站能够以更简单、快捷的方式完成抠图…

怎么把图片压缩更小?快捷缩小图片的3个在线工具

现在每天都会需要接触很多的图片,当图片在本地存储到一定数量时会占用大量的内存,并且不利于在网上传输使用,那么有什么方法能够快速压缩图片太大呢?在线改图片大小是一种比较简单的缩小图片的处理方法,在网上也有很多…