【Unity】LODGroup 计算公式

news2024/12/28 21:32:14

        Unity 在配置 LodGroup 时,其分级切换的计算方法是按照物体在相机视野中占据的比例计算的。在运行时,如果相机视野范围(Field of View)没有改变,那么这个值可以直接换算成物体距离相机的距离。这里就讨论下如何计算得到这个距离。

1、LODGroup 切换判定的原理

        渲染部分就跳过,这里只讲 Unity 计算 Lod 切换判定的原理,如下图所示:

        绿色区域为视野范围,蓝色 GameObject 为目标物体,Unity 计算的值就是 GameObject 的尺寸与当前相机视野的比例,即 Size / ViewDistance ,并以此为标准进行 LOD 的切换。

        我们在 LOD Group 中可以进行配置分级比例:


        以上图为例,就是当 Object Size 占比小于 49.97% 时切换到 Lod1,小于 22.8% 时切换到 Lod2,以此类推。

        这个是物体的缩放为 1 的情况,实际计算时也要考虑物体的缩放对屏幕占比的影响。

2、计算方法

        显然在相机的 Field of Veiw 不变的情况下,这个比例可以直接转换成物体距离相机的距离进行简单计算(Camera Distance)。一般情况下,为了节约性能,都是采用判定相机到物体的距离来进行 LOD 裁剪。

        计算原理就是简单的三角函数,代码如下:

Mesh mesh;//自行获取网格
LODGroup group;//自行获取LOD Group
LOD[] lods = group.GetLODs();

//这里是按scale为1算的,实际计算要侧乘上缩放值
float3 size = mesh.bounds.size;

//unity 是取最大值,而不是对角线长度
float objectSize= math.max(math.max(size.x, size.y), size.z);

//根据相机的配置获取相机角度(弧度制)
float cameraAngle = math.radians(CameraFieldOfView * 0.5f);
//计算当物体刚好所占屏幕比例为 1 时,距离相机的距离;
float cameraRatio = objectSize* 0.5f / math.tan(cameraAngle);

//根据相似三角形原理和 LOD Group 配置,分别计算出多级lod物体距离相机的距离
if (lods.Length > 0)
    x = cameraRatio / lods[0].screenRelativeTransitionHeight;
if (lods.Length > 1)
    y = cameraRatio / lods[1].screenRelativeTransitionHeight;
if (lods.Length > 2)
    z = cameraRatio / lods[2].screenRelativeTransitionHeight;
if (lods.Length > 3)
    w = cameraRatio / lods[3].screenRelativeTransitionHeight;

        计算完成之后的lod就可以保存下来,只要相机不变就不用再计算了。

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

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

相关文章

ubuntu下用pycharm专业版连接AI服务器及其docker环境

一:用pycharm专业版连接AI服务器 1、首先在自己电脑上新建一个文件夹,后续用于映射服务器上自己所要用的项目文件 2、用pycharm专业版打开该文件夹,作为一个项目打开 3、然后在工具->部署->配置 4、配置中形式如下: 点击左…

Chatbot UI集成LocalAI实现自托管的ChatGPT

本文比惯例提前了一天发,因为明天一早,老苏就踏上回乡的路了,三年没回老家,这次专门请了 2 天的假 难得回家,打算多陪陪家人,和多年不见的朋友聚聚,当然如果有网络条件,还是会正常发…

英语单词记忆学习打卡系统 微信小程序

本单词记忆系统使用了计算机语言Java和存放数据的仓库MySQL,采用了微信小程序模式来实现。本系统使用了框架SSM和Uni-weixin实现了单词记忆系统应有的功能,系统主要角色包括管理员和用户。 关键词:Java;MySQL;SSM  在…

Unity实现设计模式——命令模式

Unity实现设计模式——命令模式 推荐一个Unity学习设计模式很好的GitHub地址:https://github.com/QianMo/Unity-Design-Pattern 有非常多的Star 一、介绍 命令模式使得请求的发送者与请求的执行者之间消除耦合,让对象之间的调用关系更加灵活。在命令模…

聊聊零拷贝技术原理和应用

文章目录 0. 引言1. 什么是零拷贝技术 1. 零拷贝技术在不同领域的应用2.传统拷贝技术的缺点3. 零拷贝技术的原理与实现1. sendfile系统调用2. 内核缓冲区与用户缓冲区3. DMA(Direct Memory Access)技术4. 文件描述符传递与共享5. Direct I/O(…

Apache shiro RegExPatternMatcher 权限绕过漏洞 (CVE-2022-32532)

漏洞描述 2022年6月29日,Apache 官方披露 Apache Shiro (CVE-2022-32532)权限绕过漏洞。 当Apache Shiro中使用RegexRequestMatcher进行权限配置,且正则表达式中携带"."时,未经授权的远程攻击者可通过构造恶…

基于Springboot实现毕业生信息招聘平台管理系统演示【项目源码+论文说明】分享

基于Springboot实现毕业生信息招聘平台管理系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台,主要的模块包括查看管理员;首页、个人中心、企…

Nginx 可视化管理工具与 cpolar 配置:实现远程访问本地服务的优化

文章目录 前言1. docker 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 Nginx Proxy Manager 是一个开源的反向代理工具,不需要了解太多 Nginx 或 Letsencrypt 的相关知识,即可快速将你的服务暴露到外…

服务断路器_服务雪崩解决方案之服务降级

什么是服务降级 两种场景: 当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度!当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免…

SPA移动端解决方案参考

企业在实现SAP移动化时遇到的一些挑战,如果我们利用自己开发团队来进行应用程序的开发,可能会陷入规划,开发,调试,测试的循环中,最后仍一无所获。那如果企业寻找第三方咨询公司进行开发的话,又担…

【高阶数据结构】哈希的应用 {位图;std::bitset;位图的应用;布隆过滤器;布隆过滤器的应用}

一、位图 1.1 位图概念 面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】 遍历查找:内存中无法存放40亿个整数(约占内存15-16G);时间复杂…

项目经理工具箱

新项目经理误区 要解决的关键点 事:范围,进度,成本,质量 人:项目干系人,团队,外包成员; 干系人管理计划,沟通管理计划 技术和管理区别和联系 非暴力沟通 结构思考力 重…

正点原子lwIP学习笔记——NTP实时时间实验

1. NTP简介 NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网 络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。 NTP 服务器(Network Time Pr…

ERROR in docs.42140ac.js from UglifyJs webpack打包报错

ERROR in docs.42140ac.js from UglifyJs 原因是UglifyJs 针对js压缩 不支持es6语法(或者引入的第三方插件存在es6语法) ERROR in docs.42140ac.js from UglifyJs 使用的 uglifyjs-webpack-plugin 解决方法 降低uglifyjs-webpack-plugin的版本 “ugl…

系统化思考,从初级到高级书单推荐

用思考工具进行系统思考,解决复杂问题,成为某个领域的高手,下面这几本书就是补充你脑海的系统思考的工具,一定要保存。 《简单的逻辑学》 作者:麦克伦尼 一切的系统源自于逻辑,如果你没有逻辑分析的能力&…

[谷粒商城笔记]07、Linux环境-虚拟机网络设置

1.本机cmd,输入命令ipconfig,查看本地ip 192.168.56.1是虚拟机的ip 2.自定义虚拟机ip 修改这个文件下的 这里,把ip换成 192.168.56.‘10’ 引号内数字自定义 3.在本机和虚拟机命令行,互相ping IP 查看是否设置成功

静态NAT,动态NAT,NAPT(实验配置+原理讲解)

目录 静态NAT,动态NAT,NAPT 实验一:静态NAT地址转换 实验二:动态NAT配置 实验三:NAPT配置 静态NAT,动态NAT,NAPT 静态地址转换:只能实现一个私网与一个公网的一对一映射 动态地址转换:创建…

Python 编程基础 | 第一章-预备知识 | 1.5、开发工具

一、开发工具 - VSCode VSCode是一个相当优秀的IDE,具备开源、跨平台、模块化、插件丰富、轻量化、启动时间快、颜值高的特质。 1、下载VSCode VSCode下载地址:https://code.visualstudio.com/ 2、安装VSCode 载软件包,一步步安装即可&#x…

CSS笔记——基本语法及相关知识

CSS层叠样式表是用于定义 HTML 或 XML 文档的样式和布局的语言。它可以让开发者更加灵活地控制页面元素的样式和排版,从而提高页面的可读性和用户体验 一、css样式书写顺序和规范 CSS样式的书写顺序和规范是为了让代码更易读、易维护和易扩展。下面是一些常见的规…

嵌入式Linux应用开发-Makefile 的使用

嵌入式Linux应用开发-Makefile 的使用 第三章 Makefile 的使用3.1 配套视频内容大纲3.1.1 Makefile 规则与示例3.1.2 通用 Makefile 的使用3.1.3 通用 Makefile 的解析 3.2 Makefile 规则3.3 Makefile 文件里的赋值方法3.4.1 字符串替换和分析函数3.4.2 文件名函数3.4.3 其他函…