渲染基础-渲染管线(Render-pipeline)

计算机图形学——什么是渲染管线 应用阶段应用阶段的功能通常由CPU负责实现,开发者具有对这个阶段的绝对控制权。应用阶段开发者由3个任务:1.准备好场景数据(摄像机,视锥体,模型,光源等)2.为了提高渲染性能,我们在这里会做一些剔除工作3.设置渲染状态,例如模型的颜色,纹理,使用哪个shader等这一阶段最重要的是输出渲染所需要的几何信息几何阶段几何阶段处理所有和我们要绘制的几何相关的事情。决定需要绘制的图元是什么,怎么样绘制它们,在哪里绘制它们。这一阶段通常在GPU上进行。几何阶段会做哪些事情呢,如下图所示。 阅读详情

一开始学习计算机图形学的小伙伴们肯定对于渲染管线有一点迷茫,至少当初我就有点迷茫,为了能对后来对计算机图形学感兴趣的萌新小伙伴起到一些帮助,在这里简单讲解一下渲染管线(Render-pipeline)。


该文章还有很多不足有待以后完善。如果大家有什么修改意见或问题,欢迎留言。我会定期解答。谢谢大家的关照。


2020/6/12 更新

最近翻看了一下该篇文章。首先严格意义上该篇文章并没有覆盖所有的管线阶段(细分着色器、光栅化等并没有讲解)。只是将其中最常用,最核心的坐标变换拿了出来(其他部分可以说是不可编程的)。你可以理解该篇文章讲解的是模型等数据是如何通过管线并最终渲染到屏幕上的过程讲解。


2020/6/12 更新

为什么会有渲染管线?渲染管线是用来做什么的?

NVIDIA现场形象展示CPU和GPU工作原理上的区别

 

在计算机图形学初期并没有管线之类的东西,当时连GPU都没有,绘图是通过CPU进行的。当你需要画一个模型时需要CPU每次访问模型上的一个顶点数据,之后挨个访问一遍即可。可以看出这样做效率会非常低。由于工厂中的生产管线效率理想,从此得到启发出现了以管线图形绘制(因为每一个点其实是独立的可以单独运算)的方法。GPU也是基于此设计的(GPU拥有非常多的小处理器核心,数量远远超过CPU的核心数)。

你要问我渲染管线最基本的用途是什么?我会说:是用于定义GPU上的计算方法和流程的。一个比较直观的例子就是 当我们在一个坐标系中任意定一个点A,任意定一个相机坐标B,现在我想将该点A变换到以B代表的屏幕上(屏幕可能只能识别坐标值为0到1之间的点)该点为C,但是A点可能会有任意位置(也许相机跟本就看不到该点)。那么问题来了:我如何才能通过A和B将A映射到C呢?换句话就是:世界中任意一点如何才能知道该点在我眼睛视平面上的坐标?这就需要坐标变换了,就如该篇文章之后要讲的内容。


2020/9/19 更新

最近再次翻阅了该文章,发现有些矩阵是直接给出的,没有说明前因后果,在这里简要说明一下。

图形学中的大将:矩阵

图形学中为什么要使用矩阵?矩阵是用来做什么的?

其实数学意义上的矩阵用途很多,大学时书上讲可以用来解多元方程组,但是在图形学中矩阵最核心的用法是用来做空间变换(当时得知矩阵还能这么用的我当局拍手叫绝!矩阵还能这么用!?妙!妙!妙!)。

那么问题来了:图形学中一定要使用矩阵来做空间变换吗?

说实话,不用矩阵而使用最常见的列方程也能做到空间变换来达到同样的目的。

那为什么都用矩阵呢?

在某些架构中矩阵能够提高计算效率,特别是在GPU上的矩阵运算会比CPU快很多。(比如使用计算着色器或者CUDA等并行计算)。还有就是矩阵说起来高大上,吹牛逼用的。

什么是空间变换?

空间变换就是在两个不同空间中表示同一个点的各种状态进并通过某些手段修改各种状态。举例说明:三个人并排坐,从左到右分别是A,B,C。现在从A的视角来描述B就是B在A的右边,现在从C的视角来描述B就是B在C的左边。B的位置并没有改变但是从A和C的各自角度看B,一个看到的是右一个看到的是左,发生了不一致现象。其实这就是最核心的坐标变换。这就是我后文说的:计算机图形学的坐标系系统中各个系统之间都是相对的!!!(都是一个点,只是不同的描述方式)

图形学中矩阵一般怎么用?

图形学中矩阵一般是做乘法。这里简单讲解一下平移矩阵和缩放矩阵的原理。

对于平移,假如说点A的位置为(x,y,z),我现在想在x轴平移a个单位,y轴平移b个单位,z轴平移c个单位。最简单的做法是(x+a,y+b,z+c)。聪明的先贤们想出了一个牛逼做法:使用矩阵来平移。用矩阵来表示平移如下:

V_{xyz}=\begin{bmatrix} 1& 0& 0& a\\ 0& 1& 0& b\\ 0& 0& 1& c\\ 0& 0& 0& 1 \end{bmatrix} * \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}

注:像这种4x4的矩阵在图形学中很常见,叫做齐次坐标矩阵。

V_{xyz}为变换后的坐标位置,将该式展开为:

\begin{Bmatrix} V_{x}=x\cdot 1+y\cdot 0+z\cdot 0+1*a=x+a\\ V_{y}=x\cdot 0+y\cdot 1+z\cdot 0+1*b=y+b\\ V_{z}=x\cdot 0+y\cdot 0+z\cdot 1+1*c=z+c \end{Bmatrix}

即可得到变换后的坐标(x+a,y+b,z+c)。

对于缩放,假如说点A的位置为(x,y,z),我现在想在x轴缩放a个单位,y轴缩放b个单位,z轴缩放c个单位。最简单的做法是(x*a,y*b,z*c)。使用矩阵表示缩放变换即为:

S_{xyz}=\begin{bmatrix} a& 0& 0& 0\\ 0& b& 0& 0\\ 0& 0& c& 0\\ 0& 0& 0& 0 \end{bmatrix} * \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}

S_{xyz}为变换后的坐标位置,将该式展开为:

\begin{Bmatrix} S_{x}=x\cdot a+y\cdot 0+z\cdot 0+1*0=ax\\ S_{y}=x\cdot 0+y\cdot b+z\cdot 0+1*0=by\\ S_{z}=x\cdot 0+y\cdot 0+z\cdot c+1*0=cz \end{Bmatrix}

即可得到变换后的坐标(x*a,y*b,z*c)。

如果平移之后又缩放了的话,只需要将平移和缩放矩阵相乘即可得到想要的变换矩阵。

平移和缩放只是变换的一部分,还有很多复杂的变换,比如投影变换,旋转变换,错切变换,圆幕变换等。

顺带一提:平移矩阵*缩放矩阵*旋转矩阵是物体空间到世界空间变换的核心。其实图形学中矩阵还有很多细节没有说明比如矩阵相乘的顺序不同变换结果也会不同,网上有很多不错的文章。在这里就不一一讲解了。


物体空间->世界空间->观察空间->裁剪空间->屏幕空间


注意:计算机图形学的坐标系系统中各个系统之间都是相对的!!!(都是一个点,只是不同的描述方式)

    1.物体坐标和物体模型(object space<物体空间>)

                什么是物体坐标呢?讲理论不如举个栗子!!!嘿嘿~~

     一个单独物体的物体坐标

    如图:这是3dsMax下建模的一个长度为1的正方体(单位立方体),轴心在物体重心,也就是正中心,右手坐标系(图中的这种坐标系专业一点的名字)。

                                  

    不难想象A,B,C三点的坐标为A(-0.5,0.5,0.5)B(0.5,0.5,0.5) C(-0.5,-0.5,-0.5),这些A,B,C点和所有该物体的点的集合就是我们说的物体坐标(严格上说是物体上的点相对于自身原点的坐标)。

    两个至多个物体的物体坐标

轴心,轴向不变,两个一样的单位正方体,A和A'的物体坐标不难想象A(0.5,0.5,0.5)  A'(0.5,0.5,0.5),是的 A点和A'点坐标是一样的,也就是说物体坐标并不会因为轴心和轴的位置不同而发生变化。虽然两个完全一样的物体,物体坐标只是相当于其自身的坐标原点和轴向都在各自的坐标系下,也就是说A点只相对于O点,A'点只相对于O'点。这个概念在游戏里经常会有,你打的怪兽是不是很多都长一个鬼样子?那他们都有各自的物体坐标。这样的坐标系统构成了物体空间

2.世界坐标(World Space<世界空间>)

好了现在我们有了两个正方体,我们只知道这两个正方体的各个对应顶点坐标是一样的(比如前面说到的A和A'点),也就是说画出来这两个正方体是重合的,那我想让其中一个偏离不重合并且有自己的大小,位置和旋转,那么好了,欢迎进入世界空间(World Space)。

好了,什么是世界空间?同样举个栗子(Unity中)!

让我们来看看这两个物体各自的轴心坐标:

  1号立方体的轴心(原点)位置 (0,0,0)---Cube1

  2号立方体的轴心(原点)位置 (0 ,0,2)---Cube2

Cube1的轴心位于(0,0,0),Cube2是我复制Cube1向Z轴平移两个单位轴心变成(0,0,2),现在我们看看A点和A'点的坐标。

A点:Cube1的轴心位于(0,0,0)。Cube1为单位正方体,各轴向见图右上角,所以A点坐标为(-0.5,0.5,-0.5)。

A'点:Cube2的轴心位于(0,0,0)。Cube2为单位正方体,各轴向见图右上角,所以A'点坐标为(-0.5,0.5,2-0.5)=(-0.5,0.5,1.5)。

你会发现A点坐标不等于A'点坐标,对,你没看错就是不相等,因为这两个物体放到了同一个坐标系下世界坐标系,在该坐标系下的所有点的坐标都相对于世界坐标系的原点(0,0,0),也就是说Cube1的轴心坐标和世界坐标系的轴心重合了,但是这两个物体的自身的物体坐标并没有改变(这是相对于自身轴心,也就是物体空间)。

 

3.观察空间(View Space)

 

  

                     总览图                                                                                   俯视图

如图是一个摄像机的观察范围(四棱锥)类似人的眼睛。观察空间就是将世界空间中的坐标变换到以摄像机为轴心计算各个顶点的位置。这个四棱锥我们叫视锥体(view frustum)

4.裁剪空间(clip space)<CVV(canonical view volume)>

    什么是裁剪?!

        首先假如场景是这样的:

    

摄像机的视锥体范围:

 

游戏真正能看到的画面:

你会发现在视锥体外面的东西都被剔除了,这就是裁剪,不渲染看不见的东西。

(1)摄像机有两种:

    1>透视摄像机(Perspective)

         

        

推导过程:(供参考)

            nearClipPalneHeight(近截平面的高)=2*Near*tan(FOV/2)

            farClipPlaneHeight(远截平面)=2*Far*tan(FOV/2)

            Aspect(摄像机的纵横比)=nearClipPlaneWidth/nearClipPalneHeight=farClipPlaneWidth/farClipPlaneHeight

   

    2>正交摄像机(Orthographic)

         

        

推导过程:(供参考)

nearClipPlaneHeight=2*Size

farClipPlaneHeight=nearClipPlaneHeight

Aspect=nearClipPlaneHeight/farClipPlaneWidth=nearClipPlaneHeight/nearClipPalneWidth

5.归一化设备坐标---NDC(Normalized Device Corrdinate)

在这一步会进行一个叫齐次除法的步骤,说白了就是各个点(x,y,z,w)会除以w的值(注:计算机图形学中经常使用四元数代表一个点(叫齐次空间,齐次点等 就是一个名字而已),w没什么特别之处,就是计算矩阵乘法时方便)。

透视裁剪空间到DNC:

 

正交裁剪空间到DNC:

 

重点:这样在OpenGL中所有能被摄像机看到的点将会被转换成(-1,1),在DirectX中所有能被摄像机看到的点将会被转换成(0,1)中。为什么要这样做?---为了方便投影到显示屏上!!!

 

6.屏幕空间(Screen Space)

pixelWidth:屏幕横向分辨率

pixelHeight:屏幕纵向分辨率

OpenGL规范:

 

DirectX规范:

这个过程就是一个缩放的过程:

    screenx={clipx*pixelWidth/(2*clipw)}+pixelWidth/2

    screeny={clipy*pixelHeight/(2*clipw)}+pixelHeight/2

上式更加形象的描述:

   第一步: -1<clipx/clipw<1--->这是之前的齐次除法的 

   第二步: 0<{(clipx/clipw)+1}/2<1--->对其加1再除以2化成0到1区间

    第三步:对于pixelWidth:{{(clipx/clipw)+1}/2}*pixelWidth= screenx

                 对于pixelHeight:{{(clipy/clipw)+1}/2}*Height=screeny

和之前推导一样!!!

 

至此你所想要的东西被绘制在了屏幕上!!!

 

 

扩展:

(1)顶点着色器(vertex shader)

    将物体从物体空间->世界空间->观察空间->裁剪空间就是顶点着色器的工作。

    这之中会转换各种点的坐标,我们在哪运算呢?就在顶点着色器中!!!

            顶点着色器:

                    1>将物体空间的数据(点)作为顶点着色器的输入

                    2>将所有在自己范围中的点全部遍历一遍,就是每个点都会算进行加工

                    3>高度可编程配置!!!(这点绝了!!!太棒啦!!!),也就是说这东西绘制成啥样我们可以自定义了!!!

(2)片元着色器(fragment shader)

    将裁剪空间中的点从裁剪空间->屏幕空间就是片元着色器的工作。

        屏幕映射,就是之前说的第六步不是我们做,是显卡固定好了的算法。片元着色器是计算每个像素的颜色的。如果看过相关代码,你会发现片元着色器会返回一个四元数-(r,g,b,a)->分别为(red<红>,green<绿>,blue<蓝>,alpha<透明度>).

什么是片元(fragment)?片元是一种状态,刚开始显示器上的像素点是不知道自己的颜色的,每个像素点就像一个空白的格子等着我们上颜色,类似于还没有装蜂蜜的蜂巢。系统中,我们之所以会看到桌面是因为系统已经给显卡初始化了像素颜色。在任务管理器中能找到。

 

片元着色器:

                    1>将裁减空间的数据(点)作为片元着色器的输入

                    2>将所有在自己范围中的像素全部遍历一遍(三角遍历<Rasterizer>---Triangle Traversal),就是每个片元(像素)都会运算进行加工。

                    3>高度可编程配置!!!(太棒啦!!!)

 

===============================================

 

让我们看看一个简单的栗子!Unity中是怎么做的:

Shader "Test/Shader"
{
	
	SubShader
	{
		Tags { "RenderType"="Opaque" }
		LOD 100

		Pass
		{
			CGPROGRAM
			#pragma vertex vert//告诉编译器 顶点着色器叫什么名字
			#pragma fragment frag//告诉编译器 片元着色器叫什么名字

			#include "UnityCG.cginc"//包含内置文件,方便写代码

			struct appdata
			{
				float4 vertex : POSITION;//物体坐标
			};

			struct v2f
			{
				float4 vertex : SV_POSITION;//裁剪空间坐标
			};

			
			
			v2f vert (appdata v)//顶点着色器,以物体坐标为输入(appdata下的vertex)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);//将物体坐标变换到裁剪空间
				return o;//返回裁剪空间的数据
			}
			
			fixed4 frag (v2f i) : SV_Target//片元着色器,以裁剪空间数据作为输入(上面顶点着色器的输出)
			{	
				fixed4 col = fixed4(1,1,1,1);//定义一个白色
				return col;//返回白色
			}
			ENDCG
		}
	}
}

注意32行:其调用了内置函数:

UnityObjectToClipPos()

其定义如下:(在Unity/Editor/Data/CGInclude/UnityShaderUtilities.cginc)

inline float4 UnityObjectToClipPos(in float3 pos)
{
    // More efficient than computing M*VP matrix product
   return mul(UNITY_MATRIX_VP, mul(unity_ObjectToWorld, float4(pos, 1.0)));
}
inline float4 UnityObjectToClipPos(float4 pos) // overload for float4; avoids "implicit truncation" warning for existing shaders
{
    return UnityObjectToClipPos(pos.xyz);
}

return mul(UNITY_MATRIX_VP, mul(unity_ObjectToWorld, float4(pos, 1.0)))中mul(unity_ObjectToWorld, float4(pos, 1.0))将从物体空间变换到世界空间,unity_ObjectToWorld是物体空间到世界空间的转换矩阵,mul()是矩阵乘法内置函数。之后再乘以UNITY_MATRIX_VP(观察空间和裁剪空间合一起了),乘完后将从世界空间变换到裁剪空间。

完全手动自定义计算的话,这么写:

float4 UnityObjectToClipPos(in float3 pos)
{
	float4 objectSpaceData = float4(pos, 1.0f);
	float4 worldSpaceData = mul(unity_ObjectToWorld, objectSpaceData);
	float4 viewSpaceData = mul(UNITY_MATRIX_V, worldSpaceData);
	float4 clipSpaceData = mul(UNITY_MATRIX_P,viewSpaceData );
	return clipSpaceData;
}

 

 

 

 

 

参考文献:1.《Unity Shader 入门精要》冯乐乐---人民邮电出版社---2017年6月第一版

                 2.《Real-Time Rendering third edition》Tomas Akenine-Moller,Eric Haines,Naty HoffMan

 

图形渲染基础-常用渲染管线介绍 常用渲染管线介绍 阅读详情

相关推荐

学习笔记(一)渲染管线

渲染管线学习笔记

weixin_45055674的博客 2013

计算机图形学笔记(一)渲染管线概述

计算机图形学笔记—渲染管线。

qq_15017307的博客 1万+

Unity自定义渲染管线中实现视差贴图:从原理到实战优化

在实时渲染中,法线贴图是增强表面细节的常用技术,它通过改变像素的法线方向来模拟凹凸感,但其局限性在于无法随视角移动产生真实的遮挡效果。视差贴图技术正是为了弥补这一缺陷而生,其核心原理是利用高度图信息,根据视角方向对纹理坐标进行动态偏移,从而在屏幕空间模拟出几何深度与遮挡关系。这项技术的价值在于能以极低的性能开销,显著提升砖墙、岩石、地砖等静态表面的立体感和真实感,尤其适用于对性能敏感的移动端或WebGL平台。在自定义渲染管线中实现视差贴图,不仅能获得完全的控制权以进行深度优化,还能与自定义光照模型无缝集成。

weixin_30737899的博客 311

计算机图形学 —— 渲染管线概述(自用)

渲染管线(RenderingPipeline),也称为渲染流水线,是计算机图形学中用于生成二维图像以表现三维场景的处理流程。它描述了一系列连续的步骤,这些步骤从原始的三维模型数据出发,经过一系列计算和处理,最终转化成能在屏幕上看到的像素。《Real-TimeRendering,FourthEdition》一书中,定义渲染管线的基本结构包含一下四个阶段:应用阶段几何处理阶段光栅化阶段和像素处理阶段。其中,应用处理阶段主要在CPU上运行,另外三个阶段在GPU上运行。

2401_86977737的博客 1482

CatlikeCoding:一套可生长的Unity工程实践体系

Unity工程实践是游戏与交互应用开发的核心能力,其本质在于理解引擎运行时机制与硬件协同原理。从内存布局、GPU渲染管线到Scriptable Render Pipeline生命周期管理,技术价值体现在性能可控、问题可溯、架构可演进。典型应用场景包括URP/HDRP定制、移动端发热优化、ECS渐进式迁移及Shader编译故障诊断。CatlikeCoding并非线性教程,而是一套锚定真实项目痛点的、支持按需检索与能力映射的知识图谱,尤其擅长通过噪声函数性能拐点、RenderFeature竞态条件、Textur

weixin_29008691的博客 239

Unity Render Pipeline 渲染管线(漫画)

扣来的图,分享。先看下整体大局。没有考虑贴图。 大致这样些过程:  Load====>Draw Call ====>Vertex Shader====>Culling====>Rasterizes====>Pixcl/Fragment Shader====>Z-test====>Blending====>Stencil-test====>Color Mask=

三林博客 8763

Unity自定义渲染管线模板:Bare Bones Scriptable Render Pipeline

Unity自定义渲染管线模板:Bare Bones Scriptable Render Pipeline Unity是一款强大的游戏开发引擎,而自定义渲染管线(Scriptable Render Pipeline,简称SRP)是Unity中一个高度可定制的渲染框架。今天,我们要推荐的开源项目是一个Unity自定义渲染管线的模板——Bare Bones Scriptable Render Pipel...

gitblog_00219的博客 701

Unity高清渲染管线——高清渲染管线配置

unity高清渲染管线学习笔记

2401_84659046的博客 1407

Unity自定义渲染管线(Scriptable Render Pipeline)架构设计与实现指南

全托管渲染控制:通过C#脚本完全掌控渲染流程模块化架构:将渲染流程拆分为可组合的RenderPassGPU友好设计:支持CommandBuffer与Compute Shader混合编程对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀。

voidinit的专栏 1330

基于Ventoy制作单个U盘引导Windows+Linux+黑苹果macOS

一款国内高手开发的一个名为Ventoy的开源多系统启动U盘制作工具,官方链接:https://www.ventoy.net/cn/index.html Ventoy 特点 不影响U盘日常普通使用 直接从ISO文件启动,无需解开 支持MBR和GPT分区格式(1.0.15+) 支持超过4GB的ISO文件 支持大部分常见操作系统, 已测试650+ 个ISO文件 不仅仅是启动,而是完整的安装过程 版本升级时数据不会丢失 Ventoy 待改进 不支持macOS和ChromeOS 准备2个空的U.

wybarcelona的博客 3万+

从工艺文件到寄生分析:手把手教你用华大九天RCExplorer做版图预检(附ITF文件解析)

本文详细介绍了华大九天RCExplorer工具在模拟IC和版图设计中的应用,从工艺文件解析到寄生参数提取的全流程。通过ITF文件的深度解析和实战案例,帮助工程师掌握金属层、介质层及通孔参数的关键影响,提升设计效率与准确性。文章还提供了与StarRC工作流集成的实用技巧,是国产EDA工具应用的权威指南。

weixin_42522552的博客 407

可编程脚本渲染管线SRP

Unity 2018.1 beta中引入的Scriptable Render Pipeline可编程脚本渲染管线,简称SRP。是一种在Unity中通过C#脚本配置和执行渲染的方式。在编写自定义渲染管线之前,必须要先理解渲染管线的含义。本文将帮助你开始学习编写自定义SRP。 本文演示项目,请访问Github下载: https://github.com/stramit/SRPBlog/tre...

weixin_30546933的博客 205

Ad hoc网络路由协议概述4——按需路由协议(2)AODV协议 (Ad-hoc on-demand distance vector algorithm protocol)

AODV协议的基本流程。

weixin_42982240的博客 7705

URP-官网学习记录

URP-后整理 Post-processing 使用的是Volume framework做支持。 效果展示 未加后处理: 加了后处理之后: 可以看到,加了之后,效果更好。特别是光影。没有那种泛白的感觉。当然这只是对于这个电影而言。它只是使用了后处理效果的一部分。 使用步骤 1、先添加Volume组件 2、添加配置文件 1、增加具体的后处理效果 对移动设备友好的效果 Volume作用范围 分为Global与local。 Global模式,对全局生效。 local模式,可以指定范围,且可以指定位置

qq_26489679的博客 4853

TJA1445/TJA1465 CAN收发器硬件设计与软件配置实战指南

控制器局域网(CAN)总线是汽车电子和工业控制领域实现电子控制单元(ECU)间可靠通信的核心技术。其工作原理是将数字信号转换为差分信号进行抗干扰传输,技术价值在于构建稳定、高效的分布式实时控制系统。随着汽车电子架构向域集中式演进,对CAN总线的通信速率、网络复杂度和静态功耗提出了更高要求,这催生了支持CAN FD协议和智能电源管理的新一代高速CAN收发器。在车载网关、域控制器及工业网络节点等应用场景中,NXP的TJA1445和TJA1465系列收发器凭借其部分组网(Partial Networking)和选

weixin_29655587的博客 409

手把手教你用ADS优化肖特基二极管检波电路(附RC参数避坑指南)

本文详细介绍了如何使用ADS软件优化肖特基二极管检波电路,包括RC参数设置、常见失真问题分析与解决方案。通过实战案例和参数优化技巧,帮助射频工程师避免设计陷阱,提升电路性能。特别附有RC参数避坑指南,适用于调幅解调、功率检测等应用场景。

m2n3o4p5的博客 198

外景 陕西窑洞院子室外农村院子大场景

这是一个基于Unity3D开发的陕西窑洞风格3D场景漫游项目,主要面向编程初学者作为入门练习。项目构建了一个蓝白色调的东方庭院开放世界,包含精细建模的石制建筑、山体景观和农具等细节元素,支持WASD+鼠标的第一人称自由探索。采用URP渲染管线实现视觉效果,技术栈涉及Unity2021LTS、C#编程及UGUI等组件,提供Windows/WebGL双平台支持。该项目适合用于文化展示和游戏开发学习参考,所有源码经过调试确保可正常运行。

wjwjwjd的博客 164

STM32F103ZET6【标准库函数开发】------04五个串口配置实战:从零到一构建多串口通信系统

本文详细介绍了STM32F103ZET6标准库函数开发中五个串口(USART/UART)的配置实战,从硬件引脚识别、时钟树配置到多串口系统整合技巧。通过具体代码示例和调试经验,帮助开发者快速构建稳定的多串口通信系统,适用于工业控制、物联网网关等应用场景。

weixin_29188997的博客 344

URP自定义后处理(相机滤镜)

前言 之前做游戏一直想弄个可以实时触发相机滤镜的效果,自处找了教程和资料,想要做到自定义效果的话最好办法是在unity 内部实现,这个办法比较硬核,其实不适合我这样的小白,所以我在实现的过程中非常痛苦,我用的unity URP 模式其实自带后处理隐藏菜单的,这功能可以通过添加Volume组件启用,但是要在底层代码中自己写个脚本,类似在底层接一根线出来。 一、自定义render feature 先从底层接线,自定义render feature,怎么定义呢,先找到你的渲染管线,打开菜单栏edit—proj

真像大白阿的博客 1992

华为昇腾Ascend C中级认证考试-tanh

注册昇腾社区账号后可以免费领券考试。

2600_96284887的博客 471

基于Python的智能动漫更新监控爬虫系统:从原理到实战

本文详细介绍了如何使用Python构建一个智能化的动漫更新监控系统,涵盖从基础爬虫到高级自动化监控的全套解决方案。文章将深入探讨最新的网络爬虫技术,包括异步请求、反反爬策略、智能解析算法等,并提供完整的代码实现和性能优化方案。通过本系统,用户可以实时获取多个动漫平台的更新信息,并通过多种渠道接收通知。关键词:Python爬虫、动漫监控、自动化通知、异步爬虫、反反爬策略。

2201_76125261的博客 902

Unity URP渲染管线(Universal Render Pipeline)

渲染管线是一系列渲染操作的集合,在传统渲染管线一文中我简单介绍了渲染管线中的通用概念,本文将对Unity的通用渲染管线(Universal Render Pipeline, URP)进行介绍。Unity提供了内置渲染管线(Built-In)和可编程渲染管线(SRP)两类渲染管线。内置渲染管线是Unity的默认渲染管线,其自定义选项有限。而可编程渲染管线可以通过脚本代码定制化管线,允许用户更多地控制渲染流程。

weixin_43850240的博客 4473

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Render Pipeline渲染管线概述

渲染(Render)定义 渲染在电脑绘图中是指软件从模型生成图像的过程,通俗讲就是在计算机里面给虚拟世界"拍照"。渲染主要分为两种,一种是预渲染(pre-rendering),它的计算强度很大,通常用于电影制作;另一种是实时渲染(real-time rendering),多用于三维游戏,并且依靠显卡完成渲染过程. 渲染管线 渲染是一个非常复杂的过程,它需要从一系列的顶点、纹理等信息出发,把这些信息最终转换成一张人眼可以看到的图像,在这个过程中,通常是需要CPU和GPU密切配合,渲染管线具体的实现细节会

Peter的博客 3026

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

unity默认渲染管线切换到URP渲染管线并切换材质

unity渲染管线URP

樽酒的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

自定义渲染管线 Custom Render Pipeline

翻译:Render a camera's view 渲染一个相机视图执行 Perform culling, filtering, and sortingSeparate opaque, transparent, and invalid passes 分离不透明、透明及无效渲染通道Work with more than one camera 支持多相机协作渲染本教程是关于创建的系列教程的第一部分。

jiuzhouhi的专栏 895

Scriptable Render Pipeline 可编程渲染管线

Scriptable Render Pipeline 可编程渲染管线 概述 可以使用c#脚本定制渲染管线 内置渲染和SRP不兼容 shader不共用,因为shader lib不同 Pre-built SRPs 概述 HDRP,LWRP 可以和Shader Graph、Post-processing一起使用 HDRP和LWRP不兼容,并且同时和built-in Render Pi...

TDC的专栏 1150
上一篇: OpenGL+VS2017 环境配置(亲测好使)::附带必要知识点
下一篇: OpenGL---三角形(附带必要基础知识)
FuXiii
博客等级 码龄9年 89粉丝 21原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值