Unity Shader 基於物理的渲染技術

2021-09-16 13:36:10 字數 2379 閱讀 7081

光是一種電磁波,由光源發射出來,與物體相交,一部分被吸收轉化為其他能量,而另一些被散射,最後被感應器(如眼睛)吸收成像

吸收:改變光的能量,不改變光的方向

散射:不改變光的能量,改變光的方向

影響光的乙個重要的特質就是物體材質的折射率

drdf可以用f(l,v)來表示,l是入射方向,v是觀察方向

乙個直觀的理解是:f(l,v)表示了當一束光線沿入射方向到達物體某個點時,有多少能量被反射到了觀察方向v上

brdf可以用來描述高光散射和漫反射

得到brdf模型基本有兩種方法:

1.使用光學儀器對現實中的材質進行測量

2.學術界根據光學理論分析出一些通用的brdf模型

簡化後的渲染方程:

brdf 的高光反射項:

shader "hidden/custompbs"

_glossiness

("smoothness"

,range

(0.0

,1.0))

=0.5

_speccolors

("specular"

, color)=(

0.2,

0.2,

0.2)

_specglossmap

("specular (rgb) smoothness (a)"

,2d)

="white"

_bumpscale

("bump scale"

, float)

=1.0

_bumpmap

("normal map"

,2d)

="bump"

_emissioncolor

("emissioncolor"

, color)=(

0,0,

0)_emissionmap

("emission"

,2d)

="white"

} subshader

lod300

pass

cgprogram

#pragma target 3.0

#pragma vertex vert

#pragma fragment frag

#pragma multi_compile_fwdbase

#pragma multi_compile_fog

#include

"lighting.cginc"

#include

"autolight.cginc"

#include

"unitycg.cginc"

sampler2d _maintex;

sampler2d _bumpmap;

sampler2d _specglossmap;

sampler2d _emissionmap;

float4 _maintex_st;

float4 _bumpmap_st;

float4 _specglossmap_st;

float4 _emissionmap_st;

float4 _color;

float3 _speccolors;

float4 _emissioncolor;

float _bumpscale;

float _glossiness;

struct a2v

;struct v2f

; v2f vert (a2v v)

//根據迪士尼的漫反射公式得到的漫反射方法

inline half3 customdisneydiffuseterm

(half ndotv,half ndotl, half ldoth, half roughness, half3 basecolor)

inline half customsmithjointggxvisibilityterm

(half ndotl, half ndotv, half roughness)

inline half customggxterm

(half ndoth, half roughness)

inline half3 customfresnelterm

(half3 c, half cosa)

inline half3 customfresnellerp

(half3 c0, half3 c1, half cosa)

fixed4 frag (v2f i)

: sv_target

endcg}}}

UnityShader 基於網格頂點的草叢

發現了一篇寫草叢的文章,自己跟著寫了遍,並新增了自定義的形狀和密度。思路 1 利用幾何著色器,將每個頂點轉為乙個葉片網格 2 利用曲面細分生成新頂點控制草叢密度 3 貼圖加clip決定葉片形狀 4 利用旋轉矩陣完成動態和隨機效果 shader檔案 shader custom grassshaderw...

基於物理的渲染 HDR Tone Mapping

若用l x,y 表示畫素 x,y 的光亮度,則log平均值可表示為 其中,n 表示畫素個數,是乙個用於避免奇異值的常數。縮放後的光亮度 l x,y 可用如下公式表示 其中,是乙個縮放引數,被稱為key value,不同的 值對應了不同的縮放程度,如下圖所示 其中,上排中太陽被樹枝遮擋住,因此不包含高...

迪士尼中基於物理的著色

microfacet模型假設如果表面反射發生在給定的光照向量 l 和視線向量 v之間,那麼 l v之間一定存在乙個半角向量,稱之為微表面法線,因此定義為 h l v l v 各向同性材質微表面模型的一般形式為 f l,v dif fuse d h f d g l,v 4 cos lcos v這裡漫反...