Shader 学习笔记 20151103

Segment 0 回顾

  • BRDF 回想。
    昨天弄到半夜,硬是想象不通这个斜着交叉的线是怎么个搞法,特别是当别人提出某种渲染需求的时候,我根本无法给出可操作的步骤。(见下图)
    这里写图片描述
    于是只能按图索骥,看看cook book里面推荐的链接 http://wiki.polycount.com/wiki/BDRF_map

    Nice! 还是wiki说的清晰,先抄文字,再截个图。
    BRDF stands for Bidirectional Radiance Distribution Function, a way for describing how a surface reflects light. In game shaders BRDF is usually a rougher approximation, simplified for faster rendering. A BRDF map is a vertical gradient mixed with a horizontal gradient, each controlling how the surface reflects light relative to a different angle: one for the camera, and the other for the main light.

    核心处就是黑体的最后一段话,这段话说了两点,一个是BRDF是个二维的(分别和视点、光源方向相关);另外一个就是Vertical gradient mixed with a horizontal gradient,这个万分重要,我昨天百思不得其解之处就在这里,这玩意根本不是什么斜线,就是一个横轴一个竖轴。

    下图里面英文描述的很清晰了,其中非常详细的讲解了如何创建BRDF texture。可以这么描述,纵轴上面的点(图中点B)远离光源,下面的点(图中点A)靠近光源(此处用的是halfLambert方式,材质的坐标原点什么的不是重点,跟你的坐标系相关);横轴左面的点(图中点D)和视点成90度,图中右面的点(点C)和视角平行。
    所以你看,我们在攒弄texture的时候,还是有章可循的。请忘记那个什么斜线吧。。。
    这里写图片描述


Segment 1 阅读

  • cook book chapter 2 , using texture for effect, 第一小节,通过改材质UV值进行scrolling
  • cook book chapter 2 , using texture for effect, 第二小节,通过改材质UV值搞动画
  • cook book chapter 2 , using texture for effect, 第三小节,Packing and blending textures
    第三小节也参看了 (打包和混合textures http://blog.csdn.net/candycat1992/article/details/20792585

Segment 2 理解

  • 通过改UV值进行scrolling,其核心是使用_Time乘以速度来确定不同时间下面的UV颜色值。这样一来,就可以有卷轴效果了。书里面的例子是流水

  • 通过材质UV搞帧动画,这玩意没啥好说的,很平常。只是里面有一个蛮重要的概念是CPU和GPU的分工,一般我们会把过多的除法和算法交由CPU去做(见下图,cook book page 38 ),这样算术工作就不是GPU直接弄了。当然,这里面有两个问题,一个是哪种算法更适合GPU单元去做,乘法/除法/加减/开方(我觉得是乘法和加法)?另外一个就是怎么balance CPU和GPU之间的loading,既不能全在CPU搞,也不能全在GPU弄?
    这里写图片描述

  • 打包和混合,这个其实概念比较简单,就是有一张texture用来做控制材质,控制什么呢?控制其他几张材质的混合。怎么控制呢?就是用控制材质里面不同通道(RGBA通道)里面的灰度值配合lerp函数去调和。下图解释的颇为清晰了。
    这里写图片描述

    下面是一个实际例子的控制材质以及渲染材质。
    这里写图片描述

    这里写图片描述
    具体的玩法就是用控制材质的G通道做参数调和材质A、B,调和完成的结果在去和材质C调和(此时用控制材质的B通道调节),然后再和材质D调和(用Alpha通道),调和完成后再用R通道调和一个地形颜色(这个不属于材质算法了,仅仅是这个例子里面这么用了),最后再乘以一个环境光。 这样完全调和之后的材质就可以渲染一个表面了,此处的例子是地表。见下图
    这里写图片描述

    好了,写到这里,这玩意有啥好处呢?cook book page39 有一段Why is this helpful的话,按照书里的意思是说可以把能合并的图合并在一个材质里,恕我直言,这书里的例子完全感受不到这点。如果我要渲染一个地表,直接贴图就好了,为何还要搞4个素材材质以及一个控制材质?这完全是在内存开销上背道而驰啊!
    至于有人说这样能加快GPU的采样速度,因为GPU在采同一个图的时候会快。我也觉得不妥,假设我渲染了三个不同的地表,一种方法是三张texture直接贴;另外一种是素材4张,控制三张,无论如何也看不出用控制texture能加快速度。唉。。。 只能慢慢学慢慢体会了。。。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值