<美术向TA入门课 From 庄懂> L03
本文最后更新于188 天前,其中的信息可能已经过时,如有错误请发送邮件到2939296129@qq.com

回顾-渲染流程

从美术的角度来形容渲染的过程(由于我不是美术,所以就不描述了哈哈),看图就行。


Shader代码(一)

关联编辑器

如何关联:

  1. 菜单栏
  2. Edit子菜单
  3. Preferences弹窗
  4. ExternalTools项
  5. ExternalScriptEditor子项
  6. 设置为:VS或者VS Code或者Rider

SF新建最简Shader模版

由于SF已经淘汰了,这里就省略了


最简Shader模版

主要需要修改的部分:

  • shader路径名
  • 材质面板参数
  • 输入结构体
  • 输出结构体
  • 顶点着色器
  • 片元着色器

Hello World


Shader代码(二)

代码Lambert

这里稍微用代码写一下:

//输入结构
struct VertexInput
{
  float4 vertex : POSITION;		//将模型顶点信息输入进来
  float4 normal : NORMAL;			//将模型法线信息输入进来
}

//输出结构
struct VertexOutput
{
  float4 pos : SV_POSITION;		//由模型顶点信息换算而来的顶点屏幕位置
  float3 nDirWS : TEXCOORD0;	//由模型法线信息换算过来的世界空间法线信息
}

//输入结构->顶点Shader->输出结构
VertexOutput vert(VertexInput v)
{
  VertexOutput o = (VertexOutput)0;								//新建一个输出结构
  o.pos = UnityObjectToClipPos(v.vertex);					//变换顶点信息 并将其塞给输出结构
  o.nDirWS = UnityObjectToWorldNormal(v.normal);	//变换法线信息 并将其塞给输出结构
  return o;																				//将输出结构 输出
}

//输出结构->像素
float4 frag(VertexOutput i) : COLOR
{
  float3 normalDir = i.nDirWS;									//获取法线方向
  float3 lightDir = _WorldSpaceLightPos0.xyz;		//获取光线方向
  float NdotL = dot(normalDir,lightDir);				//法线方向 点积 光线方向
  float lambert = max(0.0, NdotL);							//截断负值
  return float4(lambert,lambert,lambert,1.0);		//输出最终颜色
}

注意:

  • 要形成良好的代码规范,0.0和0虽然一样,0内部会转换为0.0(有些机型可能会导致转换错误)
  • 片元着色器要返回float4格式的变量,返回float也可以,内部会转换为float4,但是可能会导致未知错误

与SF代码对比

连连看生成的代码会产生冗余,自己写的代码可以达到性能最优,可读性也高。


结点组-参数

参数结点常用全家桶

SF和ASE的差不多,这里就不多介绍了


值得一提的是FakeLight,伪造光,或者虚拟光

在Shader中光的计算依靠 光的方向、光的颜色、强度;我们可以自定义一系列参数在shader中实现伪造光


文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇