查看: 1432|回复: 5
打印 上一主题 下一主题

[其他] 实现镜头景深效果的代码

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-6-25 01:27:54 |只看该作者 |倒序浏览
  1.     Shader "Hidden/Render DOF Factor" {

  2.     Properties {

  3.     _MainTex ("Base", 2D) = "white" {}

  4.     _Cutoff ("Cutoff", float) = 0.5

  5.     }

  6.     // Helper code used in all of the below subshaders

  7.     CGINCLUDE

  8.     struct v2f {

  9.     float4 pos : POSITION;

  10.     float depth : TEXCOORD0;

  11.     };

  12.     struct v2f_uv {

  13.     float4 pos : POSITION;

  14.     float2 uv : TEXCOORD0;

  15.     float depth : TEXCOORD1;

  16.     };

  17.     uniform float4 _FocalParams;

  18.     half DOFFactor( float z ) {

  19.     float focalDist = _FocalParams.x;

  20.     float invRange = _FocalParams.w;

  21.     float fromFocal = z - focalDist;

  22.     if( fromFocal < 0.0 )

  23.     fromFocal *= 4.0;

  24.     return saturate( abs( fromFocal ) * invRange );

  25.     }

  26.     uniform sampler2D _MainTex;

  27.     uniform float _Cutoff;

  28.     half4 frag(v2f i) : COLOR {

  29.     return DOFFactor(i.depth);

  30.     }

  31.     half4 frag_uv(v2f_uv i) : COLOR {

  32.     half4 texcol = tex2D( _MainTex, i.uv );

  33.     clip( texcol.a - _Cutoff );

  34.     return DOFFactor(i.depth);

  35.     }

  36.     ENDCG

  37.     Category {

  38.     Fog { Mode Off }

  39.     ?

  40.     // regular opaque objects

  41.     SubShader {

  42.     Tags { "RenderType"="Opaque" }

  43.     Pass {

  44.     ?

  45.     CGPROGRAM

  46.     #pragma vertex vert

  47.     #pragma fragment frag

  48.     #include "UnityCG.cginc"

  49.     v2f vert( appdata_base v ) {

  50.     v2f o;

  51.     o.pos = mul(glstate.matrix.mvp, v.vertex);

  52.     COMPUTE_EYEDEPTH(o.depth);

  53.     return o;

  54.     }

  55.     ENDCG

  56.     }

  57.     }

  58.     ?

  59.     // transparent cutout objects

  60.     SubShader {

  61.     Tags { "RenderType"="TransparentCutout" }

  62.     Pass {

  63.     Cull Off

  64.     ?

  65.     CGPROGRAM

  66.     #pragma vertex vert

  67.     #pragma fragment frag_uv

  68.     #include "UnityCG.cginc"

  69.     v2f_uv vert( appdata_base v ) {

  70.     v2f_uv o;

  71.     o.pos = mul(glstate.matrix.mvp, v.vertex);

  72.     o.uv = v.texcoord;

  73.     COMPUTE_EYEDEPTH(o.depth);

  74.     return o;

  75.     }

  76.     ENDCG

  77.     }

  78.     }

  79.     ?

  80.     // terrain tree bark

  81.     SubShader {

  82.     Tags { "RenderType"="TreeOpaque" }

  83.     Pass {

  84.     ?

  85.     CGPROGRAM

  86.     #pragma vertex vert

  87.     #pragma fragment frag

  88.     #include "UnityCG.cginc"

  89.     #include "TerrainEngine.cginc"

  90.     struct appdata {

  91.     float4 vertex : POSITION;

  92.     float4 color : COLOR;

  93.     };

  94.     v2f vert( appdata v ) {

  95.     v2f o;

  96.     TerrainAnimateTree(v.vertex, v.color.w);

  97.     o.pos = mul( glstate.matrix.mvp, v.vertex );

  98.     COMPUTE_EYEDEPTH(o.depth);

  99.     return o;

  100.     }

  101.     ENDCG

  102.     }

  103.     }

  104.     ?

  105.     // terrain tree leaves

  106.     SubShader {

  107.     Tags { "RenderType"="TreeTransparentCutout" }

  108.     Pass {

  109.     Cull Off

  110.     ?

  111.     CGPROGRAM

  112.     #pragma vertex vert

  113.     #pragma fragment frag_uv

  114.     #include "UnityCG.cginc"

  115.     #include "TerrainEngine.cginc"

  116.     struct appdata {

  117.     float4 vertex : POSITION;

  118.     float4 color : COLOR;

  119.     float4 texcoord : TEXCOORD0;

  120.     };

  121.     //unity3d教程手册:http://www.unitymanual.com

  122.     v2f_uv vert( appdata v ) {

  123.     v2f_uv o;

  124.     TerrainAnimateTree(v.vertex, v.color.w);

  125.     o.pos = mul( glstate.matrix.mvp, v.vertex );

  126.     o.uv = v.texcoord;

  127.     COMPUTE_EYEDEPTH(o.depth);

  128.     return o;

  129.     }

  130.     ENDCG

  131.     }

  132.     }

  133.     ?

  134.     // terrain tree billboards

  135.     SubShader {

  136.     Tags { "RenderType"="TreeBillboard" }

  137.     Pass {

  138.     Cull Off

  139.     ?

  140.     CGPROGRAM

  141.     #pragma vertex vert

  142.     #pragma fragment frag_tree

  143.     #include "UnityCG.cginc"

  144.     #include "TerrainEngine.cginc"

  145.     struct appdata {

  146.     float4 vertex : POSITION;

  147.     float4 color : COLOR;

  148.     float4 texcoord : TEXCOORD0;

  149.     };

  150.     v2f_uv vert( appdata_tree_billboard v ) {

  151.     v2f_uv o;

  152.     TerrainBillboardTree(v.vertex, v.texcoord1.xy);

  153.     o.pos = mul( glstate.matrix.mvp, v.vertex );

  154.     o.uv = v.texcoord;

  155.     COMPUTE_EYEDEPTH(o.depth);

  156.     return o;

  157.     }

  158.     half4 frag_tree(v2f_uv i) : COLOR {

  159.     half4 texcol = tex2D( _MainTex, i.uv );

  160.     clip( texcol.a - 0.5 );

  161.     return DOFFactor(i.depth);

  162.     }  //Unity3D教程:http://www.unitymanual.com

  163.     ENDCG

  164.     }

  165.     }

  166.     ?

  167.     // terrain grass billboards

  168.     SubShader {

  169.     Tags { "RenderType"="GrassBillboard" }

  170.     Pass {

  171.     Cull Off

  172.     ?

  173.     CGPROGRAM

  174.     #pragma vertex vert

  175.     #pragma fragment frag_uv

  176.     #pragma multi_compile NO_INTEL_GMA_X3100_WORKAROUND INTEL_GMA_X3100_WORKAROUND

  177.     #include "UnityCG.cginc"

  178.     #include "TerrainEngine.cginc"

  179.     v2f_uv vert (appdata_grass v) {

  180.     v2f_uv o;

  181.     TerrainBillboardGrass(v.vertex, v.texcoord1.xy);

  182.     float waveAmount = v.texcoord1.y;

  183.     float4 dummyColor = 0;

  184.     TerrainWaveGrass (v.vertex, waveAmount, dummyColor, dummyColor);

  185.     o.pos = mul (glstate.matrix.mvp, v.vertex);

  186.     o.uv = v.texcoord;

  187.     COMPUTE_EYEDEPTH(o.depth);

  188.     return o;

  189.     }

  190.     ENDCG

  191.     }

  192.     }

  193.     ?

  194.     // terrain grass non-billboards

  195.     SubShader {

  196.     Tags { "RenderType"="Grass" }

  197.     Pass {

  198.     Cull Off

  199.     ?

  200.     CGPROGRAM

  201.     #pragma vertex vert

  202.     #pragma fragment frag_uv

  203.     #pragma multi_compile NO_INTEL_GMA_X3100_WORKAROUND INTEL_GMA_X3100_WORKAROUND

  204.     #include "UnityCG.cginc"

  205.     #include "TerrainEngine.cginc"

  206.     v2f_uv vert (appdata_grass v) {

  207.     v2f_uv o;

  208.     float waveAmount = v.color.a * _WaveAndDistance.z;

  209.     float4 dummyColor = 0;

  210.     TerrainWaveGrass (v.vertex, waveAmount, dummyColor, dummyColor);

  211.     o.pos = mul (glstate.matrix.mvp, v.vertex);

  212.     o.uv = v.texcoord;

  213.     COMPUTE_EYEDEPTH(o.depth);

  214.     return o;

  215.     }

  216.     ENDCG

  217.     }

  218.     }

  219.     ?

  220.     }

  221.     }

  222.     ?
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-6-25 02:34:17 |只看该作者
Good to know!
回复

使用道具 举报

0

主题

1

听众

28

积分

设计初学者

Rank: 1

纳金币
7
精华
0

活跃会员 灌水之王

板凳
发表于 2014-6-25 02:50:39 |只看该作者

Good to know
回复

使用道具 举报

3

主题

1

听众

6189

积分

高级设计师

Rank: 6Rank: 6

纳金币
370
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-6-25 08:44:52 |只看该作者
IT'S SHADER CODE
回复

使用道具 举报

wucnj    

1

主题

1

听众

3160

积分

中级设计师

Rank: 5Rank: 5

纳金币
1065
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-6-25 09:04:31 |只看该作者
感谢分享!!!
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-6-25 16:50:43 |只看该作者
感谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-23 19:41 , Processed in 0.095441 second(s), 30 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部