云来山更佳,云去山如画,山因云晦明,云共山高下,欢迎来到我的博客,这里便是山云汇雾之处~

图形学乱记笔记

杂记 PG7GO 9℃ 0评论

前言

此文用作学习图形学过程中的一些不容易记住的点或者重要冷门的点而做的笔记

不定期更新

 

fmod in HLSL/CG 与mod in GLSL 的不同

在GLSL里 mod 是这样的(与C#的%相同):

float mod(float x, float y) 
{ 
    return x - y * floor(x/y)
}

在HLSL/CG里 fmod 是这样的:

float fmod(float x, float y) 
{ 
    return x - y * trunc(x/y)
}

两者差别在于对负数的计算,假如说 -2 % 5:

  • GLSL会返回3
  • C#会返回3
  • HLSL/CG会返回2

 

UNORM 与 SRGB

SRGB是在Gamma空间下的,UNORM是在线性空间下的

再提一句SNORM,也是线性的,负数的编码方式不是采用和编程语言中的补码,而是直接的线性变化,最小值-1有两个表示方法10000和10001(5位值)

 

Alpha to coverage (A2C) (AlphaToMask in Unity)

Alpha to coverage是基于MSAA的技术,利用的是Coverage而不是Alpha混合

主要思想是随机裁剪,再利用MSAA的模糊达到透明效果

A2C与Alpha Test相似,都是属于非透明渲染(Opeque)

AC2主要是为了解决Alpha混合带来的性能问题,但是效果赶不上Alpha混合

 

MSAA

它包括4个步骤:

  1. 针对采样点进行覆盖检测
  2. 每个被覆盖的fragment执行一次fragment shader
  3. 针对采样点进行深度检测和模版检测
  4. 解析(resolve)

不能在延迟渲染里使用,因为G-Buffer只是一张图,无法记录一个像素被多个多边形覆盖的情况,所以不能实现resolve的过程

 

Alpha Test(Discard)与 Early-Z

正常情况下,进行early-z之后,正确的深度信息就会被记录下来,但是由于discard,会使得当前的像素点被抛弃,记录的深度信息也就失去了作用,所以遇到alpha-test时,会自动关掉early-z,这也是说法“使用Alpha Blend代替Alpha Test来做移动端优化”的原因

 

UGUI (Unity)

UI元素在Hierarchy里的渲染顺序(即排列顺序)直接影响到合批处理,尽量把相同类型的放到同一顺序中,比如图片、文字,此外,用了Mask的元素也属于一种单独的类型,这样合批后能大大解决Drawcall太多的问题。此外,如果UI多为拼合且不需要过多改动的那种,可以直接渲染到一张RenderTexture保存,然后替换掉原元素,这样对Drawcall的优化最好(不适合有动态特效或者需要实时改动的)

 

简单的顶点动画

函数:y=sin(x)*cos(2*x/3)

half dis = distance(v.vertex, _Pos);
half time = _Time.y * _TimeScale; 
o.vertex.xyz += dis * (sin(time +v.vertex.y) * cos(time * 2 / 3 + v.vertex.y) + 1) * _Direction;

如果想试试乱动的话,也可以试试y=sin(x)*cos(2*x*x/3)

RayMarching 与 法线计算

参考链接:https://www.youtube.com/watch?v=PGtv-dBi2wE

vec3 GetNormal(vec3 p){
    float d = GetDist(p);
    vec2 e = vec2(.01, 0);
    vec3 n = d - vec3(
        GetDist(p - e.xyy),    
        GetDist(p - e.yxy),
        GetDist(p - e.yyx)
    );
    return normalize(n);
}

RayMarching 中需要用一个法线公式同时计算平面和球体,这里使用的对球体的计算方式为一种经验公式,并没有直接算来得快。

 

 


PG7GO , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:图形学乱记笔记
喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址