Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. Shader "cool shader" {
  2. Properties {
  3. ...
  4. }
  5. SubShader {
  6.  
  7. CGPROGRAM
  8. // need to declare vertexOutput somewhow here
  9. float4 sharedFragFoo(vertexOutput i) : COLOR // How to make smth like this?
  10. {
  11. ....
  12. return float4(...);
  13. }
  14. ENDCG
  15.  
  16. pass {
  17. CGPROGRAM
  18. #pragma vertex vert
  19. #pragma fragment frag
  20. vertexOutput vert(vertexInput v) {
  21. vertexOutput o;
  22. ...
  23. return o;
  24. }
  25.  
  26. float4 frag(vertexOutput i) : COLOR
  27. {
  28. return sharedFragFoo(i); // call the shared between passes function
  29. }
  30.  
  31. ENDCG
  32. }
  33.  
  34. pass {
  35. CGPROGRAM
  36. #pragma vertex vert
  37. #pragma fragment frag
  38. vertexOutput vert(vertexInput v) {
  39. vertexOutput o;
  40. ...
  41. return o;
  42. }
  43.  
  44. float4 frag(vertexOutput i) : COLOR
  45. {
  46. return sharedFragFoo(i); // call the shared between passes function
  47. }
  48.  
  49. ENDCG
  50. }
  51. }
  52. }
  53.  
  54. Shader "YourShader"
  55. {
  56. ...
  57.  
  58. CGINCLUDE
  59.  
  60. #include "UnityCG.cginc"
  61.  
  62. struct shared_v2f
  63. {
  64. float4 pos : SV_POSITION;
  65. }
  66.  
  67. shared_v2f myVert( appdate_img v )
  68. {
  69. shared_v2f o;
  70.  
  71. o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
  72.  
  73. return o;
  74. }
  75.  
  76. fixed4 myFrag( shared_v2f i ) : SV_Target
  77. {
  78. return fixed4( 1.0, 0.5, 0.0, 1.0 );
  79. }
  80.  
  81. ENDCG
  82.  
  83. SubShader
  84. {
  85. ...
  86.  
  87. Pass
  88. {
  89. CGPROGRAM
  90.  
  91. #pragma vertex myVert
  92. #pragma fragment myFrag
  93.  
  94. ENDCG
  95. }
  96. }
  97. }
  98.  
  99. Shader "cool shader" {
  100. Properties {
  101. // properties
  102. }
  103. SubShader {
  104. ...
  105.  
  106. pass {
  107. Cull Front
  108. ZWrite Off
  109. CGPROGRAM
  110. #pragma vertex vert
  111. #pragma fragment frag
  112. #include "shared.cginc"
  113. ENDCG
  114. }
  115.  
  116. pass {
  117. Cull Back
  118. ZWrite Off
  119. Blend SrcAlpha OneMinusSrcAlpha
  120. CGPROGRAM
  121. #pragma vertex vert
  122. #pragma fragment frag
  123. #include "shared.cginc"
  124. ENDCG
  125. }
  126. }
  127. }
  128.  
  129. #ifndef SHARED_FOO
  130. #define SHARED_FOO
  131.  
  132. uniform sampler2D _MainTex;
  133. uniform float4 _MainTex_ST;
  134. uniform float4 _Color;
  135. // other variables....
  136.  
  137. struct vertexInput {
  138. float4 vertex : POSITION;
  139. float3 normal : NORMAL;
  140. float4 texcoord : TEXCOORD0;
  141. };
  142.  
  143. struct vertexOutput {
  144. float4 pos : SV_POSITION;
  145. float4 tex : TEXCOORD0;
  146. float4 posWorld : TEXCOORD1;
  147. float4 posInObjectCoords : TEXCOORD2;
  148. float3 normalDir : TEXCOORD3;
  149. };
  150.  
  151. vertexOutput vert(vertexInput v) {
  152. vertexOutput o;
  153. // do staff
  154. return o;
  155. }
  156.  
  157. float4 frag(vertexOutput i) : COLOR
  158. {
  159. // do staff
  160. return float4(...);
  161. }
  162. #endif // SHARED_FOO
  163.  
  164. Shader "Custom/YourShader"
  165. {
  166.  
  167. Properties
  168. {
  169. _MainTex("Texture", 2D) = "white" {}
  170. }
  171.  
  172. CGINCLUDE
  173. //This code is available to all passes in your shader below
  174.  
  175. sampler2D _MainTex;
  176. float4 _MainTex_TexelSize;
  177.  
  178. struct appdata
  179. {
  180. float4 vertex : POSITION;
  181. float2 uv : TEXCOORD0;
  182. };
  183.  
  184. struct v2f
  185. {
  186. float2 uv : TEXCOORD0;
  187. float4 vertex : SV_POSITION;
  188. };
  189.  
  190. float4 aSamplingFunction(sampler2D tex, float2 uv, float4 size)
  191. {
  192. return SOMETHING;
  193. }
  194.  
  195. ENDCG
  196.  
  197. SubShader
  198. {
  199. Cull On
  200. ZWrite Off
  201. ZTest LEqual
  202.  
  203. Pass// #0
  204. {
  205. CGPROGRAM
  206. #pragma vertex vert
  207. #pragma fragment frag
  208. #include "UnityCG.cginc"
  209.  
  210. v2f vert(appdata v)
  211. {
  212. v2f o;
  213. o.vertex = UnityObjectToClipPos(v.vertex);
  214. o.uv = v.uv;
  215. return o;
  216. }
  217.  
  218. float4 frag(v2f i) : SV_Target
  219. {
  220. float4 col = aSamplingFunction(_MainTex, i.uv, _MainTex_TexelSize);
  221. return col;
  222. }
  223. ENDCG
  224. }
  225.  
  226. Pass// #1
  227. {
  228. CGPROGRAM
  229. #pragma vertex vert
  230. #pragma fragment frag
  231. #include "UnityCG.cginc"
  232.  
  233. v2f vert(appdata v)
  234. {
  235. v2f o;
  236. o.vertex = UnityObjectToClipPos(v.vertex);
  237. o.uv = v.uv;
  238. return o;
  239. }
  240.  
  241. float4 frag(v2f i) : SV_Target
  242. {
  243. float4 col = aSamplingFunction(_MainTex, i.uv, _MainTex_TexelSize);
  244. return col;
  245. }
  246. ENDCG
  247. }
  248. }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement