Shader學習筆記(三)自定義光照模型,經典光照模型Lambert與HalfLambert
自定義光照模型
#pragma surface surfaceFaction lightModel
surfaceFaction:著色器程式碼的方法的名字
lightModel:光照模型的名稱
自定義光照模型的命名規則是Lighting+光照模型的名稱
光照模型有5種原型:
half4 LightingName(SurfaceOutput s,fixed3 lightDir,half atten);
half4 LightingName(SurfaceOutput s,fixed3 lightDir,fixed3 viewDir,half atten);
half4 LightingName_PrePass(SurfaceOutput s,half4 light);
half4 LightingName_DirLightmap(SurfaceOutput s,fixed4 color,fixed4 scale,bool surfFuncWritesNormal);
half4 LightingName_DirLightmap(SurfaceOutput s,fixed4 color,fixed4 scale,fixed3 viewDir,bool surFuncWritesNormal,out half3 specColor);
例子:Lambert光照模型
#pragma surface surf BasicDiffuse
inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten){ float difLight=max(0,dot(s.Normal,lightDir)); float4 col; col.rgb=s.Albedo*_LightColor0.rgb*(difLight*atten*2);// col.a=s.Alpha; return col; }
LightBasicDiffuse函式輸出的是一個surface上某一點的顏色值和透明度值。s是上一個surf函式的輸出,LightDir是光線方向,光源到物體表面上的點的向量,是單位向量。atten是衰減度,光線被物體反射之後會有能量損失,是Unity內建的一個引數。
float difLight=max(0,dot(s.Normal,lightDir));//計算漫反射的光強,值越大表示法線與光線間的夾角越小,這個點越亮
col.rgb=s.Albedo*_LightColor0.rgb*(difLight*atten*2);//_LightColor0.rgb表示光線的顏色,根據場景中的光源得到的,在Lighting.cginc中有宣告,顏色值=反射值X平行光的顏色值X漫反射光強X衰減度X2
HalfLambert光照模型
#pragma surface surf HalfLambert
inline float4 LightingHalfLambert(SurfaceOutput s,fixed3 lightDir,fixed atten){
float difLight=dot(s.Normal,lightDir);
float halfLambert = 0.5 * difLight + 0.5;
float4 col;
col.rgb=s.Albedo*_LightColor0.rgb*(halfLambert*atten*2);
col.a=s.Alpha;
return col;
}
Lambert光照模型的漫反射光強區間dot(s.Normal,lightDir)小於0 的部分直接為0,效果是背光的一面也是黑色的,HalfLambert光照模型,小於0的部分會從0漸變到0.5,顏色的灰度是有變化的。同時,亮部的亮度也提高了。 用於低光區域照亮物體,防止某個物體背光面丟失形狀顯得太過平面化。
#Lambert#
#HalfLambert#
相關推薦
Shader學習筆記(三)自定義光照模型,經典光照模型Lambert與HalfLambert
自定義光照模型 #pragma surface surfaceFaction lightModel surfaceFaction:著色器程式碼的方法的名字 lightModel:光照模型的名稱 自
攜程 Apollo 配置中心 | 學習筆記(三) 自定義Spring Boot專案通過配置中心啟動專案
一、前言二、專案搭建 2.1 建立Spring Boot專案 因為專案用的是Eureka作為服務註冊與發現,因此這裡我加入了Eureka Client的依賴pom.xml檔案 <dependency> <grou
AngularJs學習筆記(4)——自定義指令
ref 告訴 ack 生命周期 .com bsp ctrl 參數變量 ng- 對指令的第一印象:它是一個自定義標簽! 先來看一個簡單的指令: <!doctype html> <html ng-app="myApp"> <head>
Ehcache學習筆記(2)--自定義ehcache工具類
二:自定義EhcacheUtils 1、CacheUtils package cn.kexq.commons.utils; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.eh
shiro學習筆記(3)--自定義realm、授權
一:自定義Realm 1、繼承AuthorizingRealm(因為該類中有認證、授權的抽象方法,實現簡單) public class MyRealm1 extends AuthorizingRealm{ @Override public String getName(
Vue:學習筆記(七)-自定義指令
提醒 原帖完整收藏於IT老兵驛站,並會不斷更新。 前言 前面總結到了元件,對混入也進行了研究,不過感覺沒有啥需要總結的,就先總結指令吧,參考這裡,記錄筆記。 正文 簡介 全域性註冊 // 註冊一個全域性自定義指令 `v-focus` Vue.di
Robot framework學習筆記(三)通過定義自己的python庫連結mysql
今天看了一些連結資料庫的方法,發現官網提供的DatabaseLibrary只提供了和資料庫直連的方法,現實中很多公司出於安全考慮,都是通過跳板機的方式連結。(跳板機是開發者登入到網站分配給應用伺服器的唯一途徑。開發者必須首先登入跳板機,再通過跳板機登入到應用伺服器)。 顯然
springmvc學習筆記(26)——自定義型別轉換器
資料繫結流程 使用springmvc框架有諸多好處,其中較為突出的就是它的資料繫結。 當我們的前端傳過來一個表單的時候,我們只需要使用一個類物件(如Student物件)就接收,springmvc將幫我們把屬性一一對應的填充進去。這就是資料繫結。 資料繫結過程中,springmvc幫我們把前端
springmvc學習筆記(28)——自定義攔截器
1. 自定義攔截器 所謂的攔截器,就是用來攔截請求,因此我們可以對使用者發來的請求做處理。 寫一個類,實現攔截器的介面 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.H
類的學習筆記(3)——自定義裝飾器及裝飾器的理解
例一: 實現多加100 def fun1(x): def fun2(y): return x(y)+100 return fun2 #裝飾器 def ff(y): return y*y
Shader學習筆記(三):Shader中的光照
這篇文章討論shader中用到的光照。 理解光照 Unity中的光照技術包括: 實時光照(realtime lighting) 烘焙後的光照貼圖(baked lightmaps) 預計算的實時全域性光照(precomputed realtime gl
Maven學習筆記(一)——自定義maven變數以及maven內建常量
在建立Maven工程後,外掛配置中通常會用到一些Maven變數,因此需要找個地方對這些變數進行統一定義,下面介紹如何定義自定義變數。 在根節點project下增加properties節點,所有自定義變數均可以定義在此節點內,如下所示: <!-- 全域性屬性配置 --
Latex學習筆記(六)——自定義Latex模板
前言: 對於一個給定的模板,自己做了修改,用於日常工作寫報告使用(主要去除了封面和摘要部分),包含兩個檔案:(1) cls 檔案裡面定義好了常用的格式和環境;(2) tex 檔案裡面是我們文件內容的原始碼。當然,大家也可以根據自己的需要進行更改。 一、
MyBatis學習筆記(三)mybatis-config.xml都有哪些配置之typeAliases與plugins
類型別名(typeAlicases) 在mybatis-config.xml配置檔案中加入類描述 <typeAliases> <typeAlias type="org.mybatis.example.User" alias="User" />
Python學習筆記(三):pip安裝方法,import相關用法
就當是記個筆記了。這是Linux系統下的pip安裝方法: pip安裝方法 一: get http://python-distribute.org/distribute_setup.py sudo python distribute_setup.py
【web框架】【zheng學習筆記(三)】【阿里雲自定義映象的使用】
要想成功執行zheng專案,必須要安裝JDK,Tomcat,Redis,Zookeeper等工具,如果下次再買新的伺服器,又重新安裝這些軟體,阿里雲提供了自定義映象功能,可以快速複製伺服器,免除了再次配置環境的痛苦。 背景: 華東2區有原來的A伺服器,在華北3區新購了B伺服器,想要把A的系統
Opengl es2.0 學習筆記(三)shader的使用
一.shader Opengl es渲染管線中有兩處可以程式設計,一個是頂點著色器 一個是畫素著色器/片圓著色器 不清楚的可以 看看OpenGLes 渲染管線 二.API //建立shader,返回shader Id //param: //GL_VERTE
Maven學習筆記(三)—— 使用Maven自帶的功能建立Java和JavaWeb專案
一、使用Maven建立Java專案1、開啟命令視窗,輸入建立命令使用shift+右鍵單擊,選擇在此處選擇開啟命令視窗,輸入如下命令:mvn archetype:generate -DgroupId=com.mengfei.demo -DartifactId=MavenJava
unity shader學習筆記(一)——基礎光照之標準光照模型定義
標準光照模型 標準光照模型只關心直接光照(direct light)。它把進入攝像機的光照分為4個部分: 自發光(emissive),這部分用於給定一個方向時,物體表面會向這個方向產生多少的光,當沒有使用全域性光照時,自發光物體不會照亮周圍物體,只是本身看
JAVA學習筆記(三)
byte repl efi ber 時間 clas 區分大小寫 增強for size @SuppressWarnings("resource")是用來壓制資源泄露警告的。比如使用io類,最後沒有關閉。Set集合特點:1)無序,不隨機2)元素唯一3)沒下標註意:Collect