做网站怎么单独写手机页面/今天的新闻最新消息
目录
1.虚幻引擎性能优化 (附0跳转Unity对应机制)
hard reference and soft reference
1. 硬引用(Hard Reference)
2. 软引用(Soft Reference)
3. 使用原则
2.空间梯度转法线
DDX DDY节点
编辑
3.ddx和ddy节点深入解释
1. DDX 和 DDY 的定义
2. 微积分解释
3. 应用场景
4. 公式和示例
总结
4.偏导数
1. 偏导数的定义
2. 几何解释
3. 计算偏导数的例子
4. 偏导数的应用
附0:C#程序化生成不同高度的颜色C#:
逆插值函数解释:
附1:Unity中类似硬引用和软引用的机制
1.虚幻引擎性能优化 (附0跳转Unity对应机制)
hard reference and soft reference
在虚幻引擎中,硬引用(Hard Reference)和软引用(Soft Reference)各自有不同的内存管理和加载行为。硬引用保证了资源在对象加载时立即可用,但会占用更多内存;软引用则适合需要动态加载的资源,在优化加载时间和内存使用方面有很大优势,但需要管理资源的加载和卸载。
1. 硬引用(Hard Reference)
- 定义:硬引用是直接引用资源对象的方式。使用硬引用的对象在加载时会立即加载其所有的被引用资源。
- 加载行为:一旦对象加载,所有硬引用的资源会被强制加载到内存中。这可能会导致较长的加载时间,尤其是当引用的资源较大时。
- 内存管理:硬引用的资源始终驻留在内存中,直到引用它们的对象被销毁。
- 适用场景:适合始终需要的资源,例如核心游戏逻辑和界面中持续显示的资源。
- 示例:
UObject* MyObject
是一个硬引用,编译时直接生成对象引用。
2. 软引用(Soft Reference)
- 定义:软引用(也称为“弱引用”)是一种延迟加载的引用方式。资源在使用时才被加载到内存。
- 加载行为:使用软引用的资源不会立即加载,只有在明确请求资源时才会被加载。这减少了初始加载时间。
- 内存管理:软引用的资源只有在需要时才加载,可以在不需要时从内存中卸载,节省内存。
- 适用场景:适合非关键资源或不一定总是需要的资源,例如备用的武器模型、装饰对象等。
- 示例:
TSoftObjectPtr<UObject> MySoftObject
是一个软引用,需要在代码中手动调用LoadSynchronous()
方法或使用异步加载来实际加载资源。
3. 使用原则
- 硬引用:用于常驻内存、频繁使用或关键的资源,以确保稳定性。
- 软引用:用于可选资源或在某些特定条件下才需要的资源,优化内存和加载时间。
2.空间梯度转法线
DDX DDY节点
- DDX DDY节点使用:可以使用它们来计算法线贴图的屏幕空间梯度。
- 虚幻引擎中的heightToNormal节点解释: cheap blur by stacking them or to generate outlines/lines by color difference
相关微积分解释:
- 平均斜率是用来描述整个区间上函数变化的整体趋势的
- C2 secondary derivative match up.二阶导数表示切线斜率变化曲线
- C0 make sure the output of approximation equals to the original function
- C1 make sure the derivative equals to the derivative of the original function
泰勒级数展开的图例表达
3.ddx和ddy节点深入解释
DDX
和 DDY
节点用于计算纹理或材质输入的屏幕空间导数。这些节点的原理涉及微积分中的偏导数,可以帮助实现抗锯齿和 mipmapping 等效果。以下是这两个节点的微积分解释:
1. DDX 和 DDY 的定义
- DDX (Partial Derivative in X direction):
DDX
节点计算出材质输入在屏幕 X 方向上的偏导数,表示在屏幕水平轴上输入值的变化率。 - DDY (Partial Derivative in Y direction):
DDY
节点计算出材质输入在屏幕 Y 方向上的偏导数,表示在屏幕垂直轴上输入值的变化率。
简单来说,DDX
和 DDY
分别对应输入在屏幕上水平方向和垂直方向的变化率。这些偏导数是基于像素间的差异计算的,帮助确定每个像素应该显示的细节程度。
2. 微积分解释
在微积分中,偏导数表示一个函数沿某个变量方向上的变化率。在这里,材质的输入值 f(x, y)
是一个二维函数,DDX
和 DDY
分别计算沿 X 和 Y 方向的变化率:
- DDX(f) ≈ ∂f∂x\frac{\partial f}{\partial x}∂x∂f
- DDY(f) ≈ ∂f∂y\frac{\partial f}{\partial y}∂y∂f
具体来说,DDX(f)
近似地表示相邻像素之间的输入值在 X 方向上的变化量,而 DDY(f)
表示相邻像素之间在 Y 方向上的变化量。虚幻引擎通过采样相邻像素来计算这些导数,称为“有限差分法”。
3. 应用场景
- Mipmapping:当计算出导数后,可以知道当前像素输入的变化速度。如果变化率大,则需要选择更低级别的纹理贴图(即更模糊的 mip 级别),以减少纹理细节上的锯齿。
- 抗锯齿:对于一些需要平滑处理的效果(例如法线贴图或细节纹理),使用导数可以帮助实现更平滑的过渡。
- 流动效果:如果使用
DDX
和DDY
计算偏导数,可以得到材质在屏幕上的流动方向或变化趋势,从而控制纹理偏移、UV 扭曲等。
4. 公式和示例
假设 f(x, y)
是一个像素在屏幕上的 UV 坐标或颜色值,DDX(f)
和 DDY(f)
的计算方式如下:
- DDX(f) ≈ f(x+Δx,y)−f(x,y)f(x + \Delta x, y) - f(x, y)f(x+Δx,y)−f(x,y)
- DDY(f) ≈ f(x,y+Δy)−f(x,y)f(x, y + \Delta y) - f(x, y)f(x,y+Δy)−f(x,y)
这里 Δx\Delta xΔx 和 Δy\Delta yΔy 是屏幕上相邻像素的距离。在材质编辑器中使用 DDX
和 DDY
可以将这些偏导数用于纹理的自适应采样、抗锯齿、动态效果等。
总结
DDX
和DDY
是计算偏导数的工具,提供材质输入在 X 和 Y 方向上的变化率。- 这些节点帮助虚幻引擎根据屏幕空间的变化来动态调整材质,进而优化视觉效果,减少锯齿。
4.偏导数
1. 偏导数的定义
假设有一个多元函数 f(x,y)f(x, y)f(x,y),其值依赖于变量 xxx 和 yyy。偏导数表示 fff 相对于其中一个变量的变化率:
- 相对于 xxx 的偏导数:记为 ∂f∂x\frac{\partial f}{\partial x}∂x∂f,表示在 yyy 不变的情况下,fff 随 xxx 的变化率。
- 相对于 yyy 的偏导数:记为 ∂f∂y\frac{\partial f}{\partial y}∂y∂f,表示在 xxx 不变的情况下,fff 随 yyy 的变化率。
偏导数符号中的 ∂\partial∂ 用于区别普通导数 ddd,因为偏导数涉及多元函数的多个变量。
2. 几何解释
在几何上,偏导数可以理解为函数图形在某个方向上的“斜率”。例如:
- ∂f∂x\frac{\partial f}{\partial x}∂x∂f 表示函数 f(x,y)f(x, y)f(x,y) 在 xxx 方向的斜率,即图形在 xxx 方向的变化趋势。
- ∂f∂y\frac{\partial f}{\partial y}∂y∂f 表示函数 f(x,y)f(x, y)f(x,y) 在 yyy 方向的斜率。
可以把它想象成在一个山丘上,分别沿东西(xxx 方向)和南北(yyy 方向)走一步,查看高度的变化。
3. 计算偏导数的例子
假设 f(x,y)=x2+y2f(x, y) = x^2 + y^2f(x,y)=x2+y2,计算它的偏导数:
-
相对于 xxx 的偏导数:保持 yyy 不变,对 xxx 求导数:
∂f∂x=2x\frac{\partial f}{\partial x} = 2x∂x∂f=2x -
相对于 yyy 的偏导数:保持 xxx 不变,对 yyy 求导数:
∂f∂y=2y\frac{\partial f}{\partial y} = 2y∂y∂f=2y
这表示在 xxx 增大时,f(x,y)f(x, y)f(x,y) 的变化率为 2x2x2x;在 yyy 增大时,f(x,y)f(x, y)f(x,y) 的变化率为 2y2y2y。
4. 偏导数的应用
偏导数广泛用于计算中,特别是在涉及到二维或多维数据的场合,例如:
- 机器学习:用于优化函数,调整模型参数。
- 物理学:描述多维空间中不同方向的变化,例如电场、重力场的分布。
- 计算机图形学:如虚幻引擎中的
DDX
和DDY
,用于计算纹理在屏幕空间中的变化率,从而动态调整渲染效果。
附0:C#程序化生成不同高度的颜色C#:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;[RequireComponent(typeof(MeshFilter))]
public class mesh_generator : MonoBehaviour
{Mesh mesh;Vector3[] vertices;int[] triangles;Color[] colors;public int xSize = 20;public int zSize = 20;public Gradient gradient;float minTerrainHeight;float maxTerrainHeight;//normalize height//vertex count = (xSize+1)*(zSize+1)void Start(){mesh = new Mesh();GetComponent<MeshFilter>().mesh = mesh;CreateShape();UpdateMesh();}// Update is called once per framevoid CreateShape(){vertices = new Vector3[(xSize + 1) * (zSize + 1)];for (int i = 0,z =0; z <= zSize; z++){for(int x = 0; x <= xSize; x++){float y = Mathf.PerlinNoise(x*.4f, z * .4f) * 2f;//*.3f for scalevertices[i] = new Vector3(x, y, z);if(y>maxTerrainHeight)maxTerrainHeight = y;if(y<minTerrainHeight)minTerrainHeight = y;//这两行代码用于跟踪地形的最高和最低点。//每生成一个新的 y 值(高度),都会检查它是否比当前的 maxTerrainHeight //或 minTerrainHeight 更大或更小//从而更新这些变量。minTerrainHeight 和 maxTerrainHeight 在后续用于颜色渐变//(例如,生成一个从山谷到山顶的颜色过渡)。i++;}}triangles = new int[xSize*zSize*6];int vert = 0;int index =0;for (int z = 0; z < zSize; z++){for (int x = 0; x < xSize; x++){triangles[index + 0] = vert + 0;triangles[index + 1] = vert + xSize + 1;triangles[index + 2] = vert + 1;triangles[index + 3] = vert + 1;triangles[index + 4] = vert + xSize + 1;triangles[index + 5] = vert + xSize + 2;vert++;index += 6;}vert++;//3*3, 行结束后 vert++,vert = 4, index = 18}//uvs = new Vector2[vertices.Length];colors = new Color[vertices.Length];//创建一个 colors 数组,长度同 vertices 顶点数组。存储每个顶点对应颜色值。for (int i = 0, z = 0; z <= zSize; z++){for (int x = 0; x <= xSize; x++){//uvs[i]=new Vector2((float)x/xSize,(float)z/zSize);float height = Mathf.InverseLerp(minTerrainHeight, maxTerrainHeight, vertices[i].y);//Mathf.InverseLerp 函数将 vertices[i].y(顶点的高度)映射到一个 0 到 1 的范围。colors[i] = gradient.Evaluate(height);//gradient.Evaluate(height) 根据高度 height 从 gradient 中获取对应的颜色。//将计算得到的颜色存储到 colors[i] 中,与顶点 vertices[i] 一一对应。i++;}}}void UpdateMesh(){mesh.Clear();mesh.vertices = vertices;mesh.triangles = triangles;mesh.colors = colors;mesh.RecalculateNormals();}
}
逆插值函数解释:
Mathf.InverseLerp(float min, float max, float value)
参数解释:
min
: 范围的最小值。max
: 范围的最大值。value
: 需要进行归一化的值。result=value−min/max−min
这个函数之所以叫做逆向插值(Inverse Lerp),是因为它完成了与普通**线性插值(Lerp)**相反的操作。
Mathf.Lerp(float a, float b, float t)
给定两个值 a
和 b
,以及插值系数 t
(在 [0, 1] 范围内),返回 a
和 b
之间按 t
的比例插值后的值value。
Mathf.InverseLerp(float min, float max, float value)
的作用是给定 value
在 min
和 max
之间,反向求解位置比例 t
,表示 value
距离 min
和 max
的相对位置。
附1:Unity中类似硬引用和软引用的机制
在 Unity 中,没有完全相同的术语或系统。但有以下对应机制:
- 直接引用类似于硬引用,适合需要常驻的资源。直接引用通常指的是在脚本中直接通过
public
或[SerializeField]
变量引用资源。 - Addressables 中的
AssetReference
提供了类似软引用的功能,支持延迟加载和内存管理。 Resources.Load()
也可以用来动态加载资源,但缺少Addressables
的强大内存管理功能。
Unity 的 Addressables
是官方推荐的资源管理工具,它更接近于 Unreal Engine 的软引用,特别适合需要动态加载和卸载资源的项目。
相关文章:

UE hard/soft reference| DDX DDY | Unity pcg color
目录 1.虚幻引擎性能优化 (附0跳转Unity对应机制) hard reference and soft reference 1. 硬引用(Hard Reference) 2. 软引用(Soft Reference) 3. 使用原则 2.空间梯度转法线 DDX DDY节点 编辑 …...

macOS 应用公证指南:使用 fastlane 实现自动化公证流程
背景介绍 在 macOS 系统上,为了保护用户安全,Apple 要求开发者对未通过 Mac App Store 分发的应用程序进行公证(Notarization)。如果应用程序没有经过公证,用户在运行时会看到警告弹窗,这会影响用户体验。虽然开启沙箱模式的应用可以直接通过 App Store 分发来避免这个问题…...

深度学习:解密图像、音频和视频数据的“理解”之道20241105
🔍 深度学习:解密图像、音频和视频数据的“理解”之道 深度学习已然成为人工智能领域的中流砥柱,它如何处理不同类型的数据(如图像、音频、视频)?如何将这些数据转换成计算机能理解和学习的“语言”&#…...

uniapp 实现瀑布流
效果演示 组件下载 瀑布流布局-waterfall - DCloud 插件市场...

计算机毕业设计 | springboot+vue智慧工地管理系统 前后端分离后台管理(附源码+文档)
1,项目介绍 管理信息是重要的资源、管理信息是决策的基础。同时管理信息是实施管理控制的依据以及是联系组织内外的纽带。对于企业,最重要的5大资源包括人、物资、能源、资金、信息。人、物资、能源、资金是可以看见的有形资源,信息则是一种…...

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装
一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载,传false不…...

Ubuntu下如何管理多个ssh密钥
Ubuntu下如何管理多个ssh密钥 前言 我一直在逃避这个问题,误以为我能够单纯地用一个 ssh 走天下。 好吧,现实是我不得不管理多个 ssh 做,那就写个博客总结一下吧。 查阅后发现前人已经总结了不少,那我就结合之后ÿ…...

[vulnhub] DarkHole: 1
https://www.vulnhub.com/entry/darkhole-1,724/ 端口扫描主机发现 探测存活主机,184是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 09:59 CST Nmap scan report for 192.168.75.1 Host is up (0.00027s latency). MA…...

商淘云连锁企业管理五大功能 收银系统助力门店进销存同步
连锁企业管理的五大功能相互协作,共同确保连锁门店能够高效运营、降低成本、提升客户满意度,并最终实现盈利目标。今天,商淘云分享连锁企业管理的五大功能: 1、进销存管理:进销存管理是连锁企业的基础功能之一…...

统信UOS开发环境支持Perl
UOS凭借广泛的编程语言支持,为开发者构建了一个高效灵活的开发环境,无需担心环境兼容性问题。 文章目录 一、环境部署1. Perl开发环境安装2. Perl开发环境配置环境变量配置模块管理器编辑器集成调试工具二、代码示例文件处理Web开发三、常见问题1. 依赖管理问题2. 性能问题3.…...

Stable Diffusion Web UI - ControlNet 姿势控制 openpose
openpose 是 ControlNet 中常用的控制模式之一。 通过 openpose 可以锁定人物姿势,把姿势信息传递给 Stable Diffusion 扩散模型,让其在扩散生成图片的时候遵照特定的任务姿势。 通过 openpose 能够得到类似如下效果: 同样的姿势࿰…...

java中Json字符串转换
文章目录 map与json互转map转jsonmap形式的json转map list与json互转list转jsonlist形式的json转list map形式的json串中含有列表转列表 map与json互转 map转json JSONObject.toJSONString(map); public static void main(String[] args) {Map<String, Object> map n…...

springboot处理跨域请求
在Spring Boot中处理跨域请求(CORS, Cross-Origin Resource Sharing)通常有几种方法。跨域请求是指从一个域名的网页去请求另一个域名下的资源。为了安全起见,浏览器会阻止这种请求,除非服务器明确允许。 方法一:使用…...

S32G-VNP-RDB2开发环境搭建
下载官方镜像 刷机 cat /proc/partition or df -lh //查看sdcard卡再/dev目录挂在点 export DEVSD/dev/sdb sudo dd iffsl-image-auto-s32g274ardb2.sdcard of${DEVSD} bs1M && sync以上将SD-card插入就可以将开发板启动,串口接UART1,进入Lin…...

分布式唯一ID生成(二): leaf
文章目录 本系列前言号段模式双buffer优化biz优化动态step源码走读 雪花算法怎么设置workerId解决时钟回拨源码走读 总结 本系列 漫谈分布式唯一ID分布式唯一ID生成(二):leaf(本文)分布式唯一ID生成(三&am…...

【开发工具】Git
目录 核心概念基本命令工作流程Commit message Git 是一个分布式版本控制系统,用于跟踪在软件开发过程中对文件的修改。它允许多个开发者协作处理项目,并且可以有效地管理代码的历史记录。以下是 Git 的一些核心概念和功能: 核心概念 仓库 (R…...

【go从零单排】结构嵌套struct embedding
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在Go语言中,结构体嵌套(struct embedding)是一…...

Django 详细入门介绍
Django 详细入门介绍 1. 什么是 Django? Django 是一个开源的、用 Python 编写的 Web 框架。它遵循了“快速开发”和“不要重复自己”(DRY)的设计原则,旨在简化复杂的 Web 开发。Django 提供了多种强大的功能模块,如…...

万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN
🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总万字长文解读…...

HDR视频技术之二:光电转换与 HDR 图像显示
将自然界中的真实场景转换为屏幕上显示出来的图像,往往需要经过两个主要的步骤:第一个是通过摄影设备,将外界的光信息转换为图像信息存储起来,本质上是存储为数字信号;第二个是通过显示设备,将图像信息转换…...

【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销
一、Linux 概述 1. 应用领域 服务器领域 linux在服务器领域是最强的,因为它免费、开源、稳定。 嵌入式领域 它的内核最小可以达到几百KB, 可根据需求对软件剪裁,近些年在嵌入式领域得到了很大的应用。 主要应用:机顶盒、数字电视、网络…...

Redis的缓存问题与应对策略
Redis 作为一种高效的缓存系统,在高并发环境下应用广泛,但也面临一些缓存问题,以下是常见问题及其应对策略。 1. 缓存穿透 问题描述 缓存穿透是指请求的数据在缓存和数据库中都不存在,但大量请求直接到达数据库,从而给…...

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展,人们的…...

每日一题之成绩排序
在N(N<30)名运动员参加的体操比赛中,有K(K<10)名裁判给每位运动员分别打分, 按规则每名运动员最后得分需去掉一个最高分和一个最低分, 然后把其他裁判的打分相加,计算得出该运…...

QT Widget:使用技巧
1、Qt中的QString和const char *之间转换,最好用toStdString().c_str()而不是toLocal8Bit().constData(),比如在setProperty中如果用后者,字符串中文就会不正确,英文正常。 2、数据库处理一般建议在主线程,如果非要在…...

深入Zookeeper节点操作:高级功能与最佳实践
Zookeeper之节点基本操作(二) 在《Zookeeper之节点基本操作(一)》中,我们介绍了如何创建、读取、更新、删除节点的基本操作。接下来将进一步探讨Zookeeper中节点的进阶操作和更多细节,包括节点的监视&…...

【C++】map和set的介绍及使用
前言: map和 set 是 C STL(标准模板库)中的两种非常重要的容器,它们基于一种叫做平衡二叉搜索树(通常是红黑树)的数据结构来实现。在 C 中,map 是一个键值对容器,set 只存储唯一的键…...

从0开始搭建一个生产级SpringBoot2.0.X项目(十)SpringBoot 集成RabbitMQ
前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot集成RabbitMQ RabbitMQ中的一些角色: publisher:生产者 consumer:消费者 exchange个:交换机,负责消息路由 queue:队列…...

GNU/Linux - /proc/sys/vm/drop_caches
/proc/sys/vm/drop_caches 是 Linux 中的一个特殊文件,允许用户释放系统内存中的各种缓存。让我们深入了解一下这项功能的细节: The /proc/sys/vm/drop_caches is a special file in Linux that allows users to free up various caches in the systems …...

ubuntu 22.04 如何调整进程启动后能打开的文件数限制
在 Ubuntu 22.04 中,可以通过修改系统配置来调整进程启动后能够打开的文件数软限制。软限制是指操作系统允许单个进程打开的文件描述符的最大数量。以下是调整该限制的方法: 1. 查看当前限制 首先,你可以通过 ulimit 命令查看当前的软限制和…...