后处理 - 色调映射
就是将颜色值通过映射公式得到另一种颜色值,比如:将颜色值*0.8也算是映射公式
但这边介绍的映射公式可以得到一种电影校色的效果,至于原理,一般都是经验公式。
效果
c#代码
using UnityEngine; public class TonemappingEff : MonoBehaviour { public Shader m_Shader; public Material m_Material; void Start() { if (false == SystemInfo.supportsImageEffects) { Debug.LogWarning("This platform does not support image effects or render textures."); this.enabled = false; return; } if (null == m_Material) { if (null != m_Shader && m_Shader.isSupported) { m_Material = new Material(m_Shader); m_Material.hideFlags = HideFlags.DontSave; } } else if (m_Material.shader != m_Shader) { if (m_Shader.isSupported) //优先shader { m_Material = new Material(m_Shader); m_Material.hideFlags = HideFlags.DontSave; } } } void OnRenderImage(RenderTexture src, RenderTexture dest) { if (null != m_Material) { Graphics.Blit(src, dest, m_Material); } else { Graphics.Blit(src, dest); } } }
shader
Shader "My/PostEff/Tonemapping" { Properties { _MainTex("Texture", 2D) = "white" {} } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; //hdr颜色值, 用曲线函数映射到[0, 1]颜色范围内 float3 ACES_Tonemapping(float3 x) { float a = 2.51f; float b = 0.03f; float c = 2.43f; float d = 0.59f; float e = 0.14f; float3 encode_color = saturate((x*(a*x + b)) / (x*(c*x + d) + e)); return encode_color; } fixed4 frag(v2f_img i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); half3 linear_color = pow(col.rgb, 2.2); //Gamma空间转换成线性空间 half3 encode_color = ACES_Tonemapping(linear_color); col.rgb = pow(encode_color, 1 / 2.2); //线性空间转换为Gamma空间 return col; } ENDCG } } }
颜色空间设置
菜单 -> File -> Builder Settings -> Player Settings -> Player页签
参考
Unity自定义后处理——Tonemapping色调映射_unity 的tonemapping-CSDN博客
分类:
shader / 后处理
, shader
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)