一、前言立方体纹理是环境映射的一种实现方法,立方体纹理共包含6张图像。 采样是通过立方体中心出发向外部延伸,与6张纹理之一发生相交,采样结果就是由交点计算来的。立方体纹理好处:简单快速、鲜果比较好,缺点:当场景发生变化需要重新生成立方体纹理,而且不能进行自身反射,所以我们需要尽量使用凸面体。二、天空盒天空盒使用的就是立方体纹理映射技术。游戏中模拟背景的一种方法,它的Skybox材质,中使用6张纹理            
                
         
            
            
            
            目的学习使用Shader Graph制作一个可以飘动的旗帜。效果展现制作准备Unity版本2019.4.5f1 LTS注意:至少在Unity 2018版本以上,Shader Graph在2018版本之后才有。创建工程打开Unity Hub,创建一个Shader Graph工程在工程内查看是否已经已经安装了所需要的插件正式开始创建一个ShaderGraph的Shader注意:图中创建的是PBR Gr            
                
         
            
            
            
            各种功能实现的基本原理:水面运动的波纹:使用一张法线图:对其进行采样且使用的uv坐标随时间而偏离。但如果只采样一次,只会得到水面向一个方向流动的效果。因此进行2次不同uv坐标的采样并进行融合。为了让波纹更加混乱,这次融合的结果不是最终的法线,而只作为一个偏移值。再次进行2次采样,此时的采样的uv坐标加上了之前得到的偏移值,融合这2次的采样结果作为法线,这样就可以得到较为混乱的水面波纹。水边的波浪:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-15 12:15:57
                            
                                321阅读
                            
                                                        
                                点赞
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            关于水体渲染的一个简单Demo,大部分资源以及实现都来自Unity官方项目BoatAttack以及GPUI插件。本文主要讲解大致实现思路,想详细了解的同学可以下载工程查看(800MB左右)。需要的工具:Unity 2020,VS 2019以下水体渲GPU实例化的演示: 水体主要实现的效果:水体渲染效果1 水体渲染效果2 一、波浪创建一个空物体,挂上脚本ASE_Wate            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-23 20:10:30
                            
                                2042阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            根据这位大佬的文章我进行了实现,并且对代码的部分做了注释方便大家理解。  实现大概分为四个部分:1. 用顶点坐标变化来模拟水面波浪的起伏//实现水面的波浪的变化
    //计算顶点的实时高度,计算的xz平面,用波的震动函数来计算实时的高度
    fixed height = sin(_Time.y * _WaveSpeed + v.vertex.z * _WaveGap + v.vertex.            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-23 16:40:08
                            
                                120阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如何做一个卡通水面效果 首先,根据水面和场景的深度差异划分为浅水和深水,浅水和深水各取两个极值,然后根据深度进行插值。所谓的浅水,就是水面下的物体与水面的距离较小,颜色较浅;所谓的深水,就是水面下的物体与水面的距离较大,颜色较深。那么,如何获得场景深度呢?Unity引擎自带了**_CameraDepthTexture**,但这是基于屏幕坐标系的texture,如何在frag shader里去采样            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-21 23:08:45
                            
                                43阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            
   
 我们继续来制作物体在液体中的漂浮效果。我们来考虑物体和液体的三种位置关系:1.    物体完全离开液体2.    物体一部分浸入液体3.    物体完全浸入液体。针对这三种位置关系,我们有下面三种结论:1.     &            
                
         
            
            
            
            最终效果图2D流体简单介绍2D流体相关的算法很多,这篇文章主要讲应用层面,因此不对算法做较深的说明。本文流体相关的代码叫Stable Fluids,来自SIGGRAPH的一篇论文。该代码使用的算法为MAC(Marker and Ceil) Grid,它将一个平面分成多个网格,在网格里面计算流体的密度,在网格的边缘计算流体的向量场。我们使用这个算法时,只需要添加染料进密度场,然后交互扰动向量场,密度            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-02 08:18:56
                            
                                88阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            接下来是水体渲染基础的最后一篇,通过水面看到水下的物体,并呈现深度效果。1. 搭建简单演示场景我们直接搭一个小场景。 增加水面,赋予uv变形的水面材质,并增加透明度的设置。SubShader
    {
        Tags { "RenderType"="Transparent" "Queue" = "Transparent" }
        LOD 100
        Pass            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-31 15:36:45
                            
                                105阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             
 高光反射 
  高光反射计算公式 : 
 C specular 
   = (C light 
 · M specular 
 ) [max(0 ,  
 v 
 · 
 r 
 ) ^ M gloss 
 ] C light 
 : 入射光线的颜色和强度 M specular 
 :  
 高 
 光反射系数 v 
 :视角方向单位向量 r 
 :&            
                
         
            
            
            
            之前B站Unity官方发布了一个URP制作水体着色器的教程视频,我试着将它移植到shaderlab中,并增加反射、折射等效果。深度检测首先是深度检测。 如果直接渲染水体材质,就无法体现深水区和浅水的明暗变化。为了营造这种明暗变化,需要读取相机深度图还原深度,然后同当前坐标对比,已确定水深。 我们首先使用以下代码读取一下摄像机深度图:camera.depthTextureMode |= DepthT            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-22 15:09:16
                            
                                116阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            PBR:讲求基本算法Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-Based Rendering之实现
最终篇
Unity3d 基于物理渲染Physically-Based Rendering之最终篇 之前一直在用unity4.6写shader,终于下定决心换unity5,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-19 20:38:01
                            
                                63阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一. Unity声明周期Unity容器为我们提供了6种生命周期,便于我们根据项目需求来选择使用。  (1). 瞬时。默认省略即为瞬时,无论单线程还是多线程,每次都重新创建对象。new TransientLifetimeManager()  (2). 容器单例。只要是同一个Unity容器创建的同一个类型的对象,无论是线程之间还是单线程内都是单例的。new ContainerControlledLif            
                
         
            
            
            
            1、水面波浪起伏的效果是如何实现的?波光粼粼的效果又是如何实现的?水面的动态波浪效果,我们这里使用最简单的正弦波加上法线贴图来模拟。如果想要更精确的波动效果可以考虑使用Gerstner波不同水深颜色不同的效果,使用该顶点深度和顶点坐标的差值来计算深度,然后映射到颜色浪涌效果,还是根据顶点深度和顶点坐标的差值来计算深度,然后叠加上一层浪涌折射效果,用grabpass,采样之后进行偏移,最后叠加上去。            
                
         
            
            
            
            神奇的深度图:复杂的效果,不复杂的原理0x00 前言本文是《有趣的深度图》的第二篇文章,上一篇文章《有趣的深度图:可见性问题的解法》中已经和大家介绍了深度图在解决可见性问题中的应用。其实,利用深度信息我们可以实现很多有趣而又显得“高大上”的效果。 不过这些效果虽然看上去高大上,但是一旦了解了原理就会发现实现这种效果其实是十分简单的。 那么本文会包括以下四个有趣的效果在Unity中的实现:有点科幻的            
                
         
            
            
            
            在这里,使用一张立方体纹理(cubemap)作为环境纹理,模拟反射。为了模拟折射效果,我们使用GrabPass来获取当前屏幕的渲染纹理,并使用切线空间下的法线方向对像素的屏幕坐标进行偏移,再使用该坐标对渲染纹理进行屏幕采样,从而模拟近似的折射效果。与之前不同的是,水波的法线纹理是由一张噪声纹理生成而得,而且会随着颜色变化不断平移,模拟波光粼粼的效果。除此之外,在这里并没有使用一个定值来混合反射和折            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-08 13:46:31
                            
                                71阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            最*正在学习利用Unity制作动画,遇到了较多水面问题,正好来研究一下水面是如何渲染的。我们首先来看一下经典教程《Shader入门精要》中的水面渲染。一、CubeMap,《Shader入门精要》中的水面渲染  使用立方体纹理(Cubemap)模拟反射,GrabPass模拟折射。使用菲涅尔系数混合折射和反射效果。    fresnel = pow(1-saturate(dot(v,n)),4);              
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-12 21:50:16
                            
                                644阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1 前言    水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节。Shader Graph 基础知识详见→Shader Graph简介、Shader Graph节点、程序纹理简单应用。深水区和浅水区颜色差异;水面有波纹,并且在移动;水面起伏波动;水面边缘有水泡;水中物体因折射而扭动。    本文完整资源详见→Unity3D水面特            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-27 09:48:25
                            
                                583阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            水波纹效果 在模拟实时水面的过程中,我们往往也会使用噪声纹理。此时,噪声纹理通常会用作一个高度图,以不断修改水面的法线方向。为了模拟水不断流动的效果,我们会使用和时间相关的变量来对噪声纹理进行采样,当得到法线信息后,再进行正常的反射+折射计算,得到最后的水面波动效果。我们使用一张立方体纹理(Cubemap)作为环境纹理,模拟反射。为了模拟折射效果,我们使用GrabPass来获取当前屏幕的渲染            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-26 16:25:19
                            
                                213阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            相较于上一个水波倒影,这个水波倒影要更为复杂,但也更为真实,大体思路如下 利用脚本抓取水面的镜像,并在Shader中进行处理先上个Gif解解馋,代码后面整理好再上传,最近实在事情多,早上优化到晚上的工作原理剖析:首先镜面反射的原理: 如下图,入射光经过表面光滑的平面产生关于平面法线的反射光,人眼收集到反射光产生成像 使用上面原理,我们只需要收集 从物体发出的反射光即可,看下图 我们从镜面看到的倒影            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-06 11:33:15
                            
                                247阅读
                            
                                                                             
                 
                
                                
                    