Shader 学习笔记 20151102

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

Segment 0 回顾

  • surf和litmodel传进去的参数
    1, surf 的参数主要有两个,一个是结构体作为input, 里面主要包含了fragment着色器所需要的材质信息(材质本身以及材质坐标,材质坐标的方式很奇异,是直接把uv加材质前面的方式—uv_Texture);另外一个就是inout SurfaceOutput s,SurfaceOutput的类型是Unity自己定义的,其中包含了每一个点的空间位置信息和颜色信息(具体可以去Unity的Lighting.cginc里面看,Unity Shaders and Effects Cookbook page18)

    2, litmodel传进去的参数是有指定方式的,一共有三种(Unity shader manual里面有),其基本的意思就是处理材质点s,入射光,camera视点这三个东西(还有一个是attenuation参数,作为衰减用的)。因此litmodel带的参数也就是 SurfaceOutput s, fixed3 lightDir, fixed3 viewDir, half atten。
    此处还存在一个问题就是诸如lightDir,viewDir,atten这些东西都是从哪里来的。只能理解为从Unity的场景Object带进来的(其中atten有可能是定义在Lighting.cgin里面,但是我没看)。


  • litmodel里面的_LightColor0是怎么传进去的?从哪里定义的?
    是定义在Lighting.cginc里面,表示光源颜色,有一种说法说_LightColor0是反射光颜色,我觉得太离谱。

  • albedo和rgb之间的关系 以及 col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2) 是什么鬼?为何颜色能相乘?!

    albedo按照单词翻译叫做反射率,而在shader里面它一般是由材质的rgb颜色赋值的。然后我就晕了,为何反射率是材质的颜色值?这不是害人么? 其实,细想一下,还是很有道理的,例如一个蓝色的材质(0,0,1)在白色光(1,1,1)照射下,请问是什么颜色(0*1, 0*1, 1*1)?必然是蓝色(0,0,1)。再深思一步,一个物体是绿色的是什么意思?白色物体在黄灯下面为何是黄色的? 我们所说物体具有某种颜色一般默认它是在白光下面的颜色,所以我们说香蕉是黄色的时候暗含着香蕉是在白光照射下的香蕉,如果用蓝光射蕉肯定又有不同。这样看来,白色物体在不同灯光下反映出不同颜色的现象暗含着一个深刻的事实,它就是物体在白光下的颜色就是它的反射率(Albedo)

    明白了物体颜色就是反射率这个事实之后,就很好理解s.Albedo这个rgb乘以_LightColor0.rgb是啥意思了,有一种说法管这个叫做color modulation(色彩调制,高大上的很,参见http://www.zhihu.com/question/24026277
    另外还有一个很有趣的概念是镜面反射,那个就是色彩相加了,此处不展开。

    difLight * atten又是什么鬼?先说atten,它实质上是材质对环境光的反射系数(0 < atten < 1)(具体参见GPU 编程与CG 语言之阳春白雪下里巴人.pdf page98)。difLight是根据Lambert反射模型搞出来的(当方向光照射到朗伯反射体上时,漫反射光的光强与入射光的方向和入射点表面法向夹角的余弦成正比,这称之为 Lambert 定律)


Segment 1 阅读

  • 看了Creating a ramp texture to control diffuse shading in cook book
  • 看了Creating a faked BRDF using a 2D ramp texture in cook book

Segment 2 理解

  • BRDF名词解释,bidirectional reflectance distribution function。意思也很通俗,就是在光源渲染的时候,既考虑光源和物体法线之间的夹角,又考虑视点和物体法线之间的夹角,然后用这两个夹角做文章。
    一般的玩法是用这两个夹角的余弦值做uv坐标,然后去2Dtexture里面取色。

    具体请看下图,他就是用了 光源-法线夹角余弦视点-法线夹角余弦 去定位坐标。
    这里写图片描述

    以下是核心的code

            //计算光源法线点乘,也就是它们之间的夹角余弦
            float difLight = dot (s.Normal, lightDir);
            //计算视点法线点乘,也就是它们之间的夹角余弦
            float rimLight = dot(s.Normal, viewDir);
            //给光源法线点乘搞了一个hLambert效果(就是让非光照面也有明暗变化细节,
            //但是在这里其实是给difLight搞一个归一化,因为difLight范围是负1到正1)
            float hLambert = difLight * 0.5 + 0.5;
            //关键的来了,用这两个余弦值去找2Dtexure上面的像素颜色。
            float3 ramp = tex2D(_RampTex, float2(hLambert,rimLight)).rgb;

好吧,这玩意从算法上看是很通俗,那么直观上的理解到底是啥?这种方法用能干些啥呢?
先回答这个直观上理解是什么东西,直观上看可以理解为我们渲染的这个物体,越靠近光源的部分其颜色就越显蓝色,越远离光源的部分其颜色就越红。同时,请注意同时,眼睛看这个物体时,这个物体中心亮,轮廓暗(中心亮、轮廓暗这个其实是特别针对这个球来说的,由rimLight的算法可以看出来,物体上法线和视线平行的点就亮,垂直的就暗),为啥会有红、蓝、明、暗这区别呢?就是BRDF这个材质图决定的,现在把材质图放大放在下面。(图中的两个轴我还未体悟清楚)
这里写图片描述


  • rimLight 或者叫做有视点参数参与的玩法究竟怎么玩才好玩! ( cook book page 27 )
    1, A bubble type transparency
    2, The start of a rim light effect
    3, Shield effects
    4, Toon outline effect
    也就是说,因为你有了视点控制,那么基本上根据轮廓然后做各种处理都可以搞了,我自己觉得最NB的就是超级街霸4里面人物的水墨勾边,真心吊。
    这里写图片描述

  • 今天写code时候出了个很严重的问题,由是想到有没有一种灵活debug的方法。目前。。。还没看到。。。
            //此处出了个大问题,ramp 被我声明成float 而 不是float3,得到非常难查的结果 
            float3 ramp = tex2D(_RampTex, float2(hLambert,rimLight)).rgb;

  • 编辑器的使用,自带的MonoDevelop简直反人类,既没关键词连想,又没提示。是不是用VS来代替呢?不知道,但是(http://www.jianshu.com/p/7b9498e58659)
    里面的东西看起来很美,就是不知道是不是能实时save之后更新Unity scene
pytorch lightning最简上手 阅读详情

相关推荐

Google Filament 源码学习(三):Material System (二)

目录Filament Materials GuideIntroduction相关术语与概念Material ModelsLit ModelBase ColorMetallicRoughnessReflectanceSheen colorSheen roughnessClear coatAnisotropyAnisotropy directionAmbient occlusionNormalBent normalClear coat normalEmissivePost-lighting colorIndex

jiamada的博客 2237

shader 反射 水面_Shader效果:水果上蠕动的蛆虫——代码讲解篇

废话部分本篇文章是同系列教程的第二篇——代码讲解篇,如果你还没有看过第一篇——逻辑节点篇,建议点击下面的链接阅读一下,对于新接触Shader的读者朋友来说,会有助于理解接下来的代码。Faith Tong:Shader效果:水果上蠕动的蛆虫——逻辑节点篇​zhuanlan.zhihu.com自从上次写完教程之后,评论里说的最多的就是:“好恶心”!!!内心受到巨大创伤的我决定将此Shader用于其他用...

weixin_31002075的博客 221

如何从Zbrush里面抓MatCap Material做成Texuture,好做lit sphere shading

引子Zbrush还是很吊的,很多艺术家去做渲染材质的工作,因为也就有了他的MatCap Material Lib http://pixologic.com/zbrush/downloadcenter/library/ 这个Lib简直爆炸,很多各种材质效果让你玩。 因此萌生了一个想法,如何把它的这些材质用在Unity的lit sphere shading里面。道理简述概念还是比较简单的,首先Zb

mconreally的博客 5167

Shader Learing(ShaderLab syntax篇)

Shader Learing(ShaderLab syntax篇)

胡胜同学 1108

一文搞懂LiT模型文本编码器:BERT集成实战指南

你是否在寻找一种高效的图文匹配方案?是否想了解如何利用BERT模型构建强大的文本编码器?本文将带你深入探索LiT(Locked-image Tuning)模型中的文本编码器实现,通过一步步解析代码结构和实际应用,让你快速掌握BERT集成的核心技术。读完本文,你将能够:理解LiT模型的文本编码原理、掌握BERT在视觉Transformer中的应用方法、学会使用预训练模型进行图文检索。 ## LiT...

gitblog_00414的博客 854

Pytorch lightning 加载模型

备忘

qq_42696330的博客 1628

Pytorch_Lightning基础知识

这种方法是继承pl.LightningDataModule来提供训练、校验、测试的数据。

Joselynzhao 2412

OpenKG开源系列 | 轻量级知识图谱抽取开源工具OpenUE

OpenKG地址:http://openkg.cn/tool/openueGitHub地址:https://github.com/openkg-org/openueGitee地址:http...

开放知识图谱 1万+

Pytorch-Lightning--Tuner

Pytorch-Lightning–Tuner lr_find() 参数详解 参数名称 含义 默认值 model LightningModule实例 train_dataloaders 训练数据加载器 None val_dataloaders 验证数据加载器 None datamodule LightningDataModule实例 None min_lr 学习率最小值 1e-08 max_lr 学习率最大值 1 num_training 测试学习率的训练轮数 10

愿有人陪你颠沛流离! 2601

【Unity Shaders】Lighting Models —— 光照模型之Lit Sphere

本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。========================================== 分割线==========================================写在...

weixin_33696822的博客 306

谷歌开源NLP模型可视化工具LIT,模型训练不再「黑箱」

2020-08-26 12:56:57 机器之心报道 编辑:陈萍、魔王 深度学习模型的训练就像是「黑箱操作」,知道输入是什么、输出是什么,但中间过程就像个黑匣子,这使得研究人员可能花费大量时间找出模型运行不正常的原因。假如有一款可视化的工具,能够帮助研究人员更好地理解模型行为,这应该是件非常棒的事。 近日,Google 研究人员发布了一款语言可解释性工具 (Language Interpretability Tool, LIT),这是一个开源平台,用于可视化和理解自然语言处理模型。 论文地址.

喜欢打酱油的老鸟 1006

Filament 实时渲染引擎介绍~~

作者:_子宽来源:https://blog.csdn.net/u010281174/article/details/107847966摘要 Filament是一款Google开发的跨平台的...

音视频开发进阶 4729

麒麟子Cocos Creator 3D研究笔记九:初尝Shader并实现边缘光(RimLight)

零、先看一些图 图1:边缘光因子检查 图2:黄色,一般用于霸体效果 图3:红色,一般用于特殊技能特效 图4:白色,一般用于受击效果 图5:绿色,一般用于人物,NPC选中时高亮 看着群里的小伙伴们都很热衷于Shader的编写,麒麟子刚好做到了这个需求:焦点对象高亮、受击变色、霸体、特殊技能角色周身氛围增强,所以在此分享一下Cocos Creator 3D版本下,Shader的编写。 在此也提醒一下各位小萌新,Shader的编写于图形引擎而言,就好比SQL的编写于数据...

15 年专注游戏引擎与游戏开发,分享实用方案、经验与干货教程! 5186

BRDF 材质贴图

Segment 0 关键词 BRDF 材质,一种材质纹理,用来贴反射光的。 PBS physical based shading, 基于物理成像算法。 microfacet model,一种表面模型,是diffuse加上反射,反射一般由微表面分布函数D,反射系数函数F,自遮挡G组成。请注意这个模型是对每一个pixel都成立的。 uv的界限。在Unity里面,也不知道是我操作不好还是怎样,一旦UV在0

mconreally的博客 4149

Shader 妖怪手表放大镜 20160619

需求: 有一个场景,里面有大树背景、一个虫子,一个放大镜,放大镜的效果就是镜子里面显示虫子、树等等。 但是镜子外面就只显示树等,而不显示虫子。一开始的思路是直接通过layer设定,搞两个Camera,做Fully Screen Effect,用lerp做。 但是这个东西就是控制Tex不好设计,要随时生成一个程序控制的Texture,麻烦。直觉告诉我开销过高。再下来就是考虑用pr

mconreally的博客 654

Shader 学习笔记 20151031

Segment 1 阅读阅读了Unity Shaders and Effects Cookboot的 Custom light model一节。(page 17)阅读了Unity online manual关于 Custom light model两段文章 http://docs.unity3d.com/Manual/SL-SurfaceShaderLighting.html http://d

mconreally的博客 559

为何电脑里的物体如此逼真

Segment 0 : 回想1、物体的模型。 这个模型和真实世界的相似度极高2、物体的纹理。 物体上面的纹路和真实世界很相似,可以想象一下木头的纹路3、物体本身的颜色。 说的技术一点,这个其实是物体本身的颜色在反射光的颜色时的效果,也就是diffuse。4、物体对光的反射。 microfacet模型对这个模拟的最好,也就是常说的physical based model。 ![这里写图片描述](htt

mconreally的博客 466

Shader 学习笔记 20160618

星之卡比-机械星球 机械魔方shader思路CSDN服务器崩了,图片待补。 视频如下 http://pan.baidu.com/s/1i4R97gT图片说明: a, 一个box, 自己旋转,然后颜色变换,在最右侧有高光, 然后内部有电路一样的东西似乎在流动。 b, 背后有一个动态光flare c, 背后有一个多个方块fadeinFadeout效果。思路一:旋转、动态光flare、背后

mconreally的博客 451
上一篇: Shader 学习笔记 20151031
下一篇: Shader 学习笔记 20151103
mconreally
博客等级 码龄17年 5粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值