中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

ShaderLab學(xué)習(xí)小結(jié)(十四)點(diǎn)光源問題-創(chuàng)新互聯(lián)

之前在“ShaderLab學(xué)習(xí)小結(jié)(三)漫反射+高光+點(diǎn)光源”中
用了Shade4PointLights()函數(shù)來計(jì)算點(diǎn)光源的反射。
這個(gè)函數(shù)定義在unitycg.cginc中,其中用到的前八個(gè)參數(shù)來自于UnityShaderVariables.cginc。
在這個(gè)例子中,只一個(gè)pass就實(shí)現(xiàn)了平行光、點(diǎn)光源反射,以及高光反射。

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),呼和浩特網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:呼和浩特等地區(qū)。呼和浩特做網(wǎng)站價(jià)格咨詢:13518219792

后來在學(xué)習(xí)中,接觸到另一種點(diǎn)光源反射的例子,用到兩個(gè)pass,第一個(gè)pass實(shí)現(xiàn)平行光的,第二個(gè)實(shí)現(xiàn)點(diǎn)光源的

Shader "Custom/TestLightColor0" {

    SubShader {
        pass{
        tags{"LightMode"="ForwardBase"}
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "unitycg.cginc"
            #include "lighting.cginc"
            struct v2f{
                float4 pos:POSITION;
                float3 normal:NORMAL;
                float3 wpos:TEXCOORD0;
            };
            v2f vert(appdata_base v)
            {
                v2f o;
                o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
                o.normal=UnityObjectToWorldNormal(v.normal);
                o.wpos=mul(unity_ObjectToWorld, v.vertex).xyz;
                return o;
            }
            fixed4 frag(v2f IN):COLOR
            {
                float3 N = IN.normal;
                float3 L = normalize(_WorldSpaceLightPos0).xyz;
                float ndotl=saturate(dot(N,L));
                fixed4 col=_LightColor0*ndotl;
                col+=UNITY_LIGHTMODEL_AMBIENT;
                return col;
            }
            ENDCG
        }
        pass{
            tags{"LightMode"="ForwardAdd"}
            blend one one
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "unitycg.cginc"
            #include "lighting.cginc"
            struct v2f{
                float4 pos:POSITION;
                float3 normal:NORMAL;
                float3 wpos:TEXCOORD0;
            };
            v2f vert(appdata_tan v)
            {
                v2f o;
                o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
                o.normal=UnityObjectToWorldNormal(v.normal);
                o.wpos=mul(unity_ObjectToWorld, v.vertex).xyz;
                return o;
            }
            fixed4 frag(v2f IN):COLOR
            {
                float3 N = IN.normal;
                float3 L = normalize(_WorldSpaceLightPos0).xyz;
                float ndotl=saturate(dot(N,L));
                float atten=1;
                if(_WorldSpaceLightPos0.w!=0)
                {
                    atten = 1.0/length(_WorldSpaceLightPos0.xyz);
                }

                fixed4 col=_LightColor0*ndotl*atten;
                return col;
            }
            ENDCG
        }
    }
}

兩個(gè)pass幾乎一樣,叫pass1和pass2吧。pass1是forwardbase,pass2是forwardadd,pass2還要用上blend one one,不然pass1的光照就沒了,因?yàn)閜ass1中加了環(huán)境光LIGHT_MODEL_AMBIENT,pass2中就不用再加了。
共同點(diǎn),都用的是_LightColor0。之前學(xué)習(xí)時(shí),認(rèn)為_LightColor0就是指的平行光,所以點(diǎn)光源要用Shade4PointLights,但現(xiàn)在看來并不是。在網(wǎng)上搜索的結(jié)果之一:
LightMode=ForwardBase: _LightColor0將會(huì)是主要的directional light的顏色。
LightMode=ForwardAdd: _LightColor0將是該逐像素光源的顏色。
也就是說在lightmode為forwardadd的pass里,_LightColor0代表不同的光源
pass2中多定義了一個(gè)衰減系數(shù)atten,且進(jìn)行判斷賦值

float atten=1;
if(_WorldSpaceLightPos0.w!=0)
{
    atten = 1.0/length(_WorldSpaceLightPos0.xyz);
}

點(diǎn)光源和平行光不同,與物體距離不同反射的強(qiáng)度也不同,所以這個(gè)顏色要乘一個(gè)衰減系數(shù)。

fixed4 col=_LightColor0*ndotl*atten;

當(dāng)然這個(gè)只是簡(jiǎn)單寫的一個(gè)衰減系數(shù)
這個(gè)衰減系數(shù)的計(jì)算算是抄來的吧,稍做修改
原出處用的是

atten = 1.0/length(IN.LightDir);

顯然這個(gè)LightDir是在結(jié)構(gòu)體中要定義,float3型

float3 LightDir:TEXCOORD1;

代表光的方向,且在頂點(diǎn)程序中要轉(zhuǎn)化到切線空間

v2f vert(appdata_tan v)
{
    ...
    TANGENT_SPACE_ROTATION;
    o.LightDir=mul(rotation, ObjSpaceLightDir(v.vertex));
    ...
}

也就是計(jì)算衰減系數(shù)時(shí),length()函數(shù)中的參數(shù),我為了更加簡(jiǎn)化,直接用了_WorldSpaceLightPos0.xyz,就省去了上面那一堆。

最后結(jié)果如下兩圖,點(diǎn)光源為×××
ShaderLab學(xué)習(xí)小結(jié)(十四)點(diǎn)光源問題
ShaderLab學(xué)習(xí)小結(jié)(十四)點(diǎn)光源問題
把兩個(gè)球體放在同一個(gè)位置,分別單獨(dú)顯示
上邊的是兩個(gè)通道出來的,下邊的是一個(gè)通道Shade4PointLights出來的
兩個(gè)球體都反射了平行光和點(diǎn)光源,看上去兩個(gè)的漫反射的效果基本一樣
下面的球體暗部邊緣處更黑一些
注:本例只做漫反射

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站題目:ShaderLab學(xué)習(xí)小結(jié)(十四)點(diǎn)光源問題-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article20/dhhojo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名軟件開發(fā)、企業(yè)建站ChatGPT、標(biāo)簽優(yōu)化、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
建水县| 肥城市| 景泰县| 呼和浩特市| 临朐县| 瑞昌市| 朝阳县| 丰城市| 神农架林区| 巴塘县| 绵阳市| 清镇市| 綦江县| 厦门市| 凤凰县| 岱山县| 陆川县| 河西区| 奎屯市| 新宾| 江永县| 中卫市| 龙口市| 腾冲县| 仙居县| 梅河口市| 屏东市| 夹江县| 花莲县| 讷河市| 如东县| 樟树市| 德州市| 克什克腾旗| 福建省| 吉安市| 区。| 获嘉县| 射洪县| 新闻| 洛扎县|