• filament沙盒传参数到shader


    和ue不同,ue是通过文件名传相应的参数到shader,比如
    LoadShaderSourceFileChecked(TEXT(“/Engine/Private/MaterialTemplate.ush”), GetShaderPlatform(), MaterialTemplate);
    可知MaterialTemplate.ush文件关联HLSLMaterialTranslator.cpp

    但是,filament是个小巧的引擎,所以直接传参数就行了,

    以沙盒为例
    在这里插入图片描述
    设置后可以调试下。

    在这里插入图片描述

    那么左边的参数是如何传递的呢?
    通过

    struct SandboxParameters {
    const Material* material[MATERIAL_COUNT];
    MaterialInstance* materialInstance[MATERIAL_COUNT];
    sRGBColor color = {0.69f, 0.69f, 0.69f};
    float alpha = 1.0f;
    float roughness = 0.6f;
    float metallic = 0.0f;
    float reflectance = 0.5f;
    float clearCoat = 0.0f;
    float clearCoatRoughness = 0.0f;
    float anisotropy = 0.0f;
    float thickness = 1.0f;
    float subsurfacePower = 12.234f;
    float glossiness = 0.0f;
    float specularAntiAliasingVariance = 0.0f;
    float specularAntiAliasingThreshold = 0.0f;
    float transmission = 1.0f;
    float distance = 1.0f;
    float ior = 1.5;
    float emissiveExposureWeight = 1.0f;
    float emissiveEV = 0.0f;
    float sheenRoughness = 0.0f;
    sRGBColor transmittanceColor = { 1.0f };
    sRGBColor specularColor = { 0.0f };
    sRGBColor subsurfaceColor = { 0.0f };
    sRGBColor sheenColor = { 0.0f, 0.0f, 0.0f };
    sRGBColor emissiveColor = { 0.0f };
    int currentMaterialModel = MATERIAL_MODEL_LIT;
    int currentBlending = BLENDING_OPAQUE;
    bool ssr = false;
    bool castShadows = true;
    sRGBColor lightColor = {0.98f, 0.92f, 0.89f};
    float lightIntensity = 110000.0f;
    math::float3 lightDirection = {0.6f, -1.0f, -0.8f};
    float iblIntensity = 30000.0f;
    float iblRotation = 0.0f;
    float sunHaloSize = 10.0f;
    float sunHaloFalloff = 80.0f;
    float sunAngularRadius = 1.9f;
    bool directionalLightEnabled = true;
    utils::Entity light;
    utils::Entity spotLight;
    bool hasSpotLight = false;
    bool spotLightEnabled = false;
    sRGBColor spotLightColor = {1.0f, 1.0f, 1.0f};
    float spotLightIntensity = 200000.0f;
    bool spotLightCastShadows = true;
    math::float3 spotLightPosition;
    float spotLightConeAngle = 3.14159 / 4.0f;
    float spotLightConeFade = 0.9f;
    bool hasDirectionalLight = true;
    bool fxaa = true;
    bool msaa = false;
    bool dithering = true;
    bool stableShadowMap = false;
    float normalBias = 1.0;
    float constantBias = 0.001;
    float polygonOffsetConstant = 0.5;
    float polygonOffsetSlope = 2.0;
    View::AmbientOcclusionOptions ssaoOptions;
    View::BloomOptions bloomOptions;
    View::FogOptions fogOptions;
    View::TemporalAntiAliasingOptions taaOptions;
    bool screenSpaceContactShadows = false;
    int stepCount = 8;
    float maxShadowDistance = 0.3;
    float cameraAperture = 16.0f;
    float cameraSpeed = 125.0f;
    float cameraISO = 100.0f;
    bool colorGrading = true;
    ColorGradingOptions colorGradingOptions;
    };
    在这里插入图片描述
    在这里插入图片描述

    static SandboxParameters g_params;
    在这里插入图片描述

    初始化。
    在这里插入图片描述

    首先初始化材质
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可知,用的是opengl.
    在这里插入图片描述
    代码分析先到此打住,主要是要看传参到shader的内容。打开这些shader文件。
    在这里插入图片描述
    先看材质
    在这里插入图片描述

    在这里插入图片描述
    c++中在这里传参给MaterialInstance。
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    js中reduce()的使用
    一篇文章教会你Linux中的“启动类故障修复”和root密码修改
    快速掌握并发编程 --- 基础篇
    ExpressQuantumPack显示的值的图标
    期货权益可用资金(期货的权益和可用资金)
    服务 700+ 厂商,接入 4000+游戏,数数科技 C+ 轮再融 1 亿元
    Java反序列化基础篇-JDK动态代理
    HCIP之BGP的路由聚合
    【7 同步原语】
    【云原生 | Kubernetes 系列】----Grafana 安装
  • 原文地址:https://blog.csdn.net/directx3d_beginner/article/details/133759568