当前位置:   article > 正文

UnityShader 基础(2)-图像-添加一个自定义颜色并且正片叠底

unity 正片叠底效果 shader
  1. //定义材质球菜单路径位置与名称
  2. Shader
  3. "CRLuo/CRLuo_Teaching01_ColorMultiply"
  4. {
  5. Properties
  6. {
  7. //定义面板属性,获取外部输入颜色
  8. _Color
  9. (
  10. "颜色"
  11. ,
  12. Color
  13. )
  14. =
  15. (
  16. 1
  17. ,
  18. 0
  19. ,
  20. 0
  21. ,
  22. 1
  23. )
  24. _MainTex
  25. (
  26. "Texture"
  27. ,
  28. 2D
  29. )
  30. =
  31. "white"
  32. {
  33. }
  34. }
  35. SubShader
  36. {
  37. Tags
  38. {
  39. "RenderType"
  40. =
  41. "Opaque"
  42. }
  43. LOD
  44. 100
  45. Pass
  46. {
  47. CGPROGRAM
  48. #
  49. pragma
  50. vertex vert
  51. #
  52. pragma
  53. fragment frag
  54. // make fog work
  55. #
  56. pragma
  57. multi_compile_fog
  58. #include
  59. "UnityCG.cginc"
  60. struct
  61. appdata
  62. {
  63. float4
  64. vertex
  65. :
  66. POSITION
  67. ;
  68. float2
  69. uv
  70. :
  71. TEXCOORD0
  72. ;
  73. }
  74. ;
  75. struct
  76. v2f
  77. {
  78. float2
  79. uv
  80. :
  81. TEXCOORD0
  82. ;
  83. UNITY_FOG_COORDS
  84. (
  85. 1
  86. )
  87. float4
  88. vertex
  89. :
  90. SV_POSITION
  91. ;
  92. }
  93. ;
  94. //自定定义颜色变量(如果名称与属性表中一致,获取外部属性值)
  95. fixed4
  96. _Color
  97. ;
  98. sampler2D
  99. _MainTex
  100. ;
  101. float4
  102. _MainTex_ST
  103. ;
  104. v2f
  105. vert
  106. (
  107. appdata
  108. v
  109. )
  110. {
  111. v2f
  112. o
  113. ;
  114. o
  115. .
  116. vertex
  117. =
  118. UnityObjectToClipPos
  119. (
  120. v
  121. .
  122. vertex
  123. )
  124. ;
  125. o
  126. .
  127. uv
  128. =
  129. TRANSFORM_TEX
  130. (
  131. v
  132. .
  133. uv
  134. ,
  135. _MainTex
  136. )
  137. ;
  138. UNITY_TRANSFER_FOG
  139. (
  140. o
  141. ,
  142. o
  143. .
  144. vertex
  145. )
  146. ;
  147. return
  148. o
  149. ;
  150. }
  151. fixed4
  152. frag
  153. (
  154. v2f
  155. i
  156. )
  157. :
  158. SV_Target
  159. {
  160. // sample the texture
  161. fixed4
  162. col
  163. =
  164. tex2D
  165. (
  166. _MainTex
  167. ,
  168. i
  169. .
  170. uv
  171. )
  172. ;
  173. //把自定义颜色乘给颜色
  174. col
  175. *=
  176. _Color
  177. ;
  178. // apply fog
  179. UNITY_APPLY_FOG
  180. (
  181. i
  182. .
  183. fogCoord
  184. ,
  185. col
  186. )
  187. ;
  188. return
  189. col
  190. ;
  191. }
  192. ENDCG
  193. }
  194. }
  195. }
创建材质球
指向自定义Shader
使用效果
这里使用了相乘的方法完成了颜色混合。
混合的常用算法是 “+” 和 “*”,“+”对应灯光类发光物体,“*”对应油墨类,不发光物体。
第二个红框中新加了一个 颜色 Color类型属性。其余所有属性为:
  1. Shader
  2. "CRLuo/CRLuo_Teaching02_AllAttribute"
  3. {
  4. Properties
  5. {
  6. //数据
  7. _Int
  8. (
  9. "整型"
  10. ,
  11. Int
  12. )
  13. =
  14. 0
  15. _Float
  16. (
  17. "浮点"
  18. ,
  19. Int
  20. )
  21. =
  22. 0.1
  23. _Range
  24. (
  25. "滑块"
  26. ,
  27. Range
  28. (
  29. 0.0
  30. ,
  31. 1.0
  32. )
  33. )
  34. =
  35. 0.5
  36. _Color
  37. (
  38. "颜色"
  39. ,
  40. Color
  41. )
  42. =
  43. (
  44. 1
  45. ,
  46. 1
  47. ,
  48. 1
  49. ,
  50. 1
  51. )
  52. _Vector
  53. (
  54. "四维数"
  55. ,
  56. Vector
  57. )
  58. =
  59. (
  60. 0
  61. ,
  62. 0
  63. ,
  64. 0
  65. ,
  66. 1
  67. )
  68. //贴图
  69. _2D
  70. (
  71. "2D贴图"
  72. ,
  73. 2D
  74. )
  75. =
  76. "white"
  77. {
  78. }
  79. _Cube
  80. (
  81. "环境球贴图"
  82. ,
  83. Cube
  84. )
  85. =
  86. "white"
  87. {
  88. }
  89. _3D
  90. (
  91. "3D坐标系贴图"
  92. ,
  93. 3D
  94. )
  95. =
  96. "black"
  97. {
  98. }
  99. }
  100. //无定义时使用的备用Shader
  101. FallBack
  102. "Diffuse"
  103. }
使用结果:
定义数据时使用了 fixed(短浮点数)来定义颜色,因为颜色都是0~1的数据,节省显卡数据空间的开销。
所有数据类型
1、float,32位浮点数据
2、half,16位浮点数据
3、int,32位整形数据
4,fixed,12位浮点数
5、bool,布尔数据
6、sampler,纹理对象的句柄,分为sampler、sampler1D、sampler2D、sampler3D、samplerCUBE和samplerRECT。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/116338
推荐阅读
相关标签
  

闽ICP备14008679号