shader之——光照图烘焙

Shader "Game_XXX/Scenes/HouseShow"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "Queue"="Geometry"}

    Pass
    {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"
        #pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON ///// LightMap打开或者关闭
        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
            float2 uvLM:TEXCOORD1;///// 第二套UV
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex: SV_POSITION;
            #ifdef LIGHTMAP_ON
            half2 uvLM : TEXCOORD2;  ///// 如果有烘焙图的话,定义lightMapUV
            #endif
        };

        sampler2D _MainTex;
        float4 _MainTex_ST;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = TRANSFORM_TEX(v.uv,_MainTex);

            #ifdef LIGHTMAP_ON
            o.uvLM = v.uvLM.xy * unity_LightmapST.xy + unity_LightmapST.zw;/////如果有红配图,算UV
            #endif
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            fixed4 col = tex2D(_MainTex, i.uv);

            #ifdef LIGHTMAP_ON
            fixed3 lm = ( DecodeLightmap (UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uvLM)));/////
            col.rgb *= lm;/////如果有烘焙图,将烘焙图参与计算
            #endif
            return col;
        }
        ENDCG
      }
    }
}
时间: 2024-10-11 15:58:54

shader之——光照图烘焙的相关文章

Unity光照图UV显示

美术的同学觉得 Unity 光照图烘焙的不够美丽,需要在 ps 里修一修,但是不知道每个物体对应的光照图在哪个区域,UV 是如何分布的,于是要求写一个工具显示,于是有了下面这个: 打开场景自动读取当前烘焙的光照图,在场景中点选物体,会以绿色方框的形式显示出光照图 UV 分布在这张光照图上的位置,如果位置不在可见区域,那么自动滚动到可见区域方便查看.

unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题

最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏药 比如一个shader叫 Shader "xx/UnlitAlphaCutout" 要改为 Shader "xx/Transparent/UnlitAlphaCutout" 才能烘焙出正常的效果,不知道Unity做了什么黑科技,居然在烘焙的时候判断了Transpare

扩展下光照图查看工具

以前写了个简陋的 光照图 UV 查看工具,只能查看单个物体的 UV 在光照图的上的范围,没显示具体的 UV 展开图,前几天看了 扩展Unity模型编辑器 后我觉得应该改进下,于是就有了下面的模样. 自己项目用了还是比较方便,其实到了 Unity 2017 以后已经自带了物体光照图 UV 工具,不过有时候放大不是很好用,而且线框颜色太浅,Unity 默认的在:Lighting -> Object Maps -> Baked Lightmap,你首先要选择一个烘焙过的物体才会显示. 源码地址:ht

光照贴图烘焙

转载自CSDN雨蒙一,简书自由的天空等人,感谢分享: https://www.jianshu.com/p/3e1e002f5684 基础知识了解一下: 1,什么是贴图(Texture)? 贴图(texture)是一张不大的二维图像,它呈现了某个表面的最终信息.它被指定到线框多边形的表面,给予模型最终的外观.贴图的制作技巧是创建游戏真实度方面的关键因素. 2,贴图格式及大小 一般情况下,贴图的实现在图像处理软件中制作完成,纹理一般会包含很多信息和图层,也将随后被储存成PSD格式,当制作完成后,文件

unity3d shader 自定义光照函数

希望实现一个根据摄像机朝向与网格法向关系控制光照亮度的双面shader. 代码如下 Shader "Custom/UnlitOP" { Properties{ _Color("Main Color", Color) = (1,1,1,1) //渲染需要外部设置的颜色 _MainTex("Base (RGB)", 2D) = "white" {} //材质 _CamDir("Camera Dirction",

Untiy Shader - 纹理贴图滚动

滚动纹理,可以实现一些如瀑布,河流,熔岩流等效果,本质上就是UV坐标的偏移,在Unity中新建一个Shader,然后修改成下面代码的样子,新建一个材质,选择此shader,赋予一张贴图,然后将材质应用于一个mesh上,运行即可看到效果 Shader "Custom/UVOffset" { Properties { _MainTint("Diffuse Tine",Color) = (1,1,1,1) _MainTex("Base (RGB)",2

cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题

转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让图片变灰.网上也有很多用shader处理图片变灰的方法,这些方法确实也实现了让图片变灰的需求,但是android平台从后台切换回来的时候,shader被释放,导致图片位置错乱.关键在于从android后台切换回来的时候需要重新加载shader.我们看一下cocos2dx原生的shader处理方式,我

Unity Shader 法线贴图的实现

这里有一个细节,关于法线贴图是有两个不同的空间的,如下: 切线空间:法线贴图颜色为偏蓝色 模型空间:法线贴图颜色为五颜六色 因此根据不同的空间变换位置方便一致计算. 1 // 法线贴图映射的编写+透明 2 Shader "TMoon/05-NormalMapAndAlpha" { 3 Properties{ 4 _Color("Color",Color) = (1,1,1,1) 5 _MainTex("Main Tex",2D) = "

Shader实例:NGUI图集中的UISprite正确使用Shader的方法

效果: 变灰,过滤,流光 都是UI上常用效果. 比如: 1.按钮禁用时,变灰. 2.一张Icon要应付圆形背景框,又要应付矩形背景框.就要使用过滤的方式来裁剪. 避免了美术提供两张icon的麻烦,又节省了内存. 3.流光,呃……,策划就是要,你能怎么办. 实践: NGUI把要用到的图片做成了图集,它会记录每一张小图的信息. 包括:每一张小图在这张图集里面的位置,长,宽,padding,border.等等. 使用时只是采样这张小图所在区域,然后显示在UI的mesh上. 如果我们用这张小图的texc