Unity 自定义天空盒,如 Unity 天空盒

     2023-02-25     238

关键词:

【中文标题】Unity 自定义天空盒,如 Unity 天空盒【英文标题】:Unity custom skybox like Unity skybox 【发布时间】:2017-09-13 18:29:23 【问题描述】:

我正在尝试为 360 图像做一个自定义天空盒,它有 2 个带有淡入淡出的纹理,我需要它来响应旋转值,如 Unity Skybox。我只需要相同的滑块,但我没有任何运气,我对着色器完全陌生。

这是我到现在为止的代码

Shader "Custom/fundido"

   Properties 

     _Blend ("Blend", Range (0, 1) ) = 0.0
     _Rotation ("Rotation", Range(0, 360)) = 0
     _BaseTexture ("Cubemap (HDR)", Cube) = "grey" 
     _OverlayTexture ("Cubemap2 (HDR)", Cube) = "grey" 

 

SubShader 

 Tags  "Queue"="Background" "RenderType"="Background" 
"PreviewType"="Skybox" 

Pass 

         SetTexture[_BaseTexture]
         SetTexture[_OverlayTexture] 
         ConstantColor (0,0,0, [_Blend]) 
         combine texture Lerp(constant) previous
         
     
 
 

_Blend 非常适合交叉淡入淡出,我只需要添加 Rotation 监听器。

非常感谢!!!

【问题讨论】:

看看这个链接:forum.unity.com/threads/rotate-a-skybox.130639,但不是通过脚本更改旋转,而是使用滑块_Rotation 属性进行更改。 你好东姑!谢谢你这么快。我尝试了那个帖子,两个相机的技巧做了一些修改,但是当我将陀螺仪控制连接到主相机时,给了我一些奇怪的轴运动。正如您所说,最好的方法是使用我的滑块,但它没有连接到任何东西,因为我不知道如何将它附加到着色器。这就是我想要做的,将我的滑块添加到我为交叉淡入淡出所拥有的着色器中。谢谢:) 嗨,我刚到家。我设法创建了着色器,它对我有用,经过一些清理后,我会给你一个答案。 【参考方案1】:

这里是着色器。您可以通过脚本改变一天的周期。 https://docs.unity3d.com/ScriptReference/Material.SetFloat.html

Shader "TFTM/Skybox2CubeBlend" 
Properties 
    _Blend ("Blend", Range (0, 1) ) = 0.0
    _Rotation ("Rotation", Range(0, 360)) = 0
    _Tex ("Cubemap   (HDR)", Cube) = "grey" 
    _OverlayTex ("CubemapOverlay (HDR)", Cube) = "grey" 


SubShader 
    Tags  "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" 
    Cull Off ZWrite Off

    Pass 

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma target 2.0

        #include "UnityCG.cginc"

        samplerCUBE _Tex;
        samplerCUBE _OverlayTex;
        half4 _Tex_HDR;
        half4 _Tint;
        half _Exposure;
        float _Rotation;
        float _Blend;

        float3 RotateAroundYInDegrees (float3 vertex, float degrees)
        
            float alpha = degrees * UNITY_PI / 180.0;
            float sina, cosa;
            sincos(alpha, sina, cosa);
            float2x2 m = float2x2(cosa, -sina, sina, cosa);
            return float3(mul(m, vertex.xz), vertex.y).xzy;
        

        struct appdata_t 
            float4 vertex : POSITION;
        ;

        struct v2f 
            float4 vertex : SV_POSITION;
            float3 texcoord : TEXCOORD0;
        ;

        v2f vert (appdata_t v)
        
            v2f o;
            float3 rotated = RotateAroundYInDegrees(v.vertex, _Rotation);
            o.vertex = UnityObjectToClipPos(rotated);
            o.texcoord = v.vertex.xyz;
            return o;
        

        fixed4 frag (v2f i) : SV_Target
        
            half4 tex = texCUBE (_Tex, i.texcoord);
            half4 tex2 = texCUBE (_OverlayTex, i.texcoord);
            float4 env = lerp( tex, tex2, _Blend );

            half3 c = DecodeHDR (env, _Tex_HDR);

            return half4(c, 1);
        
        ENDCG 
    
   
Fallback Off


【讨论】:

哇!太棒了,非常感谢!你知道开始学习着色器的好文档吗?我想了解他们以应对未来的问题。真的再次感谢:D 我个人非常喜欢 Alan Zucconi 着色器书。 alanzucconi.com/books 谢谢东姑希望我能报答。 :D 当然,看看我的 github,我创建的着色器很少。可能对你有帮助。 github.com/TengkuFathullah ,您可以将答案投票为有用的,因此它会在顶部列表中。如果您需要更多好的参考,请给我留言。

unity中怎样设置动态天空盒,让天空盒上的云动起来

参考技术A可以使用UniSky插件,百度UniSky入门资料。UniSky可以用代码控制天空盒随游戏时间的变化而变化,设定太阳的颜色等。本回答被提问者采纳 查看详情

unity切换天空盒地面倒影

参考技术Amskybox写一个程序性的天空盒子切换天空盒。地面倒影可以用vray平面或者做个带斜面的反光板,这样效果很好,地面材质要有折射在有倒影的物体上面增加反射效果。 查看详情

unity5.6.2删除或更换天空盒

点击菜单栏Window-->Lighting-->Settings在弹出的窗口中,设置SkyboxMaterial选项,从原来的默认天空盒更换成别的,或者选择None来删除天空盒。 默认的天空盒会影响到场景中的灯光效果。  查看详情

Unity - 从阵列中获取随机天空盒

】Unity-从阵列中获取随机天空盒【英文标题】:Unity-GetrandomSkyboxoutofarray【发布时间】:2016-03-0618:24:51【问题描述】:对于学校任务,我必须制作一个基本的视频游戏。我正在尝试制作太空游戏的基本版本。我想要一个包含多个... 查看详情

unity实战项目☀️|unity实现天空盒轮播系列切换(代码片段)

...面简单写过两篇文章介绍了怎样在Unity中和在代码中切换天空盒切换天空盒还是非常简单的那这篇文章就写了一个简单的实例做一个稍微花哨一点的天空盒切换实例!🍉天空盒点击轮播切换先来看一下实现的一个效果ÿ... 查看详情

关于unity中天空盒的使用

天空盒是一个盒子,一个正方形的盒子。其实本身也是一种shader,需要材质球做载体。1:一个场景是由6幅正方形的纹理图无缝拼接而成,在视野看来位于真实的视野一样;2:两种天空盒:  场景天空盒Window->Lighting->Scene->Skybox... 查看详情

unity2019hdrp管线制作天空盒

参考技术Ahttps://www.pianshen.com/article/99051551622/这里修改为原图片(可以是原来的盒子状6面贴图平铺)先导入profile然后在右边直接设置cube之后apply。 查看详情

unity3d旋转天空盒的方法

天空盒是不能旋转的,但我们可以旋转摄像机来达到天空盒的旋转效果。实现方法如下:1)我们创建一个摄像机名为SkyboxCamera2)主摄像机MainCamera的ClearFlags设置为Don'tClear3)SkyboxCamera的CullingMask设置为Nothing,然后Depth一定要... 查看详情

unity中控制天空盒移动的解决办法(代码片段)

为了使天空盒更真实,需要控制天空盒动态旋转。网上找到的方法是:floatnum=RenderSettings.skybox.GetFloat("_Rotation");RenderSettings.skybox.SetFloat("_Rotation",num+0.05f);但在我的工程中会报错(我的unity版本5.5.5f1):我的天空盒是Cubemap型的,挂... 查看详情

unity3d旋转天空盒的方法

天空盒是不能旋转的,但我们可以旋转摄像机来达到天空盒的旋转效果。实现方法如下:1)我们创建一个摄像机名为SkyboxCamera2)主摄像机MainCamera的ClearFlags设置为Don'tClear3)SkyboxCamera的CullingMask设置为Nothing,然后Depth一定要... 查看详情

2022-02-15u3d全栈班007-制作设置天空盒资源

文章目录前言一、制作设置天空盒资源1.下载资源2.创建材质3.Material赋值贴图4.渲染场景5.渲染组件6.渲染组件总结前言在使用Unity开发游戏的时候,设置天空盒肯定是必不可少的。如果使用3D建模,建出天空盒放在场景中会比较麻... 查看详情

unity自定义untiy天空

3、需求:更改默认天空盒,360°显示所需的内容。实施:准备材料:一张8K图(更清晰)步骤:1、更改Camera为天空盒;2、制作图片,怎么制作不说了,分辨率8192*4096(可以自己决定哦... 查看详情

怎么使用深空盒子材质

Unity中,天空盒是使用天空盒着色器的一种材质。有关可用的天空盒着色器的信息,请参阅天空盒着色器。渲染管线兼容性内置渲染管线和通用渲染管线(URP)都专门使用天空盒来渲染天空。这些天空盒是使用天空盒着色器的材质... 查看详情

unity相机

...像机来绘制不同游戏元素时,这会很方便。 *Skybox:天空盒(默认项)。在屏幕空白处显示当前摄像机的天空盒,如果没有指定天空盒,则会显示默认背景色。*SolidColor:空白处将显示默认此处设置的背景色。*Depthonly:仅深度,... 查看详情

unity怎么不让天空盒子的太阳反射到地面太难看

参考技术A/.点出来看吧.skybox=sky01;天空盒的材质RenderSettings;publicMaterialsky01;把天空盒换成这个材质其余的东西就用;本回答被提问者采纳 查看详情

unity3d灵巧小知识点☀️|unity中使用代码切换天空盒(代码片段)

Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解... 查看详情

unity3d灵巧小知识点☀️|unity中怎样切换天空盒背景(代码片段)

Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解... 查看详情

unity3d怎么在脚本里面更改天空盒

参考技术A我们先来讲一下,怎么样自制一个天空盒吧,其实很简单,先创建一个material,取好名字,然后更改属性为Skybox/6Sided,并且把六个面的图片都选好,如下图:注意图片在太空盒的位置啊~~天空盒就这样做好了,那么修改... 查看详情