渲染&shader
文章平均质量分 84
渲染和shader例子
july32
这个作者很懒,什么都没留下…
展开
-
向量投影
给定一个向量u和v,求u在v上的投影向量,如下图。假设u在v上的投影向量是u’,且向量u和v的夹角为theta。一个向量有两个属性,大小和方向,我们先确定u’的大小(即长度,或者模),从u的末端做v的垂线,那么d就是u’的长度。而u’和v的方向是相同的,v的方向v/|v|也就是u’的方向。所以有 (1)再求d的长度。 (2)最后求cos(theta) ...转载 2020-08-06 10:13:11 · 9659 阅读 · 0 评论 -
shader中的几个语义:SV_VertexID, VPOS, VFACE
转自:http://blog.coolcoding.cn/?p=798uintvid:SV_VertexID表示第几个顶点,依次从第0开始…这样在进行顶点动画时,可以对指定顶点进行采样v2f vert (appdata v, uint vid : SV_VertexID){float x = vid;…VPOS:屏幕像素坐标,用于片段着色器,需要添加#pragma target 3.0编译指令。fixed4 frag (v2f i, UNITY_VPOS_TYPE scre...转载 2020-07-16 10:34:51 · 3813 阅读 · 1 评论 -
球谐光照——简单理解和实现
转自:https://blog.csdn.net/qq_33999892/article/details/838625831.简介:游戏中的光照可以被简单分为两个部分,直接光和间接光。直接光中我们研究各种不同的BRDF材质,甚至BSDF,BSSSRDF等等。这些模型据有很不错的表现力,足够我们区分金属,皮肤,木头等等不同物体的着色表现。但这并不能满足我们,因为光并不是那么简单,光会被反射,会被折射,会被透射,会被吸收,所以物体的受光情况同时又由这个场景的其他物体决定,这部分光照同时拥有着.转载 2020-07-15 15:09:23 · 955 阅读 · 0 评论 -
unity通过深度缓冲计算该深度对应的世界坐标
来源:https://zhuanlan.zhihu.com/p/92315967感觉写的很好,记录下来,如果侵权的话请留言,必删总结:2种计算深度值对应世界坐标的的方法以及正交相机下的处理------------------------------------------------------------------------------------------可视化深度github:https://link.zhihu.com/?target=https%3A.转载 2020-07-10 11:30:00 · 1384 阅读 · 0 评论 -
shader常见的空间变换
转自:https://blog.csdn.net/kenight/article/details/81486214转载 2020-07-09 12:12:36 · 193 阅读 · 0 评论 -
shader内置变量和函数
光照函数float3 WorldSpaceViewDir(float4 v);//输入模型顶点坐标,得到世界空间中从该点到摄像机的观察方向float3 ObjSpaceViewDir(float4 v);//输入模型顶点坐标,得到模型空间中从该点到摄像机的观察方向float3 WorldSpaceLightDir(float4 v);//输入模型顶点坐标,得到世界空间中从该点到光源的光照方向//(方向没有归一化,且只可用于前向渲染)float3 ObjSpaceLightDir(float4 v)原创 2020-07-09 12:00:45 · 730 阅读 · 0 评论 -
转置矩阵(matrix transpose)和逆矩阵(matrix inverse)的相关公式
转载自:https://blog.csdn.net/yinhun2012/article/details/84236202这一篇是为了后面着色效果的数学基础做积累,之前我们使用矩阵的大部分情况都是直接的仿射空间变换,就是仿射空间A变换到仿射空间B,使用矩阵也都是如下: 矩阵T*齐次坐标V = 齐次坐标V' 其计算细节也就是矩阵行与向量列的点积,其计算意义也就是获得新仿射空间中的坐标分量,也聊了很多了。 这次我们就来学两个矩阵的操作,一个是矩阵的转置...转载 2020-07-09 11:33:01 · 36720 阅读 · 1 评论 -
法线从模型空间转换到视图空间时保持法线与切线垂直
结论:Unity内置的矩阵UNITY_MATRIX_IT_MV,是UNITY_MATRIX_MV的逆转置矩阵,其作用正是将法线从模型空间转换到观察空间-------------------------原创 2020-07-09 10:45:55 · 1124 阅读 · 0 评论 -
模板测试
转自:https://www.cnblogs.com/lyh916/p/10555963.html结论:下文的Stencil+Stencil2可做限制绘制区域的功能,只有指定的参考值才能绘制出来模板测试不通过的像素也会有OverDraw----------------------------------------------------------------------------------------------参考链接:https://blog.csdn.net/u0110转载 2020-07-07 21:25:12 · 372 阅读 · 0 评论 -
垂直同步、绘制效率、显示器刷新频率与帧率
转:https://blog.csdn.net/leonwei/article/details/7998412从后缓存到显示器最近在看D3D的架构,在这过程中对帧率这个一直认为很简单的东西有了更多的理解。在过去看来,帧率就是显卡渲染一帧所用时间的倒数,现在看来远远不是这个样子。要真正理解这个问题要从绘制数据从显存中到屏幕的这一个过程来说起,下图就是这个过程显存中存在前后缓存,前缓存就是屏幕上最终看到的像素,而后缓存是绘制使用,后缓存绘...转载 2020-07-06 19:52:46 · 593 阅读 · 0 评论 -
shadow acne(阴影失真)和peter panning(阴影悬浮)
原文链接:https://blog.csdn.net/lawest/article/details/106364935总结下来就是:因为深度贴图的分辨率有限,导致多个像素点采样1个深度,导致阴影失真(acne)1个解决方法是添加bias,也就是给像素的z加上偏移,这个方法会导致阴影悬浮(peter panning)最好的解决阴影失真的方法是cull font,只渲背面的深度可参考:https://zhuanlan.zhihu.com/p/45653702------------.转载 2020-07-02 12:32:33 · 2379 阅读 · 0 评论 -
合批失败问题
转自:https://www.cnblogs.com/zsb517/p/5837781.html合批失败问题游戏场景中存在大量例子的时候,DrallCall的压力很大,但是遍历一遍之后发现,为啥一样的粒子特效竟然没有合并,why?经过很多测试后发现,如果把透明材质的修改为非半透明的,就可以合并,这就让我很奇怪了?Unity提供了材质动态合并的功能,虽然限制很多,但是对于透明材质的合并,Unity似乎给了一个很玄乎的答案:Semitransparent shaders most often ...转载 2020-06-15 18:16:27 · 619 阅读 · 0 评论 -
ZTest,ZWrite,Early-Z优化,为什么Alpha Test消耗较大
来自:https://blog.csdn.net/puppet_master/article/details/53900568unity渲染顺序Early-Z优化,也就是Depth-Test发生在Vertex阶段和Fragment阶段之间,之后Fragment结束后还有一次AlphaTest,确保遮挡顺序正确简单总结一下Unity中的渲染顺序:先渲染不透明物体,顺序是从前到后;再渲染透明物体,顺序是从后到前Alpha Test(Discard)在移动平台消耗较大的原因从本人刚..转载 2020-06-15 14:51:23 · 1905 阅读 · 0 评论 -
early-z、z-culling、hi-z、z-perpass是什么
链接:https://juejin.im/post/5e9d6708f265da47ce6cc812之前一直被这几个和深度缓存(z-buffer)相关的概念搞得神魂颠倒。今天在翻阅《Real-Time Rendering》时碰巧碰巧看到了这部分的讲解。硬着头皮看了看,姑且算是讲几个概念分清楚了。以我的记性估计下周就全忘了,所以打算顺手记下来。这四种技术本质上都是解决传统渲染管线中的同一个问题——过度绘制(OverDraw) 。一个经典的渲染管线通常会依次经历顶点阶段、光栅化、片元阶段和逐像素处.转载 2020-06-15 14:11:27 · 1940 阅读 · 1 评论 -
谈谈法线图的压缩
原文链接:https://blog.csdn.net/leonwei/article/details/79893445贴图压缩是游戏开发中常见的一个问题,不过说到法线图的压缩,其实里面就有一些特殊的问题要处理。前段时间做了一次贴图通道的优化,打算用两个通道表示法线图并且和其他通道合并到一张图里,以减少采样次数。这个过程中陆续挖掘了一些问题,记录一下。为什么要用3个通道来表示法线?我们通常会把法线贴图归一化成一个3元向量n(x,y,z)来表示,常识上来看,因为这个n是归一化的,...转载 2020-06-15 02:01:34 · 754 阅读 · 0 评论 -
透明混合为什么要关闭深度写入,不关闭会怎么样
如果半透明物体开启了深度写入的话,就无法看到在该fragment处后面渲染的fragment,这个主要是为了在半透明物体互相交叉、无法得到正确渲染效果时,我们折中的一种方式。举个例子,我们来创造一个半透明物体互相交叉的例子:这两个方块使用的Shader是一样的,但使用了两个各自的材质。为了让效果明显我故意把它们材质的透明度调成不同的值,摄像机靠后的方块透明度较低,靠前的较高。在不采用其他方法的前提下,如果我们使用书里这种传统的透明混合的方式(指关闭深度写入进行混合)会得到下面的效果:转.转载 2020-06-14 13:18:03 · 2324 阅读 · 0 评论 -
Unity SurfaceShader 透明测试与透明混合
转自:https://sorumi.xyz/posts/unity-net/透明测试因为使用了 Standard 光照模型,所以有 Glossiness ,Metallic 这些额外参数。Shader "Custom/AlphaTest"{ Properties { _Color ("Color", Color) = (1, 1, 1, 1) _MainTex ("Main Texture", 2D) = "white" { } .转载 2020-06-14 13:13:33 · 1425 阅读 · 0 评论 -
斜视锥体裁剪Camera.CalculateObliqueMatrix的推导
截取自:https://blog.csdn.net/puppet_master/article/details/80808486原文是实现平面反射的过程中出现了,裁剪错误的问题,通过限制反射相机的投影矩阵进行修复,用到了Camera.CalculateObliqueMatrix的api,对这个api的原理进行了推导和实现以下是原文上面的反射看似完美,但是却有一个非常致命的问题,看下面一幅图,我们把其中一个模型向下移动,让其逐渐到平面以下:似乎不太对。。。虚像倒着升了起来,恩,不.转载 2020-06-14 11:27:14 · 2382 阅读 · 4 评论 -
reflect反射公式推导
图1图2根据图1推导出OP向量,也就是图2的EB向量图1的OP推导:知道入射光向量(AO)和法向量(OP‘),我们需要求的OB。推导如下:现在我们知道了想要求出OB,还必须要求出来OP,现在只知道OP’,求OP推导如下:图2的AC推导:光方向向量AB,法向量N均为单位向量,反射向量AC,光入射方向AD = -ABθ为入射角,由反射公式我们知道,AC与AB沿y轴对称,AD与AC沿x轴对称EB = N * |AB|cosθ = - dot(N,B...转载 2020-06-12 11:03:44 · 2471 阅读 · 0 评论 -
【理论】球谐光照
原文:https://huailiang.github.io/blog/2019/harmonics/前半部分是将球谐的原理和方法,后半部分讲unity中内置的球谐计算游戏中的光照可以被简单分为两个部分,直接光和间接光。直接光中我们研究各种不同的BRDF材质,甚至BSDF,BSSSRDF等等。这些模型据有很不错的表现力,足够我们区分金属,皮肤,木头等等不同物体的着色表现。但这并不能满足我们,因为光并不是那么简单,光会被反射,会被折射,会被透射,会被吸收,所以物体的受光情况同时又由这个场景..转载 2020-05-25 06:55:20 · 2757 阅读 · 0 评论 -
shader打包到AB包后,没有包含到UnityShaderVariant导致模型变黑的问题
ShaderVariant 在shader最终编译时,根据上层的宏定义,根据不同的组合编译出多套底层shader. Unity的Shader中通过multi_compile和shader_feature来定义宏(keyword)。最终编译的时候也是根据这些宏来编译成多种组合形式的Shader源码。其中每一种组合就是这个Uniy Shader的一个VariantMaterial与S...原创 2020-04-12 17:20:04 · 2482 阅读 · 0 评论 -
cginc文件的阅读注释:UnityStandardBRDF,UnityCG,UnityGlobalIllumination,UnityStandardUtil,UnityStandardShadow
之前零零散散的看了一些unity内置的cginc,对一些函数方法做了些注释,主要是以下几个文件UnityStandardBRDF.cgincUnityCG.cgincUnityGlobalIllumination.cgincUnityStandardUtil.cgincUnityStandardShadow.cgincUnityStandardCore.cginc...原创 2020-04-12 17:04:13 · 973 阅读 · 0 评论 -
BRDF公式
转自:https://www.cnblogs.com/wbaoqing/p/9810386.html根据BRDF公式,高光项部分,只能物体的表面的粗糙度有关。Roughness有关大部分公式都是根据Cook-Torrance 的微表面高光BRDF公式我们把高光分成三项1.D项Normal Distribution Function (NDF) 法线分布函数...原创 2020-04-12 16:51:08 · 2942 阅读 · 0 评论 -
Lambert,Half Lambert ,Phong ,Blin-Phong,BRDF,BSSRDF的比较
Lambert 光照模型(环境光+漫反射) Idiff = kd * Ia + kd * Il * (N·L) = kd * Ia + kd * Il * dot(N, L) Ia 是环境光的强度 kd 为材质对环境光的反射系数(0 < kd < 1) Il 是方向光的强度 kd 为材质对环境光的反射系数(0 &l...原创 2020-04-12 16:31:12 · 1339 阅读 · 0 评论 -
Unity Standard Shader代码的分析
转自:https://www.cnblogs.com/wbaoqing/p/8931646.html下载Unity官方的提供的Shader资源,里面有个文件叫Standar.shader就是Unity5.0的之后的用的基于BDRF的shader源代码。里面包含的多个SubShader 和Pass 这里我们挑 Shader2.0 和 ForwardBase Pass 具体Shader...转载 2020-04-12 15:09:09 · 1131 阅读 · 0 评论 -
Unity3D - Shader - 模型、世界、观察、裁剪空间坐标转换
原文链接:https://blog.csdn.net/biezhihua/article/details/78926849一个顶点要经过多个坐标空间的转换才能够被画到屏幕上。模型空间 -> 屏幕空间模型空间模型空间(model space),也成为对象空间(object space)或局部空间(local space)。 每个模型都有自己的模型空间,当它旋转或移动时,模型空间...转载 2020-02-23 23:36:43 · 1552 阅读 · 0 评论 -
【猫猫的Unity Shader之旅】之玻璃材质
[-]首先玻璃是半透明的给玻璃增加反射效果给玻璃增加菲涅尔效果结束语 今天我们用学过的Shader知识实现一个简单的玻璃材质。首先,玻璃是半透明的 玻璃最主要的特点就是它是透明的,不同的玻璃有不同的不透明度,水杯的透明度比较低,而装药品的棕色玻璃瓶不透明度就比较高。当然,玻璃也有一定的颜色。利用透明,我们可以这样实现玻璃材质:Shader "Cu转载 2016-10-29 17:25:39 · 941 阅读 · 0 评论 -
[转载]Unity Shader中的ComputeScreenPos函数
原文链接:https://www.jianshu.com/p/df878a386becUnity shader提供了内置函数ComputeScreenPos,其定义位于UnityCG.cginc中,大致如下:ComputeScreenPos函数定义其中的宏UNITY_SINGLE_PASS_STEREO用于控制在不同平台上计算方式的差异,而宏UNITY_HALF_TE...转载 2020-02-23 23:08:14 · 1261 阅读 · 0 评论 -
可编程渲染管线与着色器语言
转自:http://www.cppblog.com/Leaf/archive/2013/02/22/198015.aspx可编程渲染管线与着色器语言Programming pipeline & shading language大家好,今天想给大家介绍一下可编程渲染管线和着色器语言的相关基础知识,使想上手SHADER编程的童鞋们可以快速揭开SHADER语言的神秘面转载 2017-03-12 15:09:07 · 363 阅读 · 0 评论 -
计算机图形学(一)渲染管线
转自:http://www.ceeger.com/forum/read.php?tid=10970&fid=2&page=1正文 所谓GPU的渲染管线,听起来好像很高深的样子,其实我们可以把它理解为一个流程,就是我们告诉GPU一堆数据,最后得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。 在各种图形学的书中,渲染管线主要分为三个阶段转载 2017-03-11 13:49:08 · 686 阅读 · 0 评论