《Unity Shader入门精要》笔记(一) 预备知识及数学基础

本文是《Unity Shader入门精要》笔记的第一部分,主要介绍渲染流水线概念,阐述Shader在GPU中的作用,解释顶点着色器和片元着色器的功能区别。此外,还探讨了Unity Shader基础,包括ShaderLab和表面着色器,并讨论学习Shader所需的数学基础知识,如坐标系、矢量运算和矩阵变换等。
摘要由CSDN通过智能技术生成

第一章 简介

nothing


第二章 渲染流水线

  1. 什么是流水线? 什么是管线

    GPU渲染的过程就流水线。
    这里写图片描述

  2. Shader在管线中的位置? Shader能做到那些功能,做不到哪些?

    shader的位置
    为什么裁剪在顶点、几何着色器之后? 几何着色器可能会修改顶点。

  3. 什么是DrawCall? DC为什么慢?

    DrawCall就是CPU发起一次绘制请求,绘制相关的数据神马的都要告诉GPU,可以想象两个部门协作,交流成本自然就高了。

  4. 着色器需要完成什么?

    1. 顶点着色器首要任务是完成顶点坐标从模型空间到屏幕空间的转换。为什么片元着色器不能做这个? 因为片元着色器之前总得知道哪些像素要绘制吧,屏幕坐标都不知道话,一个三角形三个点,怎么变成屏幕上一个面呢?
    2. 顶点着色可以计算颜色,也可以不计算颜色。
    3. 片元着色器,可以针对每个像素操作。像素之间的操作是相互独立的,所以 1.>互相不知道数据 2.>可以并行操作。

第三章 Unity Shader基础

  1. 什么是材质?Unity中如何使用Shader?

  2. 什么是ShaderLab?如何写ShaderLab?

    Unity提供的一种描述性语言,有自己的语法,比通常意义的Shader写起来要方便。
    官方文档在这

    Shader "shaderName"
    {
        Properties {
            _Color ("Main Color", Color) = (1,.5,.5,1)
        }
        SubShader
        {
            Tags { ... }
            Pass
            {
                Tags { ... }
                CGPROGRAM
                // code here
                ENDCG
            }
        }
        Fallback "Diffuse"
    }
  3. Fallback是用来干嘛的?

    就是备用shader,后面的名称是一些内部shader的名字。如果前面的各种subshader都支持不了,总得有个Plan B吧。不过后面有些专门用来做屏幕后处理的Shader是不用这个的。

  4. 表面着色器是啥玩意?

    Unity自己定义的着色器类型,背后最终自动翻译成顶点着色器和片元着色器。跟多光源打交道比较方便,背后可能生成多个pass什么的。
    由Unity的渲染工程师Aras发明。这大佬认为顶点和片元着色器的抽象不对,应该划分成表面着色器、光照模型和光照着色器才对。对用户来说确实可能写起来比较简单。


第四章 学习Shader需要的数学基础

  1. 左手坐标系跟右手坐标系的区别,如何区分?Unity中使用的是左手还是右手?

    Unity使用左手坐标系。但是,在观察空间中,使用右手坐标系。为什么呢?是惯例吗?还不清楚。

  2. 矢量、向量的运算

    1. 矢量的点积 A·B = |A||B|cosQ 可以用点积来判断两个向量的夹角。
    2. 向量 A⃗  A → 点乘单位向量 b⃗  b → ,结果为 A⃗  A → b⃗  b → 上的投影大小。
    3. 叉乘的结果为垂直AB向量平面的向量,可以称为法向量。不满足交换律,AxB = -BxA
    4. 对于XYZ向量有一下公式: Z = X x Y Y = Z x X X = Y x Z 简单记忆就是式子中XYZ的顺序保持不变,循环使用,从左到右为 X->Y->Z->X->Y->Z
  3. 旋转的正方向?

    左手坐标系中,相对旋转轴正方向顺时针为正方向。以左手大拇指朝向旋转轴正向,四指弯曲方向就是旋转方向正向。

  4. 矩阵的简单运算

    ABBA(AB)C=A(BC)MI=IM=M(AB)T=BTAT(AB)1=B1A1MM1=M1M=I(MT)T=M(M1)1=M(MT)1=(M1)TMv⃗ =v⃗ MT A B ≠ B A ( A B ) C = A ( B C ) M I = I M = M ( A B ) T = B T A T ( A B ) − 1 = B − 1 A − 1 M M − 1 = M − 1 M = I ( M T ) T = M ( M − 1 ) − 1 = M ( M T ) − 1 = ( M − 1 ) T M v → = v → M T

    对于正交矩阵:
    MTM=MMT=IMT=M1 M T M = M M T = I M T = M − 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值