unity3d游戏开发之简单的透明shader技能培训

下面我们开始今天的Unity3D游戏开发技能透明shader技能培训。 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D、3D小规模游戏及网页游戏开发。


[plain] view plaincopy

  1. // Shader created with Shader Forge Beta 0.34
  2. // Shader Forge (c) Joachim Holmer - http://www.acegikmo.com/shaderforge/
  3. // Note: Manually altering this data may prevent you from opening it in Shader Forge
  4. /*SF_DATA;ver:0.34;sub:START;pass:START;ps:flbk:,lico:1,lgpr:1,nrmq:1,limd:1,uamb:True,mssp:True,lmpd:False,lprd:False,enco:False,frtr:True,vitr:True,dbil:False,rmgx:True,rpth:0,hqsc:True,hqlp:False,blpr:1,bsrc:3,bdst:7,culm:0,dpts:2,wrdp:False,ufog:True,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,ofsf:0,ofsu:0,f2p0:False;n:type:ShaderForge.SFN_Final,id:3,x:32038,y:32598|diff-227-RGB,alpha-226-OUT;n:type:ShaderForge.SFN_Fresnel,id:226,x:32459,y:32705;n:type:ShaderForge.SFN_Color,id:227,x:32398,y:32551,ptlb:Color,ptin:_Color,glob:False,c1:1,c2:1,c3:1,c4:1;proporder:227;pass:END;sub:END;*/
  5. Shader "Custom/Shader1" {
  6. Properties {
  7. _Color ("Color", Color) = (1,1,1,1)
  8. [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
  9. }
  10. SubShader {
  11. Tags {
  12. "IgnoreProjector"="True"
  13. "Queue"="Transparent"
  14. "RenderType"="Transparent"
  15. }
  16. LOD 200
  17. Pass {
  18. Name "ForwardBase"
  19. Tags {
  20. "LightMode"="ForwardBase"
  21. }
  22. Blend SrcAlpha OneMinusSrcAlpha
  23. ZWrite Off
  24. CGPROGRAM
  25. #pragma vertex vert
  26. #pragma fragment frag
  27. #define UNITY_PASS_FORWARDBASE
  28. #include "UnityCG.cginc"
  29. #pragma multi_compile_fwdbase
  30. #pragma exclude_renderers xbox360 ps3 flash d3d11_9x
  31. #pragma target 3.0
  32. uniform float4 _LightColor0;
  33. uniform float4 _Color;
  34. struct VertexInput {
  35. float4 vertex : POSITION;
  36. float3 normal : NORMAL;
  37. };
  38. struct VertexOutput {
  39. float4 pos : SV_POSITION;
  40. float4 posWorld : TEXCOORD0;
  41. float3 normalDir : TEXCOORD1;
  42. };
  43. VertexOutput vert (VertexInput v) {
  44. VertexOutput o;
  45. o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;
  46. o.posWorld = mul(_Object2World, v.vertex);
  47. o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  48. return o;
  49. }
  50. fixed4 frag(VertexOutput i) : COLOR {
  51. i.normalDir = normalize(i.normalDir);
  52. float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
  53. /////// Normals:
  54. float3 normalDirection =  i.normalDir;
  55. float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
  56. ////// Lighting:
  57. float attenuation = 1;
  58. float3 attenColor = attenuation * _LightColor0.xyz;
  59. /////// Diffuse:
  60. float NdotL = dot( normalDirection, lightDirection );
  61. float3 diffuse = max( 0.0, NdotL) * attenColor + UNITY_LIGHTMODEL_AMBIENT.rgb;
  62. float3 finalColor = 0;
  63. float3 diffuseLight = diffuse;
  64. finalColor += diffuseLight * _Color.rgb;
  65. /// Final Color:
  66. return fixed4(finalColor,(1.0-max(0,dot(normalDirection, viewDirection))));
  67. }
  68. ENDCG
  69. }
  70. Pass {
  71. Name "ForwardAdd"
  72. Tags {
  73. "LightMode"="ForwardAdd"
  74. }
  75. Blend One One
  76. ZWrite Off
  77. Fog { Color (0,0,0,0) }
  78. CGPROGRAM
  79. #pragma vertex vert
  80. #pragma fragment frag
  81. #define UNITY_PASS_FORWARDADD
  82. #include "UnityCG.cginc"
  83. #include "AutoLight.cginc"
  84. #pragma multi_compile_fwdadd
  85. #pragma exclude_renderers xbox360 ps3 flash d3d11_9x
  86. #pragma target 3.0
  87. uniform float4 _LightColor0;
  88. uniform float4 _Color;
  89. struct VertexInput {
  90. float4 vertex : POSITION;
  91. float3 normal : NORMAL;
  92. };
  93. struct VertexOutput {
  94. float4 pos : SV_POSITION;
  95. float4 posWorld : TEXCOORD0;
  96. float3 normalDir : TEXCOORD1;
  97. LIGHTING_COORDS(2,3)
  98. };
  99. VertexOutput vert (VertexInput v) {
  100. VertexOutput o;
  101. o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;
  102. o.posWorld = mul(_Object2World, v.vertex);
  103. o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  104. TRANSFER_VERTEX_TO_FRAGMENT(o)
  105. return o;
  106. }
  107. fixed4 frag(VertexOutput i) : COLOR {
  108. i.normalDir = normalize(i.normalDir);
  109. float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
  110. /////// Normals:
  111. float3 normalDirection =  i.normalDir;
  112. float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w));
  113. ////// Lighting:
  114. float attenuation = LIGHT_ATTENUATION(i);
  115. float3 attenColor = attenuation * _LightColor0.xyz;
  116. /////// Diffuse:
  117. float NdotL = dot( normalDirection, lightDirection );
  118. float3 diffuse = max( 0.0, NdotL) * attenColor;
  119. float3 finalColor = 0;
  120. float3 diffuseLight = diffuse;
  121. finalColor += diffuseLight * _Color.rgb;
  122. /// Final Color:
  123. return fixed4(finalColor * (1.0-max(0,dot(normalDirection, viewDirection))),0);
  124. }
  125. ENDCG
  126. }
  127. }
  128. FallBack "Diffuse"
  129. CustomEditor "ShaderForgeMaterialInspector"
  130. }

    更多精彩unity3d技术文章请点击 http://www.gopedu.com/article

时间: 2024-10-14 15:27:59

unity3d游戏开发之简单的透明shader技能培训的相关文章

Unity3D游戏开发之如何截屏的技能培训

下面我们开始今天的Unity3D技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天我们来做点简单的东西,做个什么呢?答案就是截屏.作为一名热爱单机游戏的玩家,每次在玩游戏的同时截取游戏中比较喜欢的画面,特别是学习了Unity3D以后玩游戏的时候更多地是从一个游戏设计者的角度来看待游戏,换句话说,可能关注技术的成分更多一点吧.比如在写<Unity3D游戏开发之自由视角下的角色控制>和<

Unity3D游戏开发从零单排(八) - Shader基础

提要 今天要说的是Unity3D中shader相关的一些知识.不会做非常细致的讲解(东西实在太多!- -),但是看完之后会知道shader是怎么用的. 一些术语 在shader编程中,有一些术语,有时候不明白的话容易被整懵圈,所以这里就简单提一下. Shading Shading最开始指的在素描中给物体画明暗调子,在图形学中,其实就是给Mesh上色(Mesh就是一堆三角面片,包含顶点左边,法线坐标,uv坐标之类的),wiki中说的是根据物体相对于光线的角度及其距离光源距离改变物体颜色生成phot

Unity3D游戏开发之简单的碰撞检測

在"Project"面板中单击"Create"旁边的小三角,选择"javascript"创建一个名为"collision"的js文件.双击它,系统启动Monodevelop来编辑js文件. 清除里面默认创建的代码.写上. function OnCollisionEnter(obj:Collision) { Debug.Log(obj.gameObject.name); } onCollisionEnter函数解释:这个函数是在

Unity3D游戏开发 地形系统(四)

http://mahaile.blog.51cto.com/2891586/771167 上一章我们讲解了 如何创建一个简单的游戏世界 这一章我们来 看看unity3d中的地形系统 废话少说 赶紧开始吧,,哈哈   首先创建一个新的场景    点击菜单栏中的 Terrain-> create Terrain 菜单       完成后如 下图       创建地形系统的时候 unity会按默认的 宽高 图像分辨率,纹理分辨率 等创建一个地形  不过不怕 这些我们都可以修改滴    如果需要在gam

Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

提要 此篇是一个国外教程的翻译,虽然有点老,但是适合新手入门.自己去写代码,debug,布置场景,可以收获到很多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一篇中,我们学会了怎么在Unity中搭建游戏的场景,并且设置模型的物理属性. 在第二篇中,我们学会了怎么在unity中使用脚本,并且创建了大部分的游戏逻辑,包括投球和得分! 在这最后一节中,我们将会为用户创建一个菜单系统,并且和GameController进行交互,我们开始吧. 在设备上测试 到目前为止,

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

[Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3D游戏开发之从<魂斗罗>游戏说起(上)--目标追踪这篇文章后再写一篇<Unity3D游戏开发之从<魂斗罗>游戏说起(下)>,只是眼下博主的项目进度有些缓慢,所以想等项目稳定下来以后再和大家分享. 作为大家等待博主更新博客的回报,我们今天来说一说Unity3D中的游戏场景异步

Unity3D游戏开发从零单排(六) - 人物运动及攻击连击

提要 今天要实现的是一个简单人物控制器.包括用w,a,s,d来控制人物上下左右跑动,鼠标左击发出连招,都是基于老的lagacy的动画.虽然unity3d自带有charactorcontroller,但是并不是很好用,所以人物控制相关的全部自己来实现.先上效果图: 场景搭建 首先下载这个package,里面包含了人物的动作还有地面的模型.将人物和地面都拖进场景中.这里的模型默认的动画模式是lagacy,不用修改.模型有点偏小,改变模型的scale值为10.最好不要改源文件的scale的scale

Unity3D游戏开发之详解 Animation类和Animator类

Unity3D游戏开发之详解 Animation类和Animator类 Animation类 animation组件用于播放动画.可以指定动画剪辑到动画组件并从脚本控制动画播放.在Unity的动画系统基于权重并且支持动画融合,叠加动画,动画混合,标签和完全控制动画播放的各个方面. 如果想播放一个简单的动画,可以使用Animation.Play:如果想在动画之间交叉淡入,可以使用Animation.CrossFade:如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的Wra