1.Shader在什么情況下使用
Diffuse Detail(漫反射細(xì)節(jié))其實(shí)就是在原有紋理上疊加了一個(gè)貼圖格嘁,然后由于混合方式是乘法會(huì)導(dǎo)致顏色變暗笛求,就需要再乘一個(gè)參數(shù)使整體變得更亮。
所以如果疊加兩張一樣的會(huì)起到暗的更暗糕簿,亮的更亮的效果探入,如下
image.png
如果疊加不一樣的圖,會(huì)起到混合效果懂诗,如下對(duì)某些亮部進(jìn)行了提亮
image.png
2.Shader的價(jià)值(用的多不多)蜂嗽,Shader的難度
細(xì)節(jié)貼圖的這個(gè)Shader可以說基本用不上-。-殃恒,畢竟有類似需求的基本得自己寫非常復(fù)雜的shader代碼了植旧,官方提供的太過簡(jiǎn)單辱揭,僅供我們參考一下紋理混合的方式。
3.代碼詳細(xì)注釋
Shader "Legacy Shaders/Diffuse Detail" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_Detail ("Detail (RGB)", 2D) = "gray" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 250
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _Detail;
fixed4 _Color;
struct Input {
float2 uv_MainTex;
float2 uv_Detail;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
//unity_ColorSpaceDouble是官方提供的病附,在Gamma空間下為2问窃,在Linear空間下為4.594(2的2.2次方),目的就是上述的由于兩個(gè)顏色相乘后色彩變暗胖喳,需要乘一個(gè)系數(shù)提亮泡躯。并且避免你在兩個(gè)空間切換過程中顏色矯正不正確。
// 實(shí)測(cè)了一下unity_ColorSpaceDouble的rgb三個(gè)值是一樣的丽焊,但是a只有rgb三個(gè)值的0.5较剃,所以如果混合提亮需要弱一些,可以改成*unity_ColorSpaceDouble.a技健。
c.rgb *= tex2D(_Detail,IN.uv_Detail).rgb * unity_ColorSpaceDouble.r;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
Fallback "Legacy Shaders/Diffuse"
}
4.Shader編寫思路写穴,用到的知識(shí)點(diǎn)
unity_ColorSpaceDouble
這篇講解得很好。
簡(jiǎn)單說一些unity_ColorSpaceDouble是官方提供的雌贱,在Gamma空間下為2啊送,在Linear空間下為4.594(2的2.2次方),目的就是上述的由于兩個(gè)顏色相乘后色彩變暗欣孤,需要乘一個(gè)系數(shù)提亮馋没。并且避免你在兩個(gè)空間切換過程中顏色矯正不正確。
實(shí)測(cè)了一下unity_ColorSpaceDouble的rgb三個(gè)值是一樣的降传,但是a只有rgb三個(gè)值的0.5篷朵,所以如果混合提亮需要弱一些,可以改成*unity_ColorSpaceDouble.a婆排。