色阶

作者:追风剑情 发布于:2016-1-3 16:08 分类:Shader

色阶Shader

  1. Shader "Custom/LevelsShader" {
  2. Properties {
  3. _MainTex ("Base (RGB)", 2D) = "white" {}
  4. _inBlack ("Input Black", Range(0, 255)) = 0
  5. _inGamma ("Input Gamma", Range(0, 255)) = 1.61
  6. _inWhite ("Input White", Range(0, 255)) = 255
  7. _outWhite ("Output White", Range(0, 255)) = 255
  8. _outBlack ("Output Black", Range(0, 255)) = 0
  9. }
  10. SubShader {
  11. Tags { "RenderType"="Opaque" }
  12. LOD 200
  13. CGPROGRAM
  14. #pragma surface surf Lambert
  15.  
  16. sampler2D _MainTex;
  17. float _inBlack;
  18. float _inGamma;
  19. float _inWhite;
  20. float _outWhite;
  21. float _outBlack;
  22.  
  23. struct Input {
  24. float2 uv_MainTex;
  25. };
  26. //自定义函数 (色阶计算公式)
  27. float GetPixelLevel(float pixelColor)
  28. {
  29. float pixelResult;
  30. //把值的范围从0.0~1.0扩大至0.0~255.0
  31. pixelResult = (pixelColor * 255.0);
  32. //减去_inBlack值,使像素变得更暗。
  33. pixelResult = max(0, pixelResult - _inBlack);
  34. //计算新的白色值,即调节像素亮度。
  35. pixelResult = saturate(pow(pixelResult / (_inWhite - _inBlack), _inGamma));
  36. //对最小像素值以及最大像素值有一个最终的全局控制,除以255使其重新恢复到0.0~1.0的范围。
  37. pixelResult = (pixelResult * (_outWhite - _outBlack) + _outBlack)/255.0;
  38. return pixelResult;
  39. }
  40. void surf (Input IN, inout SurfaceOutput o) {
  41. half4 c = tex2D (_MainTex, IN.uv_MainTex);
  42. o.Albedo = GetPixelLevel(c);
  43. o.Alpha = c.a;
  44. }
  45. ENDCG
  46. }
  47. FallBack "Diffuse"
  48. }

调节不同的参数值,得到的几种效果截图。

r1.pngr2.png

r3.pngr4.png

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号