码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Shader入门精要笔记-屏幕后处理(2)


    目录

    一.调整屏幕的亮度、饱和度和对比度

    准备:1.去除场景中的天空盒子

    2.新建一个脚本(BrightnessSaturationAndContrast.cs)挂载到摄像机上

    3.新建一个Shader(BrightnessSaturationAndContrast.cs)

    4.在创建中放置一个 Quad,将准备好的图片拖到Quad上

    5.将Shader(BrightnessSaturationAndContrast.cs)代码挂载到BrightnessSaturationAndContrast.cs)脚本参数上并可在面板中设置shader的参数

     6.效果展示


    一.调整屏幕的亮度、饱和度和对比度

    准备:1.去除场景中的天空盒子

    2.新建一个脚本(BrightnessSaturationAndContrast.cs)挂载到摄像机上

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class BrightnessSaturationAndContrast : PostEffectsBase
    5. {
    6. public Shader briSatConShader;
    7. private Material briSatConMaterial;
    8. public Material material
    9. {
    10. get
    11. {
    12. briSatConMaterial = CheckShaderAndCreateMaterial(briSatConShader, briSatConMaterial);
    13. return briSatConMaterial;
    14. }
    15. }
    16. // 调整亮度
    17. [Range(0.0f, 3.0f)] public float brightness = 1.0f;
    18. //调整饱和度
    19. [Range(0.0f, 3.0f)] public float saturation = 1.0f;
    20. //调整对比度
    21. [Range(0.0f, 3.0f)] public float contrast = 1.0f;
    22. void OnRenderImage(RenderTexture src, RenderTexture dest)
    23. {
    24. if (material!=null)
    25. {
    26. //把修改的材质的参数传递给材质
    27. material.SetFloat("_Brightness",brightness);
    28. material.SetFloat("_Saturation",saturation);
    29. material.SetFloat("_Contrast",contrast);
    30. //对材质进行处理
    31. Graphics.Blit(src,dest,material);
    32. }
    33. else
    34. {
    35. Graphics.Blit(src,dest);
    36. }
    37. }
    38. }

    3.新建一个Shader(BrightnessSaturationAndContrast.cs)

    1. Shader "Unlit/Chapter12-BrightnessSaturationAndContrast"
    2. {
    3. Properties
    4. {
    5. _MainTex("Base(RGB)",2D)="white"{}
    6. _Brightness("Brightness",Float)=1
    7. _Saturation("Saturation",Float)=1
    8. _Contrast("Contrast",Float)=1
    9. }
    10. SubShader
    11. {
    12. Tags { "RenderType"="Opaque" }
    13. LOD 100
    14. Pass
    15. {
    16. ZTest Always Cull Off ZWrite Off
    17. CGPROGRAM
    18. #pragma vertex vert
    19. #pragma fragment frag
    20. // make fog work
    21. #pragma multi_compile_fog
    22. #include "UnityCG.cginc"
    23. struct v2f
    24. {
    25. float2 uv : TEXCOORD0;
    26. float4 pos : SV_POSITION;
    27. };
    28. sampler2D _MainTex;
    29. half _Brightness;
    30. half _Saturation;
    31. half _Contrast;
    32. v2f vert (appdata_img v)
    33. {
    34. v2f o;
    35. o.pos = UnityObjectToClipPos(v.vertex);
    36. o.uv = v.texcoord;
    37. return o;
    38. }
    39. fixed4 frag (v2f i) : SV_Target
    40. {
    41. fixed4 renderTex=tex2D(_MainTex,i.uv);
    42. //_Brightness调整亮度
    43. fixed3 finalColor=renderTex.rgb*_Brightness;
    44. //计算亮度值
    45. fixed luminance=0.2125*renderTex.r+0.7154*renderTex.g+0.0721*renderTex.b;
    46. fixed3 luminanceColor=fixed3(luminance,luminance,luminance);
    47. //计算饱和度颜色
    48. finalColor=lerp(luminanceColor,finalColor,_Saturation);
    49. //对比度
    50. fixed3 avgColor=fixed3(0.5,0.5,0.5);
    51. finalColor=lerp(avgColor,finalColor,_Contrast);
    52. return fixed4(finalColor,renderTex.a);
    53. }
    54. ENDCG
    55. }
    56. }
    57. Fallback Off
    58. }

    4.在创建中放置一个 Quad,将准备好的图片拖到Quad上

    5.将Shader(BrightnessSaturationAndContrast.cs)代码挂载到BrightnessSaturationAndContrast.cs)脚本参数上并可在面板中设置shader的参数

     6.效果展示

    原图                                                      

     

    原图
    原图
    屏幕后处理之后的图

     

  • 相关阅读:
    多任务学习
    Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读
    基于 XAF Blazor 的规则引擎编辑器 - 介绍篇
    【开题报告】基于SpringBoot的乡村文旅平台的设计与实现
    金仓数据库 KingbaseES 插件ftutilx
    找实习之从0开始的后端学习日记【9.19】
    Element Plus 全球化配置
    给sample_gpt 增加 lisa 微调
    Kerberos 身份验证
    Unity shader内置standard代码解析
  • 原文地址:https://blog.csdn.net/muziiii/article/details/126571405
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号