当前位置: 首页 > article >正文

Unity图形学之Shader灯光的设置

1.可编程区域:顶点着色器和片段着色器,三大测试只是开关的打开和关闭
顶点着色器:
1.计算顶点的颜色--并行计算  如果是四个顶点就并行运算四次,
如果是100*100的屏幕到了片段着色器就是100*100次
2.将物体坐标系  转换到  相机坐标系

光栅化:将顶点 转换成像素 从点到面的变换  将顶点的信息做插值运算
片段着色器:
1.已经是像素点----一个像素通常是由RGBA 四个通道组成 RGBA 8888 每个通道占8bit  Float[720*1280] RGBA每个8bit 一共32位 刚好是一个Float


2.顶点着色器和片段着色器 运算次数 不是一个量级
所以能把 运算 放在 顶点着色器就放这里,不要放片段着色器


3.纹理采样:从纹理像素 赋给 像素 从图片里面获取的像素点覆盖了顶点着色器计算的颜色像素点


4.像素和灯光进行计算:

alpha测试:挑选合格的 alpha 像素显示
模板测试:像素还可以携带模板 信息 Gbuffer。到达条件的模板值 才显示
深度测试:符合条件的像素 就通过,不然就丢弃
Blend:将当前要渲染的像素 和 已经渲染出来的像素 混合运算
Gbuffer:通常测试的像素暂存RGBA 模板值 深度值等信息--中转缓存  Float[720*1280*4] 相当于数组
FrontBuffer:Gbuffer通过后传递过来写入FrontBuffer  Float[720*1280]
FrameBuffer:Float[720*1280] FrontBuffer和FrameBuffer交替显示,FrontBuffer写完就变成FrameBuffer
显示器
2.顶点着色器相关内容:
3.Shader1.0 最简结构:
Shader "Custom/TestVertex"
{
    Properties
    {
        
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
       
    }
    SubShader
    {
        Pass {
            
        }
    }
    FallBack "Diffuse"
}

4.顶点着色器:
1.计算顶点的颜色
2.顶点变换(在shader1.0中是固定的,没法变换)
3.灯光的作用
(1)计算顶点颜色:
Shader "Custom/TestVertex"
{
    Properties
    {
        
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
       
        _TestColor("TestColor",Color) = (0,1,1,0)
    }
    SubShader
    {
        Pass {
            //Color关键词做颜色变换,因为后面片段着色器没有做任何事,而且也没有做纹理的操作,所以顶点着色器计算出是什么颜色,它就显示什么颜色
            Color(1,0,0,1)
            Color(0,1,0,1)
            //使用变量用中括号
            Color[_TestColor]
        }
    }
    FallBack "Diffuse"
}

Unity - Manual: ShaderLab: Legacy Lighting
(2)调节灯光的颜色:灯光变换公式
Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse +  Light Color * Specular) + Emission

Ambient 环境光
Diffuse 漫反射光
Specular 镜面反射
Emission 自发光
Light Color 场景中灯光的颜色
Shader "Custom/TestVertex"
{
    Properties
    {
        
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
       
        _TestColor("TestColor",Color) = (0,1,1,0)
    }
    SubShader
    {
        Pass {
            //Color关键词做颜色变换,因为后面片段着色器没有做任何事,而且也没有做纹理的操作,所以顶点着色器计算出是什么颜色,它就显示什么颜色
            // Color(1,0,0,1)
            // Color(0,1,0,1)
            //使用变量用中括号
            //Color[_TestColor]
            //调节灯光
            //灯光先打开 默认是关闭的 Lighting 是负责所有灯光的开关
            Lighting On
            //负责高光灯光的开关 如果关掉Lighting Off 高光开关就会失效
            SeparateSpecular On
            Material{
                //定义材质球(衣服)的漫反射怎么样和灯光进行作用
                Diffuse (1,1,1,1)
                //调节灯光和材质球颜色都会发生变化,所以这个Diffuse这个关键词可以改变和灯光计算的效果
                Diffuse[_TestColor]
                Ambient[_TestColor]
                Specular[_TestColor]
                Emission[_TestColor]
                //shader1.0 灯光变化的规律公式:Ambient * Lighting Window’s Ambient  Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission
                //Ambient 环境光
                //Diffuse 漫反射光
                //Specular 镜面反射
                //Emission 自发光
                //Lighting Window’s Ambient Intensity setting 项目window中灯光设置
                //Light Color 场景中灯光的颜色
            }
        }
    }
    FallBack "Diffuse"
}


http://www.kler.cn/a/392931.html

相关文章:

  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • JS 实现SSE通讯和了解SSE通讯
  • mongoDB的安装及使用
  • 文献解读-DNAscope: High accuracy small variant calling using machine learning
  • Ubuntu安装MySQL8
  • 【C#设计模式(8)——过滤器模式(Adapter Pattern)】
  • FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例
  • 【深圳大学】数据结构A+攻略(计软版)
  • Modbus TCP 西门子PLC与 多个设备进行通讯 使用Modbus Slave模拟多个设备ID
  • 1、使用vscode+eide+stm32cubeMx开发stm32
  • 基于迭代重加权最小二乘法的算法及例程
  • AR、VR、MR、XR - 20241110
  • 简单叙述 Spring Boot 启动过程
  • java八股笔记-1-java基础
  • Vue常用加密方式
  • CRMEB Pro版v3.1源码全开源+PC端+Uniapp前端+搭建教程
  • 使用@react-three/fiber,@mkkellogg/gaussian-splats-3d加载.splat,.ply,.ksplat文件
  • MYSQL-显示触发器TRIGGER语法(十一)
  • SpringBoot(二十一)SpringBoot自定义CURL请求类
  • Optional 函数式接口
  • Spark:不能创建Managed表,External表已存在...
  • PostgreSQL 页损坏如何修复
  • 【Linux】进程通信之管道
  • MySQL算数运算符基础:详解与入门
  • 绿色能源新视界:透明导电膜助力高效光伏
  • Mysql 创建用户并授权