Colección de citas famosas - Slogan de motivación - Cocos Creator versión 2.1 Análisis del sistema de materiales

Cocos Creator versión 2.1 Análisis del sistema de materiales

Administra y almacena en caché el código fuente del sombreador y las referencias compiladas del sombreador

_templates asocia shader_name con el código fuente del sombreador (vert, frag, define). Obviamente, shader_name debe ser globalmente único.

_cache almacena en caché las referencias de sombreadores compiladas. Debido a que se admiten macros, diferentes configuraciones de macros corresponden a códigos fuente de sombreadores separados.

Diferentes configuraciones de macros compilan diferentes programas, por lo que la clave de _cache se calcula como una tupla (shader_name, define).

Pass vincula el sombreador a través de programName y registra algún estado de webgl:

Para obtener más información, consulte motor\cocos2d\core\renderer\render-engine.js: 10322

¿Es análogo al modo de renderizado de Unity?

Si es así, para juegos 2D, el escenario está básicamente configurado en transparente

La técnica gestiona de 1 a múltiples pases. El significado de múltiples pases es. para renderizar un conjunto de modelos en múltiples pasadas. ¿Quizás el rastreo sea un escenario de aplicación?

La técnica también proporciona gestión del nombre, tipo, tamaño y valor de las variables uniformes utilizadas en la pasada.

Establezca Etapas para la técnica para proporcionar una referencia para el orden de renderizado, generalmente establecido en transparente. las etapas son un tipo de matriz y los pases también son un tipo de matriz. ¿Existe una correspondencia uno a uno?

_layer no conoce su función

Asociar múltiples Técnicas

Configurar valores de atributos uniformes

Configurar macros de sombreador

Tenga en cuenta que las definiciones deben proporcionarse en el constructor. El valor de la definición posterior se puede cambiar, pero el atributo no puede llamar directamente a la función de definición para aumentar o disminuir dinámicamente

Asociar un efecto

p>

Administrar _texIds:

Mantener un valor hash actualizado _hash. Cuando los datos del material cambian, es necesario llamar a updateHash para actualizar el hash.

Como se puede ver en lo anterior, Material, Efecto, Técnica y Pase son solo contenedores de datos. Su uso específico es responsabilidad de la función de renderizado.

Según información en línea, el sistema de materiales de OGRE se divide en tres niveles de abstracción: Material, Técnica y Pass. El sistema de materiales de Unity también tiene tres niveles: Shader, SubShader y Pass. Múltiples pases implementan el mismo modelo y llaman a múltiples representaciones. Multiple Technique facilita el cambio entre calidad baja, media y alta, y Material almacena datos de configuración.

El sistema material de cocos creador tiene un efecto adicional, que todavía no entiendo.

Clases relacionadas con renderizado:

La única etapa definida en render-engine.js: transparent Y la función de renderizado _transparentStage de la etapa transparente está registrada en ForwardRenderer.

La función de entrada de renderizado es ForwardRenderer.prototype.render, que atraviesa todas las cámaras y llama a ForwardRenderer.prototype.renderCamera (cámara, escena) una vez para cada cámara. Luego salte a Base._render, borre el dispositivo, extraigaDrawItem de scene._models, repita cada drawItem y obtenga tecnología de effect.getTechnique(stage). Finalmente llame a _transparentStage.

_transparentStage establece la matriz y regresa a la función Base._draw para realizar la representación real.

Base._draw obtiene el sombreador en función de los datos de Efecto, Técnica y Pase, establece el estado de webgl y varias variables uniformes para el sombreador y, finalmente, llama a device.draw para completar un proceso de renderizado.

Según el proceso de renderizado, se puede inferir que el sistema material del creador de cocos también tiene tres capas: Efecto, Técnica y Pase. El material hereda el Activo y cierra aún más el Efecto. ¿Es esto para comodidad del editor?

Para obtener más información, consulte Engine\cocos2d\core\renderer\render-engine.js: 13303 y Engine\cocos2d\core\renderer\render-engine.js: 13677