- 博客(279)
- 收藏
- 关注
原创 Blender操作记录4
点+号会自动旋转一圈(上面顺时针,下面逆时针)把一个整体物体抱起来,类似蒙皮权重处理。贴在另一个物体上,需要有一定细分。
2024-03-17 01:21:49 412
原创 Blender操作记录3
可以快速预览修改效果,应用之后才会生效。作用是让物体形变:扭曲、弯曲、锥、挤。物体交/并/差值显示控制,类似蒙版。选中子物体,再Shift选中父物体。Ctrl+P:合并父子关系。渲染:F12之后显示的。视图层级:编辑器看的。
2024-03-15 23:46:14 454
原创 Blender操作记录2
Ctrl+R:预览,之后可以移动再点击确认。Ctrl+ +/- 放大缩小区域。Ctrl+鼠标右键:连续快速挤出。Alt+Z 切换到X光透视模式。Ctrl 两点联通最短路径。1 点、 2 面、3 线。Shift+N 翻转法线。Ctrl+滚轮:增加段数。Ctrl+鼠标左键取消。Tab 进入编辑模式。Shift 两点多选。
2024-03-15 00:30:59 470 1
原创 Blender操作记录1
(可以支持再按XYZ【再按一下切换全局/局部坐标系】,或者Alt+G/R/S 撤销)G:平移(可以支持再按XYZ、Ctrl有吸附功能)2/4/6/8:当前角度微调,每次15°。CYCLES:物理写实渲染(光线追踪)小键盘:(~、可以用alt+旋转)Shift+C:还原到中心点。Shift+D:复制+移动。Shift+H:隐藏所有。Shift+S:快捷操作。Shift+中建:平移。5:切换正交/透视视图。Alt+H:显示所有。Shift+A:创建。9:当前视图的反视图。0:切换到摄像机视图。
2024-03-14 00:30:39 476
原创 软渲染系列——绘制三角形
6.从 Ex ----> Fx 依次遍历,y是一样的,指定颜色缓冲区的对应像素位置的颜色。a)等价于平底梯形,这样不用分别处理底边在上或者在下了(如果是下底,那 lt=rt)以三角形为基础图元的选择是为了在图形学中实现和处理的方面提供简单性、灵活性和高性能。三角形,无论是用OpenGL或者Vulkan,学会的第一件事一般都是绘制三角形。b)每个点就是一个坐标位置,用来找和线的交点(Vector2 就是存了x和y)4.找到E点的x值,这里x是浮点数,可以向下取整变成整数,用来当做像素的坐标。
2023-12-05 18:23:49 177
原创 软渲染系列——颜色缓冲区
渲染管线的最后阶段(片段着色器)会为每个屏幕上的像素计算颜色,并将这些颜色值写入颜色缓冲区。b)构造函数根据图像的宽高复制(注意:不一定就是你窗口像素,最后会走视口变化自由缩放)我们用OpenGL的Texture当作Buffer,那Texture 数据存储的是。c)把cpu渲染器的颜色缓冲区数据传到OpenGL创建的Texture里面,用来绘制。是图形渲染中的一个概念,也就是最终渲染到屏幕上的图像的颜色信息。颜色缓冲区可以包含红、绿、蓝和透明度(RGBA)等颜色分量。a)包含颜色缓冲数组。
2023-12-05 00:09:48 322
原创 软渲染系列——创建工程
下面这段代码的意思就是创建一个由两个三角形组成的Quad,和一个Texture,通过ShaderProgram进行贴图采样。软渲染的速度远远比不上利用了硬件加速的渲染器,但是软渲染有很好的兼容性,可以用软渲染器实现一些显卡不支持的功能。指在CPU上用软件模拟本该由GPU承担的工作,即用软件方式模拟在GPU上运行的渲染流水线。OpenGL不是本文的重点,可以看之前的OpenGL系列,此处建议直接复制即可。lib:是库目录(!注意自己对应的库的编译环境!(里面的cpp是我工程内加的,最后显示成功就行)
2023-12-04 23:42:47 164
原创 OpenGL实现三种光源
衰减:随着光线传播距离的增长逐渐削减光的强度通常叫做衰减(Attenuation)用一个世界空间位置、一个方向和一个切光角(Cutoff Angle)来表示的。衰减公式:1 / (常数项 + 一次项*距离 + 二次项 + 距离的平方)位于环境中某个位置的光源,它只朝一个特定方向而不是所有方向照射光线。当一个光源处于很远的地方时,来自光源的每条光线就会近似于互相平行。因为所有的光线都是平行的,所以物体与光源的相对位置是不重要的。分散在场景中的点,会朝着所有方向发光,会随着距离逐渐衰减。
2023-11-09 12:50:40 547
原创 OpenGL光照
即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。对于受光物体的着色器要复杂一些,需要计算根据光照模型计算输出颜色。1.计算光照信息需要模型空间坐标+模型法线方向,先填充顶点信息。a)顶点着色器:负责对模型空间的坐标和法线进行世界空间的转换。我们会使用一个环境光照常量,它永远会给物体一些颜色。镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。b)着色器中使用光照模型计算每个片段的光照颜色。光源和受光照物体适用不同的VAO。
2023-11-08 22:29:32 166
原创 OpenGL相机控制
产生一种我们在移动的感觉,而不是场景在移动(其实就是场景在移动)但是现在相机的位置和方向数据都是写死的,游戏里一般都是玩家控制的。可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机。b)获取相机z方向(注意:是指向屏幕外面的反方向)b)修改相机的cameraPos,根据输入方向变化。当相机位置变化的时候,重新求出观察矩阵就是关键。之前已经实现了3D显示,也就是相机的功能。相机移动实现,就是根据移动方向改变Pos。负责移动旋转,查看游戏世界的内容。使用鼠标位置,负责控制相机旋转。
2023-11-08 15:37:31 223
原创 OpenGL空间坐标变换
OpenGL存储它的所有深度信息于一个Z缓冲(Z-buffer)中,也被称为深度缓冲(Depth Buffer)如果一个向量的齐次坐标是0,这个坐标就是方向向量(Direction Vector)1.局部空间(Local Space,或者称为物体空间(Object Space))包含了位移、缩放与旋转操作,它们会被应用到所有物体的顶点上,以变换到全局的世界空间。3.观察空间(View Space,或者称为视觉空间(Eye Space))当片段想要输出它的颜色时,OpenGL会将它的深度值和z缓冲进行比较。
2023-11-08 01:11:49 190
原创 OpenGL纹理
2)GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。3)GL_CLAMP_TO_EDGE 纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。需要对XY分别设置,也就是:GL_TEXTURE_WRAP_S(X)和 GL_TEXTURE_WRAP_T(Y)4)GL_CLAMP_TO_BORDER 超出的坐标为用户指定的边缘颜色。b)绑定当前纹理给着色器的采样器。
2023-11-07 19:46:17 51
原创 OpenGL自定义着色器
一般项目的方式都是自定义shader文件,然后读取文本内容。本文的意图在于如何使用OpenGL自定义Shader。之前 Shader是直接写在代码里面了,用起来很不方便。命名:顶点着色器 xx.vs 片段着色器 xx.fs。d)设置自定义参数(uniform)a)通过ifsteam读取文件内容。b)编译shader链接着色器程序。test.vs,定点着色器代码。test.fs,片段着色器代码。b)读取文本并构建编译着色器。c)对于Uniform的设置。功能详解都在代码里有注释。
2023-11-07 15:46:08 307
原创 OpenGL绘制三角形
3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。计算一个像素的最终颜色,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。
2023-11-06 20:59:45 508
原创 OpenGL介绍与环境配置
一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)
2023-11-06 12:04:36 855
原创 技术美术TA之URP下的光照(额外光源)
之前流程都是固定的,比如前向渲染还得写 ForwadBase ForwadAdd之类的。感觉相对URP下灵活方便,代码也很简洁。
2023-09-04 14:36:10 303
原创 技术美术TA之URP下的光照
1.Universal Render Pipline/Lit(PBR光照,相当于 BuildIn管线下的 Standard材质)但是如果 Additional Lights 设置为 逐定点或者住像素 也会有效果(平行灯就当做额外灯处理)本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~2.Universal Render Pipline/Simple Lit(非PBR的光照)3.Universal Render Pipline/Unlit(不受光照的)
2023-08-24 13:52:30 654
原创 技术美术TA之URP下的序列帧动画
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~在 Shader 中只需要按照从左上到右下的顺序,依次截取一个个子区域显示。类似 Unity的 Transform 自带 LookAt 函数。通过 Tiling + Offset 实现的。始终朝向相机,z方向确定,求其他两个方向。
2023-08-23 12:15:48 289 1
原创 技术美术TA之URP下的抓屏
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~不透明的物体不会被渲染到这里(人家都叫Opaque了。(对应Buildin管线就是 自己定义Grab )4xBilinear:小4倍(降采样模式不一样)4xBox:小4倍(降采样模式不一样)2xBilinear:小2倍。
2023-08-23 02:06:09 274
原创 技术美术TA之URP下的深度图
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~b.如果都选了 Lighting/Cast Shadows 会由阴影部分生成深度图。BuildIn 管线 需要每个物体都用 ShaderCaster 的Pass。2.FrameDebuger 可以看到 有个 CopyDepth。a.半透明物体没有深度图(RenderQueue>2500)1.需要开启 Depth Texture。URP 管线只需要一个Pass。
2023-08-23 01:26:22 603
原创 技术美术TA之URP下的纹理采样
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~原因:采样器的个数有限制,内置管线是一一对应的,现在可以定义很多贴图,只有一个采样器。2.可以自定义 WrapMode 和 FilterModel。(不用走 Inspector面板内的了)1.纹理和采样器分别定义。
2023-08-22 15:43:41 527
原创 技术美术TA之URP下的SRP合批
GPU内 有一个大的 Buffer,有几个Drawcall 就有几个 buffer,还有每个材质的 CBuffer,最后统一的去上传到GPU。本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~提交到GPU内存是,会分开 一个是设置引擎内部的属性 一个是设置材质属性(有变化时候才更新)提交到GPU内存时,每个都是一个 CBuffer 常量缓冲区,然后一个一个去渲染。流程:CPU 从系统内存里获取数据,提交到 GPU 内存,进行渲染。
2023-08-22 02:56:26 345
原创 技术美术TA之URP最简Shader
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~1.需要在Tags 内加 “RenderPipeline”=“UniversalPipeline”2.Include 从 UnityCG.cginc 改成Packge内的文件。4.片断着色器返回half4,URP内没有fixed了。3.CG语法,变成了HLSL语法。
2023-08-22 02:20:12 179
原创 技术美术TA之URP介绍与导入
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~Unity 觉得名字起的low了,大家都不想用 LWRP,但是也可以做高端效果。(怎么排序,怎么渲染,怎么剔除等等,可以做精简,并且有性能提升)所以新出了 SRP(通过脚本自定义渲染管线),对应两个 RP。只有一套渲染管线,需要支持高端和低端的,所以会越来越臃肿。上层:c# 封装了一个可编程的渲染管线,可以自定义。所以 改名了,就叫成了 URP,让大家好理解。b.Universal RP,URP相关。
2023-08-21 23:58:12 263
原创 技术美术TA之ShaderToy
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~里面有各种各样的Shader,可以参考一下拿到自己项目里。本文就拿ShaderToy默认的效果举例。是写完 Shader去装比的一个网站,
2023-08-21 22:51:30 104
原创 技术美术TA之屏幕后处理
1.需要在Camera上挂 Monobehaviour脚本呢,通过 OnRenderImage 的回调 调用 Graphics.Blit 进行绘制。本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~对源图像进行 Graphs.Blit 存储成目标图像,最后写入到帧缓存。2.参数需要在 C# 面板控制,不在Material才创建。当内容绘制完毕,会存到帧缓冲区,称为源图像。通过很短的设置时间大幅改善产品的视觉效果。
2023-08-21 22:32:31 82
原创 技术美术TA之批处理
如果用到了 vertex+uv+normal+tangent+uv1,最多可以有 900/5=180 个顶点。2.Batch:把需要渲染的数据加载到显存并设置好渲染状态,然后CPU调用GPU渲染的过程为一个Batch。本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~1.DrawCall:CPU每次调用图形API命令GPU进行渲染的操作(CPU的消耗)b.单个网格顶点最多300个,顶点属性最多900个。缺点:有额外的网格数据,会造成包体+内存的增加。
2023-08-21 20:31:49 141
原创 技术美术TA之Shader编译相关
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~eg:interpolators10:至少需要10个插值器(从顶点到片断)可以通过 #if SHADER_TARGET< 30 做分支判断。微软剔除,要求显卡厂商按级别提供对应的功能与指令支持。不同的 SM 包含不同的指令集与 Shader 规范。#pragma target 2.0(默认是2.5)可以做一些效果再高中低配之间的不同。表明shader需要的特性功能。
2023-08-20 16:27:22 179
原创 技术美术TA之变体优化
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~Always Incuded Shader 尽量不要拖到这里面,要用变体收集器去做。Shader Striping 剔除设置,可以删除一些分支。如果有确定不用的,可以删除掉,避免别引用到。创建一个默认的unlitshader。点击Show,就会看到当前有的变体。会有4*3=12个,相乘关系。查看Inspector面板。
2023-08-20 16:14:33 68
原创 技术美术TA之Shader优化
AlphaTest 就是 clip函数,在ios和使用PowerVR GPU的Android设备上性能很低。本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~在移动端大部分都支持 half 和 float,很老的手机用fixed。如果顶点上的计算需要在模型的本地空间下进行,则需要开启,否则不要开启。尽量不要去用standard材质,会产生大量的变体,自己定制修改一个。多个Pass,会渲染多次,也不能进行合批。能不用就不用,是unity的中间层。
2023-08-20 14:55:44 278
原创 技术美术TA之光照空间
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~对于颜色的叠加,算出来的是成倍关系,但是人眼看到的不是,应该是更弱一点。在现实世界中,光的强度增加一倍,那么亮度也会增加一倍,这是线性关系。sRGB = Gamma0.45所在的空间(比实际颜色亮一些)前:对原始贴图进行 移除gamma校正后 再进行 shader。显示器输出颜色也是不成正比的,所以需要进行校正(把公式取反)显示器输出的姐过是线性的,人眼最后看到的是正常的。
2023-08-18 16:10:38 66
原创 技术美术TA之PBR
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~2012年,Disney Principled BRDF,用简单易懂的参数和高度完善的美术工作流程。是一种渲染方式,基于物理原理和微平面理论的光照模型,从现实中测量的参数准确的表示真实世界。Anisotropic:各向异性强度,控制镜面高光反射的横纵比,一般都是各向同性的。其中 f® 是当前点的入射方向到出射方向光的反射比例,为BxDF。光源入射方向与平面法线的夹角越大,反射越大,亮度越大。
2023-08-18 14:33:58 318
原创 技术美术TA之纹理全攻略
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~三线性过滤,双线性过滤基础上再加上对Mipmap远近级别过滤,采样8个纹素插值。双线性过滤,采样点周围采样4个纹素,加权平均(离得近的权重高)一个像素可能对应多个纹素,需要处理一下到底取哪个颜色。依次生成分辨率xy分别/2的一级一级的贴图。2.分级加载,减少不同配置下的内存。不过滤,只采样采样点最近的纹素。1.定点/片段着色器(读取)近处采用大图,远处采用小图。1.角色在远处,采样抖动。
2023-08-17 08:31:45 219
原创 技术美术TA之雾效
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~输出颜色 = lerp ( 雾颜色,物体颜色,雾效混合因子 )3.Exp2,指数(效果更好,计算量更大)Mode 之前介绍的三种,参数一样。1.Linear,线性。density:雾浓度。1.物体离视角的距离。start:开始距离。
2023-08-16 15:03:13 105
原创 技术美术TA之全局光照全攻略(GI)
Realtime Lighting:实时 GI (Realtime Global Illumination,标识是否开启)Mixed Lighting:烘焙GI (Baked Global Illumination,标识是否开启)(就是 Unity 内置的GI shader,拷贝出来的,方法前加 CUSTOM_ )(计算GI有延迟,不适合快速变化的灯光,适合昼夜变化缓慢变化的)既考虑来自光源的直接光照,又考虑经过场景中其他物体反射的光照。把光源对场景中静态物体的光照效果提前烘焙到一张张光照纹理。
2023-08-15 17:59:34 517
原创 技术美术TA之简单阴影实现
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~1.ShadowMap会发生自遮挡现象,即阴影失真。有没有一种简单的方法呢?
2023-08-14 00:10:35 106
原创 技术美术TA之内置阴影
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~2.绘制场景时,把当前片段转换到光源空间下,计算得到深度与采样ShadowMap中的深度值对比。1.在光源处添加一个相机,开启深度测试与写入,生成ShadowMap(深度图)ShadowMap:动态生成阴影纹理,需要时进行对其采样。ShadowMapping:常用的试试阴影生成方法。使用系统的方法需要开启unity设置。十分简单,都是unity封装好的。
2023-08-12 23:44:58 65
原创 技术美术TA之深度缓冲区
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~每个顶点的深度信息,在光栅化阶段会被差值,写入到深度缓冲区中。xyz是坐标,模型的z轴是由离相机的远近转换而来的。1.更新 ZWrite,默认是1,更新后越小越靠前。常用的效果如 XRay 就可以基于深度实现。深度值范围0-1,非线性(近处精度高)不透明物体一定是 ZWrite On。是否通过可设置,通过后才会渲染出来。默认是 LEqual(小于等于)2.测试 ZTest。
2023-08-11 22:12:13 80
原创 技术美术TA之光照模型
公式:Specular = SpecularColor * Ks * pow( max(0,dot(R,V), Shininess)本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~公式:Diffuse = Ambient + Kd * LightColor * dot(n, l)R:反射单位向量(和入射光对称相反的,公式:R = 2*dot(n,l)*n-l )Shininess:高光指数,模拟范围(自定义)L:顶点指向光源的单位向量(注意方向)
2023-08-10 19:31:49 162
原创 技术美术TA之渲染路径
本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~(原课程链接渲染路径:为进行光照计算而设计的渲染方式。
2023-08-06 23:34:32 170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人