WebGPU desde cero Parte 7: Iluminación especular

Guía práctica para añadir iluminación difusa y especular con mapas de rugosidad en WebGPU: specularMap, glossColor y un shader sin ramas para mármol y tela.

2 sept 2025 • 4 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

Tras añadir iluminación difusa, el siguiente paso natural es incorporar el componente especular. Nuestro tetera con textura de mármol debería verse brillante, así que empezaremos con un valor fijo y luego daremos soporte a mapas especulares, aprovechando los mapas de rugosidad incluidos en el paquete de texturas.

Comenzamos desde la entidad Material y agregamos propiedades clave: useSpecularMap para indicar si usamos un mapa, specularMap como referencia de textura de ese mapa, specularSampler como el muestreador y glossColor como el brillo constante por canal cuando no hay mapa. Igual que la textura principal, tanto specularMap como texture son referencias tipo cadena gestionadas en colecciones del motor, y textureSampler se expone para completar la configuración del material.

Convenciones y valores por defecto: cuando no usamos un mapa especular, enlazamos una textura dummy de 1x1 que mantiene el binding válido. El sampler principal lo renombramos a default porque bilinear en UVs funciona bien para la mayoría de casos. La textura dummy se crea en GPU con formato rgba8unorm y un único texel blanco, escrita con writeTexture, y así el pipeline no cambia su configuración al alternar entre mapa y constante.

Inicialización de materiales de ejemplo: para mármol empleamos la textura marble con useSpecularMap desactivado y un glossColor alto como 4 4 4 1 para un brillo marcado. Para una tela roja, usamos red-fabric sin componente especular constante o con valores bajos, ya que es un material mate. Más adelante podemos activar useSpecularMap y apuntar a marble-roughness o red-fabric-roughness para experimentar con mapas reales.

Vinculaciones de material en el render pass: la función que antes configuraba la textura principal ahora se convierte en setMainMaterialBindGroup y recibe sampler y textura del material, además de un buffer uniforme con useSpecularMap y glossColor. Se añaden también el sampler y la vista del mapa especular. Importante no olvidar crear la vista de la textura con createView antes de enlazarla, ya que WebGPU arroja un mensaje de error confuso si se omite. También es necesario que estos recursos se usen realmente en el shader, de lo contrario el compilador podría eliminarlos.

Mapas especulares como mapas de rugosidad: en nuestro flujo de trabajo los mapas son de rugosidad, por lo que se invierten para obtener brillo. Rugosidad 0 implica superficie muy brillante y 1 implica totalmente difusa. Aunque las imágenes actuales son en blanco y negro, nuestro pipeline calcula especular por canal, de modo que más adelante podremos admitir variaciones por canal sin cambiar la arquitectura.

Lógica del shader sin ramas: en fragmento, primero muestreamos el mapa de rugosidad y calculamos brillo como 1 menos rugosidad. Luego combinamos con el brillo constante usando mix entre el valor del mapa y glossColor en función de useSpecularMap. Esta mezcla evita ramificaciones y mantiene el shader eficiente. Para la luz especular usamos el modelo tipo Blinn Phong con half vector entre dirección a luz y a cámara, elevando la contribución por canal con el exponente de brillo. Si algún canal del brillo es cero, se anula la especular en ese canal. El color final se obtiene multiplicando el albedo por la suma de difusa y especular.

Resultados y ajuste: funciona, pero la escala entre rugosidad y el exponente de brillo no mapea de manera física perfecta, por lo que el aspecto puede quedar sub o sobreexpuesto. Podemos introducir factores de escalado o dar el salto a un modelo PBR completo cuando sea oportuno. Mientras tanto, usar constantes claras para materiales como mármol y bajas para telas ofrece un resultado convincente y predecible.

Valores prácticos de partida: mármol con gloss 4 4 4 1 y tela con gloss 0 0 0 1. Conmutar entre usar mapa o constante permite comparar rápidamente y elegir el enfoque adecuado por material.

Código de referencia del capítulo: versión 0.5 del repositorio

Acerca de Q2BSTUDIO: somos una empresa de desarrollo de software que crea aplicaciones a medida y software a medida con foco en calidad, rendimiento y escalabilidad. Integramos inteligencia artificial e ia para empresas, implantamos servicios cloud aws y azure, reforzamos ciberseguridad y pentesting, y potenciamos decisiones con servicios inteligencia de negocio y power bi. Si quieres construir un motor gráfico, una plataforma 3D o cualquier solución compleja de extremo a extremo, te ayudamos a llevarla de la idea a producción.

Te invitamos a conocer cómo abordamos proyectos de alto rendimiento y arquitecturas modernas en nuestro servicio de aplicaciones a medida y software a medida, y cómo desplegarlos y operarlos con fiabilidad en servicios cloud aws y azure. También trabajamos con agentes IA, automatización y analítica avanzada para que tus productos crezcan de forma sostenible y segura.

Palabras clave para encontrar este contenido: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.

Live Chat