Unity云图渲染效果

这篇具有很好参考价值的文章主要介绍了Unity云图渲染效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

根据有限元分析后处理结果(应力等),将云图效果在Unity中复现同样的效果

需要准备的数据

从有限元分析软件(Abaqus、Ansys等)将模型结点数据进行导出

实现原理

Step1 通过C#根据结点(相当于模型顶点)数据大小将数据转化由红到蓝颜色区间的颜色(采用HSV色彩模型以便于获取纯色彩),获得一个模型顶点的Color数组;
Step2 将颜色传入着色器进行处理(AppToVert、VertToFrag),并通过纹理映射的方式从纹理贴图中获取相应的颜色值。

代码展示

1、C#代码。

public class CloudMapRendering
{
    public static Color[] CalculateModelVerticeColors(float[] physicsDatas)
    {
        colorDatas = new Color[physicsDatas.Length];
        float[] hueColorH = new float[physicsDatas.Length];
        float max = physicsDatas.GetMax();
        //当有限元网格结点值全为0时,颜色全为蓝
        if (max == 0)
        {
            for (int i = 0; i < physicsDatas.Length; i++)
            {
                colorDatas[i] = Color.blue;
            }
            return;
        }
        float min = physicsDatas.GetMin();
        float range = max - min;
        for (int i = 0; i < physicsDatas.Length; i++)
        {
            hueColorH[i] = 2.0f / 3 * (max - physicsDatas[i]) / range;
            colorDatas[i] = Color.HSVToRGB(hueColorH[i], 1, 1);
        }
        return colorDatas;
    }
}
public static class ArrayExtension
{
    public static float GetMax(this float[] vs)
    {
        float max = 0;
        for (int i = 0; i < vs.Length; i++)
        {
            if (vs[i] > max)
            {
                max = vs[i];
            }
        }
        return max;
    }
    public static float GetMin(this float[] vs)
    {
        float min = 0;
        for (int i = 0; i < vs.Length; i++)
        {
            if (vs[i] < min)
            {
                min = vs[i];
            }
        }
        return min;
    }
}

新建一个C#脚本挂在渲染模型上,调用上面的CalculateModelVerticeColors方法,并通过MeshFilter中的colors属性将计算值赋给colors属性。

2、着色器部分。

Shader "Custom/testCloudMapWireframeShader"
{
    Properties
    {
		_Texture("Main Tex",2D) = ""{}
	}
    SubShader
    {
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			struct a2v {
				float4 vertex:POSITION;
				fixed4 color : COLOR;
				float4 texcoord:TEXCOORD0;
			};

			struct v2f {
				float4 position:SV_POSITION;
				float3 color:COLOR0;
				float4 uv:TEXCOORD1;
			};

			sampler2D _Texture;
			float4 _UVposition;
			//由于着色器用RGB进行计算,因此先转换为HSV
			float3 RGB2HSV(float3 c)
			{
				float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
				float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g));
				float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r));

				float d = q.x - min(q.w, q.y);
				float e = 1.0e-10;
				return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
			}
			//根据HSV颜色值映射到对应的纹理坐标进行纹理采样
			float3 ColorConvert(float3 originalHSVc)
			{
				return tex2D(_Texture, (1,(1 - originalHSVc.x) * 3) * step(2.0 / 3.0, originalHSVc.x) + (1,originalHSVc.x * 3 / 2) * step(originalHSVc.x, 2.0 / 3.0));
			}
			v2f vert(a2v v)
			{
				v2f f;
				f.position = UnityObjectToClipPos(v.vertex);
				f.color = v.color;
				f.uv = v.texcoord;
				return f;
			}

			fixed4 frag(v2f f) :SV_Target
			{
				float3 convertedColor = RGB2HSV(f.color);
				f.color = ColorConvert(convertedColor);
				return fixed4(f.color,1);
			}
			ENDCG
		}
		}
    FallBack "Diffuse"
}

纹理贴图

一张常见的颜色梯度图(左红右蓝)
unity生成应力云图,unity,c#,游戏引擎

后记

笔者第一次写文章,有很多地方都没有表述清楚,大家有问题或者意见也欢迎评论。文章来源地址https://www.toymoban.com/news/detail-708640.html

到了这里,关于Unity云图渲染效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(79)
  • Unity 引擎做残影效果——1、BakeMesh

    Unity实现残影效果   大家好,我是阿赵。   这次来分享一下在Unity里面做残影的效果。   所谓的残影,就是在角色移动的过程中,留下一串残留的影子。   这种效果比较常出现在格斗游戏和动作游戏。   在Unity里面做残影,方法很多。我这里将会介绍三种方法:

    2024年02月06日
    浏览(40)
  • Unity 引擎做残影效果——3、顶点偏移方式

    Unity实现残影效果   大家好,我是阿赵。   继续讲Unity引擎的残影做法。这次的残影效果和之前两种不太一样,是通过顶点偏移来实现的。   具体的效果是这样:   与其说是残影,这种效果更像是移动速度很快时造成的速度线,所以在移动过程中的效果还是非常好

    2024年02月14日
    浏览(34)
  • Unity 引擎做残影效果——2、屏幕后处理方式

    Unity实现残影效果   大家好,我是阿赵。   这里继续介绍Unity里面做残影的方法。之前介绍了BakeMesh的方法做残影,这一期介绍的是用屏幕后处理的方法做残影。   之前的BakeMesh方法,是真的生成了很多个网格模型在场景里面。如果用后处理做,就没有这个过程。   

    2024年01月17日
    浏览(44)
  • Unity-3DRPG游戏 学习笔记(1)--使用URP渲染管线

    教程地址: Unity2020 3DRPG游戏开发教程|Core核心功能01:Create Project 创建项目导入素材|Unity中文课堂_哔哩哔哩_bilibili 创建URP通用渲染管线(2021版本) 1. 打开:Windows--Package Manager--左上角下拉选择Unity Registry--搜索Universal RP--Install 2. Project窗口--Assets--右键Create--Rendering--URP Asstes

    2024年02月11日
    浏览(46)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(80)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(68)
  • unity 2D中,实现点击按钮可以游戏暂停的效果

    在Unity 2D中,可以通过以下步骤和代码来设置一个按钮,实现游戏暂停的效果: 创建一个空对象,命名为\\\"GameManager\\\",用于管理游戏状态。 在GameManager对象上添加一个脚本,命名为\\\"PauseManager\\\"。 在脚本中添加以下代码: 在场景中创建一个Canvas对象,用于放置按钮。 在Canvas下创

    2024年02月03日
    浏览(54)
  • unity制作游戏,点击鼠标左键,展示屏幕震动效果

    在Unity中实现点击鼠标左键展示屏幕震动效果可以通过以下步骤进行: 创建一个新的C#脚本,例如\\\"ScreenShake.cs\\\",并将其附加到想要添加屏幕震动效果的游戏对象上。 在脚本中定义一个变量来控制震动的幅度,例如 public float shakeAmount = 0.1f; 。 在Update函数中检测鼠标左键点击事

    2024年02月12日
    浏览(43)
  • 如何通过代码在Unity设置URP通用渲染管线资源的画质选项、后处理效果、渲染分辨率、抗锯齿效果、Renderer Features等效果并制作一个可以设置它们的UI

       Hello喔 这里是没有鱼的猫先生,本期文章的主题佬们有看到标题了 QWQ    当使用Urp管道项目时,我们需要在一个Urp通用管线资源的项目中修改它的各种效果以玩家自己设置不同的画质需求,那下面这个通用脚本便诞生了,它也许并不适用于所有的场景,但是相信应用过它

    2024年02月09日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包