国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

shader學習之實例混合高光,漫反射,法線貼圖,紋理,以及多光源的shader

2019-11-07 23:01:28
字體:
來源:轉載
供稿:網友
Shader "Unlit/example11-1Lighting"{PRoperties{_MainTex ("Texture", 2D) = "white" {}_BumpTex("法線紋理",2D)="bump"{}_BumpScale("紋理縮放",Range(0,1))=  5_Gloss("高光大小",Range(5,258)) = 20}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{   Tags{"LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag                        #pragma multi_compile_fwdbase#include "UnityCG.cginc"#include "Lighting.cginc"struct v2f{float4 uv : TEXCOORD0;float3 tangentLightDir:TEXCOORD1;float3 tangentViewDir:TEXCOORD2;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _BumpTex;float4 _BumpTex_ST;float _BumpScale;float _Gloss;v2f vert (appdata_full v){v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.uv.xy = v.texcoord.xy*_MainTex_ST.xy+_MainTex_ST.zw;o.uv.zw = v.texcoord.xy*_BumpTex_ST.xy+_BumpTex_ST.zw;TANGENT_SPACE_ROTATION;//切線空間的光線方向o.tangentLightDir = normalize(mul(rotation,UnityWorldSpaceLightDir(v.vertex)));//切線空間的視線方向o.tangentViewDir = normalize(mul(rotation,UnityWorldSpaceViewDir(v.vertex)));return o;}fixed4 frag (v2f i) : SV_Target{   float3 tangentLightDir = i.tangentLightDir;float3 tangentViewDir = i.tangentViewDir;//提取法線貼圖中的法線float3 tangentNormal = UnpackNormal(tex2D(_BumpTex,i.uv.zw)).xyz;       tangentNormal.xy *= _BumpScale;//修改深度和偏移tangentNormal.z = sqrt(1 - saturate(dot(tangentNormal.xy ,tangentNormal.xy )));float4 albedo = tex2D(_MainTex,i.uv.xy);//紋理采樣float3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;  //環境光//漫反射float3 diffColor = _LightColor0.rgb * ambient * albedo.rgb * (max(0,dot(tangentLightDir,tangentNormal)) * 0.5 + 0.5);//半角向量float3 halfDir = normalize(tangentLightDir + tangentViewDir);//高光float3 specColor = _LightColor0.rgb * pow(max(0,dot(halfDir,tangentNormal)),_Gloss);float atten = 1.0;float4 color = float4((specColor + diffColor + ambient) * atten, albedo.a);return color;}ENDCG}Pass{       Tags{"LightMode" = "ForwardAdd"}       Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdadd#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"struct v2f{float4 uv : TEXCOORD0;float3 tangentLightDir:TEXCOORD1;float3 tangentViewDir:TEXCOORD2;   float3 worldPos:TEXCOORD3;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _BumpTex;float4 _BumpTex_ST;float _BumpScale;float _Gloss;v2f vert (appdata_full v){v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.uv.xy = v.texcoord.xy*_MainTex_ST.xy+_MainTex_ST.zw;o.uv.zw = v.texcoord.xy*_BumpTex_ST.xy+_BumpTex_ST.zw;o.worldPos = mul(_Object2World,v.vertex);  TANGENT_SPACE_ROTATION;//開始區分光源#ifdef USING_DIRECTIONAL_LIGHT//切線空間的光線方向o.tangentLightDir = normalize(mul(rotation,UnityWorldSpaceLightDir(v.vertex)));//切線空間的視線方向o.tangentViewDir = normalize(mul(rotation,UnityWorldSpaceViewDir(v.vertex)));#elseo.tangentLightDir = normalize(mul(rotation,(_WorldSpaceLightPos0.xyz - mul(_Object2World,v.vertex))));o.tangentViewDir = normalize(mul(rotation,UnityWorldSpaceViewDir(v.vertex)));#endif//結束區分   return o;}//片段著色器fixed4 frag (v2f i) : SV_Target{   //開始區分光源   #ifdef USING_DIRECTIONAL_LIGHT//光照衰減系數float3 atten = 1.0;#elsefloat3 lightCoord = mul(_LightMatrix0,float4(i.worldPos,1)).xyz;float3 atten = tex2D(_LightTexture0,dot(lightCoord,lightCoord).rr).UNITY_ATTEN_CHANNEL;#endif//結束區分   float3 tangentLightDir = i.tangentLightDir;float3 tangentViewDir = i.tangentViewDir;//計算切線空間的法線float3 tangentNormal = UnpackNormal(tex2D(_BumpTex,i.uv.zw)).xyz;       tangentNormal.xy *= _BumpScale;//法線深度tangentNormal.z = sqrt(1 - saturate(dot(tangentNormal.xy ,tangentNormal.xy )));float4 albedo = tex2D(_MainTex,i.uv.xy);float3 diffColor = _LightColor0.rgb *  albedo.rgb * max(0,dot(tangentLightDir,tangentNormal));float3 halfDir = normalize(tangentLightDir + tangentViewDir);float3 specColor = _LightColor0.rgb * pow(max(0,dot(halfDir,tangentNormal)),_Gloss);float4 color = float4((specColor + diffColor) * atten, albedo.a);//最終顏色return color;}ENDCG}}}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荥经县| 伽师县| 紫云| 荥经县| 九龙坡区| 文昌市| 盘山县| 开远市| 望都县| 西畴县| 定日县| 金平| 城口县| 泰顺县| 上蔡县| 白水县| 张家界市| 乐都县| 和平区| 丰原市| 阿图什市| 开江县| 望奎县| 铜陵市| 洪江市| 景东| 宁海县| 长乐市| 获嘉县| 南华县| 阳新县| 扬中市| 桦甸市| 集安市| 锦屏县| 黎川县| 洪湖市| 汝城县| 云阳县| 莱州市| 集贤县|