Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院

Vertex and Fragment Shader例子二,制作一个自动旋转的3D地球。

下载美丽的地球工程

原理是 2张贴图,一张地球图,一张云层分布图
(1)通过uv.x即纹理坐标的横轴与时间相乘,产生球在移动的效果

(2)通过地球和云的颜色值叠加形成 层叠 的效果。

注意:贴图的‘Wrap Mode‘属性一定要设置成Repeat
                              关于Wrap Mode
当Wrap Mode为Clamp:意思是纹理xy轴的值即uv都被限制在[0,1]的范围内,以横轴u为例如下图,左右两侧不相连。

当Wrap Mode为Repeat:大意是你可以这么想象,一张地球图是一块瓷砖,当Wrap Mode为Repeat后,整个纹理铺满了N行 x N列的瓷砖,这个N可以理解为无限大。以u为例,如下图。好处是本来在clamp模式中,贴图的两侧即u为0和u为1的地方是连不上的。现在图的左右两侧连上了。纵向v也是一样。这个技术主要运用是当纹理为砖式纹理(Tiled Texture),即左右和上下的纹路都是相接的时候,很小的一块纹理贴图能渲染出一大片区域。例如一大片草地等等。

附:Shader代码

Shader "Custom/2lsy_earth" {
    Properties {
        _MainTex ("Texture", 2D) = "white" { }
        _Cloud ("_Cloud", 2D) = "white" { }
    }
    SubShader {
        Tags{"Queue" = "Transparent" "RenderType"="Transparent"}
        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            float4 _Color;
            sampler2D _MainTex;
            sampler2D _Cloud;

            struct v2f {
                float4  pos : SV_POSITION;
                float2  uv : TEXCOORD0;
            } ;

            float4 _MainTex_ST;
            v2f vert (appdata_base v)
            {
               //和之前一样
                v2f o;
                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
                return o;
            }

            half4 frag (v2f i) : COLOR
            {
                 //地球的贴图uv, x即横向在动
                float u_x = i.uv.x + -0.1*_Time;
                float2 uv_earth=float2( u_x , i.uv.y);
                half4 texcolor_earth = tex2D (_MainTex, uv_earth);

                 //云层的贴图uv的x也在动,但是动的更快一些
                float2 uv_cloud;
                u_x = i.uv.x + -0.2*_Time;
                uv_cloud=float2( u_x , i.uv.y);
                half4 tex_cloudDepth = tex2D (_Cloud, uv_cloud);
                //纯白 x 深度值= 该点的云颜色
                half4 texcolor_cloud = float4(1,1,1,0) * (tex_cloudDepth.x);
                //地球云彩颜色混合
                return lerp(texcolor_earth,texcolor_cloud,0.5f);
            }
            ENDCG
        }
    }
}

  

搞定收工,赶快看看效果吧,是不是很棒呢?

时间: 2024-09-29 04:59:45

Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球的相关文章

Unity3D教程宝典之Shader篇:第二讲Fixed Function Shader

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 Fixed function shader简介:  属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的情况.使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似. 例一:显示单一颜色下面我们来看第一个例子,显示单一颜色,注释写得挺详细了,照着格式写即可. //根Shader Shader "Custom/1_1color" { // 属性 Propertie

Unity3D教程宝典之Shader篇:第一讲Shader总篇

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言,在Unity3d里,所有的图形绘制都必须通过Shader,即着色器.一般的使用过程中,我们用到的都是unity自带的Shader,即build-in shader.学习Shader后,自己写的Shader能做出很多你想要的特殊效果,增强游戏的画面表现.例如 水的倒影. LOGO的光影闪过等等效果等等. Shader的分类 Shader按管线分类一般分为固定渲染管线与可编程渲染管线 1)固定渲染管线 ——这是标准的几何&光照(Tra

Unity3D教程宝典之Shader篇:第九讲Render Path

转载自风宇冲Unity3D教程学院 Render Path定义Render Path,就是采取的光照流程. Render Path设置可以在Edit-> Project Settings->Player 里设定,见下图.也可以直接在摄像机的Inspector面板里设置. Render Path详细讲解                                    一:Vertex LitVertex Lit即顶点光照,顾名思义, 就是所有的光照计算都是在顶点进行的,因此所有的像素运算效

Unity3D教程宝典之Shader篇:基础讲 基础知识

转载自风宇冲Unity3D教程学院 以下内容不需要入门的时候立刻阅读和理解,建议逐渐深入学习后,不时回来看看即可. 什么是GPU? GPU:Graphic Processing Unit,中文翻译为“图形处理器”.显卡包括(GPU,显存,显卡BIOS,显卡PCB板). 什么是Shader? Shader程序:GPU执行的,针对3D对象进行操作的程序. Shader有哪几种? CG:与DirectX 9.0以上以及OpenGL 完全兼容.运行时或事先编译成GPU汇编代码. HLSL: 主要用于Di

Unity3D教程宝典之Shader篇:特别讲 CG函数

转载自风宇冲Unity3D教程学院 特别讲:CG函数 本讲不需立刻看完,遇到相关函数时来查阅即可.(本文截图来源:Cg教程_可编程实时图形权威指南) E.1  数学函数 E.2 几何函数 E.3 纹理贴图函数 E.4 导数函数 E.5 调试函数 E.1  数学函数 E.2 几何函数 E.3 纹理贴图函数 E.4 导数函数 E.5 调试函数

Unity3D教程宝典之Shader篇:特别讲 常见问题解答

转载自风宇冲Unity3D教程学院 本讲会陆续补充一些问题的解答. 问: (1) TRANSFORM_TEX是做什么的 (2)float4 _MainTex_ST 中的_MainTex_ST变量也没有用到,为啥非要声明一下? 答: (1)简单来说,TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的tiling和offset作运算, 确保材质球里的缩放和偏移设置是正确的. (v.texcoord就是顶点的uv) 下面这两个函数是等价的. o.uv =   TRANSFORM_TEX(v.

Unity3D教程宝典之Shader篇

教程目录 基础讲:Shader学习方法基础讲:基础知识特别讲:常见问题解答特别讲:CG函数 第一讲: Shader总篇第二讲: Fixed Function Shader 第三讲: Vertex&Fragment Shader基础 第四讲: 制作一个美丽的地球第五讲:LOGO闪光效果 第六讲:TexGen第七讲:流程图第八讲:Why CG?第九讲:Render Path第十讲:雾化第十一讲:阴影面剔除及深度测试第十二讲:alpha测试第十三讲:alpha混合第十四讲:Surface Shader

Unity3D教程宝典之Shader篇:第十四讲Surface Shader

转载自风宇冲Unity3D教程学院 用Shader来实现光照是比较复杂的,有不同的光类型,不同的阴影选项,不同的Render Path(forward和Deferred). Unity只是把光照模型封装处理了,Shader的代码还是用CG/HLSL编写的. 例一:最简单的Surface Shader Shader "Custom/T_3_0" { Properties { _MainTex ("Base (RGB)", 2D) = "white"

Unity3D教程宝典之Shader篇:第二十四讲Reflection Mapping

转载自风宇冲Unity3D教程学院 简介 Reflection Mapping,又叫Environment Mapping.对应TexGen的SphereMap和CubeReflect.是最快的reflect周围环境的算法 最早出现的是Sphere Mapping,之后被Cube Mapping取代.Reflection Mapping比射线追踪(Ray Tracing)高效得多 Reflection Mapping的前提是2个假设 (1)入射线来自无限距离 (2)物体是凸的,没有自身的相互反射