欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity Shader實現(xiàn)玻璃材質(zhì)效果

 更新時間:2020年04月28日 15:46:53   作者:ZzEeRO  
這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)玻璃材質(zhì)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Unity Shader學(xué)習(xí):玻璃材質(zhì),供大家參考。

主要是通過反射和折射來達到透明的效果,用菲涅爾來混疊。

shader部分:

Shader "Unlit/Crystal"
{
 Properties
 {
 _Cube("Skybox",Cube)=""{}
 //折射角度
 _EtaRatio("EtaRatio", Range(0, 1)) = 0
 //菲涅爾系數(shù)
 _FresnelBias("FresnelBias",float)=0.5
 _FresnelScale("FresnelScale",float)=0.5
 _FresnelPower("FresnelPower",float)=0.5
 }
 SubShader
 {
 Tags { "RenderType"="Opaque" }
 LOD 100

 Pass
 {
  CGPROGRAM
  #pragma vertex vert
  #pragma fragment frag

  
  #include "UnityCG.cginc"

  struct appdata
  {
  float4 vertex : POSITION;
  float3 normal:NORMAL;
  };

  struct v2f
  {
  float3 normalDir:TEXCOORD0;
  float4 vertex : SV_POSITION;
  float3 viewDir:TEXCOORD1;
  };

  samplerCUBE _Cube;
  float _EtaRatio;
  float _FresnelBias;
  float _FresnelScale;
  float _FresnelPower;
  
  //計算視線反射方向(入射角,法線)
  float3 caculateReflectDir(float3 I, float3 N) {
  float3 R = I - 2.0f*N*dot(I,N);
  return R;
  }

  //計算視線折射方向
  float3 caculateRefractDir(float3 I, float3 N, float etaRatio) {
  float cosTheta = dot(-I, N);
  float cosTheta2 = sqrt(1.f - pow(etaRatio, 2) * (1 - pow(cosTheta, 2)));
  float3 T = etaRatio * (I + N * cosTheta) - N * cosTheta2;
  return T;
  }

  //計算菲涅爾效應(yīng)
  float caculateFresnel(float3 I, float3 N) {
  float fresnel = max(0, min(1, _FresnelBias + _FresnelScale * pow(min(0.0, 1.0 - dot(I, N)), _FresnelPower)));
  return fresnel;
  }

  v2f vert (appdata v)
  {
  v2f o;
  o.vertex = UnityObjectToClipPos(v.vertex);
  //視線方向
  o.viewDir = normalize(mul(unity_ObjectToWorld, v.vertex).xyz - _WorldSpaceCameraPos);
  //法線方向
  o.normalDir = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
  return o;
  }
  
  fixed4 frag (v2f i) : SV_Target
  {
  //采樣反射折射后的天空盒顏色
  float3 reflectDir = caculateReflectDir(i.viewDir,i.normalDir);
  float4 reflectCol = texCUBE(_Cube, reflectDir);
  float3 refractDir = caculateRefractDir(i.viewDir, i.normalDir, _EtaRatio);
  float4 refractCol = texCUBE(_Cube, refractDir);
  //視線越垂直折射越小
  float fresnel = caculateFresnel(i.viewDir, i.normalDir);
  float4 col = lerp(refractCol, reflectCol, fresnel);
  return col;
  }
  ENDCG
 }
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#特性 擴展方法

    C#特性 擴展方法

    在我們的編程生涯中我們要使用很多很多類庫,這些類庫有的是我們自己開發(fā)的,我們有她的代碼,有的是第三方發(fā)布的,我們不僅沒有他們的代碼,連看的機會都沒有
    2014-12-12
  • C#身份證驗證小例子

    C#身份證驗證小例子

    C#身份證驗證小例子,需要的朋友可以參考一下
    2013-04-04
  • Unity 靜態(tài)變量跨場景操作

    Unity 靜態(tài)變量跨場景操作

    這篇文章主要介紹了Unity 靜態(tài)變量跨場景操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#如何對多線程、多任務(wù)管理(demo)

    C#如何對多線程、多任務(wù)管理(demo)

    這篇文章主要通過一個小demo介紹了C#如何對多線程、多任務(wù)管理,需要的朋友可以參考下
    2015-07-07
  • C# 并發(fā)控制框架之單線程環(huán)境下實現(xiàn)每秒百萬級調(diào)度

    C# 并發(fā)控制框架之單線程環(huán)境下實現(xiàn)每秒百萬級調(diào)度

    本文介紹了一款專為工業(yè)自動化及機器視覺開發(fā)的C#并發(fā)流程控制框架,通過模仿Go語言并發(fā)模式設(shè)計,支持高頻調(diào)度及復(fù)雜任務(wù)處理,已在多個項目中驗證其穩(wěn)定性和可靠性
    2024-10-10
  • 關(guān)于C#中的Invoke示例詳解

    關(guān)于C#中的Invoke示例詳解

    一直對invoke和begininvoke的使用和概念比較混亂,這兩天看了些資料,對這兩個的用法和原理有了些新的認識和理解,下面這篇文章主要給大家介紹了關(guān)于C#中Invoke的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • C#中AutoResetEvent控制線程用法小結(jié)

    C#中AutoResetEvent控制線程用法小結(jié)

    本文主要來自一道面試題,由于之前對AutoResetEvent的概念比較模糊,面試題題目很簡潔:兩個線程交替打印0~100的奇偶數(shù),你可以先動手試試,我主要是嘗試在一個方法里面完成這個任務(wù),需要的朋友可以參考下
    2022-07-07
  • C# Winform使用log4net進行日志記錄

    C# Winform使用log4net進行日志記錄

    Log4Net是從Java的log4j移植過來的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫等不同的介質(zhì)或目標(biāo),下面我們就來學(xué)習(xí)一下如何使用log4net進行日志記錄吧
    2023-11-11
  • C#?泛型集合類List<T>使用總結(jié)

    C#?泛型集合類List<T>使用總結(jié)

    本文主要主要介紹了C#?泛型集合類List<T>使用總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • c#:CTS類型系統(tǒng)

    c#:CTS類型系統(tǒng)

    CTS通用類型系統(tǒng),是.Net中一套定義類型的規(guī)則。我們要掌握c#開發(fā),首先要建立這個類型概念,只有知道c#的元素是什么類型,才能進行相關(guān)的分析和選材。
    2012-12-12

最新評論