À¯´ÏƼ¿¡¼ Æ÷½ºÆ®ÀÌÆåÆ®¸¦ ±¸ÇöÇغ»´Ù. GrayScale È¿°ú¸¦ ÁÖ´Â Æ÷½ºÆ® ÀÌÆåÆ®¸¦ ¸¸µé¾î º»´Ù. GrayCameraRenderImage.cs ½ºÅ©¸³Æ® ÆÄÀÏ ¸¸µé±âusing UnityEngine;
using System.Collections; [ExecuteInEditMode] public class GrayCameraRenderImage : MonoBehaviour { #region Variables public Shader curShader; private Material curMaterial; [Range(-1.0f, 1.0f)] public float grayScaleAmount = 1.0f; #endregion #region Properties Material material { get { if(curMaterial == null) { curMaterial = new Material(curShader); curMaterial.hideFlags = HideFlags.HideAndDontSave; } return curMaterial; } } #endregion void Start() { if(!SystemInfo.supportsImageEffects) { enabled = false; return; } if(!curShader && !curShader.isSupported) { enabled = false; } } void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture) { if(curShader != null) { material.SetFloat("_LuminosityAmount", grayScaleAmount); Graphics.Blit(sourceTexture, destTexture, material); } else { Graphics.Blit(sourceTexture, destTexture); } } /* void Update() { grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.01f, 1.0f); } */ void OnDisable() { if(curMaterial) { DestroyImmediate(curMaterial); } } } 1. À¯´ÏƼ ¿¡µðÅÍ ¸ðµå¿¡¼µµ ½ÇÇàÇϱâ À§ÇØ ´ÙÀ½À» ¼±¾ðÇÑ´Ù. [ExecuteInEditMode] 2. º¯¼ö¸¦ ¼±¾ðÇÑ´Ù. ¸ÞÆ®¸®¾óÀ» ÀÚüÀûÀ¸·Î »ý¼ºÇÏ°í ¼ÎÀÌ´õ¸¦ ÂüÁ¶Çϱâ À§ÇÑ º¯¼ö¸¦ Ãß°¡ÇÑ´Ù. grayScaleAmount´Â ¼ÎÀÌ´õ·Î GrayScale°ªÀ» ³Ñ°ÜÁÖ±â À§ÇÑ º¯¼öÀÌ´Ù. #region Variables public Shader curShader; private Material curMaterial; [Range(-1.0f, 1.0f)] public float grayScaleAmount = 1.0f; #endregion 3. ¸ÅÆ®¸®¾óÀ» »ý¼ºÇÑ´Ù. ¸ÅÆ®¸®¾óÀÌ nullÀÌ¸é »ý¼ºÇÑ´Ù. °èÃþºä¿¡¼ ¼û±â°í ÀúÀåÀÌ ÇÊ¿ä ¾ø±â ¶§¹®¿¡ HideAndDontSave·Î ¼³Á¤ÇÑ´Ù. #region Properties Material material { get { if(curMaterial == null) { curMaterial = new Material(curShader); curMaterial.hideFlags = HideFlags.HideAndDontSave; } return curMaterial; } } #endregion 4. À̹ÌÁö ÀÌÆåÆ® Áö¿ø ¿©ºÎ¸¦ üũ ÇÑ´Ù. À̹ÌÁö ÀÌÆåÆ®¿Í ¼ÎÀÌ´õ Áö¿øÀÌ µÇ´ÂÁö üũ ÇÏ¿© ½ºÅ©¸³Æ®¸¦ È°¼º, ºñÈ°¼ºÈ ÇÑ´Ù. void Start() { if(!SystemInfo.supportsImageEffects) { enabled = false; return; } if(!curShader && !curShader.isSupported) { enabled = false; } } 5. À̹ÌÁö¸¦ ĸÃÄÇؼ ³Ñ°ÜÁØ´Ù. À¯´ÏƼ¿¡¼´Â À̹ÌÁö¸¦ ĸÃÄÇϱâ À§ÇØ OnRenderImage( ) ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. ¼ÎÀÌ´õ¿¡¼´Â _MainTex·Î ¹Þ´Â´Ù. void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture) { if(curShader != null) { material.SetFloat("_LuminosityAmount", grayScaleAmount); Graphics.Blit(sourceTexture, destTexture, material); } else { Graphics.Blit(sourceTexture, destTexture); } } 6. »ý¼ºÇß´ø ¸ÅÆ®¸®¾óÀ» ÇØÁ¦ÇÑ´Ù. void OnDisable() { if(curMaterial) { DestroyImmediate(curMaterial); } } OnDestroy°¡ ¾Æ´Ï¶ó OnDisable¿¡¼ ¸ÞÆ®¸®¾óÀ» ÇØÁ¦ÇÏ°í ÀÖ´Ù. À̺κÐÀº ÀÌÇØ°¡ ¾È°£´Ù. ??? À̺¥Æ®ÀÇ ½ÇÇà ¼ø¼´Â ´ÙÀ½°ú °°´Ù. Reset Awake OnEnable Start Fixedupdate yield WaitForFiexedUpdate Update yield null and yield WaitForSceonds LateUpdate OnWillRenderObject OnGUI yield WaitForEndOfFrame OnDisable OnDestroy GrayCamera.Shader ¸¸µé±âShader "Custom/GrayCamera" {
Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0 } SubShader { Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" uniform sampler2D _MainTex; fixed _LuminosityAmount; fixed4 frag(v2f_img i) : COLOR { fixed4 renderTex = tex2D(_MainTex, i.uv); float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b; fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount); return finalColor; } ENDCG } } //FallBack "Diffuse" } 1. ·»´õ¸µ À̹ÌÁö¿Í ±×·¹À̽ºÄÉÀÏ°ª¿ëÀ¸·Î ÇÁ·ÎÆÛƼ¸¦ ¸¸µç´Ù. Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0 } ȸ鿡 ·»´õ¸µ ÇÏ´Â ´ë½Å¿¡ ÅؽºÃÄ¿¡ ·»´õ¸µÇÑ´Ù. À̹ÌÁö¸¦ _MainTex ÅؽºÃÄ¿¡ ·»´õ¸µÇÑ´Ù. 2. Cg ¼ÎÀÌ´õ Äڵ带 »ç¿ëÇÏ¿© ȸéÀ» ÃÖÀûÈ ÇÑ´Ù. ³»Àå ¼Çǽº ¼ÎÀÌ´õ ÄÚµå ´ë½Å Cg ¼ÎÀÌ´õ ÄÚµå¿Í Cg ¼ÎÀÌ´õ ÄÚµå¿ë #pragma ¹®À» Àû¿ëÇÑ´Ù. SubShader { Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" 3. º¯¼ö¸¦ ¼±¾ðÇÑ´Ù. uniform sampler2D _MainTex; fixed _LuminosityAmount; 4. ·»´õ¸µµÈ ÅؽºÃÄ À̹ÌÁö¿¡ È¿°ú¸¦ ÁØ´Ù. ¿©±â¼ frag( ) ÇÔ¼ö´Â GrayScale È¿°ú¸¦ ÁÖ°í ÀÖ´Ù. fixed4 frag(v2f_img i) : COLOR { fixed4 renderTex = tex2D(_MainTex, i.uv); float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b; fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount); return finalColor; } ½ºÅ©¸³Æ® Àû¿ëÄ«¸Þ¶ó¿¡ GrayCameraRenderImage.cs¸¦ ºÙÀδÙ.GrayCameraRenderImage.cs ¼Ò½º GrayCamera.shader ¼Ò½º Âü°í) À¯´ÏƼ Shader¿Í Effect Á¦ÀÛ (µµ¼) |