纹理的诞生,是为了使用一些数据,来修正模型的表现,模拟物体表面的技术。
这里的投影函数,其实就是展UV所涉及的,把模型表面和纹理进行一个对应。
展开的UV然后对应到纹理图上边的位置,得到模型表面的UV坐标,通讯函数指的是:纹理的tiling和offset。
依赖纹理读取的概念,没听懂。和性能相关。
opengl - 什么是依赖纹理读取? - IT工具网 (coder.work)
opengl - What is a dependent texture read? - Stack Overflow
大致的意思就是,并不是从顶点着色器传过来的uv直接进行使用,而是做一些计算处理,这样就会带来这个依赖纹理读取。
因为他会影响性能,所以我们大多数的情况,会把纹理UV相关的计算都放在VS中。
光滑曲线插值,就是在双线性插值执行之前,对uv做一个额外的处理。
效果居中,但是消耗要比卷积的少。还是较常用的。
算是纯插值和卷积之间的一个折中,效果和性能消耗的折中。
===============上边是纹理放大的情况。放大了,如果颜色直接取最近,就会多像素取到一个纹素等情况,从而出现锯齿。所以需要结合周围的综合考虑。插值和卷积都是插值,插的方式,各纹素占比计算方式有所不同罢了。
这时候一个像素对应很多的纹素,颜色会有丢失,由于丢失了,移动的时候,还会出现闪烁的效果。
临近插值就找最近的。双线性插值就是混合周围的。和之前类似。
最好的方式就是一个像素对应一个纹素,要想实现这一点,增大采样频率,或者降低纹理的频率。
采样插值的方式,是增大采样频率的方式。
降低纹理的频率,可以使用mipmap。
其实这里说的偏导,应该是:首先说函数,这里的函数自变量就是x和y,在左边图中,我们取一个像素周围像素,也就是x在发生变化,然后因变量就是u或者v,算是两个函数。
这里想要的是x变化1的时候,整个长度L的变化量是多少,然后这个就取决于u和v的变化量,那么这里就要去求u和v的偏导。
这个就是更高级的插值算法了,202的第四节有讲,就是那个前缀和的玩法。
这里说的意思就是:开启了各向异性,但是内存只是大了1/3,并非计算的3。
原因就是:这里用的根本不是刚刚说的带拉伸的各向异性的纹理图。而是最初始的mipmap图,然后用这个图执行一个各向异性过滤,具体就是:把像素映射到纹理上边,首先找一个最短的边,确定level,然后沿着最长的边进行多次的采样。假设这里最短边,选了level2,那么他就会把level2的纹理铺在右边这个图上,然后再进行采样,根据这个面积覆盖了那些像素,从而对相应的像素进行一个采样。这样处理,不管你多么畸形,都不会受影响。纹理内存只需要多了1/3。采样的次数多了。
各向异性越高,也就是它越畸形,越不像正方形,越像大长条,他的采样次数就越多,消耗就越高。
这里采样次数有一个上下,说了个什么GPU 16啥的,然后128次。
纹理相关的优化:
CPU优化和重要方向,就是降低drawcall。
首先有一个认知,就是cpu要慢,它提交渲染命令,加载东西,这个耗时间多。drawcall会拖慢速度。
降低drawcall的方式:
GPU优化,就是显存带宽。就是GPU读写他的显存的速度。这个很多时候速度的拖慢,都是因为纹理太大了,所以
-8.4绝对值是最大的,说明另外两个维度是绝对值小于8.4,那么范围就是-8.4到8.4都有可能,然后除以8.4就是-1到1,加1除以2,正好最终范围是0到1.
位移贴图效果确实不错,但是是由要求的,需要表面的顶点数比较多,否则效果就不好。
比如三角形的频率低于纹理定义的频率的话,那么会有很多的空洞的部分,也就是纹理上一些纹素,根本没发挥作用。
这就是DX后来提供了曲面细分的玩法。就是不需要足够细的模型,等到需要的时候,然后再细分。
细分本身并不能提高模型的精细程度,你本来是一个三角形,一个面上的,细分的结果还是一个面,虽然有了很多的三角形。让他细节更多的是位移贴图。
===============================================================================
这个啥也没听懂~~~~
=========================
从物理视角来看这个:
思考为啥。
我们看到颜色,感知到颜色,是因为光的存在,而光本身是波,是有能量的,而我们对光的描述,使用光波来完成的,但是如果对色彩也这么干,那就太不直观了。——分光光度计。
这里想要表达的就是,人眼在看亮的或者暗的物体的时候,都能够看清其中的细节。这在摄影上是光圈对于曝光的控制,这样控制光圈能够让拍摄出的照片细节清晰一些。
人眼就是能够自动曝光的。
HDR 是什么?有哪些具体介绍? - 知乎 (zhihu.com)
而同时出现最亮和最暗的时候,不能保证看到所有的细节。因为这会俩是相矛盾的。
这个是一侧打出来某一个光,测试光,然后另外一侧用RGB三种光进行不断的调整,直到两个光颜色基本相等,这样就把测试光对应的RGB值就得到了额。
都测试出来之后,搞出来了一个曲线,各种波长的测试光对应的RGB。
然后发现了负数,进行了归一化,箭头指向的地方是归一化的方式。
因为三者之间存在一个等式关系,所以三个变量实际上确定了两个,就可以确定表示的颜色,那么就可以用两个作为变量来画一个图。
这样就把任何一个可见的光,都通过坐标点来描述出来。
这个是三维的:
现在xyz都是正数了。
这个XYZ其实就是在原来的RGB基础上进行了一个变换,变换到了全是正数的空间下。然后由于这里矩阵式太多小数,所以这里又进行了归一化。
其实刚刚的XYZ,也是三个变量确定俩就确定了颜色,那么就变成二维的也就是上边的,然后缺少亮度,这里就又加了一个新的Y轴,作为亮度。
可以看出绿色面积很大,过渡的比较平滑,而蓝色就很陡峭了。
那么可以自己去重新定义一个色彩空间。
色彩空间之间的相互转换,可以用代码实现一下。
===============================================================================================================
这里地板,既能看到表面透明油漆形成的反射,也能透过油漆看到地板。
这样可以少用一张贴图。
其他信息塞进去的时候,需要是线性的数据,如果不是,那么待会插值会有精度的损失,所以这种非线性情况下可以权衡一下在决定是否使用这种方法。
=======================================================================================
直接在网站上写这些函数就能即时看到效果,不用写shader。
这里的noise函数,输入是一个二维向量,输出的是-1到1,他就是根据输入,然后采样得到一个-1到1。
这里的out表示输出参数的关键词。
双曲正余弦,三角函数的正余弦是通过单位圆定义的,而这个双曲正余弦是通过双曲线来定义的。
这里的无穷是0x3f3f3f3f这个数,而且它满足无穷加无穷等于无穷。
Distance 返回的是两个向量终点之间的距离,其实可以直接认为,ab表示的是两个点,然后返回的是两个点之间的距离。
这里的cross,叉乘的结果的模,几何意义是组成的平行四边形的面积。叉乘的结果本身是一个矢量,几何意义就是平面的法线。
(114条消息) UnityShader常用函数(UnityShader内置函数、CG和GLSL内置函数等)_LST329的博客-CSDN博客_unityshader函数
(114条消息) Cg(C for Graphic)语言标准函数库之纹理映射函数,偏导函数,与调试函数_liu_lin_xm的博客-CSDN博客_cg ddx
===============================================
吸收改变了颜色,散射改变了方向。
albedo非金属下是漫反射颜色,金属是反射率
靠近之后的高光: