个人学习笔记——庄懂的技术美术入门课(美术向)03

个人学习笔记——庄懂的技术美术入门课(美术向)03

1 回顾渲染流程

老师以美术绘画的角度理解渲染管线,比较形象
不过在第一课的学习中,我已经补充了些理论,所以这一块就略过
在这里插入图片描述

2 尝试shader代码

首先是关联Unity里关联到VS,这部分也较简单,略去
以shader forge新建基础的shader来识别代码
可以看这里来稍微看看Unity的基础语义
在这里插入图片描述
在这里插入图片描述
仔细看看操作段,和我们之前在OpenGL里写shader很像
逐层来分析
在这里插入图片描述

  • 操作段1和2的路径和材质参数暂且略过
  • 第三段定义了一个输入结构,这个结构体有一个float4的变量 vertex,使用的是POSITION
  • 第四段定义了一个输出结构,这个结构体有一个float4的变量 pos,使用的是SV_POSITION
  • 第五段,我们声明了一个方法vert,这个方法以VertexInput的变量v为输入,输出的是VertexOutput
    第一段把0强转成VertexOutput,赋值给变量o
    o里的pos变量,采用v变换到到裁剪空间的坐标结果
    然后返回o
  • 第六段,frag方法,对应输出的是COLOR这个参数
    接受VertexOutput的结果,其内部设置了一个emissive的参数为颜色,然后输出

在这里插入图片描述
步骤知识改了下输出的颜色,比较简易

3 Lambert试试

在这里插入图片描述

  • 这段实现Lambert的代码首先在输入阶段新增了一个NORMAL(float3就可以)
  • 输出阶段声明一个变量在TEXCOORD0这个槽位,这个变量用来存储变化后的法线信息
  • 顶点着色器里新增了把法线从切线空间转到世界空间
  • 片段着色器里得到平行光的方向,发现信息,点乘以后取大于零的部分,返回颜色值
  • nDirWS意为normal方向在worldspace

在这里插入图片描述

  • 这里讲到unity存光照位置的时候是个齐次坐标,0代表向量,1代表点
  • _WorldSpaceLightPos0.w为0,表示该光源为平行光。
    _WorldSpaceLightPos0.w为1。则表示光源为点光源或聚光灯。

4 节点组

在这里插入图片描述
所谓fakelight,也就是自定义一个三维向量和颜色

5 作业

在这里插入图片描述
关于Lambert和HelloWorld代码都有了,半兰伯特也很简单,按照原本的连连看做法*0.5+0.5

关于作业,首先观察,发现是有颜色的,说明进行了UV的采样

但是亮部没有变化,暗部发生了颜色变化

目前我们在代码和光照模型上不会做大改动,所以不考虑该光照模型这一点

我又想到是不是单独判断暗部,给暗部成一个比例?

但是这样会有明显的分区感,不会连续变化,所以放弃这个数据是单独的一个乘数因子

  • 回忆一下步骤:半Lambert→采样UV→输出

外围不可能的话,只有可能在UV或者采样上东西上做手脚

因为其他数据不可能变,所以slider改的是uv坐标,其中一个坐标给了Lambert,所以其改的是另一个坐标

根据作业改这个坐标有个效果,就是暗部变化,其他不变,由此推断这张材质图的样子

在这里插入图片描述
在这里插入图片描述
按照这个思路画了个图(虽然很丑(并且不知道怎么把渐变的意思很好表达出来Orz

猜你喜欢

转载自blog.csdn.net/weixin_43803133/article/details/109709437