轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)

这篇具有很好参考价值的文章主要介绍了轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当前示例源码github地址:

https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MultiMaterialPass.ts

此示例渲染系统实现的特性:

1. 用户态与系统态隔离。

         细节请见:引擎系统设计思路 - 用户态与系统态隔离-CSDN博客

2. 高频调用与低频调用隔离。

3. 面向用户的易用性封装。

4. 渲染数据和渲染机制分离。

5. 用户操作和渲染系统调度并行机制。

当前示例运行效果:

轻量封装WebGPU渲染系统示例<7>-材质多pass(源码),GPU/CPU,WebGL/WebGPU,WebGPU,3d

此示例基于此渲染系统实现,当前示例TypeScript源码如下文章来源地址https://www.toymoban.com/news/detail-714610.html

export class MultiMaterialPass {

	private mEntity: Entity3D;

	geomData = new GeomDataBuilder();
	renderer = new WGRenderer();

	initialize(): void {
		console.log("MultiMaterialPass::initialize() ...");

		const shdSrc = {
			vert: { code: vertWGSL },
			frag: { code: fragWGSL }
		};
		const tds = [new WGImage2DTextureData("static/assets/blueTransparent.png")];
		let material0 = this.createMaterial(shdSrc, tds, ["transparent"], "front");
		let material1 = this.createMaterial(shdSrc, tds, ["transparent"], "back");
		this.mEntity = this.createEntity([material0, material1]);
	}

	private createMaterial(shaderCodeSrc: WGRShderSrcType, texDatas?: WGImage2DTextureData[], blendModes: string[] = [], faceCullMode = "back"): WGMaterial {
		let pipelineDefParam = {
			depthWriteEnabled: true,
			faceCullMode: faceCullMode,
			blendModes: [] as string[]
		};

		pipelineDefParam.blendModes = blendModes;

		const texTotal = texDatas ? texDatas.length : 0;

		const material = new WGMaterial({
			shadinguuid: "base-material-tex" + texTotal + faceCullMode,
			shaderCodeSrc,
			pipelineDefParam
		});
		material.addTextureWithDatas(texDatas);
		return material;
	}
	private createEntity(materials: WGMaterial[]): Entity3D {
		const renderer = this.renderer;

		const rgd = this.geomData.createSphere(150, 30, 30);
		const geometry = new WGGeometry()
			.addAttribute({ position: rgd.vs })
			.addAttribute({ uv: rgd.uvs })
			.setIndices( rgd.ivs );

		const entity = new Entity3D({geometry, materials});
		renderer.addEntity( entity );
		return entity;
	}
	private mRotY = 0.0;
	run(): void {

		this.mRotY += 0.5;
		this.mEntity.transform.setRotationXYZ(0, this.mRotY, this.mRotY + 0.5);
		this.mEntity.update();

		this.renderer.run();
	}
}

到了这里,关于轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用WebGPU实现基于物理的渲染

    推荐:用 NSDT编辑器 快速搭建可编程3D场景 最近,我花了相当多的时间在 WebGPU 中使用 IBL(基于图像的照明)编写 PBR(基于物理的渲染)渲染器。 PBR 本身并没有什么新奇之处。 这是一项自 2014 年以来就存在的技术,所有现代图形引擎都使用它。 但我还没有看到任何在 Web

    2024年02月10日
    浏览(56)
  • GEngine一个基于WebGPU的渲染引擎

    一、废话篇: 2019年时候就有写一个渲染引擎想法,一直到现在才真正意义上算给实现了当初的想法,写了好几个月了和小伙伴这才有个初版(虽然里面还有一堆bug哈,没时间改啊)。说在前面GEngine借鉴了其他渲染引擎思路与代码(毕竟要站在巨人肩膀上,别在那说你就是抄

    2024年02月08日
    浏览(60)
  • UE5中双pass解决半透明材质乱序问题

    透明度材质乱序问题一直是半透明效果时遇到的比较多的问题,用多pass方案只能说一定程度上解决,当遇到多半透明物体穿插等情况时,仍然不能完美解决。 双pass方案Unity用的比较多,因为Unity支持多个pass绘制。在UE中我们可以以复制多个物体赋予不同材质球的方式模拟多

    2024年02月07日
    浏览(51)
  • 毛发渲染(一)--基于多pass透明混合

    作者最近有些忙哈哈哈,连这篇文章还在年前拖到了年后才更新完成!这里只简单比较叙述多pass的基本原理,与毛发各种的渲染模拟的比较等等,后续会更详细描述毛发相关的渲染~ 毛发渲染一直是实时图形学的难题,因为其光照复杂,数量众多,物理效果不好抽象等。所以

    2024年02月06日
    浏览(31)
  • 【Unity】材质设置1双面材质2HDRP材质转换3烘焙渲染

    一 双面材质问题 在Unity使用中,我们发现材质在物体上是单面的,换一个方向就看不到了,针对这个问题做个备注: 普通三维场景 首先将选中物体,找到对应的材质,然后将Shader组件的渲染模式改成【Particles】-【Standard Surface】,接着勾选上【Two Sided】属性就OK了 HDRP场景 在HDRP场景

    2024年02月12日
    浏览(42)
  • 实时渲染 -- 材质(Materials)

    首先了解下自然界中的材质 如上这幅图,不同的物体、场景、组合,会让我们看到不同的效果。 我们通常认为物体由其表面定义,表面是物体和其他物体或周围介质之间的边界面。但是物体内部的材质也会影响光照效果。我们目前只考虑两种不同介质间的边界面,并假定光

    2024年04月10日
    浏览(33)
  • 材质合批,提高模型渲染效率

      模型材质合批是一种技术手段,主要用于优化渲染性能和提高图形应用程序的帧率。它通过将多个模型的材质进行合并,从而减少渲染时的绘制调用次数。   在计算机图形学中,每个模型都有一个或多个材质,这些材质定义了模型表面的外观特性,例如纹理、颜色、光

    2024年02月07日
    浏览(39)
  • 普通管线的材质球在URP渲染管线中出现的材质丢失问题

    导入模型时发现材质球材质丢失 原因:应该是不同的渲染管线所支持的shader不一样,原shader不支持URP 解决方法:新建URP管线的普通材质球,把贴图和法线贴图放上去调一下属性再重新复制 结果:

    2024年02月15日
    浏览(43)
  • CAD绘制法兰、添加光源、材质并渲染

    首先绘制两个圆柱体,相互嵌套 在顶部继续绘制圆柱体,这是之后要挖掉的部分   在中央位置绘制正方形 用圆角工具:  将矩形的四个角分别处理,效果: 用拉伸工具    向上拉伸到和之前绘制的圆柱体高度齐平 绘制一个圆柱体,位置在四个角的任一中心  用阵列排布到

    2024年02月13日
    浏览(89)
  • Vray渲染效果图材质参数设置

    渲染是创造出引人入胜视觉效果的关键步骤,在视觉艺术领域尤为重要。不过,渲染作为一个资源密集型的过程,每当面对它时,我们往往都会遭遇到时间消耗和资源利用的巨大挑战。幸运的是,有几种方法能够帮助我们优化渲染,使之既高效又经济。例如,通过掌握一些渲

    2024年01月20日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包