最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity shader實(shí)現(xiàn)多光源漫反射以及陰影

 更新時(shí)間:2020年07月02日 08:29:21   作者:OwenTA  
這篇文章主要為大家詳細(xì)介紹了shader實(shí)現(xiàn)多光源漫反射以及陰影,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了shader實(shí)現(xiàn)多光源漫反射以及陰影的具體代碼,供大家參考,具體內(nèi)容如下

Shader "Unlit/MulLight"
{
 Properties
 {
  _MainTex ("Texture", 2D) = "white" {}
 }
 SubShader
 {
  //一盞主燈
  Pass
  {
   //Always: 總是渲染;沒有光照模式。
   //ForwardBase: 適用于前渲染、環(huán)境、主要方向燈、光/sh光和烘焙圖。
   //ForwardAdd: 適用于前渲染, 疊加每一盞燈,每一盞燈就多一個(gè)pass。
   //Deferred: 延遲渲染,渲染g緩沖區(qū) 。
   //ShadowCaster:將物體深度渲染到陰影貼圖或者深度紋理上 。
   //PrepassBase: 用于傳統(tǒng)的延遲光照,渲染法線和高光效果。
   //PrepassFinal:用于傳統(tǒng)的延遲光照,通過結(jié)合文理、燈光、和法線來渲染最終的結(jié)果。
   //Vertex:當(dāng)對(duì)象不是光映射時(shí),用于遺留頂點(diǎn)的渲染,所有頂點(diǎn)燈都被利用。 
   //VertexLMRGBM: 當(dāng)對(duì)象被光映射時(shí),在遺留的頂點(diǎn)上使用渲染,在LightMap是RGBM編碼的平臺(tái)上(pc和控制臺(tái))。
   //VertexLM: 當(dāng)對(duì)象被光映射時(shí),在遺留的頂點(diǎn)上使用渲染,在LightMap是雙idr編碼的(移動(dòng)平臺(tái))平臺(tái)上。
   Tags { "RenderType"="Opaque" "LightMode" = "ForwardBase"}//////
   CGPROGRAM
   #pragma vertex vert
   #pragma fragment frag
   #include "UnityCG.cginc"
    #pragma target 3.0 
 
   //衰減與陰影的實(shí)現(xiàn)
   #include "AutoLight.cginc"http://////
    //fwdadd:ForwardBase的陰影顯示,在下面的ForwardAdd里得用fwdadd; 必須結(jié)合fallback,兩者缺一不可 
   #pragma multi_compile_fwdadd_fullshadows//////
   sampler2D _MainTex;
   float4 _MainTex_ST;
   //定義一個(gè)燈光,名字為固定格式,會(huì)自動(dòng)取場(chǎng)景中燈光
   float4 _LightColor0;//////
 
   struct appdata
   {
    float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float4 normal:NORMAL;//////
   };
 
   struct v2f
   {
    float2 uv : TEXCOORD0;
    float4 pos: SV_POSITION;
    float3 normal :TEXCOORD1;//////
     //點(diǎn)光源需要的衰減 
    LIGHTING_COORDS(3,4)//////#include "AutoLight.cginc"
   };
   v2f vert (appdata v)
   {
    v2f o;
    //這里一般用 o.pos,用o.vertex有時(shí)候會(huì)報(bào)錯(cuò) 
    o.pos= UnityObjectToClipPos(v.vertex);
    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
    o.normal = v.normal;//////
    //點(diǎn)光源需要的衰減 
    TRANSFER_VERTEX_TO_FRAGMENT(o)//////#include "AutoLight.cginc"
    return o;
   }
   fixed4 frag (v2f i) : SV_Target
   {
    //物體法向量轉(zhuǎn)化為世界法向量
    float3 N = normalize(UnityObjectToWorldNormal(i.normal));//////
    //世界光向量:unity封裝好的光向量,會(huì)自動(dòng)調(diào)用場(chǎng)景里面的存在的燈光
    float3 L =normalize( _WorldSpaceLightPos0.xyz);//////
             //點(diǎn)光源需要的衰減系數(shù)
    float atten = LIGHT_ATTENUATION(i);//////#include "AutoLight.cginc"
 
    fixed4 col = tex2D(_MainTex, i.uv);
    //最終顏色 = 主顏色 x( 燈光顏色 x 漫反射系數(shù) x衰減系數(shù) + 環(huán)境光)
    col.rgb = col.rgb * (_LightColor0.rgb* saturate(dot(N,L)) *atten + UNITY_LIGHTMODEL_AMBIENT);//////
 
    return col;
   }
   ENDCG
   }
 
   //多盞燈疊加
  Pass//////
  {
   Tags { "RenderType"="Opaque" "LightMode" = "ForwardAdd"} //ForwardAdd :多燈混合//////
   Blend One One//////
   CGPROGRAM
   #pragma vertex vert
   #pragma fragment frag
   #include "UnityCG.cginc"
   #pragma target 3.0
 
   //衰減與陰影的實(shí)現(xiàn)
   #include "AutoLight.cginc"http://////
    //fwdadd:ForwardAdd的陰影顯示,在上面的ForwardBase里得用fwdbase; 必須結(jié)合fallback,兩者缺一不可 
   #pragma multi_compile_fwdadd_fullshadows//////
 
   sampler2D _MainTex;
   float4 _MainTex_ST;
   //定義一個(gè)燈光,名字為固定格式,會(huì)自動(dòng)取場(chǎng)景中燈光
   float4 _LightColor0;//////
 
   struct appdata
   {
    float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float4 normal:NORMAL;//////
   };
 
   struct v2f
   {
    float2 uv : TEXCOORD0;
    float4 pos: SV_POSITION;
    float3 normal :TEXCOORD1;//////
    float4 wPos :TEXCOORD2;//////
    //點(diǎn)光源需要的衰減 
    LIGHTING_COORDS(3,4)//////#include "AutoLight.cginc"
   };
   v2f vert (appdata v)
   {
    v2f o;
     //這里一般用 o.pos,用o.vertex有時(shí)候會(huì)報(bào)錯(cuò)
    o.pos= UnityObjectToClipPos(v.vertex);
    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
    o.wPos= mul(unity_ObjectToWorld, v.vertex);//////
    o.normal = v.normal;//////
    //點(diǎn)光源需要的衰減
    TRANSFER_VERTEX_TO_FRAGMENT(o)//////#include "AutoLight.cginc"
    return o;
   }
   fixed4 frag (v2f i) : SV_Target
   {
    //物體法向量轉(zhuǎn)化為世界法向量
    float3 N = normalize(UnityObjectToWorldNormal(i.normal));//////
 
    //世界光向量:這里計(jì)算的是點(diǎn)光源,按照燈光的距離來算衰減,第一個(gè)pass不需要
    float3 L = normalize (lerp(_WorldSpaceLightPos0.xyz , _WorldSpaceLightPos0.xyz - i.wPos.xyz , _WorldSpaceLightPos0.w));//////
 
    //點(diǎn)光源需要的衰減
    float atten = LIGHT_ATTENUATION(i);//////#include "AutoLight.cginc"
 
    fixed4 col = tex2D(_MainTex, i.uv);
 
    //最終顏色 = 主顏色 x 燈光顏色 x 漫反射系數(shù) x 衰減系數(shù) 第一個(gè)pass已經(jīng)有了環(huán)境色 這里就不能加了
    col.rgb = col.rgb * _LightColor0.rgb * saturate(dot(N,L))*atten;//////
 
    return col;
   }
  ENDCG
  }
 }
   //需要產(chǎn)生陰影 
   FallBack "Diffuse" 
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#與C++與互操作實(shí)例講解

    C#與C++與互操作實(shí)例講解

    在本篇文章里小編給大家整理了關(guān)于C#與C++與互操作實(shí)例以及相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • C#中的延時(shí)函數(shù)sleep

    C#中的延時(shí)函數(shù)sleep

    這篇文章主要介紹了C#中的延時(shí)函數(shù)sleep用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#調(diào)用接口的四種方式介紹

    C#調(diào)用接口的四種方式介紹

    這篇文章介紹了C#調(diào)用接口的四種方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C# 執(zhí)行CMD命令并接收返回結(jié)果的操作方式

    C# 執(zhí)行CMD命令并接收返回結(jié)果的操作方式

    這篇文章主要介紹了C# 執(zhí)行CMD命令并接收返回結(jié)果的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C# SqlSugar批量執(zhí)行SQL語句及批量更新實(shí)體對(duì)象的操作方法

    C# SqlSugar批量執(zhí)行SQL語句及批量更新實(shí)體對(duì)象的操作方法

    SqlSugar 是一款 老牌 .NET開源ORM框架,由果糖大數(shù)據(jù)科技團(tuán)隊(duì)維護(hù)和更新 ,開箱即用最易上手的ORM,這篇文章主要介紹了C# SqlSugar批量執(zhí)行SQL語句以及批量更新實(shí)體對(duì)象,需要的朋友可以參考下
    2024-07-07
  • C#入門之結(jié)構(gòu)類型Struct

    C#入門之結(jié)構(gòu)類型Struct

    這篇文章介紹了C#入門之結(jié)構(gòu)類型Struct,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 解決WPF附加屬性的Set函數(shù)不調(diào)用的問題

    解決WPF附加屬性的Set函數(shù)不調(diào)用的問題

    這篇文章介紹了解決WPF附加屬性的Set函數(shù)不調(diào)用的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#控制鍵盤按鍵的常用方法

    C#控制鍵盤按鍵的常用方法

    這篇文章主要介紹了C#控制鍵盤按鍵的常用方法,涉及C#針對(duì)鍵盤大寫、滾動(dòng)、數(shù)字的開啟與鎖定等功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • C#的String轉(zhuǎn)換成float防止精度丟失問題的解決

    C#的String轉(zhuǎn)換成float防止精度丟失問題的解決

    這篇文章主要介紹了C#的String轉(zhuǎn)換成float防止精度丟失問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C#如何綁定多個(gè)按鈕到同一個(gè)事件

    C#如何綁定多個(gè)按鈕到同一個(gè)事件

    這篇文章主要介紹了C#如何綁定多個(gè)按鈕到同一個(gè)事件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

泾阳县| 镇巴县| 茂名市| 名山县| 黄骅市| 县级市| 凌云县| 澳门| 祥云县| 都昌县| 信宜市| 宣恩县| 纳雍县| 福海县| 商洛市| 白河县| 即墨市| 灌云县| 张北县| 哈密市| 施秉县| 扶沟县| 南通市| 灌南县| 贵州省| 永川市| 安庆市| 高平市| 玛曲县| 保康县| 尚志市| 台湾省| 鄂伦春自治旗| 柳河县| 庄浪县| 梧州市| 乌审旗| 施甸县| 武宣县| 芮城县| 饶平县|