vertex/fragment program¿¡ ´ëÇؼ ¾Ë¾Æº¸ÀÚ. vertex/fragment programÀº vertex&pixel shader¿Í °°Àº Àǹ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ¹öÅؽº ÇÁ·Î±×·¥ = ¹öÅؽº ¼ÎÀÌ´õ Çȼ¿ ÇÁ·Î±×·¥ = Çȼ¿ ¼ÎÀÌ´õ ¹öÅؽº/ÇÁ·¡±×¸ÕÆ® ¼ÎÀÌ´õ ÇÔ¼öÀÇ ±¸Á¶ÀÌ´Ù. CGPROGRAM ~ ENDCG »çÀÌ¿¡ Cg Äڵ带 ³ÖÀ¸¸é µÈ´Ù. Shader "MyCustomShader"
{ SubShader { Pass { // ... ¿©·¯°¡Áö pass°ü·Ã ¼³Á¤... CGPROGRAM //Cg code ... ENDCG // ... pass ¸®¼Â °ü·Ã ¼³Á¤... } } } CGPROGRAM ~ ENDCG¸¦ ±¸Á¶¸¦ ÀÚ¼¼ÇÏ°Ô º¸¸é ´ÙÀ½°ú °°´Ù. #pragma vertex Áö½ÃÀÚ´Â vertfunc ¶ó´Â ¹öÅؽº ÇÁ·Î±×·¥(¼ÎÀÌ´õ ÇÔ¼ö)À» ÁöÁ¤ÇÑ´Ù. #pragma fragment Áö½ÃÀÚ´Â fragmentfunc ¶ó ÇÁ·¡±×¸ÕÆ® ÇÁ·Î±×·¥(¼ÎÀÌ´õ ÇÔ¼ö)À» ÁöÁ¤ÇÑ´Ù. CGPROGRAM
#pragma vertex vertfunc #pragma fragment fragmenfunc // ¿©±â¿¡ Cg code ENDCG ±× ¹ÛÀÇ Áö½ÃÀÚµéÀº #pragma target, #pragma only_renderers, #pragma exclude_renderersµîÀÌ ÀÖ´Ù. À¯´ÏƼ´Â ±âº»ÀûÀ¸·Î 2.0 ¹öÀü¿¡ ¸ÂÃß¾î ÄÄÆÄÀÏ ÇÑ´Ù. ¸¸¾à ´Ù¸¥ ¹öÀüÀ¸·Î ÄÄÆÄÀÏÀ» ¿øÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÑ´Ù. #pragma target 3.0 À¯´ÏƼ Áö¿øÇÏ°í ÀÖ´Â ·»´õ·¯µé(d3d9, OpenGL µîµî)¿¡ ´ëÇؼ ¸ðµç ¼ÎÀÌ´õµéÀ» ÄÄÆÄÀÏ ÇÏ°Ô µÈ´Ù. #pragma only_renderers, #pragma exclude_renderers¸¦ ÀÌ¿ëÇÏ¿© ƯÁ¤ ·»´õ·¯µé¿¡ ´ëÇؼ¸¸ ÄÄÆÄÀÏ Çϰųª ÄÄÆÄÀÏ ÇÏÁö ¾Êµµ·Ï ÇÒ¼ö ÀÖ´Ù. ÇöÀç Áö¿øÇÏ´Â ·»´õ·¯µéÀº d3d9, d3d11, opengl, gles, xbox360, ps3, flash, gles3, metalÀÌ ÀÖ´Ù. xbox360°ú ps3 ·»´õ·¯ ´ëÇؼ ÄÄÆÄÀÏÀ» Á¦¿Ü ÇÒ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. #pragma exclude_renderers xbox360 ps3 ¿©·¯ ÄÄÆÄÀÏ Áö½ÃÀÚ¸¦ »ç¿ëÇÑ ¿¹´Â ´ÙÀ½°ú °°´Ù. Shader "MyCustomShader"
{ SubShader { Pass { CGPROGRAM #pragma vertex vertfunc #pragma fragment fragmenfunc #pragma target 3.0 #pragma exclude_renderers xbox360 ps3 // add Cg code ENDCG } } } ½ÇÁ¦ ¼ÎÀÌ´õ¸¦ Àû¿ëÇÑ ¿¹¸¦ º¸ÀÚ. ¸Þ½Ã¸¦ »¡°£»öÀ¸·Î ±×¸®´Â ¼ÎÀÌ´õÀÌ´Ù. Shader "Custom/TestShader"
{ SubShader { Pass { CGPROGRAM #pragma vertex vertfunc #pragma fragment fragfunc float4 vertfunc(float4 vertexPos : POSITION) : SV_POSITION { return mul(UNITY_MATRIX_MVP, vertexPos); } float4 fragfunc(void) : COLOR { return float4(1.0, 0.0, 0.0, 1.0); } ENDCG } } } ¹öÅؽº ÇÁ·Î±×·¥À» ±¸Á¶Ã¼À» ÀÌ¿ëÇؼ ÀԷ°ú Ãâ·ÂÀ» ³Ñ±â´Â ÄÚµå·Î ¹Ù²Ù¸é ´ÙÀ½°ú °°´Ù. Shader "Custom/TestShader"
{ SubShader { Pass { CGPROGRAM #pragma vertex vertfunc #pragma fragment fragfunc struct VertInput { float4 pos : POSITION; }; struct VertOutput { float4 pos : SV_POSITION; }; VertOutput vertfunc(VertInput input) { VertOutput o; o.pos = mul(UNITY_MATRIX_MVP, input.pos); return o; } float4 fragfunc(void) : COLOR { return float4(1.0, 0.0, 0.0, 1.0); } ENDCG } } } ¹öÅؽº/ÇÁ·¡±×¸ÕÆ® ¼ÎÀÌ´õ ÇÔ¼öÀÇ ±¸Á¶¿¡ ´ëÇؼ ¾Ë¾Æº¸¾Ò´Ù. ¼ÎÀÌ´õ ÇÁ·Î±×·¥ÀÇ ¾Ë°í¸®ÁòÀº ´ÙÀ½¿¡ ¾Ë¾Æº»´Ù. ÂüÁ¶) http://jinhomang.tistory.com/54 http://docs.unity3d.com/kr/current/Manual/SL-ShaderPrograms.html |