unity草体渲染方案 GPU Instaning
有一天看项目里的FrameDebug发现在森林系的场景里草体的drawcall差不多有100多
主要是因为灯光贴图,位置等不一样导致的打断合批,导致一个批次只能渲染10个左右的草体
之前有了解过unity有接口(Graphics.DrawMeshInstanced)可以把一样的网格,不同的变换一次性绘制出来,这个比较合适草体这种很多相同网格的渲染
如果一次性渲染500个草体 那不是就几个drawcall就能搞定,相差几十倍的drawcall还是很有必要处理一下
并且还能优化掉obj的消耗,场景的obj越多,各种遍历肯定会越耗时
直接上对比
性能对比
例子1
修改前:
修改后:
修改前:
Drawcall 331, 主线程15.4ms, 渲染线程9.4ms, 65FPS
修改后:
Drawcall 304, 主线程13.1ms, 渲染线程7.5ms, 76FPS
成果:
Drawcall 下降27, 主线程下降2.3ms, 渲染线程下降1.9ms,上升11 FPS
例子2
修改前:
Drawcall 719 主线程20.3ms 渲染线程14.9ms 49FPS
修改后:
Drawcall 603 主线程15.0ms 渲染线程9.3ms 66FPS
成果:
Drawcall 下降116, 主线程下降5.3ms, 渲染线程下降5.6ms,上升17 FPS
并且这还是没做lod的情况 如果加上lod 还能再降一点
表现优化
可以看到这个草体变白了,因为在做这个草体渲染的同时我还把草体融入了地形,.优化了表现,注意看草体和地形的接触点,画面表现优化,看起来自然很多,优化前看起来非常出戏(需要美术手动调草体材质,不仅费时,而且效果也不会很好),优化后像是地里长出来的,再给几张明显一点的图
融地形前:
融地形后:
同时优化草体的灯光图和AO问题:
草体直接用融地形的颜色,直接去掉草体的灯光烘焙,优化了灯光图,间接解决了草体的AO问题,美术烘焙草体的时候不需要AO,只想要接收阴影,现做法是在草下加灯光,非常费劲
相关文章:

unity草体渲染方案 GPU Instaning
有一天看项目里的FrameDebug发现在森林系的场景里草体的drawcall差不多有100多 主要是因为灯光贴图,位置等不一样导致的打断合批,导致一个批次只能渲染10个左右的草体 之前有了解过unity有接口(Graphics.DrawMeshInstanced)可以把…...

最近在西安召开的学术会议:EI检索超快,信息系统与计算技术领域!
第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8日-11月11日在中国西安盛大举行,由长沙理工大学主办,同济大学、西北工业大学联合协办。会议聚焦信息系统与计算技术等相关研究领域,广泛邀请国内外知…...
sRGB和伽马矫正
sRGB和伽马矫正 1. sRGB的含义: sRGB是一种色彩空间,全称为“标准红色-绿色-蓝色”(standard Red Green Blue)。它由惠普和微软在1996年共同开发,用于确保不同设备上色彩的一致性。 在sRGB中,“s”代表“…...

Summer School science communication project--Laptop Selection Suggestion
目录 Introduction Audiance Usage CPU What is a central processing unit (CPU) Notable makers of CPUs GPU Graphics Card: GPU The classifications of graphics cards The brands of graphics cards Dedicated Graphics Cards GeForce MX Series: GeForc…...

网络编程概念详解模拟回显客户端服务器
目录 1.网络中重要的概念 1)IP地址: 2)端口号: 3)协议 协议分层 OSI七层模型(教科书) TCP/IP五层模型 封装和分用 网络套接字 面试题:TCP/UDP的区别? UDP数据报套接字编程 模拟一个回…...
代码随想录第二十四天|动态规划(8)
目录 LeetCode 300. 最长递增子序列 LeetCode 674. 最长连续递增序列 LeetCode 718. 最长重复子数组 LeetCode 1143. 最长公共子序列 LeetCode 1035. 不相交的钱 LeetCode 53. 最大子序和 LeetCode 392. 判断子序列 总结 LeetCode 300. 最长递增子序列 题目链接&#…...
编程-设计模式 3:单例模式
设计模式 3:单例模式 定义与目的 定义:单例模式确保一个类只有一个实例,并提供一个全局访问点来访问该实例。目的:这种模式通常用于那些需要频繁访问且只需一个实例的对象,例如配置管理器、日志记录器等。 实现示例…...
Kaniko 构建 Docker 镜像
Kaniko 主要用于构建 Docker 镜像,而不是运行程序。它的主要用途是从 Dockerfile 构建容器镜像,但它并不负责运行容器或程序。以下是 Kaniko 的主要功能和局限性: 主要功能 构建镜像:Kaniko 从 Dockerfile 构建容器镜像。它通过…...

Javascript常见算法(每日两个)
合并两个有序链表 在JavaScript中,合并两个有序链表通常指的是将两个已经按照某种顺序(如升序或降序)排列的链表合并成一个新的有序链表。由于JavaScript本身不直接支持链表数据结构,我们通常会用对象或数组来模拟链表的行为。但…...

Spring -- 事务
Spring中事务的操作分为两类:(1)编程式事务 – 手动写代码操作事务(2)声明式事务 – 利用注解开启事务和提交事务 1. 编程式事务 准备Controller RestController RequestMapping("/user") public class UserInfoController {Autowiredprivate UserInfoService use…...

生命密码的破译者:AI如何学会读懂DNA语言?
引言 如果能像解读一本神秘的书籍那样,理解DNA的“语言”,将是多么令人兴奋的科学突破!如今,这正在逐步变为现实。科学家们训练出的AI模型GROVER正如一个勤奋的学生,学习着DNA的每一个“单词”和“语法”,…...

大数据信用报告查询哪家平台的比较好?
相信在搜索大数据信用的你,已经因为大数据信用不好受到了挫折,想详细了解一下自己的大数据信用,但是找遍了网络上的平台之后才发现,很多平台都只提供查询服务,想要找一个专业的平台查询和讲解很困难。下面本文就为大家…...
Java高级Day24-集合最后补充
75.HashTable 基本介绍: 存放元素的健值对 即K-V hashtable的键和值都不能为null,否则会抛出NullPointerException hashtable使用方法基本上和HashMap一样 hashtable是线程安全的,hashmap是线程不安全 扩容机制: 底层有数组…...

C++入门:C语言到C++的过渡
前言:C——为弥补C缺陷而生的语言 C起源于 1979 年,当时 Bjarne Stroustrup 在贝尔实验室工作,面对复杂软件开发任务,他感到 C 语言在表达能力、可维护性和可扩展性方面存在不足。 1983 年,Bjarne Stroustrup 在 C 语言…...

了解MVCC
概念 MVCC,全称Multi-Version Concurrency Control,即多版本并发控制,是一种并发控制的方法,维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现…...

WPF自定义控件的应用(DynamicResource的使用方法)
1 DynamicResource的使用方法 可以在字典文件 的抬头区写入数: <SolidColorBrush x:Key"PrimaryBackgroundColor" Color"#FFABAdB3"/><SolidColorBrush x:Key"TextBox.MouseOver.Border" Color"#FF7EB4EA"/>&l…...
Postgresql数据库密码忘记的解决
当您忘记PostgreSQL数据库的密码时,可以通过以下步骤来重置密码。这些步骤在Windows和Linux操作系统上大体相同,但具体操作路径和命令可能有所不同。 步骤一:找到并修改pg_hba.conf文件 定位安装目录: Windows:通常在PostgreSQL的安装目录下的data文件夹中。Linux:位置可…...
Flink SQL 基础操作
Flink SQL是建立在Apache Flink之上的SQL处理引擎,它允许用户以SQL的方式处理流数据和批数据。以下是一些Flink SQL的基础操作: 一、环境准备 1.启动flink集群 ./start-cluster.sh启动sql-client ./sql-client.sh二、数据源定义 创建表(…...

海思AE模块Lines_per_500ms参数的意义
基础知识 1秒(S)1000毫秒(ms)1000_000微妙(s)1000_000_000纳秒(ns) 1GHz1000Mhz1000_000KHz1000_000_000Hz 1Hz1/s 抗频闪原理 海思AE模块参数中有一个LinesPer500ms的参数,意思为500ms对应的曝光行数。此个参数和抗频闪有关。 我们知道: 50HZ…...

【代码随想录】区间和——前缀和方法
本博文为《代码随想录》学习笔记,原文链接:代码随想录 题目 原题链接:58. 区间和(第九期模拟笔试) 题目描述 给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...