12 Games101 - 笔记 - 几何(网格处理)、阴影图

news2024/11/15 8:32:29

12 几何(网格处理)、阴影图

曲面细分

曲面细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,使模型越来越光滑,提高渲染效果。

image-20240322142100177

Loop细分

Loop细分是指Loop提出来的细分规则,只能针对于三角形。

image-20240322142122013

步骤:

  1. 生成更多的顶点,组成新的三角形
    img
    如图,一个三角形被分成四个小三角形。

  2. 调整这些顶点的位置

  3. 把顶点分为两类:新生成的顶点和老的顶点。

    1. 对新的顶点进行加权平均:
      image-20240322142659541
      其中白点是新的顶点
    2. 对老的顶点进行加权平均:
      img
      可以看出,老的顶点受到自己和相邻顶点度数的影响。

Catmull-Clark细分

首先定义面和顶点类型:

  • quad face:四边形面
  • Non-quad face:非四边形面
  • Extraordinary vertex :奇异点(degree != 4,即度(点所连边数)不为4的点

细分步骤:

img
取每条边,每个面的中点并连起来。每个非四边形都引入了一个奇异点,非四边形面消失。

细分特点:

  • 有几个非四边形面,就会多出几个奇异点,所以现在一共有2+2 = 4个
  • 新多出来的奇异点的度数与原来所在面的边数相等,如这里就是3度
  • 第一次细分之后所有面都会变成四边形,且往后奇异点数目不再增加

计算方法:
image-20240322143200416

曲面简化

曲面简化是指将一个模型的面合理的合成更少的面,从而降低模型精度,减小开销,如远处模型使用曲面简化。
image-20240322143237703

边坍缩:将一条边的两个顶点合成为一个顶点。
img
确定进行边塌陷的边通过二次度量误差。

二次误差度量:希望把这个点放到一个位置上,使得这个点到原来的几个面的距离平方和最小。
img
即蓝色新顶点所在的位置与原来各个平面的垂直距离之和。如果能够使得这个误差最小那么对整个模型样貌修改一定程度上也会较小。

曲面简化算法流程:

  1. 为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量
  2. 选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置
  3. 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值
  4. 重复上述步骤,直到到达终止条件

这其实是一个标准的贪心算法,可能到不了全局最优解,但事实证明最终的结果依然相当不错

img

  • 优先队列/堆
  • 贪心算法,局部最优解而非全局最优解

shadow mapping

Shading Point没有考虑其他物体的影响,所以着色不能解决阴影。

Shadow mapping本质上是一种图像空间做法,生成shadow这一步不需要这个场景的几何信息,但也会走样。
Shadow mapping生成硬阴影,不生成软阴影。

shadow mapping具体操作:
key idea: 一个点,如果不在shadow里,你又能看到这个点,说明这个点可以从camera中看到,也可以从光源中看到。

  1. 从光源看向场景,记录看到的点的深度。
    img

  2. 从摄像机看向场景,并投影回光源所在的成像上。

    • 深度一致:说明能看到
      img
    • 深度不一致:摄像机能看到,但是光看不到外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传阴影
      img


shadow mapping最终效果:
img
可视化shadow maps:
image-20240322144517635

shadow mapping问题:

  • 浮点数难以判断相等,所以一般会有一个tolerance
  • shadow maps查询时不采用双线性插值,只寻找最近的点,因为倘若插值发生在物体边缘时,与邻接点的深度差距很大,会导致插值结果会有很大的误差
  • 属于硬阴影,只适用于点光源

硬阴影vs软阴影

image-20240322144621570

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

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

相关文章

中等职业学校大数据课程建设方案

大数据产业是以数据及数据所蕴含的信息价值为核心生产要素,通过数据技术、数据产品、数据服务等形式,使数据与信息价值在各行业经济活动中得到充分释放的赋能型产业。 大数据产业定义一般分为核心业态、关联业态、衍生业态三大业态。 一、专…

【Entity Framework】 EF中DbContext类详解

【Entity Framework】 EF中DbContext类详解 一、概述 DbContext类是实体框架的重要组成部分。它是应用域或实例类与数据库交互的桥梁。 从上图可以看出DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动: EntitySet:DbContext包含…

golang sync.Map之如何设计一个并发安全的读写分离结构?

在 golang中,想要并发安全的操作map,可以使用sync.Map结构,sync.Map 是一个适合读多写少的数据结构,今天我们来看看它的设计思想,来看看为什么说它适合读多写少的场景。 如下,是golang 中sync.Map的数据结构…

Oracle数据库如果出现乱码,需要查看是否时字符集不一致导致乱码,这样解决

1、如果出现乱码,需要查看是否时字符集不一致导致乱码 以修改为ZHS16GBK字符集为例,具体字符集需要sql查询。 Oracle查看字符集 SELECT * FROM NLS_DATABASE_PARAMETERS p where p.PARAMETERNLS_CHARACTERSET; SELECT USERENV(language) FROM DUAL; 1.…

机器人路径规划:基于斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

视频素材库哪个好?这8个短视频相关的优质素材网推荐看看

在这个数字化时代,视频内容的创作变得前所未有地重要。无论是短视频的快速制作,还是专业影片的精心编辑,找到合适的素材资源是每个视频创作者的基本需求。从高清视频片段、无水印的图片,到富有情感的音效,以下精选的网…

Java应用常见log框架介绍以及 如何用好Log

前言 合理使用日志对于Java应用程序的开发、部署和维护都至关重要。通过采用良好的日志记录实践,可以更好地监控应用程序的运行状况、排查问题并优化性能 日志系统与日志框架 日志系统 直接负责打印输出日志,提供完整的日志输出能力: JUL java.uti…

栅格地图路径规划:4种最新算法(小龙虾优化算法COA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA)求解机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

RIPGeo代码理解(七)test.py(加载检查点,然后测试)

​代码链接:RIPGeo代码实现 ├── preprocess.py # 预处理数据集并为模型运行执行IP聚类 ├── main.py # 运行模型进行训练和测试 ├── test.py #加载检查点,然后测试 一、导入各种模块和数据库 import torch.nnfrom lib.utils import * import argparse import…

paddlepaddle框架构建数据集进行分类问题的时候,会发现数据集在构建的过程中不会构建标签(花分类)

问题描述 在做一个paddlepaddle项目的时候,需要使用神经网络对他进行分类,数据集的结构如下图,这时候我们可以使用常用dataset方法对数据集进行构建。 这时候我们就会发现一个问题,就是这个矿建不是构建标签,也就是说…

IM系统设计之websocket消息转发

Websocket消息转发 项目地址:gitgithub.com:muyixiaoxi/Link.git 上周面试被面试官问到:“在分布式IM系统中,如何实现多个websocket集群之间的通信”。 我在思考了良久后回答:“不会”。 随着我的回答,我和面试官的…

【C++航海王:追寻罗杰的编程之路】stack

目录 1 -> stack的介绍和使用 1.1 -> stack的介绍 1.2 -> stack的使用 1.3 -> stack的模拟实现 1 -> stack的介绍和使用 1.1 -> stack的介绍 stack的文档介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中&#xff0c…

React【Day1】

B站视频链接 一、React介绍 React由Meta公司开发,是一个用于 构建Web和原生交互界面的库 React的优势 相较于传统基于DOM开发的优势 组件化的开发方式不错的性能 相较于其它前端框架的优势 丰富的生态跨平台支持 React的市场情况 全球最流行,大…

案例实践 | 基于长安链的煤质检测智慧实验室

案例名称-煤质检测智慧实验室 ■ 建设单位 国能数智科技开发(北京)有限公司 ■ 用户群体 煤炭生产单位、电力单位、化工单位等产业链上下游单位 ■ 应用成效 化验效率提升50%,出验时间缩短40%,提高化验数据市场公信力 案例…

数据结构->手把手教入门栈与列队(基础)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 1.什么是栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许…

利用Scala与Apache HttpClient实现网络音频流的抓取

概述 在当今数字化时代,网络数据的抓取和处理已成为许多应用程序和服务的重要组成部分。本文将介绍如何利用Scala编程语言结合Apache HttpClient工具库实现网络音频流的抓取。通过本文,读者将学习如何利用强大的Scala语言和Apache HttpClient库来抓取网…

IS210BPPCH1AEC的数据分析

GE IS210BPPCH1AEC 是一款专为石油和天然气行业设计的压力传感器。 该传感器可以监测油井、气井以及管道系统中的压力,并且具备数据分析和远程监控的能力。这使得它在确保油气生产过程安全和效率方面发挥关键作用。具体来看,以下是一些特点和应用&#x…

Webman全局异常捕获处理

最近在使用webman这个框架做项目开发,涉及到需要统一处理异常捕获。由于官网给的并不详细,于是自己实现了一下全局异常处理类。 一、配置效果 例如:我要在项目中统一返回json 格式数据,并不想在业务层写try,catch逻辑。 或者在业务…

校招应聘流程讲解

在整个应聘流程中,记得保持积极的态度、认真准备面试,同时也要对自己的能力和经验有清晰的认识,这样才能在竞争激烈的校园招聘中脱颖而出,成功获得心仪的工作机会. 1. 校招资源获取 想要参加校招,首先需要获取校招资…

操作系统内功篇:硬件结构之CPU是如何执行任务的?

一 CPU是如何读写数据的? 1.1 CPU架构(组成) 当代CPU一般是多核心的,每个核心都有自己的一个L1和L2Cache,L3Cache是一个CPU所有核心共享的,一个CPU只有一个。L1Cache分为数据缓存和指令缓存。 CPU有三层高速缓存的目的就是将Cac…