真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ShaderLab學(xué)習(xí)小結(jié)(十八)cubemap-創(chuàng)新互聯(lián)

現(xiàn)在還沒(méi)用到cubemap(除了天空盒子),只是初步的學(xué)了一下最簡(jiǎn)單的cubemap的shader
找一幅圖
ShaderLab學(xué)習(xí)小結(jié)(十八)cubemap
好吧,有點(diǎn)大,在unity里把它設(shè)置成cubemap
ShaderLab學(xué)習(xí)小結(jié)(十八)cubemap
OK,圖有了,看shader,代碼挺簡(jiǎn)單的,其實(shí)和普通的2D貼圖shader挺像

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、尋烏網(wǎng)站維護(hù)、網(wǎng)站推廣。
Shader "Custom/Cubemap" {
    Properties {
        _Cube ("Cubemap", cube) = "" {}             //1.
    }
    SubShader {
        pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "unitycg.cginc"
            #include "Lighting.cginc"

            samplerCUBE _Cube;             //2.

            struct v2f {
                float4 pos:POSITION;
                float3 R:TEXCOORD0;
            };
            v2f vert(appdata_base v)
            {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                float3 L= -_WorldSpaceLightPos0.xyz;                       //3.
                float3 N = UnityObjectToWorldNormal(v.normal);
                o.R = reflect(L, N);            //4.
                return o;
            }
            fixed4 frag(v2f IN):COLOR
            {
                fixed4 col = texCUBE(_Cube, IN.R);            //5.
                return col;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

注意,以上這段代碼是有問(wèn)題的,后面會(huì)指出問(wèn)題并改正,先以這段代碼來(lái)說(shuō)明
按照注釋位置

1、2

_Cube ("Cubemap", cube) = "" {}             //1.
samplerCUBE _Cube;             //2.

2D貼圖時(shí),Properties里定義的是2d,而變量聲明時(shí)用的是sampler2D
而對(duì)于cubemap來(lái)說(shuō)則是cube和samplerCUBE
注意:samplerCUBE的CUBE大寫,就像sampler2D的D大寫一樣

3、4、5

先看5

fixed4 col = texCUBE(_Cube, IN.R);            //5.

因?yàn)榘凑账鶎W(xué),最后的紋理采樣要用到texCUBE這個(gè)CG函數(shù),其實(shí)看形式和tex2D很像
第一個(gè)參數(shù)就是我們的cubemap那張圖
第二個(gè)參數(shù)則是在vert程序中計(jì)算的一個(gè)世界坐標(biāo)系下的反射向量,float3的
再看4是如何計(jì)算這個(gè)反射的

o.R = reflect(L, N);            //4.

反射嗎,當(dāng)然是光和法線,而這個(gè)L,是光的入射,即從光源指向頂點(diǎn)
reflect函數(shù)是計(jì)算反射向量的
所以看3

float3 L= -_WorldSpaceLightPos0.xyz;                       //3.

以前用到這個(gè)世界坐標(biāo)空間下的光方向_WorldSpaceLightPos0.xyz,這個(gè)是從頂點(diǎn)指向光源的方向,現(xiàn)在正好相反,所以取負(fù)

貌似OK了,我們看看結(jié)果,在場(chǎng)景中建一個(gè)球體,把這個(gè)材質(zhì)賦給它,并轉(zhuǎn)動(dòng)視角
ShaderLab學(xué)習(xí)小結(jié)(十八)cubemap
其實(shí)也不能說(shuō)錯(cuò)了,如果就是要這個(gè)效果的話
用光與法線算出來(lái)的反射,因?yàn)楣馐瞧叫泄夤潭ǖ模旤c(diǎn)法線也是固定的,反射也是固定的
所以算出來(lái)的顏色是固定,就有了這個(gè)效果
但如果想實(shí)現(xiàn)的是像鏡面那種效果的話,隨著視角的不同,看到的東西并不相同,代碼就要做些修改了
既然是隨視角變化,那是不是認(rèn)為不要用光的方向而是用視方向
我們把注釋的3和4改一下

float3 V = -WorldSpaceViewDir(v.vertex);    //3.
o.R = reflect(V, N);    //4.

這里用了視方向,同樣是從眼睛指向頂點(diǎn),所以也取負(fù)
再用reflect函數(shù)
看下效果
ShaderLab學(xué)習(xí)小結(jié)(十八)cubemap

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+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)景需求。


分享文章:ShaderLab學(xué)習(xí)小結(jié)(十八)cubemap-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/ddidss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部