zoukankan      html  css  js  c++  java
  • 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.   
      6. Shader "Custom/Shader1" {  
      7.     Properties {  
      8.         _Color ("Color", Color) = (1,1,1,1)  
      9.         [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5  
      10.     }  
      11.     SubShader {  
      12.         Tags {  
      13.             "IgnoreProjector"="True"  
      14.             "Queue"="Transparent"  
      15.             "RenderType"="Transparent"  
      16.         }  
      17.         LOD 200  
      18.         Pass {  
      19.             Name "ForwardBase"  
      20.             Tags {  
      21.                 "LightMode"="ForwardBase"  
      22.             }  
      23.             Blend SrcAlpha OneMinusSrcAlpha  
      24.             ZWrite Off  
      25.               
      26.             CGPROGRAM  
      27.             #pragma vertex vert  
      28.             #pragma fragment frag  
      29.             #define UNITY_PASS_FORWARDBASE  
      30.             #include "UnityCG.cginc"  
      31.             #pragma multi_compile_fwdbase  
      32.             #pragma exclude_renderers xbox360 ps3 flash d3d11_9x   
      33.             #pragma target 3.0  
      34.             uniform float4 _LightColor0;  
      35.             uniform float4 _Color;  
      36.             struct VertexInput {  
      37.                 float4 vertex : POSITION;  
      38.                 float3 normal : NORMAL;  
      39.             };  
      40.             struct VertexOutput {  
      41.                 float4 pos : SV_POSITION;  
      42.                 float4 posWorld : TEXCOORD0;  
      43.                 float3 normalDir : TEXCOORD1;  
      44.             };  
      45.             VertexOutput vert (VertexInput v) {  
      46.                 VertexOutput o;  
      47.                 o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;  
      48.                 o.posWorld = mul(_Object2World, v.vertex);  
      49.                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);  
      50.                 return o;  
      51.             }  
      52.             fixed4 frag(VertexOutput i) : COLOR {  
      53.                 i.normalDir = normalize(i.normalDir);  
      54.                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);  
      55. /////// Normals:  
      56.                 float3 normalDirection =  i.normalDir;  
      57.                 float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);  
      58. ////// Lighting:  
      59.                 float attenuation = 1;  
      60.                 float3 attenColor = attenuation * _LightColor0.xyz;  
      61. /////// Diffuse:  
      62.                 float NdotL = dot( normalDirection, lightDirection );  
      63.                 float3 diffuse = max( 0.0, NdotL) * attenColor + UNITY_LIGHTMODEL_AMBIENT.rgb;  
      64.                 float3 finalColor = 0;  
      65.                 float3 diffuseLight = diffuse;  
      66.                 finalColor += diffuseLight * _Color.rgb;  
      67. /// Final Color:  
      68.                 return fixed4(finalColor,(1.0-max(0,dot(normalDirection, viewDirection))));  
      69.             }  
      70.             ENDCG  
      71.         }  
      72.         Pass {  
      73.             Name "ForwardAdd"  
      74.             Tags {  
      75.                 "LightMode"="ForwardAdd"  
      76.             }  
      77.             Blend One One  
      78.             ZWrite Off  
      79.               
      80.             Fog { Color (0,0,0,0) }  
      81.             CGPROGRAM  
      82.             #pragma vertex vert  
      83.             #pragma fragment frag  
      84.             #define UNITY_PASS_FORWARDADD  
      85.             #include "UnityCG.cginc"  
      86.             #include "AutoLight.cginc"  
      87.             #pragma multi_compile_fwdadd  
      88.             #pragma exclude_renderers xbox360 ps3 flash d3d11_9x   
      89.             #pragma target 3.0  
      90.             uniform float4 _LightColor0;  
      91.             uniform float4 _Color;  
      92.             struct VertexInput {  
      93.                 float4 vertex : POSITION;  
      94.                 float3 normal : NORMAL;  
      95.             };  
      96.             struct VertexOutput {  
      97.                 float4 pos : SV_POSITION;  
      98.                 float4 posWorld : TEXCOORD0;  
      99.                 float3 normalDir : TEXCOORD1;  
      100.                 LIGHTING_COORDS(2,3)  
      101.             };  
      102.             VertexOutput vert (VertexInput v) {  
      103.                 VertexOutput o;  
      104.                 o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;  
      105.                 o.posWorld = mul(_Object2World, v.vertex);  
      106.                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);  
      107.                 TRANSFER_VERTEX_TO_FRAGMENT(o)  
      108.                 return o;  
      109.             }  
      110.             fixed4 frag(VertexOutput i) : COLOR {  
      111.                 i.normalDir = normalize(i.normalDir);  
      112.                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);  
      113. /////// Normals:  
      114.                 float3 normalDirection =  i.normalDir;  
      115.                 float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w));  
      116. ////// Lighting:  
      117.                 float attenuation = LIGHT_ATTENUATION(i);  
      118.                 float3 attenColor = attenuation * _LightColor0.xyz;  
      119. /////// Diffuse:  
      120.                 float NdotL = dot( normalDirection, lightDirection );  
      121.                 float3 diffuse = max( 0.0, NdotL) * attenColor;  
      122.                 float3 finalColor = 0;  
      123.                 float3 diffuseLight = diffuse;  
      124.                 finalColor += diffuseLight * _Color.rgb;  
      125. /// Final Color:  
      126.                 return fixed4(finalColor * (1.0-max(0,dot(normalDirection, viewDirection))),0);  
      127.             }  
      128.             ENDCG  
      129.         }  
      130.     }  
      131.     FallBack "Diffuse"  
      132.     CustomEditor "ShaderForgeMaterialInspector"      
      133.   }  

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

         

  • 相关阅读:
    企业网盘针对文件权限管理的技术实现
    学校私有云盘在学校信息化建设中的作用-教学资源库平台
    Mobox 知识管理平台助推市长质量奖
    为勇敢的华裔女子点赞
    一群喵星人把他家包围了。。
    【OI】简单的分块
    【OI】Kruskal & ufs (克鲁斯卡与并查集)
    【OI】向量&矩阵乘法
    【OI】同余方程
    【Ubuntu】某灯图标过大
  • 原文地址:https://www.cnblogs.com/Unity3Dqishituan/p/3992633.html
Copyright © 2011-2022 走看看