dede网站首页天津建设工程信息网官网平台

张小明 2025/12/29 17:42:28
dede网站首页,天津建设工程信息网官网平台,网站建设取得实效,手机记事本做网站ColorCurves 是 Unity 通用渲染管线(URP)中的一种高级颜色分级工具#xff0c;它允许通过曲线精细调整图像的色相、饱和度和亮度。这种工具最初在专业影视后期软件(如 Fusion)中成熟应用#xff0c;后被引入游戏引擎用于实时渲染的色彩控制。ColorCurves 提供了8条独立曲线它允许通过曲线精细调整图像的色相、饱和度和亮度。这种工具最初在专业影视后期软件(如 Fusion)中成熟应用后被引入游戏引擎用于实时渲染的色彩控制。ColorCurves 提供了8条独立曲线包括Master(整体亮度)‌功能‌整体调整图像的亮度和对比度。‌实现‌通过调整曲线形状控制全局亮度曲线向上提升亮度向下降低亮度Red/Green/Blue(单通道调整三条曲线)功能‌分别单独调整红、绿、蓝通道的亮度和色彩平衡。‌实现‌针对分量进行独立调节影响图像中红、绿蓝区域的显色强度HueVsHue(色调替换 色相-色相曲线)‌功能‌基于色相替换颜色如将红色替换为蓝色。‌实现‌通过映射原始色相到目标色相实现颜色转换HueVsSat(色调饱和度调整 色相-饱和度曲线)功能‌根据色相调整特定颜色的饱和度。‌实现‌选择特定色相范围后增加或降低其饱和度SatVsSat(饱和度对比 饱和度-饱和度曲线)‌功能‌基于当前饱和度进一步调整饱和度。‌实现‌对低饱和度区域增强或高饱和度区域抑制实现非线性调整LumVsSat(亮度饱和度关系 亮度-饱和度曲线)功能‌根据亮度调整饱和度如增强暗部饱和度。‌实现‌在低亮度区域提升饱和度以增强视觉对比或在高亮度区域降低饱和度避免过曝发展历史颜色曲线技术起源于电影工业的后期调色流程早期在 DaVinci Resolve 等专业调色软件中实现。Unity 在 2017 年引入 Post-processing Stack v1 时首次包含了基础曲线调整2019 年 URP 正式版将其整合为 ColorCurves 模块并增加了针对游戏优化的 ACES 色彩空间支持。实现原理ColorCurves 在渲染管线的后处理阶段工作位于色调映射之前。它通过以下步骤实现将输入图像分解为 HSL 分量对每个分量应用预定义的曲线变换重新组合分量并输出到下一处理阶段曲线映射原理ColorCurves通过8条独立曲线对图像进行分通道处理每条曲线采用256个控制点的查找表(LUT)实现非线性映射。例如Master曲线采用x轴(输入亮度)到y轴(输出亮度)的映射关系通过贝塞尔插值算法实现平滑过渡。贝塞尔曲线‌通用公式对于n阶贝塞尔曲线其参数方程为$B(t)\sum_{i0}{n}\binom{n}{i}(1−t)t^iP_i,t\in[0,1]$其中$P_i$为控制点共n1个$\binom{n}{i}$为组合数t为参数控制曲线上的位置‌。‌常见类型‌‌线性 1阶‌两点间直线公式为$B(t)(1−t)P_0tP_1$‌二次 2阶‌3个控制点公式为$B(t)(1−t)2P_02t(1−t)P_1t2P_2$‌三次 3阶‌4个控制点公式为$B(t)(1−t)3P_03(1−t)2tP_13(1−t)t2P2t3P_3$三次贝塞尔曲线因平衡计算复杂性和灵活性成为图形学中最常用的类型‌实现方法‌递归计算‌通过德卡斯特里奥算法De Casteljaus algorithm逐步插值中间点‌‌矩阵表示‌将三次贝塞尔曲线表示为控制点与基函数的矩阵乘法‌‌代码示例‌Unity/C#注实际应用中需处理浮点精度和性能优化‌csharppublic Vector3 CalculateBezierPoint(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) {float u 1 - t;return u*u*u * p0 3*u*u*t * p1 3*u*t*t * p2 t*t*t * p3;}通道处理流程‌RGB通道分离‌先将图像分解为R/G/B三个通道channelR (R,0,0)channelG (0,G,0)channelB (0,0,0)HLSL中常用亮度公式Luminance0.2126×R0.7152×G0.0722×B该公式基于CIE 1931色彩空间的人眼感知权重RGB_Separate.hlslhlslTexture2D InputTexture : register(t0);SamplerState LinearSampler : register(s0);struct PS_Input {float4 Position : SV_POSITION;float2 UV : TEXCOORD;};// 红色通道分离float4 PS_RedChannel(PS_Input input) : SV_TARGET {float3 color InputTexture.Sample(LinearSampler, input.UV).rgb;return float4(color.r, 0, 0, 1); // 仅保留R分量}// 绿色通道分离float4 PS_GreenChannel(PS_Input input) : SV_TARGET {float3 color InputTexture.Sample(LinearSampler, input.UV).rgb;return float4(0, color.g, 0, 1); // 仅保留G分量}// 蓝色通道分离float4 PS_BlueChannel(PS_Input input) : SV_TARGET {float3 color InputTexture.Sample(LinearSampler, input.UV).rgb;return float4(0, 0, color.b, 1); // 仅保留B分量}// 亮度计算float4 PS_Luminance(PS_Input input) : SV_TARGET {float3 color InputTexture.Sample(LinearSampler, input.UV).rgb;float lum dot(color, float3(0.2126, 0.7152, 0.0722));return float4(lum.xxx, 1); // 灰度输出}‌曲线应用‌主通道Master曲线同时影响所有通道作为全局亮度调整曲线直接对RGB三通道进行统一映射。公式为Outputf_master(Input)其中Input是原始亮度值0-1f_master是用户定义的曲线函数分通道Red/Green/Blue曲线分别处理对应通道HueVsHue曲线实现色相替换效果通过角度偏移改变特定色相。HSV空间中的公式H_outH_inf_hue(H_in)∗360°f_hue是定义在0-1范围的曲线输出值作为角度偏移量。HueVsSat曲线控制不同色相区域的饱和度增强/减弱: S_outS_in∗(1f_sat(H_in))f_sat曲线输出-1到1的值负值降低饱和度正值增加。SatVsSat曲线非线性调整饱和度分布S_outf_satmap(S_in)直接重映射饱和度值常用于创建哑光效果。LumVsSat曲线基于亮度控制饱和度S_outS_in∗(1f_lum(L_in))L_in是HSL亮度值f_lum曲线控制不同亮度区域的饱和度变化ColorCurves.hlsl使用纹理采样实现曲线查找提升GPU执行效率RgbToHsv/HsvToRgb需自行实现标准色彩空间转换曲线参数通过纹理传入支持任意形状的调整曲线最终效果是各曲线调整的叠加组合在C#中可通过Shader.SetGlobalTexture传递曲线纹理或在CPU端实现类似算法处理图像数据。实际应用时通常配合UI控件让用户交互式调整曲线形状。// 输入参数Texture2D InputTexture;SamplerState LinearSampler;float4 HueVsHueCurve; // 曲线采样纹理float4 HueVsSatCurve;float4 SatVsSatCurve;float4 LumVsSatCurve;float3 ApplyColorCurves(float3 rgb){// 转换到HSV空间float3 hsv RgbToHsv(rgb);float hue hsv.x;float sat hsv.y;float lum GetLuminance(rgb);// HueVsHue处理float hueOffset SampleCurve(HueVsHueCurve, hue);hsv.x frac(hue hueOffset);// HueVsSat处理float satScale SampleCurve(HueVsSatCurve, hue) * 2.0 - 1.0;hsv.y sat * (1.0 satScale);// SatVsSat处理hsv.y SampleCurve(SatVsSatCurve, sat);// LumVsSat处理float lumSatScale SampleCurve(LumVsSatCurve, lum) * 2.0 - 1.0;hsv.y sat * (1.0 lumSatScale);// 返回RGB空间return HsvToRgb(hsv);}// 辅助函数float SampleCurve(float4 curve, float x){return curve.SampleLevel(LinearSampler, float2(x, 0), 0).r;}‌色相转换‌将RGB转换为HSV色彩空间处理HueVsHue等曲线HSVHue, Saturation, Value是一种基于人类视觉感知的直观颜色模型由色相H、饱和度S和明度V三个分量组成‌基本概念‌色相H‌表示颜色类型取值范围0°-360°如红色0°、绿色120°、蓝色240°通过色轮角度定位颜色‌。‌饱和度S‌表示颜色纯度0%为灰色100%为纯色数值越高颜色越鲜艳‌。‌明度V‌控制颜色亮度0%为黑色100%为最亮如白色需S0%、V100%‌模型特点‌六角锥体结构‌从RGB立方体演化而来色调H沿圆周分布饱和度S和明度V分别表示径向和轴向距离‌。‌符合直觉‌比RGB更接近传统绘画调色习惯适合直观调整颜色属性如Photoshop调色板‌。‌分量独立‌亮度V与颜色无关仅影响光照强度色调H和饱和度S互不干扰‌RGB转HSVHSV转RGBColorSpace.hlsl// RGB转HSVfloat3 RGBtoHSV(float3 rgb) {float cmax max(rgb.r, max(rgb.g, rgb.b));float cmin min(rgb.r, min(rgb.g, rgb.b));float delta cmax - cmin;float h 0;if (delta ! 0) {if (cmax rgb.r)h 60 * fmod(((rgb.g - rgb.b)/delta 6), 6);else if (cmax rgb.g)h 60 * ((rgb.b - rgb.r)/delta 2);elseh 60 * ((rgb.r - rgb.g)/delta 4);}float s (cmax 0) ? 0 : delta / cmax;return float3(h, s, cmax);}// HSV转RGBfloat3 HSVtoRGB(float3 hsv) {float c hsv.z * hsv.y;float x c * (1 - abs(fmod(hsv.x / 60, 2) - 1));float m hsv.z - c;float3 rgb;if (hsv.x 60) rgb float3(c, x, 0);else if (hsv.x 120) rgb float3(x, c, 0);else if (hsv.x 180) rgb float3(0, c, x);else if (hsv.x 240) rgb float3(0, x, c);else if (hsv.x 300) rgb float3(x, 0, c);else rgb float3(c, 0, x);return rgb m;}示例实现冷色调增强// 在Volume组件中添加ColorCurves重载var curves volumeProfile.AddColorCurves();curves.active true;// 调整蓝色通道曲线curves.blue.Override(new AnimationCurve(new Keyframe(0, 0),new Keyframe(0.5f, 0.7f),new Keyframe(1, 1)));// 降低暖色饱和度curves.hueVsSat.Override(new AnimationCurve(new Keyframe(0.1f, 0.8f),// 红色范围new Keyframe(0.6f, 1.2f)// 蓝色范围));该示例通过提升中间调蓝色和抑制红色饱和度实现电影级冷色调效果。伽马校正处理URP会在曲线处理前后自动执行伽马/线性空间转换确保颜色混合符合物理正确性。具体流程输入图像从sRGB转为线性空间应用所有曲线调整结果转换回sRGB空间输出性能优化采用计算着色器并行处理LUT生成每条曲线仅需1次纹理采样8条曲线共产生约0.3ms的性能开销1080p分辨率。建议避免每帧动态修改曲线控制点改为预烘焙多套曲线配置。完整示例ColorCurvesExample.csusing UnityEngine;using UnityEngine.Rendering;using UnityEngine.Rendering.Universal;[System.Serializable]public class ColorCurvesSettings{public AnimationCurve masterCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve redCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve greenCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve blueCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve hueVsHueCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve hueVsSatCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve satVsSatCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));public AnimationCurve lumVsSatCurve new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));}public class CustomColorCurvesRenderPass : ScriptableRenderPass{private Material m_Material;private ColorCurvesSettings m_Settings;public CustomColorCurvesRenderPass(Material material, ColorCurvesSettings settings){m_Material material;m_Settings settings;}public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData){if (m_Material null) return;CommandBuffer cmd CommandBufferPool.Get(Color Curves);// 设置曲线参数m_Material.SetTexture(_MasterCurve, CreateCurveTexture(m_Settings.masterCurve));m_Material.SetTexture(_RedCurve, CreateCurveTexture(m_Settings.redCurve));m_Material.SetTexture(_GreenCurve, CreateCurveTexture(m_Settings.greenCurve));m_Material.SetTexture(_BlueCurve, CreateCurveTexture(m_Settings.blueCurve));m_Material.SetTexture(_HueVsHueCurve, CreateCurveTexture(m_Settings.hueVsHueCurve));m_Material.SetTexture(_HueVsSatCurve, CreateCurveTexture(m_Settings.hueVsSatCurve));m_Material.SetTexture(_SatVsSatCurve, CreateCurveTexture(m_Settings.satVsSatCurve));m_Material.SetTexture(_LumVsSatCurve, CreateCurveTexture(m_Settings.lumVsSatCurve));// 执行后处理Blit(cmd, renderingData.cameraData.renderer.cameraColorTarget,renderingData.cameraData.renderer.cameraColorTarget, m_Material);context.ExecuteCommandBuffer(cmd);CommandBufferPool.Release(cmd);}private Texture2D CreateCurveTexture(AnimationCurve curve){Texture2D texture new Texture2D(256, 1, TextureFormat.RFloat, false);for (int i 0; i 256; i){float value curve.Evaluate(i / 255f);texture.SetPixel(i, 0, new Color(value, 0, 0, 0));}texture.Apply();return texture;}}使用流程在 Unity 中创建 Volume 对象并添加 Color Curves 效果调整各条曲线参数通过预览窗口实时查看效果参数详解与用例Master 曲线‌作用‌全局亮度调整‌用例‌修正整体曝光不足或过曝的场景RGB 曲线(Red/Green/Blue)‌作用‌单独调整各颜色通道‌用例‌修正色偏或创造风格化效果(如赛博朋克的蓝色调)HueVsHue‌作用‌基于输入色调替换输出色调‌用例‌将绿色植被改为秋季黄色HueVsSat‌作用‌调整特定色调的饱和度‌用例‌增强天空蓝色饱和度而不影响其他颜色SatVsSat‌作用‌调整饱和度对比‌用例‌使高饱和区域更鲜艳低饱和区域更灰LumVsSat‌作用‌基于亮度调整饱和度‌用例‌使暗部区域降低饱和度(电影感效果)实际应用技巧‌电影感调色‌使用 LumVsSat 降低暗部饱和度HueVsHue 微调肤色‌季节变换‌通过 HueVsHue 将绿色变为黄色/红色模拟秋季‌风格化效果‌夸张的 S 形 RGB 曲线创造高对比度画面‌色彩匹配‌Match 功能原理使用曲线匹配不同镜头的色彩ColorCurves 与 Unity 的 ACES 色彩空间配合使用时效果最佳能够保持更广色域的色彩关系
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

题库网站建设的绩效指标什么网站做护工

策略模式定义:策略模式定义了一系列的算法,并且会将每一个算法封装起来,让它们可以相互的替换。策略模式的组成:一个基于策略模式的程序至少由两部分组成,第一部分是一组策略类,策略类封装了具体的算法&…

张小明 2025/12/24 13:19:30 网站建设

网站开发图片压缩上传报酬建设银行 网站 字体

八支心瑜伽线上直播课程双向视频互动面对面专业指导 在这里,你我隔着屏幕,却同心共修。 八支心瑜伽线上直播课堂卡娜老师 双向视频互动面对面专业指导沉浸式直播体验 双向视频互动:采用高清双向视频技术,实现师生实时面对面交流; …

张小明 2025/12/24 13:18:28 网站建设

贵阳市城乡建设部网站上海4a广告公司排名

循环遍历集合/数组,把集合元素拼接成sql片段,动态处理多个参数的场景就比如:简单场景的:构建IN条件、批量查询用户列表、一次插入多个用户,多对多关联表等等属性属性作用collection要遍历的集合/数组/Map的keyitem …

张小明 2025/12/26 2:44:14 网站建设

山东电力建设河北分公司网站佛山正规的免费网站优化

在数字化工具迭代的历史中,几乎所有颠覆性技术都曾经历过“从排斥到追捧”的转折——智能手机初现时,有人质疑“不如功能机耐用”;云计算普及前,企业担忧“数据放在云端不安全”;低代码开发如今的处境,亦复…

张小明 2025/12/24 13:15:23 网站建设

扬州网站建设多少钱推广一般收多少钱

"明明语音识别准确率很高,为什么输出结果全是乱码?"这是许多开发者在使用Vosk API处理中文、日文等多语言语音识别时的共同困惑。作为一名经历过无数次编码折磨的技术专家,今天我将带你彻底解决这个看似简单实则复杂的字符编码问题…

张小明 2025/12/28 2:42:00 网站建设

嘉兴网站建设方案咨询生产erp管理系统app

在数字化转型的浪潮中,产品技术文档已成为企业核心竞争力的重要组成部分。然而,传统文档管理方式正面临前所未有的挑战——根据2025年最新调研数据显示,超过78%的技术团队仍在为文档管理效率低下而苦恼,平均每位工程师每周要花费6…

张小明 2025/12/26 5:34:39 网站建设