QQ资料 - yty/yty.github.io GitHub Wiki
齐天大圣(76450106) 2019/7/24 15:32:46
shader里面能取到相机的fov吗?
atan(1/CameraProjection[1][1]) *2.0 *180/UNITY_PI
夏瑾(1687011021) 21:01:55
fixed3 normaltex = UnpackNormal(tex2D(_Normal,i.uv)); normaltex = normalize(i.normal+ normaltex);
问个问题 一般没有法线贴图的时候我们计算光线都是直接拿模型自己的法线 那如果有法线贴图的时候 还需要去结合模型法线 重新算一遍嘛 就这类似这样 还是只拿 法线贴图的法线算光线
如沐(99320920) 21:18:59
当然是依然要去结合模型法线的啦 法线贴图保存的只是偏差信息,需要一个本体信息当基础来计算 不给你模型法线信息,你是无法把法线贴图正确用在模型上的
杭-新手 -偶尔不帅[email protected] 21:23:06
世界坐标法线不需要。切线空间法线应该也不是根据模型法线偏移吧 不确定 求大佬
如沐(99320920) 21:24:10 不给你模型法线,你写个法线贴图shader能写出来吗。。。 切空间法线贴图的作用,究其本质,就是用来偏转模型法线啊
杭-新手 -偶尔不帅[email protected] 21:26:02 可以的 我之前把3d 法线渲染出图 放2d 资源上可模拟3d光照
如沐(99320920) 21:27:07 那是因为2D资源可以看成一个面片,依然是有法线的,法线垂直于这个2D面片,当然这时候可以不用管它就是,但是等于还是有的
如沐(99320920) 21:28:19 与其他空间的法线贴图相比,并不是因为综合衡量来看切空间法线贴图优势较多才用切空间法线 使用切空间法线其实是唯一的选择,因为存在角色动画,角色动画只能使用切空间法线贴图,其他都不能用的,没的选择
比如说,一个兔子的模型上,你用球体法线作为基础法线,去计算使用切空间法线贴图的最终效果,很明显渲染结果是错误的。只有使用兔子形状的基础法线,结果才是的对的。 是的,在兔子模型上用球体法线作为基础法线去加个法线贴图效果就知道了,是不行的,离不开兔子模型法线的 就是这个转换过程中要用到模型法线 那个转换矩阵是用模型法线构建的
偶尔不日(604896903) 21:35:09
切线空间坐标系的z轴就是模型法线本身 绕不开这个 一般都转到世界坐标的多 毕竟世界法线还有很多其他用处
【CTO】北京|无情公子[email protected] 16:48:59
AlphaTest快就主要是因为有pixel discard后,PreZ会全部改为PostZ
而在ps4上,你如果确认你的fragment shader不会引起depth变化,你可以强制要求PreZ
ps3主要是因为cell架构特别,要加速的手段需要独立学,而且学了之后其它地方用不到。。
当你画大面积的草地时,或是动物皮毛,人物头发时。。。。。ps4相比xb1就立马就显现出来性能优势了。
幽玄 2017/5/25 20:29:15
unity3d的一个双标准
var p = camera.projectionMatrix 在C#脚本里面,p.GetRow(2).w是shader里面UNITY_MATRIX_P[2].w的两倍。这说明,C#脚本提供的投影矩阵projectionMatrix 用z范围是opengl的(-1,1)的cvv来推导出的,在shader里面提供的投影矩阵UNITY_MATRIX_P用的z范围是(0,1)的cvv来推导出的。 我之前以为他喵的在光栅化的时候对z值做的映射,看来是错了。
打了个apk,测试结果是shader中UNITY_MATRIX_P[2].w还是用的z值为(0,1)的cvv(dx流)推出的,而不是opengl的(-1,1) unity版本:5.4 测试方法:取camera的n=1,f=100,如果dx的cvv盒来推,应该有P[2].w≈-1.0101,如果是opengl的,P[2].w≈-2.0202,把P[2].w传到frag以float4(0,-P[2].w/2,0,1)输出,如果是暗绿色(0,0.5,0),说明是dx的;如果是绿色(0,1,0,1),说明是opengl的。手机上输出是暗绿色,说明用的还是dx那种cvv盒。
我觉得只有inverse z会影响一些自定义效果,其实具体矩阵里存啥一般没人在意
reversed-z主要是要跟浮点数深度值搭配才能起到效果,因为浮点数的精度分布和1/z的精度分布刚好达成了一种互补。传统的无符号整型z-buff用上reversed-z也没有任何帮助
就要看显卡支持不支持ARB_depth_buffer_float
幽玄 2017/6/15 20:09:05 翻译表示无奈和无辜啊。 英文里面flux是flow的拉丁文,两者都是“流量”的意思,如果只看单词没法区分的,所以还得看数学和物理形式。 中文教材里面把flow翻译成流量,flux通量,circulation环量。 再说中文,中文里面本来没有通量这个词的,既然flow翻译成了流量,要区分flow,flux才有了通量这个翻译。
数学上,对于二维场F,F沿着a流向b,FT(沿着,所以是切线方向T)从a到b的线积分就叫flow,从a流一圈再回到a,就是circulation(左图) F经过环从区域A流向区域B,FN(往外所以是法线方向N)在环上的线积分就叫flux
对于三维场: 三维场中,flow和circulation的物理意义没那么好解释,要借助旋度,就不说了(也是单位时间内流过的量,不过是流过啥的量说起来比较复杂)。主要想说的是,这个时候的flux的意义,和我们初中学的“流量”是最相似的,表示单位时间内通过的某个面的体积。
不论在二维常中,还是三维场中,flow和flux都有沿着某个物体流过某个量(可能是体积,质量或者长度)的意思,有着更加广义的定义。 在有些书中文书中,把flow和flux无区别翻译成流量,我想这也是一个关系吧。这是我对流量的理解。 以上。
[北京]Zhoy
struct和class的区别 不用释放。struct 是值类型。栈内结束就自己释放了。跟new 一个 int一样。即便是用new 的。 而class new的是堆里面的。会放到垃圾回收堆里收集 他自己决定时机释放
c#里有传值和传引用两种说法,类似c++。 我没记错的话,struct做参数时是值传递,class做参数时是引用传递 类似于c++里class做参数时不带&和带&的情况
struct不好用的一点,比方说一个class里用了一个 struct 对象。还不能单独 改他的里面的值。 而要先弄一个临时的结构体。把原先的那个完全赋值给他。然后再改这个临时的里面的域。然后再 把临时的整体赋值回去