介绍

头发的渲染有很多方法,主要有分基于法线的(STRAND BASE)和基于多边形面片的(PolygonBase)。而头发的渲染其实也是各向异性的一种线像。我们会在以下章节介绍一下相关的技术基础,包括了:

  • 各向异性v.s.各向同性

  • Kajiya-Kay模型 (基于经验)

  • Marschner’s (R/RR/TRT) (基于物理)

  • LUT Marschner’s模型(基于物理,近似)

  • Strand Based, Single Scattering & Multi Scattering模型(基于物理)

  • 基于发线

  • 基于多边形面片

各向异性v.s.各向同性

各向异性着色是在垂直于表面上的纹理或凹槽的方向上延伸反射。如果把各向异性渲染与更常见的各向同性渲染进行对比的话。各向同性渲染在所有方向上均匀地散射光,而各向异性头发在不同的方位角及跟据表面颗粒形状的纹理而改变,一般在拉丝钢,CD光盘,头发,等划痕表面产生垂直于纹理方向的高光。

这是因为在这些表面微观细看,我们会发现微观上是有一根一根的划痕的东西。

各向异性的BRDF有以下的: f(ωo,ωi,θi,θo)≠f(ωo−ωi,θi,θo)f(\omega_o, \omega_i, \theta_i,\theta_o) \ne f(\omega_o - \omega_i, \theta_i,\theta_o)f(ωo​,ωi​,θi​,θo​)​=f(ωo​−ωi​,θi​,θo​)

各向同性的BRDF有以下的: f(ωo,ωi,θi,θo)=f(ωo−ωi,θi,θo)f(\omega_o, \omega_i, \theta_i,\theta_o) = f(\omega_o - \omega_i, \theta_i,\theta_o)f(ωo​,ωi​,θi​,θo​)=f(ωo​−ωi​,θi​,θo​)

Blinn-Phong光照模型

Blinn-Phong光照模型是我们平常用的公式,这是一个各向同性光照模型,一般一个点的法线N是比较固定的,可以从vertex或normal map得到。光照公式如下:

Isblinnphong=Li∗ks∗(N⃗⋅H⃗)nI{_s}_{blinnphong} = L_i * k_s * (\vec N \cdot \vec H)^{n}Is​blinnphong​=Li​∗ks​∗(N⋅H)n ,其中

  • IsI_sIs​ 是高光强度
  • LiL_iLi​ 是入射光强度
  • KsK_sKs​ 是高光反射率
  • N⃗\vec NN 是法线方向
  • H⃗\vec HH 是中线方向
  • nnn 是光滑度

使用Blinn-Phong光照,我们可以看到一个椭圆形的高光亮点,但是无法模拟各向异性的拉丝钢,头发等环状高光效果。

各向异性光照模型

各向异性光照表面微观细看,会发现有一根一根的划痕的东西。这个表面的一个点可能有多个法线。所以法线N不是唯一的,我们不能用N来判断表面方向。反而切线T是我们要关注的。各向异性光照是使用L及T来算光照的。

如之前的L是入射光方向,T是切线,我们可以用T和L的平面来确定唯一的一条于T和L公面的法线 NcN_cNc​ 。光照可以如下公式得到:

N⃗c⋅L⃗=cos(θ)=sin(π2−θ)=1−cos2(π2−θ))=1−(T⃗⋅L⃗)2\vec N_c \cdot \vec L = cos(\theta) = sin(\frac{\pi}{2} - \theta) = \sqrt{1- cos^2(\frac{\pi}{2} - \theta) )} = \sqrt{1- (\vec T \cdot \vec L)^2 }Nc​⋅L=cos(θ)=sin(2π​−θ)=1−cos2(2π​−θ))​=1−(T⋅L)2​

同一原因, 因为L只是一个符号,我们可以用H代入 LLL

N⃗c⋅H⃗=1−(T⃗⋅H⃗)2\vec N_c \cdot \vec H = \sqrt{1- (\vec T \cdot \vec H)^2 }Nc​⋅H=1−(T⋅H)2​

现在我们确定了 N⃗c⋅H⃗\vec N_c \cdot \vec HNc​⋅H ,我们的各向异性光照是怎么呢。

如Blinn-Phong一样,我们只需要代入 N⃗c⋅H⃗\vec N_c \cdot \vec HNc​⋅H

IsanisotopicI{_s}{_{anisotopic}}Is​anisotopic​ = Li∗ks∗(N⃗c⋅H⃗)nL_i * k_s * {(\vec N_c \cdot \vec H)} ^{n}Li​∗ks​∗(Nc​⋅H)n

=Li∗ks∗(1−(T⃗⋅H⃗)2)n= L_i * k_s * {(\sqrt{1- (\vec T \cdot \vec H)^2 } ) }^{n}=Li​∗ks​∗(1−(T⋅H)2​)n

各向异性渲染(一)基础理论相关推荐

  1. 各向异性渲染(二)Kajiya Kay头发渲染

    介绍 基于之前的各向异性得结果,我们可以再推广到头发渲染.Kajiya Kay头发渲染是一种经验模型.它把头发模型为一条一条细管.然后利用上一章的数学基础,但当然Kajiya Kay也加了几个细节.包 ...

  2. 基于物理渲染的基础理论

    本篇作为理论的概括介绍,并不涉及公式的部分 基于物理渲染的优点 很容易就可以作出真实和照片级的效果. 同一配置可以适用于在不同HDR光照环境下. 接口简单而直观,都是基于世界真实的参数.(如粗糙度,金 ...

  3. Hair卡通渲染的效果(各向异性)

    Hair卡通渲染的效果-各向异性 丽塔头发 各向异性渲染(截图) 视频演示链接https://www.bilibili.com/video/av71067897 效果截图: 最终渲染源码: 丽塔头发 ...

  4. 真实感皮肤渲染技术总结

    <GPU Gems 3>中的"Chapter 14. Advanced Techniques for Realistic Real-Time Skin Rendering&quo ...

  5. 【非真实渲染】【卡通渲染技术点介绍】

    阅读指南 文本介绍卡通渲染的基本技术,实现会放在另外的文档 关键词 Cel Shading,ToonShading,色块.色调,各向异性,描边,高光 特征 看起来像手绘的图片 少渐变(指光影的变换), ...

  6. 为什么我星际争霸画面是窗口_为什么我喜欢看全球星际联盟

    为什么我星际争霸画面是窗口 The Global StarCraft II League (GSL) is a StarCraft II: Legacy of the Void (SC 2) tour ...

  7. unity Quality Settings 质量设置

    1 简单使用 1点击下三角可以选择自己的配置, 2点击Add可以配置自己想要的画面质量, 3从左到右,依次是PC,IOS,android不懂平台质量设置,绿色对勾表示当前平台选择的质量. 2 参数 U ...

  8. Unity质量设置 Quality Settings

    公司项目的 设置. Unity allows you to set the level of graphical quality it will attempt to render. Generall ...

  9. 盘点技嘉AORUS 2080系列显卡的那些黑科技

    在显卡硬件厂商界,英伟达最为活跃,N卡一直以绝对优势占据大部分显卡市场.其旗下的显卡定位也非常明确.2018年8月,NVIDIA的黄总在发布会上,正式发布了RTX20系列显卡,宣告20系列显卡时代的来 ...

最新文章

  1. 修改远程桌面连接端口
  2. org.apache.poi 读取数字问题
  3. 浪潮服务器无线网卡驱动,浪潮服务器网卡驱动安装.doc
  4. theos linux环境,theos安装详解
  5. 微软云架构服务器,微软云存储架构(Azure Cloud Storage)
  6. 考研天勤 数据结构 图(自用回顾)
  7. Spring常用注解(全常用)
  8. Android腾讯微博开放平台入门(四)发表一条文字微博
  9. 【详解】MD5加密真的安全吗?不安全有什么解决办法?
  10. 程序员价值观和网络复杂性-网络不可达排查过程
  11. echarts设置主标题和副标题样式
  12. 命名规范 (C++)
  13. MyBatis入门介绍,凤凰涅槃:从 iBatis 到 MyBatis
  14. 喜报 | 强强联手,这件大事终于有着落了
  15. 【CSS】笔记2-复合选择器、显示模式、背景
  16. Conda更新或安装包时出现Verifying transaction: failed+RemoveError的解决方法
  17. MATLAB图像二值化函数im2bw与imbinarize对给定阈值的内部处理细节
  18. bootstrap框架基础使用
  19. MySQL中的char和varcharmysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
  20. Learning NGINX 学习NGINX Lynda课程中文字幕

热门文章

  1. 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?
  2. python学习-飞机大战
  3. matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
  4. android平板评测,最火7吋Android平板 三星P1010全面评测
  5. 手机刷机的几种常用方法
  6. 新特性解读 | MySQL 8.0 对 limit 的优化
  7. 开源并“免费”的Linux平台DAW——Ardour 4.0发布
  8. linux 版本号 笔记本_2019 年最佳 Linux 笔记本电脑发行版 top10
  9. JAVA个版本新特性
  10. 阿里云服务器突发性能型和共享型哪个好