使用lightProbe来模拟动态物体的照明shader

VertexLit path中读取lightProbe烘焙信息:

Shader "VertexLitProbe" {
Properties {
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}//主贴图
}

SubShader {
    LOD 100

    Pass {
        Tags { "LightMode" = "VertexLit" }

        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            //#pragma target 3.0

            #include "UnityCG.cginc"
            #include "Lighting.cginc"

            struct appdata_t {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float2 texcoord : TEXCOORD0;
            };
            struct v2f {
                float4 vertex : SV_POSITION;
                float3 wroldN : TEXCOORD01;
                half2 texcoord : TEXCOORD0;
            };

            float4 _MainTex_ST;
            sampler2D _MainTex;

            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.wroldN = mul((float3x3)_Object2World, v.normal);
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 mainCol = tex2D(_MainTex, i.texcoord);
                mainCol.rgb = mainCol.rgb * ShadeSH9(half4(i.wroldN,1.0));
                return mainCol;
            }
        ENDCG
    }
}

}

效果如下图:

Ps:unity 自带的diffuse(surface shader)中有在forwardBass pass中处理SH9,但是自带的VertexLit(cg)中没有,所以使用自带shader时,只有在forward pass中在能使用LightProbe,但是可以自己写

可以在surface shader中关闭:

时间: 2024-10-13 11:35:34

使用lightProbe来模拟动态物体的照明shader的相关文章

COCOS2DX学习之Box2d物理引擎使用之------动态物体的创建

1.创建一个物理世界 首先要引入一个头文件#include "Box2D\Box2D.h" 之后利用b2word创建一个对象,并且指定这个物理世界中的加速度方向. word = new b2World(b2Vec2(0,-10));                        //指定物理世界的加速度 最后还要重写一下update函数,这个函数在之前的计时器学习的时候已经说过,每一帧的变动都将自动执行这个函数.所以我们要通过这个函数来进行创建的物理世界的刷新. 2.创建一个运动的物体

在WPF中使用PlaneProjection模拟动态3D效果

原文:在WPF中使用PlaneProjection模拟动态3D效果 虽然在WPF中也集成了3D呈现的功能,在简单的3D应用中,有时候并不需要真实光影的3D场景.毕竟使用3D引擎会消耗很多资源,有时候使用各种变换和假的阴影贴图也能设计出既省资源,又有很好用户体验的“伪”3D界面. 在Silverlight中,因为性能问题,一般并不使用真3D引擎,微软为Silverlight提供了System.Windows.Media.PlaneProjection 类,用投影变换来模拟3D的效果. 下面让我们看

关于Unity动态物体无法向使用使用custom shader和lightmap的物体投射阴影

最近在做unity shader forge和marmoset的优化,TA那边遇到了一个阴影显示的问题,具体如下: 在Forward Rendering状态下,静态场景使用了是shader forge生成的blendlayer类的shader,使用lightmap烘培贴图后,动态角色走到静态物体附近时,方向光在角色上的投影,无法投射到使用shader forge材质的物体上,但其他材质和使用marmoset的材质可以正常接收.查询了一些网站解决方案后,最终确定是custom shader 写法的

模拟真实物体运动的js动画库插件-Anima

Anima是一款可以同时控制许多对象进行动画的js插件.并且每一个对象都有它们各自的质量和密度以模拟现实生活中的物体. CSS3动画有一些限制,最主要的是你不可以真正完全的控制它们.如果不使用一些技巧的话,你几乎不可能停止动画的过渡. Anima是一个基本的物理基础js动画库框架.你可以通过它很容易的创建现实生活中的物体运动动画.Anima经过压缩后只有5K大小. 在线演示:http://www.htmleaf.com/Demo/201502041327.html 下载地址:http://www

MySQL PLSQL Demo - 004.模拟动态游标

参考:写MySQL存储过程实现动态执行SQL,也可以用临时表代替视图. drop procedure if exists p_simulate_dynamic_cursor; create procedure p_simulate_dynamic_cursor() begin declare v_sql varchar(4000); declare v_field varchar(4000); declare v_result varchar(4000) default ''; declare

achartengine之饼图模拟动态数据

在achartengine是通过ChartFactory.getPieChartView(context, dataset, renderer)方法得到一个GraphicalView对象而这个对象就是饼图对象...当然也可以通过ChartFactory.getXXXChartView对象得到其它的表图. GraphicalView  mChartView = ChartFactory.getPieChartView(context, dataset, mRenderer); 当你想要得到饼图对象

Canvas——使用定时器模拟动态加载动画!

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> </style> </head> <body> <canvas id="canvas" width="500" height=&q

php模拟动态输出效果

读取数据库,显示数据 foreach($s as $ss){ echo '同步中 ...<br />'; for( $i = 1 ; $i < 2 ; $i++ ) { //echo $i . '<br />'; echo $ss['people']; echo "<br>"; flush(); ob_flush(); sleep(1); } echo 'End ...<br />'; }

模拟动态进度条

<style type="text/css"> .process { width: 10px; height: 18px; background-color: #5bc0de; background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(