今天我们用学过的Shader知识实现一个简单的玻璃材质。
首先,玻璃是半透明的
玻璃最主要的特点就是它是透明的,不同的玻璃有不同的不透明度,水杯的透明度比较低,而装药品的棕色玻璃瓶不透明度就比较高。当然,玻璃也有一定的颜色。利用透明,我们可以这样实现玻璃材质:
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">Shader <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Custom/GlassShader"</span> {
Properties {
_MainTint(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Main Color"</span>, Color) = (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)
_AlphaVal(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Alpha"</span>, Range(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.1</span>
}
SubShader {
Tags { <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Queue"</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Transparent"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"IgnoreProjector"</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"True"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"RenderType"</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Transparent"</span> }
LOD <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>
CGPROGRAM
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">pragma</span> surface surf BlinnPhong alpha</span>
fixed4 _MainTint;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> _AlphaVal;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">struct</span> Input {
float3 viewDir;
};
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> surf (Input IN, inout SurfaceOutput o) {
o.Albedo = _MainTint.rgb;
o.Alpha = _AlphaVal;
}
ENDCG
}
FallBack <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Diffuse"</span>
}
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>
此时的效果是这样的,可以看到透明效果,但是它看上去更像两块粗糙的透明的塑料片。
给玻璃增加反射效果
为了表现这是光滑的玻璃而非塑料,我们增加反射属性,利用天空盒实现简单的反射效果,此时的代码是这样的:
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">Shader <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Custom/GlassShader"</span> {
Properties {
_MainTint(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Main Color"</span>, Color) = (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)
_AlphaVal(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Alpha"</span>, Range(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.1</span>
_CubeMap(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Sky Box"</span>, CUBE) = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>{}
_ReflPower(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Reflect Power"</span>, Range(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
}
SubShader {
Tags { <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Queue"</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Transparent"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"IgnoreProjector"</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"True"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"RenderType"</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Transparent"</span> }
LOD <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>
CGPROGRAM
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pragma surface surf BlinnPhong alpha</span>
fixed4 _MainTint<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float _AlphaVal<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
samplerCUBE _CubeMap<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float _ReflPower<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
struct Input {
float3 worldRefl<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float3 viewDir<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
void surf (Input <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IN</span>, inout SurfaceOutput o) {
half4 s = texCUBE(_CubeMap, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IN</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.worldRefl</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Albedo</span> = _MainTint<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.rgb</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Emission</span> = s<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.rgb</span> * _ReflPower<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Alpha</span> = _AlphaVal<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
}
ENDCG
}
FallBack <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Diffuse"</span>
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li></ul>
这时候玻璃就有了反射效果,尤其是当我们从不同角度看的时候,会看到玻璃反射了场景中的景象,当然这其实是假的,那来自我们指定的天空盒。
给玻璃增加菲涅尔效果
曾经说到过菲涅尔菲先生的效果非常不错,可以根据视角控制反射的强弱。我们的玻璃当然也可以应用这种效果:
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">Shader <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Custom/GlassShader"</span> {
Properties {
_MainTint(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Main Color"</span>, Color) = (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)
_AlphaVal(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Alpha"</span>, Range(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.1</span>
_CubeMap(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Sky Box"</span>, CUBE) = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>{}
_ReflPower(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Reflect Power"</span>, Range(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
_FresnelPower(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Fresnel Power"</span>, Range(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>)) = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>
}
SubShader {
Tags { <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Queue"</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Transparent"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"IgnoreProjector"</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"True"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"RenderType"</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Transparent"</span> }
LOD <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>
CGPROGRAM
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pragma surface surf BlinnPhong alpha</span>
fixed4 _MainTint<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float _AlphaVal<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
samplerCUBE _CubeMap<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float _ReflPower<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float _FresnelPower<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
struct Input {
float3 worldRefl<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
float3 viewDir<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
void surf (Input <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IN</span>, inout SurfaceOutput o) {
float rim = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.0</span> - max(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, dot(o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Normal</span>, normalize(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IN</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.viewDir</span>)))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
rim = pow(rim, _FresnelPower)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
half4 s = texCUBE(_CubeMap, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IN</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.worldRefl</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Albedo</span> = _MainTint<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.rgb</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Emission</span> = s<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.rgb</span> * _ReflPower * rim<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
o<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Alpha</span> = _AlphaVal<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
}
ENDCG
}
FallBack <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Diffuse"</span>
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li></ul>
下面上本次的最终效果图:
原文链接:http://blog.csdn.net/dbtxdxy/article/details/45302087#t1
本文介绍如何使用Unity Shader实现逼真的玻璃材质,包括透明效果、反射和菲涅尔效果的实现。

2439

被折叠的 条评论
为什么被折叠?



