Unity Shader exp 函数的算法与渲染应用

Unity Shader延迟渲染 原理 之前我们在一直使用的光照方式叫做前向渲染或正向渲染。它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。 它非常容易理解,也很容易实现,但是同时它对程序性能的影响也很大,因为对于每一个需要渲染的物体,程序都要对每一个光源每一个需要渲染的片段进行迭代,这是非常多的!因为大部分片段着色器的输出都会被之后的输出覆盖. 延迟渲染为了解决上述问题... 阅读详情

从指数函数的数学本质出发,深入它在 URP 渲染管线中的六个实战场景

一、数学基础:exponential 是什么

exp(x) 是以自然常数 e ≈ 2.71828 为底的指数函数,即 ex。 它是微积分中唯一一个"导函数等于自身"的函数,这个性质直接决定了它在物理衰减、概率分布、信号处理中的核心地位。

关键数学性质

  • 恒正性:exp(x) > 0 对所有实数 x 成立——在渲染中天然适合做权重和衰减因子。
  • 导函数不变:d/dx eˣ = eˣ,意味着指数衰减的变化率正比于当前值。
  • 幂等性质:exp(a)·exp(b) = exp(a+b),这使得多次指数衰减可复合为单次。
  • 逆关系:exp 与 log(自然对数)互为反函数:exp(log(x)) = x。

直觉理解:exp(x) 描述的是"每前进一个单位,量值乘以固定因子"的过程。 在物理世界中,光的吸收、声音的衰减、放射性衰变都遵循指数规律——所以 exp 函数在渲染中有大量直接对应物理模型的用途。

二、GPU 上的 exp:指令级实现

在 HLSL/ShaderLab 中,exp(x) 看起来只是一个函数调用,但它在 GPU 硬件上对应的是专门的超越函数单元(Transcendental Function Unit)。 理解其底层实现有助于做出正确的精度与性能权衡。

exp 与 exp2 的区别

GPU 硬件原生支持的是 exp2(x)(以 2 为底),而非 exp(x)(以 e 为底)。 exp(x) 在编译时被转换为 exp2(x * log2(e)),即 exp2(x * 1.442695...)。 这意味着调用 exp() 比 exp2() 多一次乘法。

Half Precision 下的精度问题

在移动端或使用 half 类型时,exp() 的数值稳定性需要特别关注:

  • 下溢:exp(x) 在 x < -11.1 (half) 或 x < -88.7 (float) 时结果为零(下溢到 0)。
  • 上溢:exp(x) 在 x > 11.1 (half) 或 x > 88.7 (float) 时溢出到无穷大。
  • 安全区间:在 half precision 下,输入应保持在 [-11, 11] 之内。

实践建议:对 half precision,优先使用 exp2() 而非 exp()。 因为它省去了一次 log2(e) 的乘法,且许多 GPU 的 exp2 指令比 exp 指令延迟更低。 在人眼感知不敏感的场合(如雾效、辉光衰减),half 精度完全够用。

函数原生指令额外开销推荐场景
exp(x)exp2(x * log2e)一次乘法物理光照模型
exp2(x)原生 exp2 指令无雾效、衰减、Bloom
rcp(exp(x))两次指令高可改用 exp(-x) 代替
pow(e,x)exp2(x * log2e)比 exp(x) 多一步不推荐替代 exp

三、应用案例一:指数雾(Exponential Fog)

这是 exp 在渲染中最经典的应用。光线在介质中传播时,被散射和吸收的比例随距离呈指数增长, 因此到达相机的光强按 exp(-density * distance) 衰减。

数学模型

Visibility = exp(-density · distance)

URP 内置了两类指数雾公式:

  • exp(-density * d) —— 简单指数雾
  • exp2(-density * d²) —— 指数平方雾(Exponential Squared),近距离更通透

URP 中的 Shader 实现

// URP 指数雾(简化自 ShaderLibrary/Fog.hlsl) half ComputeFogFactor(float coord) { float fogIntensity = exp(-_FogDensity * coord); return saturate(fogIntensity); } half4 MixFog(half4 color, float fogFactor) { return lerp(_FogColor, color, fogFactor); }

性能提示:指数平方雾 exp2(-density * d * d) 本质上是用平方项 d² 替代 d, 使近距离衰减更平缓、远距离衰减更剧烈。在移动端可用 half 精度直接计算,无需额外开销。

四、应用案例二:HDR 色调映射(Tone Mapping)

渲染管线输出的 HDR 颜色值范围可能远超 [0, 1],需要通过色调映射将其压缩到 LDR 显示范围。 指数色调映射是 最简洁且视觉效果自然的方案之一。

指数色调映射公式

Lout = 1 − exp(−exposure · Lin)

与 Reinhard 和 ACES 相比,指数映射的特点是在高光区域有更柔和的肩部(shoulder)曲线。

Shader 代码

// 指数色调映射 —— 无分支、性能友好 half3 ExponentialToneMap(half3 hdrColor, half exposure) { return 1.0 - exp(-exposure * hdrColor); } // 带白点(white point)调节的版本 half3 ExpToneMapWP(half3 color, half exposure, half whitePoint) { return (1.0 - exp(-exposure * color)) / (1.0 - exp(-exposure * whitePoint)); }

五、应用案例三:Bloom 与柔和衰减

Bloom 后处理的核心是多级降采样 + 高斯模糊。但标准高斯核在 shader 中需要多次采样。 指数衰减核(类似拉普拉斯分布 exp(-|x|/σ))可以近似高斯模糊的视觉效果, 同时显著减少采样次数。

分离指数模糊(Separable Exponential Blur)

// 水平方向单次指数模糊(配合垂直 pass 实现分离卷积) half4 ExpBlurHorizontal(Varyings input) : SV_Target { const half sigma = _BlurSigma; half4 color = 0.0; half totalWeight = 0.0; for (int i = -_SampleCount; i <= _SampleCount; i++) { half offset = i * _BlitTexture_TexelSize.x * _KernelScale; half weight = exp(-abs(i) / sigma); color += SAMPLE_TEXTURE2D(_BlitTexture, sampler_LinearClamp, input.uv + float2(offset, 0)) * weight; totalWeight += weight; } return color / totalWeight; }

技巧:如果 σ ≥ 1,甚至可以用 Kawase Blur——它是迭代式指数模糊, 每次迭代只采样 4 个偏移位置,在移动端性能极好。每一轮 Kawase pass 本质上是多次 exp 衰减的复合。

六、应用案例四:基于 exp 的菲涅尔效果

标准 Schlick 菲涅尔使用 pow(1 - NdotV, 5),而 指数菲涅尔 使用 exp(-k · NdotV)。后者在掠射角(grazing angle)附近过渡更自然, 且在某些移动 GPU 上性能更好(exp 指令比 pow 指令延迟低)。

两版代码对比

七、应用案例五:SDF 平滑最小运算

在基于有符号距离场(SDF)的渲染中——比如 UI 圆角、粒子软边缘、VFX Graph——需要将多个形状的 SDF 平滑地融合在一起。基础的 min(a, b) 产生硬边,而基于 exp 的平滑最小运算能产生自然的有机过渡。

核心公式

smin(a, b, k) = −(1/k) · log(exp(−k·a) + exp(−k·b))

其中 k 控制融合强度:k 越大边缘越锐利,k 越小过渡越柔和。 这个公式本质上是 LogSumExp 技巧在 SDF 领域的应用。

HLSL 实现

// 基于 exp 的 SDF 平滑最小运算 float SmoothMinExp(float a, float b, float k) { return -log(exp(-k * a) + exp(-k * b)) / k; } // 优化版:避免数值溢出 float SmoothMinExpSafe(float a, float b, float k) { float h = max(k - abs(a - b), 0.0) / k; return min(a, b) - h * h * k * (1.0 / 4.0); }

注意:上述 Safe 版本是原 exp-log 公式的二次近似,虽然省去了 exp 和 log 的开销, 但在极端 k 值下会偏离精确结果。对于 UI 粒子效果等对精度要求不高的场景推荐使用; 对关键视觉效果建议保留精确的 exp-log 版本。

八、应用案例六:自定义光照衰减

URP 默认的光照衰减由 DistanceAttenuation 纹理查找驱动,但在需要 物理准确的点光源 / 聚光灯衰减时,exp 能提供更逼真的结果。 物理上,光强遵循平方反比定律,配合指数项可以模拟大气散射造成的额外衰减。

物理衰减模型

Attenuation = exp(-scatter · distance) / (distance² + 1)

// URP 中替代默认衰减的物理衰减函数 half PhysicalAttenuation(float3 lightPos, float3 worldPos, half range, half scattering) { float dist = distance(lightPos, worldPos); // 范围裁剪(smooth 过渡) half rangeAtten = saturate(1.0 - exp(-5.0 * (1.0 - dist / range))); // 平方反比 + 指数散射衰减 half invSqr = 1.0 / (dot(dist, dist) + 1.0); half scatterAtten = exp(-scattering * dist); return rangeAtten * invSqr * scatterAtten; }

与默认衰减的对比

要点:exp 衰减在近距离比默认纹理查找更"亮",远距离更"暗"——这更符合物理直觉。 如果项目追求写实风格,建议用此方案替换默认衰减。注意 exp(-scattering * dist) 中的 scattering 参数需要美术调节,典型值在 0.1 ~ 2.0 之间。

九、性能考量与最佳实践

指令延迟参考

操作移动 GPU 延迟(周期)桌面 GPU 延迟(周期)备注
exp2()~8-16~4-8原生指令,最快
exp()~10-20~4-8多一次 mul
log()~8-16~4-8与 exp2 同级
pow(x,5)~20-40~8-16通用 pow 开销大
纹理采样~100-400~80-200带宽瓶颈

实践清单

  1. 能用 exp2 就别用 exp。 大多数渲染场景(雾效、衰减、Bloom)只需要衰减形状,不要求精确的自然指数底。 将公式重写为 exp2(-k*d) 只需调节 k 的数值即可。
  2. half 精度下做输入钳位。 在调用 exp 前用 clamp(x, -10, 10) 包裹输入,防止下溢 / 上溢产生 NaN 或无穷大, 后者在移动 GPU 上可能引发渲染异常。
  3. 用查表替代高频 exp 调用。 如果一个 shader 中 exp 调用超过 3 次且输入范围可预测, 考虑预计算一张 64 或 128 像素的 1D 纹理做查找——纹理采样虽然延迟高,但在大量重复调用时总吞吐更好。
  4. 注意 exp 的乘法结合律。 exp(a) * exp(b) = exp(a+b) 不仅数学上成立,在 shader 中也是重要的优化手段——合并多次 exp 为一次可以显著减少指令数。
  5. Kawase / 迭代 exp 优于大核 exp 模糊。 对 Bloom 等全屏后处理,4 轮 Kawase pass(每轮 4 次采样)比单轮 13-tap 指数模糊效果更好且带宽更低。

快速参考:常见公式的 exp2 改写

exp 版本等价的 exp2 版本参数转换
exp(-density * d)exp2(-k * d)k = density / ln(2) ≈ density * 1.4427
exp(-x² / 2σ²)exp2(-k * x²)k = 1 / (2σ² * ln(2))
1 - exp(-exposure * L)1 - exp2(-k * L)k = exposure / ln(2)
exp(-k · NdotV)exp2(-k' · NdotV)k' = k / ln(2)

十、总结

exp 是 shader 中最简洁而强大的数学函数之一。它把自然界的衰减规律直接映射到 GPU 指令, 让你用一行代码就能描述从雾效到菲涅尔的连续视觉现象。

应用场景核心公式GPU 友
指数雾exp(-density · d)★★★★★
HDR 色调映射1 − exp(−exposure · L)★★★★★
Bloom 指数模糊exp(−|x| / σ)★★★★☆
菲涅尔效果exp(−k · NdotV)★★★★★
SDF 平滑融合−log(Σ exp(−k·dᵢ)) / k★★★☆☆
物理光照衰减exp(−scatter · d) / (d² + 1)★★★★☆

一言以蔽之:在 URP shader 中,凡是需要"逐渐变弱""平滑过渡""物理衰减"的地方, exp 都应该是你的首选。理解它的数学本质和 GPU 实现细节,能让你在写 shader 时多一份从容、少一次试错。

Unity3D之高级渲染-Shader Forge 笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云视频网址:http://edu.csdn.net/lecturer/144 在前面的博客中给读者介绍了关于使用Shader Forge的应用,Shader Forge这个组件 阅读详情

相关推荐

Unity卡通渲染高效实现:8SSEDT算法生成SDF与实战应用

有向距离场(SDF)是一种用于表示形状边界的标量场技术,其核心原理是为空间中的每个点计算到目标表面的最短有向距离。这项技术通过将复杂的几何判断转化为连续的距离值查询,在实时渲染中展现出巨大价值,尤其适用于需要高质量、抗锯齿边缘的图形应用。在Unity的卡通渲染管线中,SDF能够精准生成风格化的轮廓线、内部阴影和光晕效果,解决了传统屏幕后处理或模型膨胀法在边缘质量和动态适应性上的不足。本文聚焦于8SSEDT这一高效的GPU距离变换算法,它通过两遍扫描在O(N)复杂度下生成精确的欧几里得距离场,并结合Compu

weixin_30256901的博客 358

unity_Shader延迟渲染

自己写了个延迟渲染的GBuffer,在网上搜索了一圈,想看看延迟渲染Deferred到底是咋回事,不知道是我不会查找,还是大佬们觉得延迟渲染太简单,大家都在讲原理,讲优点,讲缺点,可我就是想看看代码到底是咋回事,咋就这么难??!!!不多说了,根据自己的理解,加上shader代码,终于是加深了对延迟渲染的理解: (1)延迟渲染原理: 延迟渲染的实质,是先不要做迭代三角形,不做光照计算,而是先找出来你...

木马人 1494

Unity ShaderLibrary:开源Shader库的价值、集成与实战应用

Shader是计算机图形渲染中的核心组件,它运行在GPU上,负责处理顶点变换、光照计算和像素着色,是实现各种视觉特效的基础。其原理是通过编写特定的程序代码,控制渲染管线中的不同阶段,从而生成最终的图像。在游戏开发和实时渲染领域,Shader技术具有极高的价值,它能够实现从基础的材质表现到复杂的后处理效果,直接影响产品的视觉品质和艺术风格。常见的应用场景包括角色材质渲染、环境特效(如水体、火焰)、UI动效以及屏幕后处理等。本文聚焦于Unity ShaderLibrary这一开源资源集合,它汇集了社区验证过的P

weixin_33738578的博客 346

Unity Shader常用函数总结

  数学函数 Abs(x) :返回输入参数的绝对值; Clamp(x,a,b):如果x小于a则返回a;如果x大于b则返回b; Cross(A,B):返回两个三元向量的叉积; degree(x):输入参数为弧度值(radians),函数将其转换为角度值; determinant(m):计算矩阵的行列式因子; dot(A,B):返回A和B的点积; exp2(x): 2的x次...

陈高爽的博客 3374

Unity Shader终极教程:从ShaderLab到URP,掌握图形渲染核心

Shader是实时图形渲染的核心技术,它定义了GPU如何处理3D模型数据并生成最终像素颜色。其工作原理基于可编程渲染管线,通过顶点着色器和片元着色器控制几何变换与光照计算。掌握Shader编程能极大提升视觉表现力与性能优化能力,在游戏开发、VR/AR、影视特效等领域有广泛应用。本文以Unity引擎为实践平台,深入解析ShaderLab语法、URP渲染管线适配、光照模型实现等关键技术,帮助开发者突破图形编程瓶颈,实现从功能实现到体验塑造的跨越。

weixin_33984032的博客 314

Unity可视化着色器编辑:Shader Forge 1.3.8核心节点解析与实战应用

着色器(Shader)是实时图形渲染的核心组件,它通过一系列数学运算和纹理采样,控制模型表面每个像素的最终颜色与光照表现。其工作原理本质上是GPU上运行的一段程序,处理从顶点到片段的图形数据流。在游戏开发与计算机图形学领域,可视化着色器编辑工具通过节点图(Node-Based Graph)的方式,将复杂的代码逻辑转化为直观的连线操作,极大降低了技术美术和程序员的创作门槛,提升了材质效果的原型验证与迭代效率。这类工具的核心技术价值在于实现了着色器开发的民主化,使得非专业程序员也能参与构建复杂的视觉特效。其典型

sunjhgq的专栏 725

Unity Shader中常用的函数

函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回ture; 否则返回flase。&&运算 any(x) 输入参数只要有其中一个不为0,则返回true。 asin(x) 反正弦函数,输入参数取值区间为,返回角度值范围为, atan(x) 反正切函数,返回...

CDPDD的博客 1764

3DGS球谐函数原理与Unity实现:从数学到实时渲染

球谐函数(Spherical Harmonics, SH)是定义在球面上的一组正交基函数,常用于高效编码与重建球面函数。其原理类似于傅里叶变换,通过不同阶次的基函数线性组合,能够紧凑地表示复杂的、与方向相关的信号,如光照或材质外观。在计算机图形学中,球谐函数的核心技术价值在于其计算高效性和旋转不变性,使其成为实时渲染领域表达环境光照、漫反射全局光照和视图相关外观的理想工具。典型的应用场景包括游戏中的预计算辐射度传输(PRT)、环境光遮蔽以及新兴的3D高斯泼溅(3D Gaussian Splatting, 3

weixin_33701564的博客 438

Unity Shader 内置函数

https://blog.csdn.net/a6627651/article/details/50680360   编写Unity Shader时有很多内置函数,在网上查找了一些,把他们记录了下来,以供大家参考使用 参考网址:http://www.cppblog.com/lai3d/archive/2008/10/23/64889.html 这个是MSDN上的,DirectX Docume...

SHY不小心 4681

Unity URP水体渲染:动态泡沫与深度交互的Shader Graph实现

在实时图形渲染中,水体效果是提升场景真实感与沉浸感的关键技术。其核心原理在于通过深度信息计算、噪声纹理混合以及交互数据驱动,模拟水体的光学特性与物理行为。从技术价值看,一套高效的水体系统能显著增强游戏或应用的视觉表现力,尤其在开放世界、模拟仿真等场景中至关重要。具体到工程实践,开发者常利用可编程渲染管线(SRP)和可视化着色器工具(如Shader Graph)来构建模块化方案,这兼顾了开发效率与性能可控性。本文聚焦于Unity URP管线,详细解析如何结合Custom Renderer Feature与Sh

weixin_30617737的博客 339

uniapp监听扫码枪键盘事件|无输入框式监听

一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备。当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup。

tcy9099的专栏 9750

unity shader shaderLab 手册

本文出处:http://blog.csdn.net/lcbcsdn/article/details/46848125 (1)数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回ture; 否则返回flase。&&运算 any(x) 输入参数只要有其中一个不为0,则返回true。 asin(x)

kz2313456的博客 2219

ADC选型实战:从参数指标到精准应用的工程指南

本文深入解析ADC(模数转换器)选型的关键参数与实战技巧,涵盖分辨率、转换误差等核心指标,并提供高精度温度测量、高速数据采集等五大应用场景的选型指南。通过实际案例和代码示例,详细讲解校准方法、功耗优化策略及常见问题排查,帮助工程师实现从参数指标到精准应用的工程实践。

weixin_29166013的博客 326

Unity中Shader变体优化

在Shader中,一般有两个方面的优化:一方面是内存优化(即变体优化);一方面是渲染优化(即Shader中计算的优化)。我们这篇文章来了解一下Shader变体的优化。

楠溪泽岸的博客 4531

硬件即代码:用软件工程思维拆解F450无人机装配的模块化设计哲学

本文探讨了如何用软件工程思维重构DJI-F450无人机的模块化设计,将硬件装配提升为可编程系统。通过硬件抽象层、控制系统分层架构和扩展槽位设计模式,展示了无人机装配的模块化哲学,并结合实际案例说明如何优化性能与安全性。

weixin_29294975的博客 386

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 726

Unity Shader中Lerp函数详解:从线性插值原理到实战应用

线性插值是计算机图形学中的基础数学概念,用于在两个数值或向量之间进行均匀过渡。其核心原理是通过插值系数t在起点A和终点B之间按比例计算中间值,公式为A+(B-A)*t。在Shader编程中,这一原理被封装为lerp函数,成为实现平滑混合与动态过渡的瑞士军刀。它的技术价值在于能够将静态参数动态化,将生硬边界柔和化,是创造自然视觉效果的关键工具。应用场景广泛涵盖颜色混合、纹理融合、效果强度控制以及顶点动画等多个领域。本文聚焦Unity Shader中的lerp函数,深入解析其数学本质,并通过纹理混合和溶解效果等

weixin_30736301的博客 361

【ROS2】RViz2加载URDF模型文件

1)运行RViz2rviz22)添加组件:RobotModel3)选择通过文件添加4)选择URDF文件,此时会报错,需要修改Fixed Frame为map即可

郭老二 1450

Unity URP中Kajiya-Kay头发渲染Shader实现与穿模解决

在实时渲染中,各向异性光照是模拟丝绸、金属拉丝及头发等表面特性的关键技术,其原理在于表面微结构导致光线反射随观察方向变化而产生方向性高光。Kajiya-Kay模型作为经典的各向异性光照模型,通过切线空间计算模拟发丝圆柱体反射,生成沿切线方向拉伸的高光条带,从而在视觉上呈现发丝的丝滑质感与通透光泽。这一技术对于提升角色渲染的真实感与风格化表现具有重要价值,尤其在移动端与跨平台的URP项目中。本文将结合**穿模**问题与**切线空间**计算,详解在URP下实现该模型的Shader代码、光照信息获取、渲染队列配置

weixin_33850015的博客 321

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构

本文记录的是基于的YOLOv11网络模型轻量化方法研究。GhostNet中的Ghost模块和Ghost瓶颈结构是其轻量化的关键。Ghost模块克服了传统卷积层计算资源需求大的问题,Ghost瓶颈则合理设计了通道数量的变化以及与捷径连接的方式,能更好地在减少计算成本的同时保持较高性能,从而提升模型在移动设备上的应用能力和效率。

Limiiiing的博客 1430

Unity卡通水体渲染全解析:从Shader到后处理实现塞尔达风格水域

在实时渲染领域,水体渲染是塑造游戏世界沉浸感的关键技术之一。其核心原理是通过模拟光线与水的交互,如折射、反射和吸收,来表现水的视觉特性。对于追求艺术表达而非物理拟真的项目,风格化渲染技术提供了一条高效且富有表现力的路径。它通过提炼和夸张现实水体中最具辨识度的视觉特征,如深度渐变、边缘泡沫和动态焦散,来实现独特的艺术风格。这种技术方案在独立游戏和移动平台开发中具有重要价值,能够以较低的性能开销换取出色的视觉表现。本文以《塞尔达传说》系列中标志性的卡通水体为具体目标,深入拆解其实现流程。内容将涵盖使用Unity

weixin_30859423的博客 442

【Conda虚拟环境】新建 + 激活 + 安装 + 查看 + 退出 + 删除 + 复制 + 导出 + 导入 + 更改

(1)创建虚拟环境(2)激活虚拟环境(4)查看虚拟环境(3)退出虚拟环境(5)删除虚拟环境(6)复制虚拟环境(7)导出虚拟环境(8)导入虚拟环境(9)更改虚拟环境的安装路径(10)在指定路径下,配置虚拟环境

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 4万+

如何在Unity中实现头发渲染

对于半透明的物体,需要从后向前渲染保证渲染的正确性对于有头发的头,这和头发从内向外渲染很相似。这个可以在制作模型的时候,内部的顶点坐标往前放,外部的顶点坐标向后放,主要是索引的顺序要正确。按照下面的顺序去渲染,分4个pass (深度写入,不透明,半透明背面,半透明正面)第一个pass,使用alphaTest剔除半透明像素,禁用背面剔除,写入深度,深度检测为less,不需要渲染颜色,只需要写入深度。

2302_76776557的博客 2139

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Unity大气渲染】Unity Shader中实现大气散射(半成品)

关于在Unity里实现大气散射的过程记录(半成品)

qq_41835314的博客 2182

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Unity头发渲染实战:Kajiya-Kay模型原理与Shader实现详解

在实时渲染领域,基于物理的渲染(PBR)技术已成为表现材质真实感的标准方案,其核心在于通过微表面模型模拟光线与物体表面的交互原理。然而,对于头发这类具有复杂微观结构的圆柱体表面,传统各向同性BRDF模型难以捕捉其独特的高光特性。Kajiya-Kay模型通过创新的切线空间计算范式,将头发高光分解为沿发丝走向的主高光和垂直方向的次级高光,有效模拟了真实发丝的光泽层次与“天使环”效果。这一技术方案在游戏角色渲染中具有重要价值,能够显著提升头发材质的视觉真实感。本文将以Unity引擎为例,深入解析Kajiya-Ka

weixin_33747129的博客 304

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 在 URP 中驾驭 GPU 并行计算之力 Compute Shader
下一篇: Unity Shader 水面 Shader 教程 从 Gerstner 波浪到屏幕折射、焦散、泡沫的完整实现
mxwin
博客等级 码龄19年 22粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值