Unity2D实现贴图凹凸感并接受实时光照效果

先看终于效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

我们的原图是一个3D模型的截图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

这一效果是通过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生成出来,仅仅需提供原素材图。这个软件就能生成一个法线贴图了。

此外还须要一张阴影梯度图:

时间: 2024-10-07 02:28:26

Unity2D实现贴图凹凸感并接受实时光照效果的相关文章

Unity2D Sprite灰白图(Unity3D开发之十一)

猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=596 昨晚看到群里问到2DSprite怎么变成灰白图,晚上看了下,修改shader是最方便的. 下面是Sprites-Gray.shader的实现,请放入自己工程: Shader "Sprites/Gray" { Properties { [PerRendererData] _MainTex ("Sprite

UE4材质系统研究

本文将研究UE4材质系统的各个节点,看看UE4的黑科技 1. 平移(UV坐标动画) UV 坐标动画或 UV 平移的含义是,水平 (U) 和/或垂直 (V) 移动纹理的 UV 坐标,以产生复杂动画的错觉. 在以下示例中,火焰纹理沿着 U(水平)方向平移,使火焰看起来像是在移动一样. 参考文章:http://api.unrealengine.com/CHN/Engine/Rendering/Materials/HowTo/AnimatingUVCoords/ 关键节点: 快捷键:p+左键 上图节点可

Esfog_UnityShader教程_NormalMap法线贴图

咳咳,好久没有更新了,一来是这段时间很忙很忙,再来就是自己有些懒了,这个要不得啊,赶紧补上.在前面我们已经介绍过了漫反射和镜面反射,这两个是基本的光照类型,仅仅依靠它们就想制作出精美的效果是远远不够的,这一篇我们就来了解一下如何利用一种叫做法线贴图的技术并结合我们前面讲过的知识来制作出更精细的效果. 法线贴图NormalMap 首先要提到的是,什么是法线贴图,如果大家想看更专业的解释可以自行求助搜索引擎,这里我说一下我的个人理解:在游戏中,如果角色或物体模型做的越精细(面数越多),那么渲染后效果

法线贴图——Normal Mapping

对于不曾学过.用过法线贴图的人来说,提到法线贴图,经常会提到的问题是什么是法线贴图?法线贴图用于解决什么问题?法线贴图的原理是什么?本文将就这三个问题阐述本人的一些见解,各位不喜勿喷!!! 谈到法线贴图首先提到的是切线空间,参考网站 http://blog.csdn.net/bonchoix/article/details/8619624 PS:常提到的纹理坐标就是定义在切线空间的,U坐标对应切线空间的T轴,V轴对应切线空间的B轴,顶点法向量N对应切线空间的N轴,模型中每个三角形都有对应的切线空

NormalMap 贴图 【转】

转载: http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.html 说起Normal Map(法线贴图),就会想起Bump Map(凹凸贴图).Bump Mapping是Blin大师在1978年提出的图形学算法,目的是以低代价给予计算机几何体以更丰富的表面信息(高模盖低模).30年来,这项技术不断延展,尤其是计算机图形学成熟以后,相继出现了不少算法变体,90年代末的Normal Map解放了必须自行计算纹理像

Unity Shader-法线贴图(Normal)及其原理

简介 以前经常听说“模型不好看啊,怎么办啊?”答曰“加法线”,”做了个高模,准备烘一下法线贴图”,“有的美术特别屌,直接画法线贴图”.....法线贴图到底是个什么鬼,当年天真的我真的被这个图形学的奇淫杂技忽悠了,然而毕竟本人还算有点刨根问底的精神,决定研究一下法线贴图的原理以及Unity下的实现.本人才疏学浅,如有错误,欢迎指正. 法线贴图是目前游戏开发中最常见的贴图之一.我们知道,一般情况下,模型面数越高,可以表现的细节越多,效果也越好.但是,由于面数多了,顶点数多了,计算量也就上去了,效果永

法线贴图技术

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多Unity3D资源.Unity3D培训视频.Unity3D教程.Unity3D常见问题.Unity3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 什么是法线贴图技术呢?这是一种用来实现3D效果的一种技术,要想理解这种技术还请您听我慢慢道来. 我们知道,在游戏中经常会有这样的情况,就是一个平面这个平面在现实中并不是一个"平"面,例如砖墙的表面带有石质浮雕等等.这

【转载】法线贴图Nomal mapping 原理

法线贴图多用在CG动画的渲染以及游戏画面的制作上,将具有高细节的模型通过映射烘焙出法线贴图,贴在低端模型的法线贴图通道上,使之拥有法线贴图的渲染效果,却可以大大降低渲染时需要的面数和计算内容,从而达到优化动画渲染和游戏渲染的效果. 现在好多3d网游都没有法线贴图啊,呵呵,<giant>就没有. CG:计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学.简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形

光照贴图深入学习 Lightmapping In-Depth

If you are about to lightmap your first scene in Unity, this Quickstart Guide might help you out. 如果你是在Unity第一次接触光照贴图,这个快速指南可以帮助你快速了解. Lightmapping is fully integrated in Unity, so that you can build entire levels from within the Editor, lightmap the