Unity2D实现贴图凹凸感并接受实时光照效果
来源:互联网 发布:电视播放软件破解版 编辑:程序博客网 时间:2024/05/01 04:19
先看最终效果:
我们的原图是一个3D模型的截图:
这一效果是通过Shader实现的:
(Shader代码来自国外博客:http://www.thomas-joncorpuz.com/blog/2014/11/30/custom-unity-2d-sprite-shader)
Shader "Custom/SpriteNormal" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _NormalsTex ("Sprite Normals", 2D) = "bump" {} _Ramp ("Shading Ramp", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 _Cutoff ("Alpha Cutoff", Range (0,1)) = 0.5 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="False" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } Cull Off Lighting On ZWrite Off Fog { Mode Off } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma surface surf CustomLambert alpha vertex:vert addshadow alphatest:_Cutoff #pragma multi_compile DUMMY PIXELSNAP_ON sampler2D _MainTex; sampler2D _NormalsTex; sampler2D _Ramp; fixed4 _Color; struct Input { float2 uv_MainTex; fixed4 color; }; half4 LightingCustomLambert (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) { half NdotL = dot (s.Normal, lightDir); half4 c; c.rgb = (s.Albedo * _LightColor0.rgb * (tex2D (_Ramp, half2 (NdotL * 0.5 + 0.5, 0)))) * (atten * 2); c.a = s.Alpha; return c; } void vert (inout appdata_full v, out Input o) { #if defined(PIXELSNAP_ON) && !defined(SHADER_API_FLASH) v.vertex = UnityPixelSnap (v.vertex); #endif v.normal = float3(0,0,-1); v.tangent = float4(-1, 0, 0, 1); UNITY_INITIALIZE_OUTPUT(Input, o); o.color = _Color * v.color; } void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color; o.Albedo = c.rgb; o.Normal = UnpackNormal (tex2D (_NormalsTex, IN.uv_MainTex)); o.Alpha = c.a; } ENDCG } FallBack "Diffuse"}Shader需要的法线贴图可以通过一个软件:PixPlant生成出来,只需提供原素材图,这个软件就能生成一个法线贴图了。
此外还需要一张阴影梯度图:
0 0
- Unity2D实现贴图凹凸感并接受实时光照效果
- shader实例(二十)法线贴图实现凹凸效果
- shader实现凹凸效果
- Shader中贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图
- Shader中贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图
- 实现组件的凹凸效果
- 实现组件的凹凸效果
- 在Blender中通过法线贴图和顶点位移实现石块地面的凹凸感
- 光照贴图
- 光照贴图
- 光照贴图
- 凹凸贴图(Bump Mappinig)固定光线实现方法
- 凹凸贴图(bump mapping)
- modelview与凹凸贴图
- unity3d 凹凸贴图、法线贴图、置换贴图
- 凹凸贴图、法线贴图、置换贴图
- 制作简单的法线贴图,使图片有凹凸感
- Unity3D GI 模式下光照贴图对实时光照系统的影响
- RedHat Linux 安装oracle11g
- java错误总结
- 黑马程序员学习笔记 Java中多线程与并发的总结
- leetcode 32: Longest Valid Parentheses
- Ubuntu12.04下Boost安装和使用
- Unity2D实现贴图凹凸感并接受实时光照效果
- windows批处理
- unity Profiler for Android
- Android Volley入门到精通:使用Volley加载网络图片(示例,出错代码)
- 漫谈进程与线程
- 【Android问题】解决创建Android模拟器时提示"No system images installed for this target"的问题
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
- 2012年5月SAT香港真题解析
- 卡牌游戏